בניית יישומים המדברים את שפתו של המשתמש אינה עוד מותרות – זה צורך עסקי.כפי ששימוש בנייד ממשיך להתפוצץ ברחבי העולם, משתמשים מצפים שאפליקציות ירגישו מקומיות, מהטקסט שהן קוראות לצורה שבה מספרים ותאריך מעוצבים. React Native, מסגרת ה-platform המשולבת שפותחה על ידי מטא, מאפשרת למפתחים לבנות יישומים ניידים עבור iOS ואנדרואיד מקוד משותף, עם תמיכה רב-לשונית, אך דורשות, אך ורקמות, באמצעות שלבים פשוטים, אך ורקמות, כדי ליצור את הכלים, באופן כללי, עם זאת, באמצעות שיטות פעולה, כולל, כדי ליצור את האפליקציות, כולל, עם זאת, עיצוב, עם זאת, באמצעות יישומים, באמצעות יישומים, באמצעות יישומים, כדי ליצור יישומים, כדי ליצור את האפליקציות, כדי ליצור את האפליקציות ניידות, באמצעות שימוש, עם זאת, עם זאת, יישום ידני, עם זאת, באמצעות שימוש זה, באמצעות שימוש ידני, באמצעות שיטות פעולה, כדי ליצור יישומים ניידים, עם ביצועים, באמצעות שימוש, באמצעות שימוש קבוע, עם יישומים וירטואליות, עם זאת, יישומים המאפשרים, כדי ליצור יישומים ניידים לביצוע יישומים המאפשרים, באמצעות שימוש, באמצעות יישומים ניידים לביצוע יישומים המאפשרים, באמצעות יישומים המאפשרים, כדי ליצור את האפליקציות לשימוש זה, כדי ליצור את האפליקציות המאפשרים,

מודרניזציה נגד האינטרנציונליזציה: Defining the Conditions

לפני צלילה לקוד, חשוב להבחין בין שני מושגים קשורים:0 בינאום (i18n) LT:1 הוא תהליך של תכנון היישום שלך כך שניתן להתאים לשפות שונות ואזורים ללא צורך בשינויים הנדסיים.זה כרוך במילוי טקסט, באמצעות פורמט מודע מקומי עבור תאריכים ומספרים, ותכנון עבור מערכות כתיבה שונות:2 LT:2 ייצוב שפה מתאימה (Falization) מתאים להתאמה אישית של טקסט, או התאמה אישית של יישום של התאמה אישית של התאמה אישית של טקסט, או התאמה אישית של קידוד מקומי (Falization) להתאמה אישית של קידוד מתאים להתאמה אישית של טקסט (f-of-of-of-of-of-of-of-of-of-of-of-of-of-f-of-of-f-f-of-of-of-of-of-of-f-of-f-f-of-of-f-of-of-of-of-of-to-to-of-to-to-of-of-to-to-of-of-of-of-of-of-of-of-of-to-to-of-of-of-to-to-to-to-to-

React Native עצמה מספקת רק כמה ממשקי API בסיסיים לזיהוי מקומי (למשל, מהמודול ה-FLT:0), אך ההתמחות המלאה דורשת ספרייה ייעודית לניהול משאבי תרגום, החלפת שפה ופורמטיקה.המערכת האקולוגית מציעה מספר אפשרויות בוגרות, כל אחת עם כוחות משלה.

המונחים: React Native

שלוש ספריות שולטות בנוף של הילודה של המשיבים, הבנת התפקידים שלהן וכיצד הן משלימות זו את זו, היא הצעד הראשון לקראת יישום חזק.

תגובה -i18 Next

נבנה על גבי שורת ה- JavaScript, FLT:0i18nextFLTEL:1, אחת ממסגרות בינאום הפופולריות ביותר עבור JavaScript, FLT:1 הוא פתרון שלם לניהול התרגום.הוא מספק תגובות (FLT:2), נספחים גבוהים יותר, רכיב תרגום ספציפי אשר מהדהד באופן אוטומטי כאשר השינויים בשפה.

יתרונות מרכזיים של תגובה-i18next כוללים את המערכת האקולוגית העשירה שלה ואת היכולת לטעון תרגומים על הביקוש (הפצה אותם על ידי מסלול או תכונה) זה גם עובד בצורה חלקה עם קידוד בצד השרת, וניתן להשתמש בו בחלקים לא-React של הקוד האנדרואיד או iOS שלך באמצעות מנוע i18 הבא.

תגובה-native-localize

בעוד שתגובה-i18next מטפלת בלוגיקה התרגום, ב-FLT:3 עוסקת במידע מקומי של המכשיר.זה חושף את האזור הנוכחי של המשתמש, אזור זמן, יחידת טמפרטורה, מערכת מדידה, וטיפוס לוח שנה.ערכים אלה הם קריטיים עבור פורמט מספרים, תאריכים ומטבעות נכון. כי יישומי React Native לרוץ על שתי פלטפורמות שונות, גישה למידע זה משמש כדי להיות מגושם; FLT:4 מעטוף אותם כמו יישומים פשוטים ו- JavaScript הופך אותם API.

אתה יכול לשלב תגובה-native-localize עם תגובה-i18next על ידי האכלה השפה מזוהה לתוך ההתחלתיזציה i18 הבא.זה נותן לך חוויה חלקה, מונע המכשיר: כאשר המשתמש משנה את שפת הטלפון שלהם, היישום באופן אוטומטי מתג התרגום המתאים.

i18n-js

עבור פרויקטים קטנים יותר או מפתחים המעדיפים גישה קלה, FLT:5 מציעה API מינימליסטי.זה מספק סקירות תרגום פשוטות, כללי פלורליזציה, תאריך / מספר פורמט.עם זאת, הוא חסר זיהוי שפה מובנה ואינו משלב עם מחזור החיים של רכיב של צוותים רבים להשתמש בו כמודול שימושי עבור תרגומים שאינם בבעלות (למשל, ב Redux או API) עוזר להסתמך על רכיבים.

חלופה מתפתחת היא (FLT:6), אשר נכללת במערכת האקולוגית של אקספוזה.זה מראה את היכולות של תגובה-native-localize אבל מותאם לזרימות עבודה מנוהלות של אקספוזציות, אם אתה בונה עם אקספו, 7 הוא בדרך כלל הדרך הקלה ביותר להשיג נתונים מקומיים.

בניית אפליקציה רב לשונית: שלב-בי-שלב

בואו נלך בתהליך של הוספת מקומיות לפרויקט חדש של React Native באמצעות הערימה הנפוצה ביותר: תגובה-i18 Next לתרגומים ו-תגובה-native-localize עבור זיהוי המכשיר המקומי.

1.התקנה התלויות

להפעיל את הפקודה הבאה כדי להוסיף את שתי הספריות ואת עמיתיהם:

npm install react-i18next i18next react-native-localize

אם אתה משתמש ב-Expo, להתקין את FLT:9 במקום 10 (בהמשך) ולהוסיף את ה-FLT:11 ו-FLT 12, חבילות.

2.הופנה i18 Next

צור קובץ (FLT:13 או FLT:14 עבור TypeScript) בשורש הפרויקט שלך.קובץ זה יקבע את הדוגמה הבאה i18, לייבא משאבים תרגום, ושילוב גלאי המקומי.

להלן תצורה טיפוסית:

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import { getLocales } from 'react-native-localize';

import en from './locales/en.json';
import es from './locales/es.json';
import fr from './locales/fr.json';
import de from './locales/de.json';

// Detect device language
const languageDetector = {
 type: 'languageDetector',
 async: false,
 detect: () => {
 const locales = getLocales();
 return locales[0]?.languageCode ?? 'en';
 },
 init: () => {},
 cacheUserLanguage: () => {},
};

i18n
 .use(languageDetector)
 .use(initReactI18next)
 .init({
 resources: {
 en: { translation: en },
 es: { translation: es },
 fr: { translation: fr },
 de: { translation: de },
 },
 fallbackLng: 'en',
 interpolation: {
 escapeValue: false, // React already safes from XSS
 },
 });

export default i18n;

תצורה זו משתמשת ב-native-localize'sFLT:16 כדי לאחזר את שפת המכשיר העיקרית.שפת ה- Fallback מבטיחה כי תרגומים חסרים אינם לשבור את UI.

תרגום לעברית עבור: Create JSON Files

בתוך תיקיה של LT:17, ליצור קבצים נפרדים של JSON לכל שפה הנתמכת.

(ב) .

{
 "welcome": "Welcome",
 "greeting": "Hello, {{name}}!",
 "notifications": {
 "new_message": "You have {{count}} new message",
 "new_message_plural": "You have {{count}} new messages"
 }
}

(ב) .

{
 "welcome": "Bienvenido",
 "greeting": "¡Hola, {{name}}!",
 "notifications": {
 "new_message": "Tienes {{count}} mensaje nuevo",
 "new_message_plural": "Tienes {{count}} mensajes nuevos"
 }
}

שימו לב ל-F:22LT suffix -i18next מטפל באופן אוטומטי בצורות פלורליות המבוססות על הספירה המסופקת כאשר קורא לתפקוד התרגום.

4.התעסקו ב- i18next Provider

בפרשת ה-i18n (למשל, ייבוא התצורה של i18n ועטוף את כל מה שיש לו עם ה-FLT:24 (אופציונלי אך מומלץ לבדיקות).

import React from 'react';
import { SafeAreaView } from 'react-native';
import './i18n'; // Ensure i18n is initialized before any component
import MainScreen from './screens/MainScreen';

const App = () => (
 <SafeAreaView style={{ flex: 1 }}>
 <MainScreen />
 </SafeAreaView>
);

export default App;

5. השתמש בתרגום בתוך עבריינים

בתוך כל מרכיב פונקציונלי, השתמש ב-FLT:28 כדי לגשת לתפקוד של ה-FLT:29:

import React from 'react';
import { View, Text, Button } from 'react-native';
import { useTranslation } from 'react-i18next';

const MainScreen = () => {
 const { t, i18n } = useTranslation();

 const changeLanguage = (lng) => {
 i18n.changeLanguage(lng);
 };

 return (
 <View>
 <Text>{t('welcome')}</Text>
 <Text>{t('greeting', { name: 'Maria' })}</Text>
 <Button title="Español" onPress={() => changeLanguage('es')} />
 <Button title="Français" onPress={() => changeLanguage('fr')} />
 </View>
 );
};

export default MainScreen;

הפונקציה חוזרת באופן אוטומטי, כאשר השפה משתנה, ואת המרכיב מחדש את ההתחדשות הודות לשילוב ההקשר תגובה.

תכונות מתקדמות

מעבר לתרגום ערכי פשוט, יישומי ייצור דורשים תמיכה בהפלרליזציה, תאריך / מספר פורמט, והתאמה נכונה ל-שמאל (RTL) הפריסה.

המונחים: Pluralization and Context

i18next משתמשת בפורמט ההודעה של ICU כדי להתמודד עם כללי פלורליים.הדוגמה לעיל עם (FLT:32 ו-FLT:33) מדגים את המקרה הפשוט ביותר.עבור שפות עם כללים מורכבים יותר (למשל, ערבית, רוסית), ניתן לספק צורות נוספות כגון FLT:34, FLT:35, או להשתמש במשתנה בתוך אינטרפולציה.

// Example for Russian
{
 "unread_messages": "{{count}} непрочитанное сообщение",
 "unread_messages_few": "{{count}} непрочитанных сообщения",
 "unread_messages_many": "{{count}} непрочитанных сообщений"
}

כדי לתאר תאריכים ומספרים, ניתן להשתמש ב- API (זמין במנועי JavaScript מודרניים) או להסתמך על ספרייה כמו FLT:0LuxonveFLT:1 או FLT:2date-fnsuaFLT 3: תבנית משותפת היא ליצור פונקציות שירות שמקבלות מחרוזת מקומית והחזרת ערכים, ולאחר מכן להשתמש בהם לצד התרגום שלך.

תמיכה ישירה (RTL) LEout Support

(הופנה מהדף RTL Languages, ערבית ועברית) ניתן לה על ידי הגדרת ה-FLT:39 ו-FLT:40 בקובץ השורש שלך, בהתבסס על השפה הנוכחית.כאשר המשתמש עובר ל-RTL המקומי, כל ההוראות הגמישות באופן אוטומטי הפוך.

import { I18nManager } from 'react-native';

// Inside your language switch handler:
if (newLanguage === 'ar') {
 I18nManager.forceRTL(true);
} else {
 I18nManager.forceRTL(false);
}

להיות מודע לכך ש- toggling RTL דורש יישום מלא מחדש על כמה גרסאות אנדרואיד.You יכול להזהיר את המשתמש או ליישם מחדש באמצעות שימוש ב-FLT:44.

Best Practices for הפקה-Ready Localization

קבלת היסודות לעבוד זה דבר אחד; בניית מערכת מקומית יציבה, מדרגת היא אחרת.הפרקטיקות הטובות הבאות ימנעו זמן וימנעו באגים מתסכלים.

ארגן קבצים באמצעות תכונה

יישומים גדולים צריכים להימנע מקובץ מונוליטי יחיד JSON לשפה. במקום זאת, להשתמש בתכונה שם של i18next כדי לפצל תרגומים על ידי תכונה או מסך.לדוגמה, FLT:45:45:45, FLT:46 זה שומר קבצים קטנים והופך את הפחתת בקשות קל יותר.

תמיד לספק שפה נופלת

האפליקציה שלך לא צריכה להתרסק כי מפתח התרגום חסר. Define שפה של נפילה (בדרך כלל אנגלית) המכילה כל מפתח המשמש ביישום.אם מפתח לא קיים בשפת המשתמש, i18next יציג את ערך הנפילה.

השתמש באמנת מפתח

אימוץ מבנה עקבי של מפתחי התרגום שלך.מוסכמות נפוצות כוללות שימוש ב- dotation (FLT:48,FLT:49) או חיקוי של ההיררכיה של הרכיב (FLT:50).

תרגום טקסט נפרד מתכנים

לא כל מה שמופיע ב- UI הוא תוכן מטושטש למשתמש, שמות מוצרים או נתונים דינמיים לא צריך לעבור דרך הפונקציה FLT:51 - הם זקוקים לאחסון שלהם ותבנית לוגיקה. שמור על משאבי תרגום רק עבור תוויות יישומים, שגיאות והודעות.

חידושים של תרגום אוטומטי

עבור צוותים עם מתרגמים מקצועיים, לשקול שילוב עם מערכת ניהול תרגום (TMS) כמו Lokalise, Crowdin, או Phrase. פלטפורמות אלה להתחבר לקוד שלך repository, לדחוף מחרוזת מקור מעודכן, ומושך קבצים מתורגם בחזרה.זה אוטומציה מונעת תרגומים מסולקים ולהפחית את המאמץ ידני.

בדיקות יישומים מקומיים

בדיקת יישומים רב לשוניים דורש יותר מאשר רק לבדוק כי הטקסט משתנה.אתה חייב לאמת כי כל האלמנטים להתאים כראוי, הפריסה זו לא לשבור, וכי עיבוד נתונים מתאמת את המקומי של המשתמש.

סימסומים מקומיים שונים בסימולציות

גם Xcode וגם Android Studio מאפשרים לך להגדיר את האזור ואת השפה של המכשיר.עבור iOS, אתה יכול לשנות את השפה באפשרויות הפעלה של התוכנית; עבור אנדרואיד, אתה יכול ליצור חיקוי חדש עם מקומי מותאם אישית.מבחן כל שפה נתמך על שתי הפלטפורמות כדי לחשוף quirks ספציפיים פלטפורמה (לדוגמה, בוחרים לא יכול לכבד את המקומי הנבחר שלך על גירסאות ישנות יותר אנדרואיד).

מבחן תרגום

כתוב בדיקות יחידה עבור התצורה i18n שלך כדי להבטיח שכל המפתחות ייפתרו כראוי עבור הבסיס ושפות הנפילה. השתמש מסגרת מבחן כמו Jest לטעון את התצורה ולקרוא ל-FLT:52 עבור כל שפה. מפתח חסר יופיע כמו FLT:53 בפלט, מה שהופך את זה קל לזהות.

import i18n from '../i18n';

test('all translation keys exist in English', () => {
 const keys = ['welcome', 'greeting', 'notifications.new_message'];
 keys.forEach(key => {
 expect(i18n.t(key)).not.toBe(key);
 });
});

בדיקות תוקפנות חזותית

מיתרי טקסט ארוכים בשפות כמו גרמנית או פינית יכולים לגרום לפריצת יתר על המידה. השתמש בבדיקת תמונות (למשל, Jest צילומי צילום עם תצורה מקומית שונה) או כלי תוקפנות חזותיים ייעודיים כגון פרסי כדי לתפוס את מצב ה-UI. Simulate RTL על ידי אילץ FLT:55 בסביבת הבדיקה שלך.

שיקולים

ההתמחות לא צריכה להתפשר על ביצועי האפליקציה.כאן כמה טיפים כדי לשמור על האפליקציות שלך.

  • (ב) תרגומים של לואד (Llowad Translations lazily: FIRLT:1) השתמש באפשרות i18next של iFLT:56 או יבוא דינמי כדי להביא קבצים שפה רק כאשר נדרש.
  • (FLT:0)Afree reregistering משאבים: ההרחבה 1 (הראשונה ל- i18n) תחילה את המקרה ה- i18n שלך פעם ב- app Startup. Change the Language לא צריכה לנסח מחדש את כל הקבצים של התרגום מהרשת.
  • (ב) אם אתה מבצע תאריך יקר או מספר פורמט בתוך לולאה של עריכת קוד מקור, עטוף את התוצאה של FLT:57 כדי להימנע ממחשבות על כל גלגול מחדש.
  • (FLT:0)Consider באמצעות מטמון תרגום: ההרחבה 1 (IQ) עבור יישומים המאפשרים החלפת שפה לא מקוונת, תרגומים בחנות או מסד נתונים מקומי דומה.

מסקנה

יצירת אפליקציה תגובה רב לשונית כרוך יותר מאשר החלפת מיתרים.זה דורש אדריכלות מתחשבת המטפלת במכשיר המקומי זיהוי, ניהול תרגום, פלורליזציה, מספר / תאריך פורמט, ופריסת RTL. על ידי בחירת ספרייה חזקה כמו תגובה-i18 הבא יחד עם תגובת-לקליזציה, אתה יכול לבנות חוויה כי Native מרגיש למשתמשים בכל פינה של העולם.

זכור כי המודרניזציה היא תהליך מתמשך - רציפות זקוקות לעדכונים, שפות חדשות יכולות להיכלל, ו הניואנסים תרבותיים חייבים להיות מכובדים. להשקיע בהפעלת מוקדם, לקבוע זרימות עבודה ברורות עם צוות התרגום שלך, ולבדוק ללא רחמים.המאמץ משלם שביעות רצון של משתמשים, שמירה גבוהה יותר, ולהגיע לשוק הרחב.

(ב) לקריאה נוספת, מומלץ להתייעץ עם התיעוד הרשמי של FLT:0react-i18nextFelo: ו-FLT:2react-native-native-localizeFLT 3, ייתכן גם למצוא את רשימת התוספים של FLT:4i18 Next List FLT:5 מועיל להרחבת הפונקציונליות.