我正在开发一个使用 Nextjs 创建的网站。但是当我在本地运行它时,它不会在控制台上加载任何内容,只是显示[ event ] build page: /_error。我尝试记录_error.js但没有显示任何内容。以下是我的配置:
server/index.js
// Use dotenv Config Package\nconst dotenv = require('dotenv');\n// Express Package and Next Package For Run server\nconst express = require('express');\nconst { createProxyMiddleware } = require('http-proxy-middleware');\nconst next = require('next');\nconst nextI18NextMiddleware = require('next-i18next/middleware').default\ndotenv.config();\n\nconst NextI18NextInstance = require('../i18n');\nconst port = parseInt(process.env.PORT, 10) || 3000; // Port Application Run Load From dotenv File\nconst dev = process.env.NODE_ENV !== 'production'; // Application Run Environment Load From dotenv File\nconst app = next({ dev }); …Run Code Online (Sandbox Code Playgroud) 我正在将 NextJS 与 next-i18next 一起使用。这是我的主页:
import {withTranslation} from '../config/next-i18next';
const Home = function Home() {
return (<div>test</div>)
};
Home.getInitialProps = async () => {
return {namespacesRequired: ['home']}
};
export default withTranslation('home')(Home);
Run Code Online (Sandbox Code Playgroud)
我想要的是在组件/页面中获取当前语言,我该怎么做?
所以我有这个变量,它将包含类似“<123456789>”的内容
然后我有这个:
var vocab = mm('responses.positive', {
lngs:LANG,
target: User.tag,
amount: r * multiplier,
icon: iconFile
})
Run Code Online (Sandbox Code Playgroud)
这将使vocab回报Message <123456789>
我可以做些什么来避免它以这种方式解析符号吗?我尝试在它将返回的字符串中进行转义,但它不起作用。即使它确实有效,我也遇到了变量内部>发生的问题。
一个不太优雅的解决方案是编辑字符串以转义每个字符,但随后我需要确切地知道我收到了哪些字符,这使得该解决方案不可行。
我已经看到一些插入到 HTML 中的解决方案,但由于我在这里没有使用任何 HTML 界面,因此解决方案必须位于 JS 本身上
的package.json
"moduleNameMapper": {
"i18next": "<rootDir>/__mocks__/i18nextMock.js"
}
Run Code Online (Sandbox Code Playgroud)
i18n.js
import i18n from 'i18next'
import XHR from 'i18next-xhr-backend'
// import Cache from 'i18next-localstorage-cache'
import LanguageDetector from 'i18next-browser-languagedetector'
i18n
.use(XHR)
// .use(Cache)
.use(LanguageDetector)
.init({
fallbackLng: 'en',
// wait: true, // globally set to wait for loaded translations in translate hoc
lowerCaseLng: true,
load: 'languageOnly',
// have a common namespace used around the full app
ns: ['common'],
defaultNS: 'common',
debug: true,
// cache: {
// enabled: true
// },
interpolation: {
escapeValue: false, // not …Run Code Online (Sandbox Code Playgroud) 我已经将应用程序从webpack-i18n用于翻译升级为使用i18next(13.1.5)。在大多数情况下,一切正常,但是在一个特定页面上,我的ejs文件之一中的文本均未加载。在特定情况下,js该页面的文件会进行一些调用i18next.t,如果我触发了它们,则将成功检索并显示这些字符串的文本。该ejs文件似乎仍在处理中,因为结构和图像都正确。
我找不到任何可以解释正在发生的错误,并且不确定i18next在此页面上如何查找正在发生的情况。我有debug: truefor i18next,可以在浏览器控制台中看到整个配置。这包括资源,以及翻译键/值对的完整列表。因此,似乎i18next正在查找所有字符串并加载它们。但是在这个ejs文件中对它们的任何引用都没有。
我们只有en翻译,在i18next配置中,lng和fallbackLng均为en。因此,我认为该应用程序认为该模板文件可能不需要使用其他语言,并且正在寻找一种不存在的替代翻译。我想这也会以某种方式提示它出错。
控制台中没有错误。那么,我如何才能找到有关i18next这种情况下正在发生的事情的更多信息?我无法确定它是否真的在ejs文件中命中并评估了这些调用,并认为这null是正确的响应,或者是否以某种方式根本不评估这些字符串中的任何一个,还是在实际中遇到了某种错误,并且错误只是没有达到我。
由于其他页面可以正常工作,甚至js这个页面的文件中的字符串都可以正常工作,这更加令人困惑。在无法ejs正常工作的文件和无法正常工作的文件之间,我找不到任何不同之处。一个或多个引用的字符串出现问题似乎不太可能导致文件中的所有字符串失败,尤其是如果它默默地失败了。有什么想法吗?我是i18nextJava的新手,对Java的了解也不是很好,所以我不知如何进一步调试。
更改语言时需要更改路线名称。例如,我有一条路线,/en/career但是当我更改为捷克语时,我需要一条路线/cs/kariera。基本上我需要本地化 URL。现在,当我打开/en/career并将语言更改为 cs 时,我得到/cs/career. 这个页面根本不应该存在,当我在服务器上呈现页面时,我正确地得到了 404。我可以用 next-i18next 包做这样的事情吗?如果是这样,如何?
我发现这个包https://github.com/vonschau/next-routes-with-locale可能正是我需要的,但它显然不再维护并且不能在 next.js 8 下工作。
我使用react-i18next和i18next来本地化一个应用程序。我希望能够在设置中手动更改语言并保留该更改。问题是我不知道如何在i18n配置文件中使用 redux,因为 redux 是异步的,我也检查了文档中的一些内置存储选项,react-i18next但没有成功。
这是i18n配置文件:
'use strict';
import i18n from 'i18next';
import {reactI18nextModule, initReactI18next} from 'react-i18next';
import DeviceInfo from 'react-native-device-info';
import translationFR from '../translation/fr/translation.json';
import translationEN from '../translation/en/translation.json';
import translationAR from '../translation/ar/translation.json';
async function getAppLang() {
const unsubscribe = store.subscribe(() => true);
const appLang = await store.getState().appLang;
await unsubscribe();
return appLang;
}
let locale = DeviceInfo.getDeviceLocale().substring(0, 2);
if (locale != 'fr' && locale != 'ar') {
locale = 'en';
} …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人知道检查未使用翻译的好方法/工具/包
我见过它用于 Rails,例如 i18n-tasks,但没有用于 React
我目前正在使用react-i18next,但它可以是任何可以查看您的翻译文件的内容
预先非常感谢
我有几个关于使用 i18n 时的最佳实践和工作流程的问题\n我目前正在使用react-i18next\n我直接使用组件中的默认值定义键,然后使用提取它们babel-plugin-i18next-extract
例子
\n <I18nText\n ns="meeting"\n i18nKey="meeting-invitation.videoConferenceLink"\n defaults="You can join the video conference call for {{meeting.name}} when it starts via: <br /> <0>{{meeting.videoConference.link}}</0>"\n components={[\n <a\n href={meeting.videoConference.link}\n target="_blank"\n rel="noopener noreferrer"\n >\n {meeting.videoConference.link}\n </a>,\n ]}\n values={{ meeting }}\n />\nRun Code Online (Sandbox Code Playgroud)\n注: I18nText 是自定义组件包装Trans组件
1\xef\xb8\x8f\xe2\x83\xa3我是否应该将在应用程序中经常使用的关键字放入自己的密钥中?如果是这样,我如何同时处理复数、格式化和使用上下文?
\n假设我在整个应用程序中使用关键字meeting,action并且我有这样的句子
0 meetings, 0 actions => You have no scheduled meetings and no actions deadlines so far to prepare for.\n1 meeting, …Run Code Online (Sandbox Code Playgroud) localization internationalization i18next reactjs react-i18next
我在 React Native 应用程序中使用 i18next 和 react-i18next ,更具体地说是输入验证。我试图将 t() 作为 no 组件中的参数传递,但收到错误“TypeError: n 不是函数。(在 'n('errorMessages.emailNoMatch')' 中,'n' 未定义) ”。非常感谢任何建议,因为我对编码相对较新,并且我已经为此问题搜索了几天。
这是 i18n.js 代码:
import i18next from 'i18next';
import common_de from './translations/de/common.json';
import common_en from './translations/en/common.json';
import i18n from 'i18n-js';
import * as Localization from 'expo-localization';
// Set up translations
i18next.init({
interpolation: { escapeValue: false }, // React already does escaping
lng: 'en', // language to use
resources: {
de: {
common: common_de, // 'common' is our custom namespace
},
en: {
common: …Run Code Online (Sandbox Code Playgroud) i18next ×10
reactjs ×5
next.js ×3
javascript ×2
node.js ×2
react-native ×2
ejs ×1
jestjs ×1
localization ×1
translation ×1
webpack ×1