Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js 如何在Vuex存储区内使用vue-i18n中的$t初始化静态字符串_Vue.js_Vuex_Vuetify.js_Vue I18n - Fatal编程技术网

Vue.js 如何在Vuex存储区内使用vue-i18n中的$t初始化静态字符串

Vue.js 如何在Vuex存储区内使用vue-i18n中的$t初始化静态字符串,vue.js,vuex,vuetify.js,vue-i18n,Vue.js,Vuex,Vuetify.js,Vue I18n,在我的vuex存储模块中,我有provinceData作为Vuetify下拉选择框的数据源提供 provinceData: [ {value:"AB", text: "Alberta"}, {value:"BC", text: "British Columbia"}, ... ], 我可以从“../plugins/i18n”导

在我的vuex存储模块中,我有provinceData作为Vuetify下拉选择框的数据源提供

provinceData:  [
            {value:"AB", text: "Alberta"},
            {value:"BC", text: "British Columbia"},
            ...
        ],
我可以
从“../plugins/i18n”导入i18n
并在控制台输出中确认
i18n.t('province.BC')
从资源文件返回正确的文本

i18n.t('province.BC') British Columbia
click onLanguageChange fr
i18n.t('province.BC') British Columbia (Fr)
但如何将这些翻译插入到数据源中呢

provinceData:  [
            {value:"AB", text: ???i18n.t('province.AB')??? },
            {value:"BC", text: ???i18n.t('province.BC')??? },
            ...
        ]

现在我意识到我把i18n.t('province.AB')包装到后面的蜱中犯了什么错误。以下是仅呈现英文消息的更正版本:

provinceData:  [
            {value:"AB", text: i18n.t('province.AB') },
            {value:"BC", text: i18n.t('province.BC') },
            ...
        ]
此外,如果切换当前区域设置,是否会重新初始化

当点击这个数据源的getter时,我可以看到根据当前语言环境检索到的消息。但是下拉框没有重新加载。这就是问题所在

每次调用以下getter print时都会打印正确的翻译:

provinceData: (state) => {
            console.log("i18n.t('province.BC')",i18n.t('province.BC'));
            return state.provinceData;
        },

因为存储区中的provinceData只能由变种修改。 所以我决定在getter中创建这个数组,结果它非常快

provinceData: ( state ) =>
        {
            const provinceData = [ "AB", "BC", "MB", "NB", "NF", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT" ];
            let provinces = [];

            provinceData.forEach( (province) => {
                provinces.push
                ({
                    value : province,
                    text  : i18n.t( 'province.'+province )
                })
            })

            return provinces;
        }

在数据中初始化它时使用
this.$i18n.t(…
。现在我意识到我包装i18n.t('province.AB')犯了什么错误但第二个问题仍然存在:静态数据将如何在更改区域设置时重新加载?我觉得它应该在getter中,所以当您访问数据时,它将按照正确的语言进行。您的意思是当getter被点击时,我必须重新加载数据源吗?我已经更新了帖子。