#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(),
});