Scratch 3.0源码 之 多语言实现

2023-11-09


  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.csdn.net/suoxd123'>suoxd123</a>"

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

建议写法

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

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

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scratch 3.0源码 之 多语言实现 的相关文章

  • 关于TP5多语言BUG的解决办法(直接上代码)

    按照手册配置 默认语言没有反应 跳转页面之后 也没有检测当前的语言 很尴尬 最大的bug在这里 1 请用下面代码覆盖 thinkPhp library think Lang php 里面的detect 自动检测语言方法 自动侦测设置获取语言
  • C#上位机软件支持中英文多语言切换MultiLanguage

    最近遇到一个项目 客户是国外的 开发上位机程序是在中国 需支持中英文多语言切换 多语言切换思路 使用不同的xml配置文件来映射不同的语言 窗体加载时从默认语言DefaultLanguage xml中读取配置 比如中文语言 对应Chinese
  • Android中如何重新启动应用APP或重启系统

    重新启动应 程序 有两种 法 分别是 1 通过ActivityManager来重新启动应 程序 java 代码 ActivityManager manager ActivityManager this getSystemService Co
  • 【翻译】知识的诅咒

    巧合的是 本周我和五组不同的人进行了同样的对话 我想我应该把我的想法写下来 并把它们写在博客上 因为这一连串的想法似乎引起了很多人的共鸣 这场对话从一个偏见开始 和我一起工作的许多人是工程师 他们后来可能已经成为高级领导或高管 但他们曾经是
  • 如何在Eclipse中查看JDK以及Java框架的源码

    对于Java程序员来说 有时候是需要查看JDK或者一些Java框架的源码来分析问题的 而默认情况下 你按住Ctrl 再点击 Java本身的类库 例如ArrayList 是无法查看源码的 那么如何在Eclipse中查看JDK以及Java框架的
  • 现在机器人是用什么语言编程

    现在机器人是用什么语言编程 对于很多的家长们来说 孩子的学习一直都是他们非常关心和重视的一件事情 很多的家长在培养孩子的学习方面也可以说是相当的认真的 他们会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长想要孩子去学习机器人编程
  • 迁移学习源码全注释 - 《Tensorflow 实战 Google 深度学习框架》源码注释

    学习迁移学习源码 做了完全版本注释 以做记录 coding utf 8 Created on Mon Dec 25 12 30 25 2017 需要提前下载训练好的 Inception V3模型 以及对应的数据文件 author Admin
  • 谷歌chrome浏览器的源码分析(一)

    随着网络技术的发展 越来越多应用都已经离不开网络 特别像人类大脑一样的知识库的搜索引擎 更加是离不开功能强大的云计算 不过 即便云计算非常强大 但它还不能直接地把结果呈现给用户 这样就需要一个客户端来呈现出来 这个客户端就是浏览器 现在越来
  • jdk8源码之Queue-ArrayQueue

    关于队列这个数据结构 大家应该都是比较熟悉 列队是一种先进先出 FIFO 的数据结构 删除操作只能在表的头部 插入操作只能在表的尾部 Queue一般是作为一个缓冲队列使用的 简单举例 生产端的生产速度偶尔会大于消费端的消费速度 但又不想等待
  • hive原理与源码分析-hive源码架构与理论(一)

    什么是Hive 数据仓库 存储 查询 分析大规模数据 SQL语言 简单易用的类SQL查询语言 编程模型 允许开发者自定义UDF Transform Mapper Reducer 来更简单地完成复杂MapReduce无法完成的工作 数据格式
  • #QGIS源码官方编译指南

    QGIS源码官方编译指南 将QGIS官方的编译指南windows部分翻译一下 供大家参考 这个版本是QGIS源代码工程中2017年4月30日最后修改的版本 对应QGIS 2 99 也就是即将发布为QGIS 3 0的版本 翻译 Jacory
  • 什么叫机器人编程课

    什么叫机器人编程课 小孩的学习一直都是家长们非常关心和重视一件事情 很多的家长在培养孩子的学习方面也是非常的多的 就拿现在很多的家长给孩子选择机器人编程的课程来说 有的家长对于什么叫机器人编程课并不是很清楚 今天我们就一起来了解一下什么叫机
  • Scratch和机器人编程有什么区别?

    Scratch编程和机器人编程的区别就是 Scratch是面向青少年的图形化简易编程软件 孩子们可以通过不同功能的指令方块组合 创作出交互式故事 动画 游戏 音乐 艺术和科学计算等作品 而机器人编程则是以机器人为载体 通过程序指令控制完成机
  • [pytest源码4]-pluggy之Plugin注册逻辑分析

    前言 本篇将详细对plugin的注册逻辑进行分析 个人拙见 有错请各位指出 如果的我的文章对您有帮助 不符动动您的金手指给个Star 予人玫瑰 手有余香 不胜感激 GitHub pluggy注册逻辑分析性 我们来详细分析一下plugin的注
  • Java PECS(Producer Extends Consumer Super)原则

    在看 Alibaba 开发手册时遇到 PECS 原则 刚开始阅读时感觉比较绕 也搜索了一些博文参考 个人觉得 Stackoverflow 的这篇文章比较实用 What is PECS Producer Extends Consumer Su
  • 【翻译】 DMA和get_user_pages()

    LWN net需要你 没有订阅者 LWN将根本不存在 请考虑注册订阅 帮助LWN继续出版 作者 Jake Edge 2018年12月12日 Linux管道工会议 在2018年Linux Plumbers大会 LPC 的RDMA微型会议上 J
  • Nacos 1.4.1注册中心源码深度解析-服务下线

    服务下线比较简单 入口在com alibaba nacos naming controllers InstanceController deregister gt serviceManager removeInstance gt remov
  • 5款最好的开源用户关系管理工具

    5款最好的开源用户关系管理工具 by Scott Nesbitt 原文链接 http opensource com business 14 7 top 5 open source crm tools 创造和维系与客户的关系不是容易的事 然而
  • 投资捕鱼游戏市场的如何避雷?以及研发技术问题。

    随着国内捕鱼市场在姚记科技 波克城市 途游等捕鱼龙头的深耕下 整个产品的研发 运营门槛都了非常大的提高 对于目前想要研发出一款具有竞争力的产品和版本 投入低于500万的资金很难出有竞争力的产品 加上运营门槛的提高 运营成本至少需要准备500
  • [英语学习][15][Word Power Made Easy]的精读与翻译优化

    序言 这次翻译 译者还是显得啰啰嗦嗦 另外还有一个地方没有能很准确的翻译出来 英文学习的目标 提升自身的英语水平 对日后编程技能的提升有很大帮助 希望大家这次能学到东西 同时加入我的社区讨论与交流英语相关的内容 原著英文与翻译版对照 第20

随机推荐

  • 绕过CDN查找真实IP方法总结

    什么是CDN CDN的全称是Content Delivery Network 即内容分发网络 CDN是构建在现有网络基础之上的智能虚拟网络 依靠部署在各地的边缘服务器 通过中心平台的负载均衡 内容分发 调度等功能模块 使用户就近获取所需内容
  • c++(c#)单例模式

    TOC 单例顾名思义就是一个类只实例化一个单例对象 单例模式常见的写法有懒汉式和饿汉式 首先给出一个懒汉式的写法 include
  • Go面试必会基础题(5)

    Go面试必会基础题 1 Go面试必会基础题 2 Go面试必会基础题 3 Go面试必会基础题 4 Go面试必会基础题 5 Go面试必会基础题 6 文章目录 1 Goroutine 的调度器是如何工作的 2 在 Go 语言中如何进行内存对齐 3
  • Java死锁

    一 死锁是什么 死锁 当两个线程相互等待对方释放同步监视器便会发生死锁 死锁产生的4个必要条件 1 互斥条件 一个资源每次只能被一个线程使用 2 请求与保持条件 一个线程因请求资源而阻塞时 对已获得的资源保持不放 3 不剥夺条件 线程已获得
  • mathtype使用过程中出现MathType Error:too many windows are open.错误的解决方法。

    今天下午在写毕业论文的时候 中间有许多的公式 我用的是mathtype version6 9d 76 的 当使用了一段时间后 就会报如下的错误 解决办法如下 记住不用重新开机重启等 只需要把mathtype软件关闭后 在任务管理器的后台进程
  • linux 技能包【4】:yum源

    文章目录 一 配置yum源 客户端 1 1 本地yum源 1 2 网络yum源 阿里云 二 查看yum源 三 指定 yum 源 软件安装版本 四 指定软件安装版本 五 制作本地 yum 库 服务端 六 制作网络 yum 库 服务端 一 配置
  • 查看日志的常用Linux命令(持续更新)

    1 查询符合条件的行 grep 关键字1 文件名 log grep 关键字2 grep 关键字3 grep 如果要显示行号 可加参数 n grep n 关键字 文件名 log 如果要看到符合条件的行 以及其相邻的n行可以使用如下命令 gre
  • Linux(Ubuntu18.04)和Windows10 之间的局域网文件传输

    有的时候当你需要同时使用windows和Ubuntu时 存在两者之间的文件传输或者通信问题 大多数采用移动硬盘 U盘间接传输的方式 或者干脆使用虚拟机拖拽到同类型系统内的工具传输 有没有简单一点的方法轻松地把Windows文件放到Ubunt
  • 爱心代码(web前端)陈飞宇李峋同款【容易操作】

    文章目录 前言 一 效果图 二 操作步骤 第一步 第二步 第三步 第四步 第五步 第六步 源码 前言 最近随着电视剧 点燃我温暖你 的火热播出 剧中帅气学霸李洵的炫酷爱心代码也迅速火出了圈 爱心素材也异常火爆 我在这里整理了一份大家有需自取
  • rsync脚本+linux,rsync随机启动脚本,rsync脚本

    1 bin sh 2 3 BEGIN INIT INFO4 Provides rsyncd5 Required Start remote fs syslog6 Required Stop remote fs syslog7 Should S
  • mac上完成卸载IntelliJ IDEA 2019.3编辑器

    一 finder gt 应用程序 gt 直接删除idea 二 执行以下命令 rm rf Users 自己的用户名 Library Logs IntelliJIdea2019 3 rm rf Users 自己的用户名 Library Pref
  • 解析 slim.arg_scope

    def resnet arg scope weight decay 0 0001 is training True batch norm decay 0 997 batch norm epsilon 1e 5 batch norm scal
  • C++ 引用规则

    引用及其注意事项 1 引用没有定义 是一种关系型声明 声明它和原有某一变量 实体 的关系 古而类型与源类型保持一会 且不分配内存 与被引用的变量有相同的地址 2 声明的时候必须初始化 一经声明 不可变更 3 可对引用 再次引用 多次引用的结
  • [Leetcode] 76. 最小覆盖子串

    给你一个字符串 s 一个字符串 t 返回 s 中涵盖 t 所有字符的最小子串 如果 s 中不存在涵盖 t 所有字符的子串 则返回空字符串 注意 对于 t 中重复字符 我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量 如果 s 中存
  • 算法(公式法):判断是否完全平方数

    给定一个正整数 num 编写一个函数 如果 num 是一个完全平方数 则返回 True 否则返回 False 说明 不要使用任何内置的库函数 如 sqrt 示例 1 输入 16 输出 True 示例 2 输入 14 输出 False 利用公
  • Qt常用的快捷键

    alt enter 自动创建类定义的实现 F1 查看帮助 文档 F2 快速到变量声明 Shift F2 函数的声明和定义之间快速切换 F4 在 cpp 和 h 文件切换 Ctrl M 创建书签 Ctrl 切换书签 Alt M打开书签栏 Ct
  • SVN学习2020.8.9

    SVN账号密码一般是有一个配置管理员给配置的 文件夹绿色标志 代表和服务器文档是一致的 同步更新的 同步更新服务器信息 update 执行操作都先update 再做其他 先保证本地和服务器一致 先更新 上锁 再修改 再提交 解锁 如何把本地
  • 供应链金融与区块链01——论文阅读

    本文章仅用于记录本人学习过程 当作笔记来用 如有侵权请及时告知 谢谢 1 基于区块链技术的供应链金融体系优化研究 龙云安 但是由于 互联网 供应链 无法 及时跟进资金流和信息流 导致核心企业 供应链金 融平台和提供融资的商业银行无法及时掌控
  • 解决前端跨域的问题.Access to XMLHttpRequest at http://xxx.xxx from origin 'http://localhost:8000' has been bl

    1 前端浏览器报错如下 Access to XMLHttpRequest at http xxx xxx from origin http localhost 8000 has been blocked by CORS policy Res
  • Scratch 3.0源码 之 多语言实现

    文章目录 实现方式 初始版本 多语言版本 1 页面文件 2 配置文件 3 建立关联 语法说明 案例1 带HTML标签写法 建议写法 案例2 带超链接写法 建议写法 Scratch 3 0中各类显示文本默认是英文 如果不支持自己的语言 或者自