应用制作工具中的翻译模型
Translation model in App Maker
我想让我页面中的字段描述和标签文本多语言化。本来是英文的,我可以让用户通过Google翻译来翻译。为了避免翻译错误,我想实现一个包含
的翻译数据模型
- FieldDisplayName / LabelText
- FieldDisplayName_DE
- FieldDisplayName_FR
- FieldDisplayName_IT
- 等等
所有页面都包含一个页眉片段,其中包含菜单按钮、搜索框等,就像在 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();
完全不同的实现方式将是
- 引入 Calculated Model 与之前方法相同的字段集
- 使用 Model Metadata API 从模型字段中提取显示名称
- 使用 Translate API
翻译字段
- 用转换后的值填充计算模型记录
这是用于该流程的超高级服务器伪脚本:
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];
我想让我页面中的字段描述和标签文本多语言化。本来是英文的,我可以让用户通过Google翻译来翻译。为了避免翻译错误,我想实现一个包含
的翻译数据模型- FieldDisplayName / LabelText
- FieldDisplayName_DE
- FieldDisplayName_FR
- FieldDisplayName_IT
- 等等
所有页面都包含一个页眉片段,其中包含菜单按钮、搜索框等,就像在 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();
完全不同的实现方式将是
- 引入 Calculated Model 与之前方法相同的字段集
- 使用 Model Metadata API 从模型字段中提取显示名称
- 使用 Translate API 翻译字段
- 用转换后的值填充计算模型记录
这是用于该流程的超高级服务器伪脚本:
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];