2

B4J应用本地化

 3 years ago
source link: https://blog.xulihang.me/B4J-app-localization/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
B4J应用本地化
Loading [MathJax]/extensions/MathZoom.js

B4J应用本地化

首页 分类 标签 链接 留言 关于 订阅 2020-07-09

|

分类 技术随笔 

|

标签 CAT  B4X 

软件本地化不是一件容易的事情,不过其基本的实现思路其实不难。比如对于以下代码:

fx.MsgBox(MainForm,"Message","Title")

需要处理的是”Message”和”Title”,我们可以做一个表,包含三列内容,ID、英文文本和译文文本,表头的语言代码遵循ISO标准。

id, en, zh
msgbox.message, Message, 信息
msgbox.title, Title, 标题

将数据以id为键,所需显示的语言的数据为值读入字典。构建一个函数通过查询ID来得到用于显示的文本,可用于封装代码中需要翻译的文本。

Sub Localize(id as String) as String
    return strings.Get(id)
End Sub

用函数包裹文本后的代码:

fx.MsgBox(MainForm,Localize("msgbox.message"),Localize("msgbox.title"))

Java使用Resource Bundle实现这一功能,在B4X中则是Localizator。Localizator的示例中使用具体语言的文本作为键。

我针对B4J应用对Localizator做了功能加强。

  1. 自动导出和导回所有布局文件和代码中的文本,支持多种控件
  2. 针对控件中文字因为空间不足而无法显示完整的问题,自动添加Tooltips。当然,最好的办法还是不同的语言使用不同的布局文件,可以调整控件的位置以及文本的字体。而iOS的本地化就支持这一功能(参见:iOS 实现界面本地化(国际化))。

B4J本地化实践的具体说明我发布在此处:Localization Practices

本地化中还会有很多其它的问题,比如英文单词有单复数的形式;文本包含链接,需要添加占位符;翻译后的程序无法正常运行等等。更多可以看Mozilla的本地化最佳实践文章:Localization content best practices

Powered by Jekyll @ GitHub | © 2013 - 2021 xulihang


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK