Как использовать схемы I18n и Json в Генераторе форм во время выполнения? - PullRequest
1 голос
/ 29 апреля 2020

У меня есть форма, которая будет создана FormGenerator на основе json -схемы, которая извлекается с сервера. Я хочу перевести значения на основе языков. Я не знаю, как мне интерпретировать это во время выполнения, используя i18n для обработки этого.

Например, сервер отправляет Json -схему, как показано ниже, и мы должны сделать из нее форму, например:

{
  "instance": {
    "specification": {
      "label": "",
      "title": ""
    }
}

и если мы передадим его в наш простой генератор форм, он просто сгенерирует два пустых тега, как показано ниже:

Я должен использовать файлы перевода (например, en json ниже), чтобы заполнить извлеченную json -схему и затем передать ее в Генератор формы.

  {
    "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>

Но мне интересно, как мне сделать это в этом случае, который представляет собой схему Dynami c json?

1 Ответ

0 голосов
/ 03 мая 2020

Кажется, нет никакого способа использовать i18n для этой цели, поэтому я создал библиотеку для этого варианта использования для тех, у кого такая же проблема, как и у меня. вот библиотека:

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

обновление

Чтобы использовать этот пакет, вы можете использовать шаблоны усов ( для получения дополнительной информации см. ссылку) в файле шаблона, как показано ниже:

//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"                                                      
 }                                                                       
*/
...