如何在运行时在表单生成器中使用 I18n 和 Json Schema?

Posted

技术标签:

【中文标题】如何在运行时在表单生成器中使用 I18n 和 Json Schema?【英文标题】:How to use I18n and Json Schema in Form-generator at run-time? 【发布时间】:2020-08-13 10:54:46 【问题描述】:

我有一个表单,它将由基于从服务器获取的 json 模式的 formGenerator 创建。我想根据语言翻译价值观。我不知道我应该如何在运行时使用 i18n 来处理它。

例如,服务器发送一个如下所示的 Json-schema,我们应该从中创建一个表单,例如:


  "instance": 
    "specification": 
      "label": "",
      "title": ""
    

如果我们将它传递给我们的简单表单生成器,它只会生成两个空标签,如下所示:

我必须使用翻译文件(如下面的 en.json)来填充获取的 json-schema,然后将其传递给表单生成器。

  
    "instance":
        "specification":
            "label":"this is label",
            "title":"this is title"
        
    

我知道这两个跨度是否可以在模板中使用 $t("instance.specification.label") 和 $t("instance.specification.label") 如下所示,在 i18n 中使用翻译文件来制作它工作:

<span>$t(instance.specification.label)</span>

<span>$t(instance.specification.title)</span>

但我想知道在这种情况下我应该如何做到这一点,这是一个动态 json 模式?

【问题讨论】:

在你的 JSON 模式中包含神秘的密钥使得它本身几乎不可用。期望将目标语言提供给服务器,然后服务器返回带有正确翻译的标签和描述的模式? 这是项目预期。 【参考方案1】:

似乎没有办法为此目的使用 i18n,所以我为这个用例制作了一个库,供任何和我有同样问题的人使用。这是图书馆:

https://www.npmjs.com/package/i18n-translator-for-json-templates

更新

要使用这个包,你可以在你的模板文件中使用 mustache 模板(更多信息,请参见链接),如下所示:

//template.json

      "platformType": "specification.platformType",
      "ownershipMode": "COBO",
      "version": 1,
      "description": "specification.description",
      "label": "specification.label"

而且你还得为其准备语言文件,例如:

//en_lang.json
 "specification": 
        "platformType": "android",
        "description": "Command Schema For 'Company Owned/Business Only'",
        "label": "COBO3"
      
 

最后你可以像下面的例子一样使用库:

import i18nTranslatorForJsonTemplates from "i18n-translator-for-json-templates";
const result = i18nTranslatorForJsonTemplates(en_lang, template);
console.log(JSON.stringify(result));
/*output
                                                                        
   "platformType": "Android",                                            
   "ownershipMode": "COBO",                                              
   "version": 1,                                                         
   "description": "Command Schema For 'Company Owned/Business Only'",    
   "label": "COBO3"                                                      
                                                                        
*/

【讨论】:

以上是关于如何在运行时在表单生成器中使用 I18n 和 Json Schema?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中生成具有占位符/可替换值的路由,以便在运行时在 JS 中使用?

怎么加“?”用js提交表单时在字符串中?

如何在EJS和gulp中实现i18n本地化?

如何使用 VBA 将事件添加到运行时在 Excel 中创建的控件

如何在 next.js 中管理 i18n 路由以使用斜杠而不是破折号

在使用 JSR-303 验证表单时使用 I18n 消息