应用制作工具中的翻译模型

Translation model in App Maker

我想让我页面中的字段描述和标签文本多语言化。本来是英文的,我可以让用户通过Google翻译来翻译。为了避免翻译错误,我想实现一个包含

的翻译数据模型

所有页面都包含一个页眉片段,其中包含菜单按钮、搜索框等,就像在 Starter App 模板中一样。我计划在页眉中集成一个下拉小部件,允许在语言(DE、EN、FR、IT 等)之间进行选择。是否可以将显示名称绑定到用户的选择?我将如何实施?

经过一些试验后,翻译模型对我的要求来说太慢了。因此,我已将绑定表达式硬编码到我要翻译的标签中。绑定表达式看起来有点像这样:

(@pages.UserSettings.LanguageDropdown.value == 'EN') ? 'Contact' : 'Kontakt'

提供最高翻译质量的最简单方法(对 implement/use/maintain)是引入具有以下结构的翻译数据模型:

+----+--------+------------+------------+------------+-----+
| Id | Locale | FirstName  | LastName   | Age        | ... |
+----+--------+------------+------------+------------+-----+
| 1  | EN     | First name | Last name  | Age        | ... |
+----+--------+------------+------------+------------+-----+
| 2  | RU     | Имя        | Фамилия    | Возраст    | ... |
+----+--------+------------+------------+------------+-----+
| 3  | DE     | Voornaam   | Achternaam | Leeftijd   | ... |
+----+--------+------------+------------+------------+-----+
| 4  | ...    | ...        | ....       | ...        | ... |
+----+--------+------------+------------+------------+-----+

在此模型中,每一列代表您应用中的唯一标签,每一行代表标签对支持语言的翻译。该模型可以很容易地用于标签绑定:

@datasources.UserTranslations.item.FieldNameToTranslate

维护这些翻译也很容易,只需将 editable table 拖放到 UI。

这是 UserTranslations 数据源的 query script

// Assuming that you already have robust user settings implementation.
var userSettings = getUserSettings_();

var query = app.models.Translation.newQuery();
query.filters.Locale._equals = userSettings.Locale;

return query.run();

完全不同的实现方式将是

  1. 引入 Calculated Model 与之前方法相同的字段集
  2. 使用 Model Metadata API 从模型字段中提取显示名称
  3. 使用 Translate API
  4. 翻译字段
  5. 用转换后的值填充计算模型记录

这是用于该流程的超高级服务器伪脚本

var userLocale = getUserLocaleFromUserSettings();
var fieldsDisplayNames = getFieldsDisplayNames(app.models.Translation);
var translations = translate(fieldsDisplayNames, 'en', userLocale);

var record = app.models.Translation.newRecord();

mapRecordFieldsToTranslations(record, translations);

return [record];