1.3.36

React i18N - 如何国际化React应用程序

北京/设计爱好者/3年前/182浏览
React i18N - 如何国际化React应用程序
dasein58

React i18N - 如何国际化React应用程序

  国际化是使您的网站提供不同的地区的过程。这些地域可以是我们,英国,德国,中国,阿拉伯,印度。将应用程序翻译为不同的语言环境涉及几件事,例如将文本翻译为语言,更改日期,时间和数字格式,更改货币等等。因此,我决定使用两个流行的库,React-18Next和React-Intl对如何将React应用程序本地化对不同语言环境的React应用程序。

  React-I18ext.

  让我们首先了解React-i18Next。它是一个强大的框架,基于i18EXT,许多开发人员用于国际化的目的。React-i18Next可用于国际化React和React Native应用。以下是关于React-i18Next的一些有趣的事实。

  它是最佳的服务器端渲染。它包括多个插件,可检测多种语言加载多种语言的翻译。您可以选择缓存翻译。它比与其他包集成时的其他i18N库更灵活。它基于i18Next,不仅限于React。因此,学习一次并在任何地方使用。React-Intl.

  React-Intl使用上下文API来为整个React应用程序提供语言开关包装器。如果没有可用语言或缺少某个文件,我们也可以定义默认文本。React-Intl提供React组件和API,用于翻译包括多元化的日期,数字,货币和串。

  当您使用React-Intl时,您必须注意IntelProvider,InjortIntl,DefeneMessages,Formatteddate,FormattedTime,FormattedRelativeme,FormattedNumber,FormattedPolural和FormattedMessage。

  使用独立组件构建

  无论您实现您的国际化方式,确保您特别注意您的基本组件。

  作为能够支持所有相关的地区的独立构建块构建它们。您还可以使用位(GitHub)等工具逐步将新的可重用组件逐步推送到您自己的共享组件集合(在Bit.dev上)。

  可以检查和测试独立组件(按比特管理)的不同语言环境,并在需要时重复使用(而不是建立近复制,按照您的方式适合新的地区)

  React-I18Next入门

  首先让我们使用NPM使用以下命令创建React应用程序。

  npx create-react-app react-translation-app

  您可以使用React应用程序而不是React-Player-App的任何名称。让我们走进创建的文件夹。

  cd react-translation-app

  接下来,我们必须为此教程安装React-I18Next和所需的依赖项。

  npm install i18next i18next-xhr-backend i18next-browser-languagedetector react-i18next

  在公用文件夹中,您可以找到index.html文件。让我们添加Bootstrap和jQuery以更好地渲染内容。

  接下来,在SRC文件夹中创建I18Next.js文件。打开文件并导入以下库。

  import i18n from "i18next";

  import { initReactI18next } from "react-i18next";

  import Backend from "i18next-xhr-backend";

  import LanguageDetector from "i18next-browser-languagedetector";

  现在我们已准备好初始化语言和其他功能。创建一系列语言您将在此应用程序中使用或您要支持的语言环境。

  const Languages=[“en”, “fr”, “de”];

  在这里,我们使用英语,法语和德语。EN,FR和DE是他们的流行缩写。因此最好使用它们,因为它将避免任何混淆。

  接下来,创建导出默认功能为i18n并添加以下代码。

  export default i18n

  .use(Backend)

  .use(LanguageDetector)

  .use(initReactI18next)

  .init({

  fallbackLng: "en",

  debug: true,

  whitelist: Languages,

  interpolation: {

  escapeValue: false,

  },

  });

  这是每个重要的线条所做的

  use(Backend): - 标识用户输入语言use(LanguageDetector): - 将I18N实例传递给React-I18Next的模块use(initReactI18next): - I18Next的古玩市场实例化。fallbackLng: “en”: - 默认语言是英语

  打开index.js文件并将以下代码添加到其中。

  import "./i18next";

  import React, { Suspense } from "react";

  ReactDOMder(

  <suspense fallback="{Loading ……}>

  document.getElementById('root')

  );

  有什么问题?

  通常,它是组件在从缓存中加载数据时挂起呈现的泛型方式。悬疑可以完全控制在何处在连接中显示占位符。这就是为什么我们用反应悬念包裹了标记。

  接下来,打开App.js文件并添加以下代码。

  import React from 'react';

  import './App.css';

  import { useTranslation } from "react-i18next";

  function App() {

  const { t, i18n }=useTranslation();

  function handleClick(lang) {

  i18n.changeLanguage(lang);

  }

  return (



  {t("text2.t")}

  );

  }

  export default App;

  最后,我们必须创建翻译文件。打开公用文件夹并创建一个名为locales的目录。在该Locales文件夹中创建三个文件夹,de和fr为en,de,和fr。确保这些文件夹的名称应类似于我们在I18Next.js文件中提供的常量值。

  接下来,为每个文件夹创建JSON文件并将其命名为Translation.json。

  在我的应用程序中,这些文件将包含以下文本。

  en / translation.json.

  {

  "text1": {

  "t": "Welcome to the new World of ReactJS Application"

  },

  "text2": {

  "t": "This is ReactJS application with React with React Hook and I18NEXT"

  }

  }

  de / translation.js.

  {

  "text1": {

  "t": "Willkommen in der neuen World of ReactJS-Anwendung"

  },

  "text2": {

  "t": "Dies ist die ReactJS-Anwendung mit React with React Hook und I18NEXT"

  }

  }

  fr/translation.js

  {

  "text1": {

  "t": "Bienvenue dans la nouvelle application World of ReactJS"

  },

  "text2": {

  "t": "Ceci est l'application ReactJS avec React avec React Hook et I18NEXT"

  }

  }

  注意:我不了解德语和法语语言。我使用谷歌翻译携带这些文本。

  就是这样了。现在我们可以运行应用程序并查看输出。

  npm start serve

  react-Intl入门

  我们之前讨论过的另一个重要库是React-Intl。让我们用它做一些例子。首先,使用npm i react-intl命令安装库。

  然后创建一个locales目录并为您在应用程序中使用的每个语言环境创建JSON文件。我创建了以下文件。

  ·en.json.

  ·es.json.

  ·Fr.Json.

  ·ru.Json.

  ·ar-EG.JSON

  由于默认语言是英语,请打开en.json文件并添加一些文本,如下所示。

  {

  "title": "Day Quote: ",

  "text": "The day you plant the seed is not the day you eat the fruit. Have patience and keep planting",

  "person": "Tutorial by {getPersonName}",

  "change": "Change Language"

  }

  在这里,我们动态地将每个语言的人员更改为 {getPersonName}.。

  同样打开es.json,fr.json,ru.json和ar-eg.json文件,并包括相关的翻译文本。

  es.json.

  {

  "title": "Cotización del día: ",

  "text": "El día en que siembras la semilla no es el día en que comes la fruta. Ten paciencia y sigue plantando ",

  "person": "Tutorial de {getPersonName}",

  "change": "Cambiar idioma"

  }

  我不会为其他语言做这件事,因为它将不必要地制作文章。

  接下来,创建一个名为组件的文件夹,以将应用程序逻辑的组件与内化相关联。我们必须在组件文件夹中创建两个更多文件夹。那些是LanguageProvider和报价。

  首先,在报价文件夹中创建一个名为message.js文件的文件。此文件包含在没有可用语言或缺少某个文件时将呈现的默认消息。打开Messages.js文件,并包含以下代码片段,如下所示。

  import { defineMessages } from "react-intl";

  export default defineMessages({

  quote: {

  title: "Default Title, Check language files",

  text: "Default quote text, Check language files",

  person: "Default person name, Check language files",

  change: "Change Language",

  },

  });

  接下来,在报价文件夹中创建另一个JavaScript文件,并将其命名为quote.js。我将在该文件中添加以下代码。

  export default class Quote extends Component {

  render() {

  const personName="Techylo Solutions";

  return (

  <formattedmessage< p="">

  id="text"

  defaultMessage={defaultMessage.quote.text}

  />

  <formattedmessage< p="">

  id="person"

  defaultMessage={defaultMessage.quote.person}

  values={{

  getPersonName: personName,

  code: (word)=> (

  <strong< p="">

  style={{

  textTransform: "uppercase",

  texDecoration: "underline",

  }}

  >

  {word}

  );

  }

  }

  我希望你还记得我们在早些时候创建了一个名为langiceprovider的文件夹。让我们在其中创建LanguageProvider.js文件。

  此文件的目的是向App.js文件提供信息,该文件包含所有其他组件。在这里,我们使用React Hooks。它也称为包装部件。

  导入所有必需的组件和翻译。

  import React, { useState } from "react";

  import { IntlProvider, FormattedMessage } from "react-intl";

  import English from "../../translation/en.json";

  import Arabic from "../../translation/ar-EG.json";

  import Spanish from "../../translation/es.json";

  import French from "../../translation/fr.json";

  import Russian from "../../translation/ru.json";

  import defaultMessage from "../Quote/message";

  我们必须在语言环境之间实现切换。我们将使用Questate React Hook进行。

  此文件中的代码的前半部分看起来像下面的代码。

  export default function LanguageProvider(props) {

  const [locale, setLocale]=useState("en");

  const [lang, setLang]=useState(English);

  const changeLang=(getLang)=> {

  setLocale(getLang);

  switch (getLang) {

  case "en":

  setLang(English);

  break;

  case "es":

  setLang(Spanish);

  break;

  case "ar-EG":

  setLang(Arabic);

  break;

  case "ru":

  setLang(Russian);

  break;

  case "fr":

  setLang(French);

  break;

  default:

  setLang(English);

  }

  };

  我们将把我们要在返回声明中呈现的东西。所有信息都填写在Intlprovider中。IntlProvider是Reft-Intl库提供的上下文API。这里来自组件的信息被传输到包含所有组件的App组件。

  <button< p="">

  type="button"

  onClick={()=> changeLang("en")}

  className="text-center btn btn-warning mr-2"

  >

  English

  

  <button< p="">

  type="button"

  onClick={()=> changeLang("es")}

  className="text-center btn btn-primary mr-2"

  >

  Spanish

  

  <button< p="">

  type="button"

  onClick={()=> changeLang("fr")}

  className="text-center btn btn-secondary mr-2"

  >

  French

  

  <button< p="">

  type="button"

  onClick={()=> changeLang("ru")}

  className="text-center btn btn-danger mr-2"

  >

  Russian

  

  <button< p="">

  type="button"

  onClick={()=> changeLang("ar-EG")}

  className="text-center btn btn-success mr-2"

  >

  Arabic

  {props.children}

  如此而已。现在,您可以运行应用程序并查看输出。


0
阅读原文
|
Report
|
收藏
Share
评论
in to comment
Add emoji
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
Log in