Scratch 3.0源码 之 多语言实现

本文详细介绍了如何在Scratch 3.0中实现多语言支持,利用react-intl组件,通过修改页面文件、更新配置文件(如l10n.json)并建立页面与配置的关联来实现。还提供了两种具体的多语言写法示例,包括带HTML标签和带超链接的情况,旨在帮助开发者更好地进行国际化改造。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  Scratch 3.0中各类显示文本默认是英文,如果不支持自己的语言,或者自己新开发的模块中增加多语言支持,则需要用到本文内容,Scratch 3.0中使用react-intl组件进行字符格式化的,这个组件是雅虎团队提供的。

实现方式

  举个例子说明该组件的语法,如果不支持多语言的版本的程序的页面默认是下面的写法,如果要修改为支持多语言,则需要执行如下三步:

  1. 页面文件:对页面文件的显示内容修改为变量
  2. 配置文件:将变量和对应的值以键值对形式,添加到Json文件
  3. 建立关联:将配置文件跟到页面文件绑定

初始版本

var React = require('react');
var HitchhikersGalaxyGuide = React.createClass({
    render: function () {
        return (
            <p className=”box-content”>
                文本内容。
            </p>
        );
    }
});

多语言版本

1. 页面文件

var React = require('react');
var FormattedMessage = require('react-intl').FormattedMessage;
var HitchhikersGalaxyGuide = React.createClass({
    render: function () {
        return (
            <p className=”box-content”>
                <FormattedMessage
	            id: ’info.msgContentDemo’ />
            </p>
        );
    }
});

2. 配置文件

  在翻译的模版文件中添加如下Key-Value内容,其中Key需要跟页面中添加的内容完全一致(本例为info.msgContentDemo),模版文件名为“l10n.json”(首字母为小写L),其中文件可以根据某个页面私有和所有页面公有,两种不同方式放在不同位置:

  • /src/l10n.json,所有页面都可以调用
  • /src/views/[页面文件名]/l10n.json,只有该文件可以使用

  如果页面文件robot.jsx,且配置文件只是为该页面文件私有,这配置文件将和该页面文件放在同一个目录,即:/src/views/robot/l10n.json。

{
    "info.msgContentDemo": "文本内容。",
}

3. 建立关联

  使用Transifex 工具对页面文件和配置文件进行绑定,如果已经安装该工具则可以直接通过命令行进行绑定,以前面robot.jsx举例,命令行输入:

 tx set --source -r scratch-website.robot-l10njson -l en --type KEYVALUEJSON src/views/robot/l10n.json

但如果没有安装Transifex也没关系,可以直接修改另一个配置文件,因为绑定的结果也就是在该配置文件中增加一行。

[scratch-website.robot-l10njson]
source_file = src/views/robot/l10n.json
source_lang = en
type = KEYVALUEJSON

语法说明

  对于文本中有HTML的情况,最好将HTML写在页面文件里,而不是配置文件中,举例说明:

案例1

带HTML标签写法

// 配置文件: l10n.json
"info.timeQuote": "<span class='some-class'>时间</span>,是一切财富中最宝贵的财富。"

// 页面文件 .jsx:
<FormattedHTMLMessage id='info.timeQuote'/>

建议写法

// 配置文件: l10n.json
"info.timeQuote": "时间",
"info.timeQuotedesc" : "{timeQuoteName},是一切财富中最宝贵的财富。"

//页面文件 .jsx:
<FormattedMessage 
    id="info.timeQuotedesc" 
    values={{
        timeQuoteName: (
            <span className='some-class'>
                <FormattedMessage id="info.timeQuote" />
            </span>
        )
    }}
/>

案例2

带超链接写法

// 配置文件: l10n.json
"info.suoxdLink": "返回博客主页: <a href='https://blog.youkuaiyun.com/suoxd123'>suoxd123</a>"

//页面文件 .jsx:
<FormattedHTMLMessage id="info.suoxdLink"/>

建议写法

// 配置文件: l10n.json
"info.suoxdLinkText": "返回博客主页:{suoxdLink}"

//页面文件 .jsx:
<FormattedMessage 
    id='info.suoxdLinkText'
    values={{
        suoxdLink: (
            <a href='https://blog.youkuaiyun.com/suoxd123'>
                suoxd123
            </a>
        )
    }}
/>

参考自:https://github.com/LLK/scratch-www/wiki/Localization-Guide


欢迎感兴趣的朋友,加QQ群一起交流学习。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

具身小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值