Reaksiyon Yerli Uygulamalarında Çok Dilli Destek Sistemi Oluşturun
Table of Contents
Reaksiyon Yerli Uygulamalarında Çok Dil Destek Sistemi Oluşturun
Birden fazla dili destekleyen mobil uygulamalar artık isteyemiyor - küresel kabul için amaçlayan herhangi bir uygulama için bir gerekliliktir. Reaksiyon Yerlisi, çapraz platform yetenekleri ile, uluslararasılaştırma (i18n) ve yerelleştirme (l10n) uygulamak için birkaç sağlam yaklaşım sunar.
Yerelleştirmenin Temel Kavramları
Yerelleştirme basit metin çevirisinin ötesine geçer.Pekiz numaralar, tarihler, para birimleri, metin yönlendirme (LTR vs. RTL), çoğullaştırma, cinsiyet formları ve hatta tercüme dizeleri uygun şekilde ayarlayan UI düzeni sağlar. iyi tasarlanmış bir i18n sistemi kodbase'den gelen translatable içeriği ayırır, anahtar tabanlı referansları kullanır ve bir uygulama yeniden başlatmadan zaman dilini destekler.
Reaksiyon Yerlisinde Anahtar Zorluklar
- Cihaz yerel algılama için yerel modüller ( iOS ve Android arasındaki farklar).
- Verimli olarak yükleme ve çeviri dosyaları.
- Uygulamanın tümünde aktif dil için devlet yönetimi ( navigasyon ve devam eden tercihler dahil).
- RTL düzeninin işlenmesi – Yerli desteği ile karşılaştırın:0) ama dikkatli bir uyum gerektirir.
- Tüm çeviri dizeleri bağlam içinde test etmek ve doğrulayın.
Doğru i18n Kütüphanesini Seçin
Birkaç kütüphane var olsa da, [[0)kreact-i18 sonraki , Reak Yerlilerin üst kısmında inşa edilen ve daha az güçlü olan Re:2.html[Dönetici:0)[Dönetici, eksperatif-yerelize[Dönetici, eksperatif-eken) ve diğer sürümler için çeviriler (örneğin, ekspert-en-e-en-en-e-yeterli-yeterli-yeterli-yeterli-yeterli-yeterli-yeterli-yeterli-yeterli-yeterli-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-yene-s-yene-yene-yene-yene-yene-yene-yene-s-s-yene-yene-s-yene
Temel kütüphaneleri yüklemek
Gerekli paketlerin yüklenmesine başlayın:
npm install react-i18next i18next i18next-http-backend react-native-localize
Seçmeli olarak, cihaz tercihlerine dayanan otomatik dil algılama için aşağıdaki yazıcı-dil-i18.html (Döneticileri) ile bağlantı kurmak için yerel modüllere bağlantı kurmanız gerekebilir. Not that you may need to link native modül for response-native-localize (auto-linking in RN0+).
i18n Instance'ı kurmak
Bir yapılandırma dosyası oluşturun, e.g., [[Dönetici:2)
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;
[[Dönetici:0|kullanıcı-yerelize[Dönetici:0) Uygulamanızın cihazının bölgesel ayarlarına saygı göstermesini sağlar.TheDANFLT:4) işlevi bir kez çalışır ve ilk dil ayarlar.If the user changes their device language while the app is open), you can subscribe toTORT:5).
Çeviri Dosyalar Yapı
Çevirilerinizi dil ve isim uzayları tarafından takip edin. Örnek forurFLT: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."
}
}
Adıspaces (e.g., 03.D) kullanarak büyük uygulamaları yönetmeye ve çeviri chunks yüklemesine yardımcı olur.
Bileşenlerin içinde çevirileri kullanarak
KullanımTranslation kanca
Herhangi bir işlevsel bileşende:
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
);
};
[FONT:0][Döneticileri ve çoğulları değiştirmek için değişkenleri ve çoğulları ele alır. Dil değiştirmek için, callENFLT:11) – bu tüm abone bileşenlerin yeniden seçilmesini tetikler.
Trans bileşenini kullanarak
gömülü işaret veya reaktör bileşenleri ile karmaşık dizeler için:
import { Trans } from 'react-i18next';
// In translations: "welcome_html": "Welcome, {user} !"
Welcome, {user} !
Plurals, Cinsiyet ve Context
i18 sonraki kutudan en çok kullanılan kuralları destekler. Anahtarları [[Dördüncü|Dörtüncü|küresel/s.)
{
"item": "{{count}} item",
"item_plural": "{{count}} items",
"item_other": "{{count}} items"
}
Kullanım:FLT:16) Yerele dayalı doğru formu otomatik olarak seçer. Cinsiyet ve diğer bağlamlar, seçenek üzerinden ele alınabilir.
Dinamik Dil Anahtarlama ve Persistence
Kullanıcının dil tercihini sürdürmek için, seçilen dili [[0)AsyncStorage) (veya )) iletebilirsiniz.[Dönetici-mmkv) ve i18n yapılandırmasını indirin:
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 },
});
Şimdi kullanıcı dili anahtarlandığında, tercih kurtarılır ve bir sonraki başlatta otomatik olarak restore edilir.
Doğru-to-Left (RTL) Destek
Reaksiyon Yerlisi RTL'yi Arapça, İbranice veya Farsça'nın gücü RTL'yi kullanarak destekliyor:
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
};
Tamamlanmış bir RTL deneyimi için, [[Dönetici:0) ve [[Dönetici|mükemmel-restyle) tema tabanlı yönde bir şekilde kullanmak.
Bir sunucudan çeviriler (Over-the-Air)
Uygulama mağazası güncelleştirmeleri olmadan dil eklemek için gereken uygulamalar için, çeviri JSON'ları bir arkadan getirin. UseETHFLT:0)i18 sonraki-https://[[DDDDDDDDDDDDDDDDDDDDDDDD) Yerel Reaksiyon için özel bir geri dönüş ile birlikte:
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',
});
Tekrarlanan istekleri önlemek için AsyncStorage'daki çevirileri getir. Sadece güncel dosyaları indirmek için bir sürüm mekanizmasıyla bir araya getirin.
Performansı Tahmin Ediyor
- [[Dönetici:0)Use namespace partition[[Dönetici: Mevcut ekran için sadece çeviriler. Lazy yükleme ilk boyut azaltır.
- [FONT:0]Bir re-renders [[DÜT:1) yok: TheİLFLT:24) kanca, sadece dil değişikliklerine göre alt tarif ederek optimize eder.
- [FONTT:0)Öyle çeviri dosyaları[Dön 1: 1): İnşa sırasında JSON'u minified formata dönüştür.
- [FONT=0) Büyük uygulamalar için[Dönetici:0))) [[[FONT=2}i18Sonraki-scanner) kodbazdan çeviri anahtarlarını otomatik olarak çıkarmak için.
Multi-El İşlevselliği Test
Çeviri dosyalarınız için birim testleri yazın: eksik anahtarlar olmadığından, tüm yer sahipleri sağlandığında ve çoğul iş doğru şekilde çalışır.UseyuFLT:26).Bir alaylı i18n örneği ile.In integration testleri, dil anahtarları ve bu bileşenleri doğru metin gösteren kontrol edin. Ayrıca RTL düzeni test edin.
En İyi Uygulamalar Recap
- [[Dönler çeviri anahtarlarını kullanır[Dönler:0)-never hardcode kullanıcı-ışın dizeleri.
- [[Düzzamanlar, [[Döneticiler veya ekran (isimspaces) ile düzenlenir.
- [0]Use fallback languages[[Döneticileri UI'yi bozmayı engellemek için ).
- [FONT:0) Gerçek cihazlarda Test[Dönetici ayarları ile).
- [0]Kültürel farklılıkları [Döneticileri Okutmak: Tarih biçimleri, renk anlamları, görüntüler.
- [[0) i18n iş akışlarınızı [Döneticiler ve geliştiriciler için unutmayın.
Reaksiyon Yerlisinde çok dilli destek, kullanıcı tabanınızla ölçeklenen sağlam bir sistemdir:0)Ölmüş durumdaki İngilizce) ve ilet-native-yerelize, kullanıcı tabanınızla ölçeklenen sağlam bir sistem inşa edebilirsiniz.Daha fazla okuma için, resmi olarak İngilizceden alıntılanır.|profilli-i18|bencil-tr|seçmişli-ve-ve-ve-ve-ve-ve-ve-saireleme)