我正在使用没有 JSON 消息文件的 react-intl。相反,我只使用 .js 文件。我用<FormattedMessage id="" /> and <FormattedDate value={} />
. 它可以正常工作。但是,react-intl 文档说使用 JSON 文件作为消息。
我想确定我是否在做正确的事情。没有 babel 配置,没有设置 package.json 文件或没有消息提取,到目前为止我没有收到任何错误。
我在下面做的事情正确吗?为什么他们建议使用 JSON 格式和 babel 配置?谢谢。
我的文件夹结构是:
├── src
│ ├── i18n
│ │ ├── locals.js
│ │ └── messages.js
│ ├── pages
│ │ ├── Home.js
│ │ ├── Footer.js
│ │ └── Navbar.js
│ ├── redux
│ │ └── ....js
│ │
│ ├── components
│ │ ├── ....js
│ │ └── ....js
│ ├── App.js
│ ├── App.css
│ ├── index.js
│ └── index.css
├── .env
── package.json
我的 message.js 文件是这样的,所有消息都存储在一个文件中:
export const messages = {
"tr-TR": {
...
sidebar_personal: "Personel Bilgileri",
breadcrumb_homepage: "Anasayfa",
profile: "Kullanıcı Bilgileri",
...
},
"de-DE": {
...
breadcrumb_homepage: "Startseite",
sidebar_personal: "Stammdaten Personal",
profile: "Nutzerinformation",
...
},
};
locales.js 文件:
export const LOCALES = {
TURKISH: "tr-TR",
GERMAN: "de-DE",
};
在 APP.js 中,我包装了所有路由:
import { LOCALES } from "./i18n/locales";
import { messages } from "./i18n/messages";
...
function App() {
const currentLang = useSelector((state) => state.setLang);
return (
<React.Fragment>
...
<IntlProvider
locale={currentLang}
defaultLocale={LOCALES.GERMAN}
messages={messages[currentLang]}
>
<Routes />
</IntlProvider>
...
</React.Fragment>
);
}
export default App;
我使用 redux 来更改语言:
import * as types from "../../constants/index";
export const setLang = (value) => {
localStorage.setItem("lang", JSON.stringify(value));
return {
type: types.LANG_SET,
payload: value,
};
};
import * as types from "../../constants/index";
export const setLangReducer = (state = {}, action) => {
switch (action.type) {
case types.LANG_SET:
return action.payload;
default:
return state;
}
};