Ric*_*ard 10 translation i18next vue.js
我有一个问题useI18n我有一个无法解决的无论我做什么,我都无法让 i18n 翻译正常工作,并且在我的控制台中永远看到以下消息:
\n\n\n
setup未捕获的语法错误:必须在函数顶部调用
堆栈跟踪显示,useI18n()尽管该函数位于名为 的函数内,但调用该函数时会发生这种情况setup。堆栈跟踪的下一个级别显示,在“useI18n()”函数中,由于未检测到我的应用程序的实例,因此引发了异常。
function useI18n(options = {}) {\n const instance = getCurrentInstance();\n if (instance == null) {\n throw createI18nError(I18nErrorCodes.MUST_BE_CALL_SETUP_TOP);\n }\n...\nRun Code Online (Sandbox Code Playgroud)\n我的代码如下:
\nmain.js
\n// frontend/src/main.ts\n\nimport i18n from './i18n';\n\nimport Vue, { createApp } from 'vue';\n\nimport axios from 'axios';\nimport VueAxios from 'vue-axios';\n\nimport App from './App.vue';\n\n//Vue.use(VueI18n);\n\nconst app = createApp(App);\napp.use(VueAxios, axios, i18n);\napp.provide('axios', app.config.globalProperties.axios);\napp.mount('#i-english-editor');\n\nconsole.log(app);\nRun Code Online (Sandbox Code Playgroud)\ni18n.ts
\nimport { createI18n } from "vue-i18n";\n\nconst i18n = createI18n({\n legacy: false,\n locale: "ja",\n fallbackLocale: 'en',\n globalInjection: true,\n messages: {\n en: {\n message: {\n language: "English",\n greeting: "Hello !"\n }\n },\n ar: {\n message: {\n language: "\xd8\xa7\xd9\x84\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\xa9",\n greeting: "\xd8\xa7\xd9\x84\xd8\xb3\xd9\x84\xd8\xa7\xd9\x85 \xd8\xb9\xd9\x84\xd9\x8a\xd9\x83\xd9\x85"\n }\n },\n es: {\n message: {\n language: "Espa\xc3\xb1ol",\n greeting: "Hola !"\n }\n }\n }\n});\n\nexport default i18n;\nRun Code Online (Sandbox Code Playgroud)\n应用程序.vue
\n<div>\n{{ t('message.greeting') }}\n</div>\n...\n<script lang="ts">\nimport {defineComponent, ref, inject} from "vue";\nimport { useI18n } from "vue-i18n";\n\nexport default defineComponent({\n setup() {\n const { t } = useI18n();\n\n...\n\n\n return {\n ...\n {t},\n }\n }\n});\n</script>\nRun Code Online (Sandbox Code Playgroud)\n正如您所看到的,我的代码看起来像在线的各种示例,向我展示了如何使翻译正常工作。我查看了各种解决方案,但没有一个对我有用。globalInjection这包括尝试设置true和使用的替代方法{{ $t('message.greeting') }}该方法会显示错误:
\n\nctx.$t 不是函数
\n
我确实陷入了死胡同,无法找出似乎对大多数人都有效的解决方案。我的 Vue 版本是 Vue 3,我使用的 i18n 版本是 vue-i18n@9.2.0-beta.36。
\n如果有人知道为什么这种情况发生在我身上而不是其他人,如果您有解决方案,我将不胜感激。
\n小智 5
这是一个老问题,但今天我在网上发现了同样的问题,而且仍然不清楚。
看起来 useI18n() 是一个由 Composition API 实现的组合函数,必须在设置函数的顶部调用,要在没有设置的 TS 文件上使用,我们需要使用 useNuxtApp() 来添加上下文。
export default (): string => {
const { $i18n } = useNuxtApp();
const t = $i18n.t;
return t('my-translation-key');
};
Run Code Online (Sandbox Code Playgroud)
我希望有帮助。
更新-我设法解决了它。
首先,我摆脱了使用该useI18n函数的需要,并意识到$t由于同一app.use(...)函数内的多次导入而失败。
我把它改为:
app.use(VueAxios, axios);
app.use(i18n as any);
Run Code Online (Sandbox Code Playgroud)
app.usei18n由于不是可接受的类型,因此在控制台中抛出了更多错误。为了解决这个问题,我从另一篇文章的解决方案中发现,添加as any它是解决这个问题的一种方法。结果{{ $t(...) }}现在正在产生期望的结果。
| 归档时间: |
|
| 查看次数: |
14276 次 |
| 最近记录: |