【问题标题】:Translation model in App Maker应用制作工具中的翻译模型
【发布时间】:2018-03-28 07:38:42
【问题描述】:

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

的翻译数据模型
  • FieldDisplayName / LabelText
  • FieldDisplayName_DE
  • FieldDisplayName_FR
  • FieldDisplayName_IT

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

【问题讨论】:

    标签: google-app-maker language-translation


    【解决方案1】:

    提供最高翻译质量的最简单方法(实施/使用/维护)是引入具有以下结构的翻译数据模型:

    +----+--------+------------+------------+------------+-----+
    | 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();
    

    从根本上不同的实现将是

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

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

    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];
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-18
        • 1970-01-01
        • 2012-05-01
        相关资源
        最近更新 更多