import React from'react';import ReactDOM from'react-dom/client';import'./index.css';import App from'./App';import reportWebVitals from'./reportWebVitals';import i18n from'./translation/i18n';import { I18nextProvider } from'react-i18next';constroot=ReactDOM.createRoot(document.getElementById('root'));root.render( <React.StrictMode> <I18nextProvideri18n={i18n}> <App /> </I18nextProvider> </React.StrictMode>);// If you want to start measuring performance in your app, pass a function// to log results (for example: reportWebVitals(console.log))// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitalsreportWebVitals();
Example 2: Xử lý thoe attribute change cái này để áp dụng vào dự án khác
public\index.html
<!DOCTYPEhtml><html> <head> <metacharset="utf-8" /> <linkrel="icon"href="%PUBLIC_URL%/favicon.ico" /> <metaname="viewport"content="width=device-width, initial-scale=1" /> <metaname="theme-color"content="#000000" /> <metaname="description"content="Web site created using create-react-app" /> <linkrel="apple-touch-icon"href="%PUBLIC_URL%/logo192.png" /> <linkrel="manifest"href="%PUBLIC_URL%/manifest.json" /> <title>React App</title> <scripttype="text/javascript">document.documentElement.setAttribute('lang',navigator.language); </script> </head> <body> <noscript>You need to enable JavaScript to run this app.</noscript> <divid="root"></div> </body></html>
src\translation\i18n.js
import i18n from'i18next';import Backend from'i18next-http-backend';import { initReactI18next } from'react-i18next';import translationEN from'../locales/en/translation';import translationVI from'../locales/vi/translation';// the translationsconstresources= { en: { translation: translationEN }, vi: { translation: translationVI }};console.log(document.documentElement);i18n.use(Backend).use(initReactI18next).init({ resources, fallbackLng:document.documentElement.lang ||"vi", debug:true, interpolation: { escapeValue:false// not needed for react as it escapes by default } });exportdefault i18n;
Đầu tiên bạn hãy tạo folder locales, chứa phần dịch văn bản theo các ngôn ngữ. Ví dụ mình đa ngôn ngữ cho tiếng việt và tiếng anh thì mình tạo 2 folder là en và vi.
File locales/en/translation.json
{"content": {"functional":"Functional","class":"Class","text":"This is text" }}
File locales/vi/translation.json
{"content": {"functional":"Hàm","class":"Lớp","text":"Đây là văn bản" }}
Sau đó hãy tạo folder translation chứa file translation/i18n.js. Bạn import những phần ngôn ngữ dịch cho trang và init i18next:
import i18n from'i18next';import Backend from'i18next-http-backend';import { initReactI18next } from'react-i18next';import translationEN from'../locales/en/translation';import translationVI from'../locales/vi/translation';// the translationsconstresources= { en: { translation: translationEN }, vi: { translation: translationVI }};i18n.use(Backend).use(initReactI18next).init({ resources, fallbackLng:'vi', debug:true, interpolation: { escapeValue:false// not needed for react as it escapes by default } });exportdefault i18n;
Cuối cùng bạn dùng I18nextProvider để có thể sử dụng prop i18n qua context API:
import React from'react';import ReactDOM from'react-dom';import'./index.css';import App from'./App';import reportWebVitals from'./reportWebVitals';import'bootstrap/dist/css/bootstrap.min.css';import i18n from'./translation/i18n';import { I18nextProvider } from'react-i18next';ReactDOM.render( <React.StrictMode> <I18nextProvideri18n={i18n}> <App /> </I18nextProvider> </React.StrictMode>,document.getElementById('root'));// If you want to start measuring performance in your app, pass a function// to log results (for example: reportWebVitals(console.log))// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitalsreportWebVitals();
Vậy là quá trình setup package đã xong. Package react-i18next có hỗ trợ chúng ta khá nhiều cách sử dụng instance phía bên trong component:
Chắc hẳn sau bài viết này các bạn đã có thể sử dụng package để phát triển đa ngôn ngữ cho dự án của mình rồi đúng không nào. Rất mong nhận được ý kiến đóng góp từ mọi người.
Ngày nay, Website không còn là công cụ xa lạ của các doanh nghiệp, các tổ chức hay thậm chí là các cá nhân bởi hầu hết với sự phát triển của internet mỗi đối tượng đều sở hữu cho mình một website. Với xu hướng toàn cầu hóa, thì một website sẽ được truy cập từ nhiều quốc gia khác nhau. Chính vì vậy việc đa ngôn ngữ cho website là điều cực kỳ cần thiết. Các bạn có thể biết React.js ngày càng trở thành 1 thư viện, framework cần thiết, và được các Frontend Developer rất ưu chuộng. React có lẽ là framework được nhắc đến nhiều nhất trong thế giới front end vì nó có một cộng đồng vô dùng lớn. Và đương nhiên rồi, có rất nhiều website nổi tiếng đang sử dụng nó, đơn cử như Facebook.