การสร้างระบบรองรับหลายระบบในการปรับปรุงระบบของ apps พื้นเมือง

การสร้างโปรแกรมเคลื่อนที่แบบพกพาที่รองรับหลายภาษานั้นไม่มีทางเลือกอีกต่อไป -- มันจําเป็นสําหรับโปรแกรมใด ๆ ที่มุ่งไปเพื่อรับอุปการะทั่วโลก อัตตา (App) ปฏิรูปแบบย่อย (App) มีความสามารถในการจัดระบบย่อยแบบไขว้แบบหลายแบบ มีความสามารถหลายแบบที่ทนทานได้ เพื่อจัดระบบการปรับเปลี่ยนระบบ (อังกฤษ) และระบบย่อยย่อย (l10) บทความนี้จัดทําการพัฒนาและปฏิบัติการที่ดีที่สุด

การเชื่อมต่อของท้องถิ่น

การแปลแบบท้องถิ่นนั้น มีความหมายมากกว่าการแปลข้อความธรรมดา ซึ่งเกี่ยวกับการจัดรูปแบบตัวเลข, วัน, ความโค้ง, การจัดการข้อความ, การจัดการการส่งข้อความ (LTR vs) การทําภาพแบบภาพประกอบ, รูปแบบเพศ, และแม้กระทั่งการปรับค่าผังข้อความแบบ UI เพื่อปรับให้พอดี ระบบ i18an ออกแบบมาอย่างดี จะแยกเนื้อหาจากโค้ดพื้นฐานของคุณ โดยใช้การอ้างอิงแบบพิมพ์คีย์ และสนับสนุนการสลับเวลา โดยไม่ต้องให้โปรแกรมทํางานอีกครั้ง

ปัญหา สําคัญ ใน การ ตอบ สนอง แบบ พื้น เมือง

  • มอดูลสําหรับตรวจสอบอุปกรณ์แบบท้องถิ่น (diffents ระหว่าง OS และ Android).
  • ไฟล์แปลภาษาแบบฉลาดและตะเกียกตะกาย
  • การจัดการภาษาที่ใช้ได้ตลอดทั้งแอพ (รวมการนําทางและความชอบที่ต่อเนื่อง)
  • การจัดผัง RTL ด้วยมือ -- รองรับภาษาพื้นเมือง [FLT: 0] แต่ต้องใช้การจัดตําแหน่งอย่างระมัดระวัง
  • ทดสอบและตรวจสอบข้อความทั้งหมดที่แปลในบริบท

เลือกไลบรารี I18n ด้านขวา

ในขณะที่มีห้องสมุดอยู่หลายแห่ง [FLT: 0] ให้ Holk-18naxt เป็นตัวเลือกที่ได้รับความนิยมมากที่สุดและสมบูรณ์ที่สุดสําหรับภาษาพื้นเมือง สร้างจาก [FLT] enignize (FTIV) (FLTT:3); สืบค้นเมื่อ: FTIF, confign, configns, confacti, configi, configs (FLE-FIEKEKEK). access (in-FELEKELEKE). access (in). access (in-18). access.

กําลังติดตั้งไลบรารีหลัก

เริ่มโดยการติดตั้งแพกเกจที่จําเป็น:

npm install react-i18next i18next i18next-http-backend react-native-localize

เพิ่ม [FLT: 0] ข้อสังเกต คุณอาจต้องเชื่อมโยงโมดูลพื้นเมืองสําหรับปฏิกิริยา parame-sublisher-languageer [FLT: 1) (FLT: 1) เพื่อตรวจสอบภาษาอัตโนมัติ โดยอิงจากค่าปรับแต่งอุปกรณ์ โปรดจํา คุณควรจะเชื่อมต่อมอดูลพื้นเมืองสําหรับ การตอบสนองแบบอัตโนมัติ (ino to-lining in RN 0. 0+).

ตั้งค่าความไม่สงบของ I18n

สร้างแฟ้มการปรับแต่ง, e.g. :

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import * as RNLocalize from 'react-native-localize';
import en from './translations/en.json';
import es from './translations/es.json';
import fr from './translations/fr.json';

const resources = { en: { translation: en }, es: { translation: es }, fr: { translation: fr } };

const detectionOptions = {
 order: ['localStorage', 'navigator'],
 caches: ['localStorage'],
};

i18n
 .use(initReactI18next)
 .use(require('i18next-browser-languagedetector').default) // for RN, you may replace with custom detector
 .init({
 resources,
 fallbackLng: 'en',
 interpolation: { escapeValue: false },
 detection: {
 // For RN, we'll override detection manually (see below)
 },
 });

// Detect device language at startup
const detectLanguage = () => {
 const locales = RNLocalize.getLocales();
 if (locales && locales.length > 0) {
 const langCode = locales[0].languageCode;
 const supportedLanguages = Object.keys(resources);
 const lang = supportedLanguages.includes(langCode) ? langCode : i18n.options.fallbackLng[0];
 i18n.changeLanguage(lang);
 }
};
detectLanguage();

// Listen to app focus for locale changes
export default i18n;

การใช้ [FLT: 0] การปรับโครงสร้างภายใน [FLT: 1) เพื่อให้แน่ใจว่าโปรแกรมของคุณเคารพการตั้งค่าของอุปกรณ์ในภูมิภาค ฟังก์ชัน [FLT: 0] จะทํางานครั้งเดียวและตั้งค่าภาษาเริ่มต้น สําหรับการปรับปรุงอย่างต่อเนื่อง (หากผู้ใช้เปลี่ยนภาษาอุปกรณ์ขณะเปิดโปรแกรมอยู่) คุณสามารถสมัครสมาชิก [FLT: 5] ได้

โครงสร้างแฟ้มแปลภาษา

จัดวางเอกสารของคุณในแฟ้ม Json ที่วางอยู่ในรังด้วยภาษาและช่องว่างต่าง ๆ ตัวอย่าง [FLT: 6]:

{
 "common": {
 "welcome": "Welcome",
 "greeting": "Hello, {{name}}!"
 },
 "home": {
 "title": "Home Screen",
 "description": "This is a multi-language React Native app."
 },
 "errors": {
 "network": "Network error. Please try again."
 }
}

ใช้ชื่อ spaces (e.g. [FLT: 8]] [FLT: 9] ช่วยจัดการแอปปพลิเคชันขนาดใหญ่ และสามารถทําการโหลดชิ้นงานแปลแบบขี้เกียจได้

ใช้ การ แปล ใน ส่วน ต่าง ๆ

ตะขอการแบ่งประเภทที่ใช้

ในส่วนประกอบใด ๆ ที่ใช้งานได้:

import { useTranslation } from 'react-i18next';

const MyComponent = () => {
 const { t, i18n } = useTranslation('common');
 return (
 
 {t('welcome')}
 {t('greeting', { name: 'John' })}
  i18n.changeLanguage('es')}>
 Switch to Spanish
 
 
 );
};

[FLT: 0] T [FLT: 1] ฟังก์ชัน interfects ตัวแปรและการจัดการพหูพจน์ เพื่อเปลี่ยนภาษา เรียก [FLT: 11] - นี้เป็นตัวกระตุ้นให้ส่วนประกอบที่บอกรับแล้วทั้งหมดกลับมาอีกครั้ง

ใช้ส่วนประกอบการส่งถ่ายข้อมูล

สําหรับสตริงที่ซับซ้อนที่มีส่วนประกอบการขีดฆ่าหรือ react ฝังอยู่:

import { Trans } from 'react-i18next';
// In translations: "welcome_html": "Welcome, {user}!"

 Welcome, {user}!

การ จัด การ กับ ศัลยกรรม, การ ใช้ สาร ประกอบ, และ คอนเท็กซ์

i18next รองรับกฏพหูพจน์ขั้นสูงออกจากกล่อง กําหนดคีย์ด้วย [FLT: 13] ส่วนต่อเติม หรือใช้ . ตัวอย่าง:

{
 "item": "{{count}} item",
 "item_plural": "{{count}} items",
 "item_other": "{{count}} items"
}

วิธีใช้: เลือกรูปแบบที่ถูกต้องที่อิงตามท้องที่โดยอัตโนมัติ ส่วน Gnder และบริบทอื่น ๆ สามารถจัดการได้โดยผ่านทางตัวเลือก [FLT: 17]

การสลับภาษาแบบไม่ตายตัวและต่อเนื่อง

เพื่อคงความชอบในภาษาของผู้ใช้ไว้ ให้เก็บภาษาที่เลือกไว้ใน [FLT: 0] AssyncStogration (หรือ react-mkv และโหลดมันเมื่อเริ่มใช้งาน. แก้ไขค่าปรับแต่ง I18n:

import AsyncStorage from '@react-native-async-storage/async-storage';

const languageDetector = {
 type: 'languageDetector',
 async: true,
 detect: async (callback) => {
 const storedLang = await AsyncStorage.getItem('user-language');
 callback(storedLang || 'en');
 },
 init: () => {},
 cacheUserLanguage: async (lng) => {
 await AsyncStorage.setItem('user-language', lng);
 },
};

i18n.use(initReactI18next).use(languageDetector).init({
 fallbackLng: 'en',
 resources,
 interpolation: { escapeValue: false },
});

ตอนนี้ เมื่อผู้ใช้เปลี่ยนภาษา ผู้ใช้จะทําการบันทึกและเรียกคืนค่าเดิมโดยอัตโนมัติ เมื่อเปิดตัวครั้งต่อไป

รองรับการลากเมาส์ปุ่มขวา- ซ้าย (RTL)

React genbook รองรับ RTL ผ่าน โมดูล เมื่อภาษาคือ อารบิก, ฮีบรู, หรือเปอร์เซีย, บังคับใช้ RTL:

import { I18nManager } from 'react-native';

const changeLanguage = async (lng) => {
 await i18n.changeLanguage(lng);
 const isRTL = i18n.dir(lng) === 'rtl';
 I18nManager.forceRTL(isRTL);
 // On Android, you may need to restart the app for full RTL effect
};

สําหรับประสบการณ์ RTL ที่สมบูรณ์ ใช้ และ[FLT: 22] อย่างระมัดระวัง พิจารณาการใช้ห้องสมุดเช่น Reactive-retuple-retuple สําหรับทิศทางของชุดตกแต่ง

กําลังโหลดการแปลภาษาจากเซิร์ฟเวอร์ (Over-the- air)

สําหรับโปรแกรมที่ต้องการเพิ่มภาษาโดยไม่ต้องมีการปรับปรุงโปรแกรม ให้เรียกโปรแกรมแปลภาษา Jsons จากแบ็คเอนต์ ใช้ [FLT: 0] i18nxt-htp-ackend[FLT: 1) โดยมีแบ็คเอนต์สําหรับภาษากําหนดเอง:

import HttpBackend from 'i18next-http-backend';

i18n.use(HttpBackend).init({
 backend: {
 loadPath: 'https://your-api.com/locales/{{lng}}/{{ns}}.json',
 },
 fallbackLng: 'en',
 ns: ['common', 'home'],
 defaultNS: 'common',
});

แคชสําหรับเรียกตัวแปลภาษาใน AsyncStorated เพื่อหลีกเลี่ยงการร้องขอซ้ํา การรวมเข้ากับกลไกการสอนแบบอื่น เพื่อให้มีการดาวน์โหลดเฉพาะแฟ้มอัปเดตเท่านั้น

การพิจารณาผลงาน

  • [FLT: 0] การเรียกข้อมูลแบบ Lazy จะลดขนาดต้นของกลุ่มย่อย [FLT: 1]: จะโหลดเฉพาะการแปลหน้าจอปัจจุบันเท่านั้น
  • [FLT: 0] ห้ามทําการรีเดอร์: ตะขอ [FLT: 24] มีการจัดอันดับโดยย่อยแล้ว การแบ่งเฉพาะภาษาเท่านั้น การตัดส่วนประกอบราคาแพงด้วย .
  • [FLT: 0]]. ไฟล์แปลแบบ Pre-compile : ระหว่างการสร้าง, การแปลง Json เป็นรูปแบบย่อ.
  • [FLT: 0] สําหรับ Apps ขนาดขนาดใหญ่ พิจารณาการใช้ II18next-scanner เพื่อแยกปุ่มแปลจากโค้ดเบสของคุณโดยอัตโนมัติ

ทดสอบฟังก์ชันหลายLanguage

เขียนการทดสอบหน่วยสําหรับแฟ้มแปลของคุณ: เพื่อให้แน่ใจว่าไม่มีกุญแจหายไป, ให้ใช้ตัวแทนค่า และพหูพจน์ทํางานอย่างถูกต้อง ใช้ ด้วยตัวทดสอบ i18n เพื่อทดสอบการรวมเข้ากับภาษา ให้จําลองการสลับภาษา และตรวจสอบส่วนประกอบที่แสดงข้อความที่ถูกต้อง นอกจากนี้ ยังทดสอบการแสดงผลของรูปแบบ RTL บนแพลตฟอร์มทั้งสองด้วย

การ ฝึก ที่ ดี ที่ สุด

  • [FLT: 0] ใช้ปุ่มแปล [FLT: 1] เสมอ -- ห้ามใช้สตริงผู้ใช้แบบฮาร์ดโค้ด
  • [FLT: 0] โปรดรักษาการแปลให้เป็นระเบียบ [FLT: 1] โดยคุณสมบัติหรือหน้าจอ (ชื่อ: spaces).
  • [FLT: 0] ใช้ภาษาเสียวรรณ ป้องกันการแปลไม่สมบูรณ์จากการทําลายยูไอ (อังกฤษ: UI).
  • [FLT: 0]. STSTST บนเครื่องจริง โดยตั้งค่าท้องถิ่นที่แตกต่างกัน.
  • [FLT: 0] พิจารณาความแตกต่างทางวัฒนธรรม เกินภาษา: รูปแบบวันที่, ความหมายสี, ภาพ
  • [FLT: 0]. Document i18n ของคุณ ผลงาน froup สําหรับผู้แปลและนักพัฒนา.

Retricing Enternational-language in Recult International International (Fact). result International-languages in Recult International International International. สืบค้นเมื่อเทียบกับไลบรารีแบบ [FLTT: 0] Reacter-It-18ext[FTIFL]. [FT]. ไกว. ไกล. ไกว. ไกว. ไกว. สืบค้นเมื่อ 1 กรกฎาคม พ.ศ.