Существует ли событие изменения языка в интерфейсе командной строки i18n vue 2?

#vue.js #internationalization

Вопрос:

Здравствуйте, как я могу вызвать функцию, когда язык меняется в i18n? Должен ли я использовать vuex или у i18n есть метод, который позволяет мне это?

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

1. Пожалуйста, укажите дополнительную информацию о том, что вы пытаетесь сделать, например, какую команду вы пытаетесь выполнить с помощью интерфейса командной строки vue?

2. Привет, мой ответ как-то помог ?

Ответ №1:

Вы могли бы следить $i18n.locale за любыми изменениями, но обычно вы меняете такие вещи. Каков ваш вариант использования для такой необходимости ?

 watch: {
  '$i18n.locale': function(newVal, oldVal) {
    console.log('locale change', newVal)
  }
}
 

Ответ №2:

I18n.js файл в каталоге / src:

 
import Vue from "vue";
import VueI18n from "vue-i18n";

Vue.use(VueI18n);
 

// При смене языка переключите файл /locals/language.json

 function loadLocaleMessages() {
  const locales = require.context(
    "./locales",
    true,
    /[A-Za-z0-9-_,s] .json$/i
  );
  const messages = {};
  locales.keys().forEach((key) => {
    const matched = key.match(/([A-Za-z0-9-_] )./i);
    if (matched amp;amp; matched.length > 1) {
      const locale = matched[1];
      messages[locale] = locales(key);
    }
  });
  return messages;
}
 

// Определите предустановленный язык браузера и установите его при запуске

 function detectLanguage() {
  const lng = window.navigator.userLanguage || window.navigator.language;
  const locales = require.context(
    "./locales",
    true,
    /[A-Za-z0-9-_,s] .json$/i
  );
  const lang = locales
    .keys()
    .find((key) => lng.includes(key.replace("./", "").replace(".json", "")));
  return lang ? lang.replace("./", "").replace(".json", "") : null;
}

export default new VueI18n({
  locale:
    localStorage.getItem("lang") ||
    detectLanguage() ||
    process.env.VUE_APP_I18N_LOCALE,
  fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || "ko",
  messages: loadLocaleMessages(),
});