提供最高翻译质量的最简单方法(实施/使用/维护)是引入具有以下结构的翻译数据模型:
+----+--------+------------+------------+------------+-----+
| Id | Locale | FirstName | LastName | Age | ... |
+----+--------+------------+------------+------------+-----+
| 1 | EN | First name | Last name | Age | ... |
+----+--------+------------+------------+------------+-----+
| 2 | RU | Имя | Фамилия | Возраст | ... |
+----+--------+------------+------------+------------+-----+
| 3 | DE | Voornaam | Achternaam | Leeftijd | ... |
+----+--------+------------+------------+------------+-----+
| 4 | ... | ... | .... | ... | ... |
+----+--------+------------+------------+------------+-----+
在此模型中,每一列代表您应用中的唯一标签,每一行代表标签对支持语言的翻译。这个模型可以很容易地用于标签绑定:
@datasources.UserTranslations.item.FieldNameToTranslate
维护这些翻译也很容易,只需将可编辑的表格拖放到 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];