Yerelleştirme Kütüphaneleri ile Yerlileştirme Yerlileri Oluşturmak
Table of Contents
Kullanıcının ana dili konuşan bina uygulamaları artık lüks değildir - iOS ve Android için tek bir kod tabanından patlamaya devam ediyor, ancak dikkatli planlama ve doğru araçları okudukları metinden yerelleşmenin temelleri aracılığıyla sizi genişletir.Bu kapsamlı rehber, yerelleştirmenin en popüler kütüphaneler tarafından geliştirilmiş ve en popüler adımları oluşturmak için kullanılabilir.
Yerelleşme vs. Uluslararasılaştırma: Şartları Tanımlamak
Koda dalmadan önce, iki ilgili konseptleri ayırt etmek önemlidir.ETHFLT:0)Uluslararasılaştırma (i18n)) Uygulamanızı tasarlama sürecidir, böylece mühendislik değişiklikleri gerektirmeden çeşitli diller ve bölgelere adapte edilebilir.
Reaksiyon Yerlisi sadece yerel algılama için birkaç temel API sağlar (örneğin, [[0) modülünden, ancak tam yerelleştirme çeviri kaynaklarını yönetmek için özel bir kütüphane gerektirir, dil geçişi ve formatlama. Ekosistemi, her biri kendi güçlü yönleriyle.
Reaksiyon Yerlileştirme Kütüphaneleri
Üç kütüphane, Reaksiyon Yerliliği manzarasına hükmetmektedir. rolleri ve birbirlerini nasıl tamamladıkları sağlam bir uygulama için ilk adımdır.
tepkisi18 sonraki
JavaScript için en popüler uluslararasılaşma çerçevelerinden biri olan, çeviri yönetimi için tam bir çözümdür.Rektör kancaları () , Yüksek-Order Bileşenler ve dil değişiklikleri yaparken otomatik olarak yeniden tanımlayan bir çeviri bileşenidir.
Reaktif 18. geri dönüş avantajları zengin eklenti ekosistemini içeriyor ve talep üzerine çevirileri yükleyebilecek (yol veya özellikle onları ayır) aynı zamanda sunucunun oturma ve Android veya iOS ana kodun altta kullanılmamış parçalarıyla sorunsuz bir şekilde çalışıyor.
reaksiyona dayalı-yerelize
Reji18 diğer taraftan çeviri mantığı,-EN:3) Cihazın yerel bilgileri ile ilgili anlaşmalar yapılırken, kullanıcının mevcut yerel, zaman bölgesi, sıcaklık ünitesi, ölçüm sistemi ve takvim türü. Bu değerler, formatlama sayıları, tarihler ve para birimleri doğru şekilde yapılır. Çünkü Yerli uygulamalar iki farklı platformda çalışır, bu bilgiyi yerel olarak cumbersome olarak kullanır; ”FLT:4 yerli API'leri sarmalanır ve bunları basit bir JavaScript nesnesi olarak sunar.
Tanımlanan dili i18 sonraki başlangıç haline getirerek tepki-i18 ile tepki ile tepki veren tepkiyi birleştirebilirsiniz.Bu size sorunsuz, cihaz odaklı bir deneyim verir: kullanıcı telefonlarının dilini değiştirirken, uygulama otomatik olarak ilgili çeviriye geçer.
i18njs
Hafif bir yaklaşım tercih eden daha küçük projeler veya geliştiriciler için, minimalist API'ler sunar. Basit çeviri aramaları, çoğullaştırma kuralları ve tarih/günleme formatı sağlar. Ancak, bileşenli yaşam döngüsü ile entegre değildir.Birçok takım bunu en iyi şekilde kullanır (örneğin Redux azaltıcılar veya API yardımcıları) ve diğer bileşenler için sonraki sürümlere güvenerek yapar.
Gelişen bir alternatif, Expo ekosistemine dahil edilendir. tepkiye tepki verme yeteneklerini aynalar ama Expo yönetilen iş akışları için uygundur.Eğer Expo ile inşa ediyorsanız, 03.03.2016 tarihinden itibaren yerel veri elde etmek için en kolay yoldur.
Bir ⁇ App: Step-by-Step Uygulama
Yerelleşme sürecinden en yaygın çöp kullanarak yeni bir Reaks Yerli projeye geçelim: çeviriler için tepki-i18 ile çeviriler için tepki ve cihaz yerel algılama için tepki gösterdi.
1. Yükleme Bağımlılığı
Hem kütüphaneleri hem de eşlerini eklemek için aşağıdaki komutu çalıştırın:
npm install react-i18next i18next react-native-localize
Expo kullanıyorsanız, [[ ⁇ FLT:10 yerine yüklemeniz ve [[DörtÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜN
2. Configure i18 next
Project'in kökünde TypeScript için (veya [[T:13) dosya oluşturun. Bu dosya i18 sonraki örneği, ithalat çeviri kaynakları ve yerel deküre delegesini sağlayacaktır.
Aşağıda tipik bir yapılandırma vardır:
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;
Bu yapılandırma, birincil cihaz dilini almak için tepki-yerelize'nin İLDİT:16'i döndürür. geri dönüş dili, eksik çevirilerin UI'yi bozmamasını sağlar.
3. Çeviri Oluştur JSON Files
Bir klasör içinde, her desteklenen dil için ayrı JSON dosyaları oluşturun. Örneğin:
[Üye: 18)
{
"welcome": "Welcome",
"greeting": "Hello, {{name}}!",
"notifications": {
"new_message": "You have {{count}} new message",
"new_message_plural": "You have {{count}} new messages"
}
}
(Allah’a) yemin ederim.
{
"welcome": "Bienvenido",
"greeting": "¡Hola, {{name}}!",
"notifications": {
"new_message": "Tienes {{count}} mensaje nuevo",
"new_message_plural": "Tienes {{count}} mensajes nuevos"
}
}
Referans: {18}Örnek: {18}Örnek: çeviri işlevi ararken verilen sayıya göre çoğul formlar otomatik olarak ele alır.
4. Uygulamayı bir i18 diğer bir tedarikçi ile çırpın
Kök bileşeninizde (örneğin, 15) i18n yapılandırmasını ithal eder ve her şeyi [[göçücüklük için tavsiye edilir). Çoğu durumda, sadece ithalatçısı için yeterlidir.
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. Çevirileri Bileşenler içinde Kullanın
Herhangi bir işlevsel bileşen içinde, [[ŞUYGÜNÜŞÜNÜŞÜŞÜNÜŞÜŞÜNÜŞÜK-ŞÜK-ŞEKSÜŞÜNÜŞÜK-ŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜye Girin:
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;
[FONTD: 31] Dilin değiştiğinde otomatik olarak yeniden değerlendirilebilir ve bileşen Re-renders by the Reaction context integration.
Gelişmiş Yerelleştirme Özellikler
Basit anahtar çevirinin ötesinde, üretim uygulamaları çoğullaştırma, tarih/sayı formatlama ve doğru sol (RTL) ayar adaptasyonu için destek gerektirir.
Regalizasyon ve Context
i18. daha karmaşık çoğu kuralları olan diller için (örneğin, Arapça, Rusça) ek formlar sağlayabilirsiniz.
// Example for Russian
{
"unread_messages": "{{count}} непрочитанное сообщение",
"unread_messages_few": "{{count}} непрочитанных сообщения",
"unread_messages_many": "{{count}} непрочитанных сообщений"
}
Form tarihleri ve sayıları için, API'yi (Modern JavaScript motorlarında mevcut) veya çevirilerinizi kullanarak bir kütüphaneye güvenebilirsiniz.Luxon) veya [[FLT.
Doğru Destek Desteği Sağladı
Reaksiyon Yerlisi, RTL dillerini Arapça ve İbranice gibi desteklemiştir. Enable it by setting theETHFLT:39”) ve şu anki dilden kaçınmak için kök dosyanızda, kullanıcı anahtarlarını otomatik olarak çevirir.
import { I18nManager } from 'react-native';
// Inside your language switch handler:
if (newLanguage === 'ar') {
I18nManager.forceRTL(true);
} else {
I18nManager.forceRTL(false);
}
RTL'yi zorlayanın bazı Android versiyonlarında yeniden bir uygulama gerektirdiğini unutmayın. Kullanıcıyı uyarabilir veya kullanım yoluyla yeniden başlatabilirsiniz.
Üretim için en iyi uygulamalar -Ready Localization
Temelleri çalışmak tek bir şeydir; bir kullanılabilir, ölçeklenebilir yerelleştirme sistemi başka bir şeydir. Aşağıdaki en iyi uygulamalar sizi zaman kurtaracak ve sinir bozucu hataları önleyecek.
Özellik tarafından yapılan Tercüme Sistemleri
Büyük uygulamalar, dil başına tek bir monolithic JSON dosyasından kaçınmalıdır. yerine, i18 sonraki isim alanı özelliğinin özelliklerini veya ekran ile bölmesi gerekir. Örneğin,TELFLT:45).
Her zaman bir Fallback Dili Sağlayın
Uygulamanız asla çarpmamalıdır çünkü çeviri anahtarı eksiktir. Tüm çeviriler tamamlanmadığında (genellikle İngilizce) bir geri dönüş dili (genellikle uygulamada kullanılan her anahtarı içerir.If a key does not exist in the user's language, i18 next will display the fallback value.This is especially important during early development when not all languages are complete.
Key Naming Convention
Çeviri anahtarlarınız için tutarlı bir yapı benimsemek. Ortak kongreler, kullanımlarını hızlı bir şekilde bulabilecek kadar açıklayıcı olmalıdır.[DÜye ait olan KAYNAKLARA KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLAR ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
Ayrı Metin Çevirileri İçerik
UI'de görünen her şey statik bir dizedir. Kullanıcı tarafından üretilen içerik, ürün isimleri veya dinamik veriler, kullanım koşulları ile geçilmemelidir - kendi depolama ve formlama mantığına ihtiyaç duyarlar.Uygulama etiketleri, hatalar ve mesajlar için tamamen çeviri kaynakları tutun.
Automate Translation Workflows
Profesyonel çevirmenlerle takımlar için, Lokalise, Crowdin veya Phrase gibi bir çeviri yönetim sistemi ile bütünlemeyi düşünün. Bu platformlar kod depolarınıza bağlanır, güncel kaynak dizelerini zorlar ve çeviri dosyaları geri döndürür.Bu otomasyon sabit çevirileri önler ve manuel çaba azaltır.
Yerelleştirilmiş Uygulamaları Test
Dilbilgisi uygulamaları sadece metin değişikliklerini kontrol etmekten daha fazlasını gerektirir. Tüm elementlerin doğru bir şekilde ayarlandığını doğrulamanız gerekir, bu düzenler kırılamaz ve bu veri formatlama kullanıcının yerellerini karşılaştırır.
Simulate Farklı Locales on Simulators
Hem Xcode hem de Android Studio, cihazın bölge ve dilini ayarlamanıza izin verir. iOS için, programdaki Run seçeneklerinde dili değiştirebilirsiniz; Android için, özel bir yerel test ile yeni bir emülatör oluşturabilirsiniz. Her iki platformda platformun özel olarak desteklenen dili test edin (örneğin, tarih seçiciler, eski Android sürümlerinizde seçtiğiniz yerele saygı göstermeyebilir).
Birim Test Çevirileri
Tüm anahtarların temel ve geri dönüş dilleri için doğru bir şekilde çözülmesini sağlamak için i18n yapılandırmanız için birim testleri yazın. her dil için yapılandırma ve çağrılış. eksik bir anahtar çıktı olarak görünecektir, algılamayı kolaylaştırır.
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);
});
});
Görsel Regresyon Testi
Almanca veya Finlandiya gibi dillerde uzun metin dizeleri, test ortamında anlık görüntüler kullanabilir.S.g., Jest snapshots with different locale configurations) veya Lean gibi özel görsel regresyon araçları. Simulate RTL modu zorlayarak test ortamınızda.
Performansı Tahmin Ediyor
Yerelleştirme uygulama performansını tehlikeye atmamalı. İşte uygulamanızı korumak için birkaç ipucu.
- [FONT:0)Load çevirileri zily:[DÜT:1) Use i18 next'surFLT:56) seçeneği veya gerekli olduğunda dil dosyalarını getirmek için dinamik ithalat.This reduce the first package büyüklüğü.
- [FONT:0]Yeni kayıt kaynaklarından yoksundur:) Uygulama başlatıcınızda bir kez i18n örneğinizi ilk kez tekrar başlatmanız gerekir.Değişme dili ağdan tüm çeviri dosyalarını yeniden yüklemesi gerekmez.
- [FONT:0) Biçimli değerlerin farkına varır:[Dönetici:[Dönetici:0)Eğer bir form döngüsü içinde pahalı tarih veya numara formatlama yaparsanız, her yeniden hesaplamalardan kaçınmak için sonucu kapat.
- [[Dönetici:0)Bir çeviri önbellek kullanarak yorum yapın: çevrimdışı dil geçişine izin veren uygulamalar için, AsyncStorage veya benzer yerel bir veritabanında çeviriler.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Çok dilli bir Reaksiyon Yerli uygulaması oluşturmak sadece takas dizeleri ile ilgilidir. Cihazın yerel algılama, çeviri yönetimi, çoğullaştırma, sayı / güncelleme formatı ve RTL düzeni oluşturmak. tepki-i18 diğer çiftleştirilmiş gibi sağlam bir kütüphane seçerek, dünyanın her köşesindeki kullanıcılara hissettiren bir deneyim oluşturabilirsiniz.
Yerelleşmenin devam eden bir süreçtir – geçişler güncellemeye ihtiyaç duyar, yeni diller eklenebilir ve kültürel nüanslar erken araçta saygı gösterilmelidir, çeviri ekibinizle açık akışlar kurmak ve sürekli olarak test etmek gerekir.Bu çaba, kullanıcı memnuniyeti, daha yüksek tutma ve geniş bir pazardan elde etmek için öder.
Daha fazla okuma için, [[0|ondrat-i18Sonraki [Dönetici:2) ile birlikte, Reaktif Yerlileştirme) Ayrıca aşağıdaki liste bulabilirsiniz.[Dönetici:0|Dönetici:0|Dönetici:0) Doğru stratejinizle, Reaktif Yerlileştirme uygulamanız herhangi bir dili akıcı bir şekilde konuşabilir.