Параметризованное форматирование связанных языковых сообщений в i18n Vue

#javascript #vue.js #vuejs2 #internationalization #vue-i18n

#javascript #vue.js #vuejs2 #интернационализация #vue-i18n

Вопрос:

Я хочу связать сообщения локали в vue-i18n с параметром. Например, когда у меня есть такой файл локализации:

 {
  "next": "Next step {step 1}: @:steps[{step}]",
  "steps": [
    "Welcome",  // 0 
    "Briefing", // 1
    "Finish"    // 2
  ]
}
  

Я хотел бы использовать его следующим образом:

 $t('next', { step: '1' }) 

// which should result in: "Next step 2: Briefing"
// but instead it leads to: "Next step : Welcome, Briefing, Finish[1]"
  

Возможно ли как-то этого добиться?

Ответ №1:

Вы можете использовать перечисления в файле i18n. Вот краткий пример, который вы можете попробовать. Я использую его для своего проекта, и он работает должным образом:

файл i18n:

 steps: {
    1: "Welcome",
    2: "Briefing",
    3: "Finish",
},
  

Позже вы сможете получить доступ к перечислениям в вашем компоненте как:

 {{ $t(`steps.${step}`) }}
  

Где step ваш номер, который вы хотите прочитать из steps файла i18n.

Комментарии:

1. Я вижу, вы используете строки шаблона для первой замены переменной step, чтобы передать правильную строку в i18n? Аккуратно! Но это всего лишь обходной путь, поскольку этот код работает только в среде JS, а не непосредственно в файлах локализации.

2. @winklerrr ..у меня есть мой steps массив в файле локализации. Возможно, я не понял вопроса. Извините, что я виноват!

3. Нет проблем, ваше решение уже продвинуло меня дальше! Спасибо!

4. @winklerrr Как вы это исправили? Я ищу тот же ответ…