Aracılığıyla paylaş


Localization (Yerelleştirme)

Bu kılavuzda uluslararasılaştırma ve yerelleştirmenin ardındaki kavramlar tanıtılmaktadır ve bu kavramları kullanarak Xamarin mobil uygulamaları oluşturma yönergelerine bağlantılar sunun.

Doğrudan Xamarin uygulamalarını yerelleştirmenin teknik ayrıntılarına atlamak istiyorsanız, platforma özgü şu nasıl yapılır makalelerinden biriyle başlayın:

i18n ve L10n

Uluslararasılaştırma , kodunuzu farklı dilleri görüntüleme yeteneğine sahip hale getirme ve görünümünü farklı yerel ayarlar (sayı ve tarih biçimlendirme gibi) için uyarlama işlemidir. Buna genelleştirme de denir.

Yerelleştirme , her dil için kaynak (dizeler ve görüntüler gibi) oluşturma ve bunları uluslararası hale getirme uygulamasıyla paketleme adımını izleyen adımdır.

Uluslararasılaştırma genellikle i18n olarak kısaltılır - "i" ile "n" arasındaki 18 harf için kısaltma. Yerelleştirme benzer şekilde L10n olarak kısaltılır; "L" ile "n" arasındaki 10 harf için.

Genel bakış

Bu belgede, uluslararasılaştırma ve yerelleştirmeyle ilişkili kavramlar ve bunların genel olarak mobil uygulama geliştirme için nasıl uygulandığı tanıtilmektedir. Uygulama tasarlarken ve oluştururken önceden sabit kodlanmış olabileceğiniz ancak yerelleştirme için parametreleştirilmesi gereken şeyler şunlardır:

  • Ekran düzenleri ve metin,
  • Simgeler, grafikler ve renkler,
  • Video ve ses dosyaları,
  • Dinamik metin ve metin biçimlendirme (sayılar, para birimi ve tarihler gibi),
  • Sağdan sola (RTL) diller için düzen değişiklikleri ve
  • Veri sıralama.

Uygulamanızın hedeflediği mobil platformlardan bağımsız olarak bu ipuçları, yüksek kaliteli bir yerelleştirilmiş uygulama oluşturmanıza yardımcı olur.

Tasarım Konusunda Dikkat Edilmesi Gerekenler

İçeriğini yerelleştirebilmek için bir uygulamanın mimarisini oluşturma işlemine uluslararasılaştırma adı verilir. Uluslararasılaştırmayı düzgün bir şekilde yapmak, çalışma zamanında farklı dil dizelerinin yüklenmesine izin vermekten daha fazlasıdır. İyi tasarlanmış bir uygulama, tüm kaynakların dil ve yerel ayara (görüntüler, sesler ve videolar dahil) göre değiştirilmesine izin vermeli ve farklı boyutlu dizelerle başa çıkmak için biçimlendirme ve düzeni uyarlayabilir.

Bu bölümde, uluslararası bir uygulama oluştururken dikkate alınması gereken bazı tasarım konuları ele alınmaktadır.

Düzenler ve dize uzunluğu

Çince ve Japonca dizeler çok kısa olabilir; bazen giriş alanı etiketi için bir veya iki karakter yeterince anlamlı olabilir.

Almanca dizeler (örneğin) çok uzun olabilir; bazen İngilizcedeki nispeten kısa bir sözcük, diğer dillerde çok uzun olur ; kırpılır veya başka bir şekilde düzeninizi beklenmedik bir şekilde yeniden akıtar.

iOS giriş ekranındaki birkaç öğenin dize uzunluklarını İngilizce, Almanca ve Japonca olarak karşılaştırın:

German vs Japanese string length

İngilizce (8 karakter) dilinde Ayarlar Almanca çeviri için 13 karakter, Japonca ise yalnızca 2 karakter gerektirdiğine dikkat edin.

Etiket uzunluğu büyük ölçüde farklılık gösteremiyorsa, görüntüleme etiketinin ve giriş alanının yan yana olduğu düzenlerle çalışmak zordur. Ekranın tam genişliği hem etiket hem de giriş için kullanılabilir olduğundan, genellikle etiketin bir alanın üzerinde görüntülendiği bir düzeni yerelleştirmek daha kolaydır.

Genel bir kural olarak, sabit düzenler oluşturuyorsanız (özellikle yan yana öğeler), İngilizce dizelerinizin etiketler ve metinler için gerektirdiğinden en az %50 daha fazla genişliğe izin verir. Bu, her sorunu çözmez, ancak birçok durumda çalışacak bir arabellek sağlar.

Giriş doğrulaması

Doğrulama kuralları yazarken varsayımlara dikkat edin. Tek bir harfin çok nadir bir anlamı olduğundan, İngilizcede en az üç karakteri "zorunlu kılacak" bir metin alanı girişi gerektirmek geçerli görünebilir. Çince ve Japonca'da tek bir karakter geçerli bir giriş olabilir ve "en az 3 karakter gereklidir" doğrulama iletisi bu diller için anlamlı değildir.

E-posta adresini veya web sitesi URL'sini doğrulama gibi diğer görünüşte basit görevler, karakterlerle daha karmaşık hale gelir ve ASCII alt kümesiyle sınırlı değildir.

Geçerlilik kurallarınızı uluslararasılaştırmayı göz önünde bulundurarak yazın; en az kısıtlayıcı kuralları seçin veya mantığı her dil için farklı çalışması için yazın.

Resimler ve Renk

Her görüntünün kullanıcının dil seçimine göre değişmesi gerekli değildir. Birçok simge veya fotoğraf, hangi dilde konuşurlarsa konuşsunlar tüm kullanıcılar için uygun olacaktır. Ancak bazı kaynakların yerelleştirilmesi mantıklıdır, örneğin:

  • Kişileri veya belirli konumları gösteren resimler; uygulamanız yerel kişileri/konumları gösteriyorsa kullanıcılarla daha ilgili hissedebilir.
  • Simgeler : Bazı simgeografiler kültüre özgü olabilir ve yerel anlayışı yansıtacak şekilde yerelleştirerek uygulamanızın kullanımını kolaylaştırabilirsiniz.
  • Renkler – Bazı kültürler renkleri farklı anlar; kırmızı bir bölgede uyarı anlamına gelebilir, ancak başka bir bölgede iyi şanslar. Renkleri yerelleştirmek için bir mekanizma oluşturmanız gerekip gerekmediğini belirlemek için uygulamanızı tasarlarken ana dili konuşanlara danışın.

Videolar ve Ses

Videolar ve ses, bir uygulamayı yerelleştirirken özel zorluklar sunar, çünkü dizelerin çevrilmesi nispeten kolay olsa da, birden çok seslendirme parçası veya video klibi kaydetmek hem pahalı hem de zor olabilir.

Video ve ses dosyalarının birden çok kopyası da uygulamanızın boyutunu önemli ölçüde artırabilir (özellikle çok sayıda dilde yerelleştiriyorsanız veya çok sayıda medya dosyanız varsa). Kullanıcı uygulamanızı yükledikten sonra yalnızca gerekli dil varlıklarını indirmeyi düşünebilirsiniz, ancak bu durum yavaş ağlarda kötü bir kullanıcı deneyimine de neden olabilir.

Yerelleştirme sorunlarını çözmenin birçok yolu vardır. En önemli şey, bunları önceden göz önünde bulundurmak ve uygulamanızın bunlarla ilgilenmek için tasarlandığından emin olmaktır.

Tarihler, Saatler, Sayılar ve Para Birimi

.NET biçimlendirme işlevlerini kullanıyorsanız, ondalık ayırıcıların doğru ayrıştırılması için kültürü belirtmeyi unutmayın (ve dönüştürme özel durumlarının oluşmasını önleyebilirsiniz). Örneğin, yerel ayarınıza bağlı olarak hem 1,99 hem de 1,99 geçerli ondalık gösterimlerdir.

Veriler bilinen bir kaynaktan (yani kendi kodunuzdan veya denetlediğiniz bir web hizmetinden) geldiğinde, standart İngilizce dil biçimlendirmesi için çalışacak InvariantCulture gibi biçimlendirmeyle eşleşen bir kültür tanımlayıcısını sabit kodlayabilirsiniz.

double.Parse("1,999.99", CultureInfo.InvariantCulture);

Veriler uygulama kullanıcısı tarafından giriş yapılıyorsa, yerel ayarlarını yansıtan bir CultureInfo örneği kullanarak verileri ayrıştırın:

double.Parse("1 999,99", CultureInfo.CreateSpecificCulture("fr-FR"));

Ek bilgi için Sayısal Dizeleri Ayrıştırma ve Tarih ve Saat Dizelerini Ayrıştırma MSDN makalelerine bakın.

Sağdan sola (RTL) Diller

Arapça, İbranice ve Urduca gibi bazı diller (örneğin), sağdan sola okunur. Bu dilleri destekleyen uygulamalar, sağdan sola okuyuculara uyum sağlayan ekran tasarımlarını kullanmalıdır, örneğin:

  • Metin sağa hizalanmalıdır.
  • Etiketler giriş alanlarının sağ kısmında görünmelidir.
  • Varsayılan düğme yerleşimi genel olarak tersine çevrilir.
  • Bağlam için yön kullanan hiyerarşik gezinti çekme ve animasyon (ve diğer gezinti metaforları ve animasyonlar) da ters çevrilmelidir.

Hem iOS hem de Android, yukarıdaki ayarlamaları yapmaya yardımcı olan yerleşik özelliklerle sağdan sola düzenleri ve yazı tipi işlemeyi destekler. Xamarin.Forms şu anda RTL işlemeyi otomatik olarak desteklememektedir.

Sıralama

Farklı diller, aynı karakter kümesini kullandıklarında bile alfabelerinin sıralama düzenini farklı şekilde tanımlar.

Dilin (CultureInfo) sıralama düzenini etkilediği bir örnek için .NET Framework'te DizeLeri Kullanmaya Yönelik En İyi Yöntemler'de Dize Karşılaştırmasının Ayrıntısı bölümüne bakın.

Mobil platformlardaki yerleşik veritabanı özelliklerinin dile özgü sıralama düzenini desteklemesi olası değildir, bu nedenle iş mantığınızda ek kod uygulamanız gerekebilir.

Arama algoritmanızı birden çok dili göz önünde bulundurarak yazdığınızdan ve test ettiğinizden emin olun. Dikkate alınması gerekenler şunlardır:

  • Otomatik tamamlama: Otomatik tamamlama işlevi derlediyseniz kullanıcının diliyle ilgili öneriler sağladığından emin olun.
  • Verilerle eşleşen sorgu – belirli bir dilde girilen arama sorguları yalnızca o dilde yazılmış içerikte mi yoksa uygulamanızdaki tüm içeriklerde mi yürütülecek?
  • Kök oluşturma– Aramanız benzer sözcükleri, sözcük köklerini ve diğer arama iyileştirmelerini aramak için oluşturulduysa, bu iyileştirmeler desteklediğiniz tüm diller için mi oluşturulmuş?
  • Sıralama – sonuçların doğru sıralandığından emin olun (yukarıya bakın).

Dış kaynaklardan gelen veriler

Birçok uygulama twitter ve RSS akışlarından hava durumu, haberler veya hisse senedi fiyatlarına kadar dış kaynaklardan veri indirir. Bunu bir kullanıcıya görüntülerken, bu kullanıcıya ilgisiz veya okunamayan bir bilgi ekranı görüntüleme olasılığını göz önünde bulundurmanız gerekir.

Uygulamanızın kullanıcıyla ilgili verileri görüntülediğinden emin olmak için kullanabileceğiniz birkaç strateji vardır:

  • Farklı kaynaklar: Uygulamanız, kullanıcının diline veya yerel ayarına bağlı olarak verileri farklı bir kaynaktan indirebilir. Yerel ayar haberleri, hava durumu ve hisse senedi fiyatları, Kuzey Amerika n akışından indirilen bir şeyden daha anlamlı olabilir.
  • Yerelleştirilmiş ekran : Bir Twitter veya fotoğraf akışı görüntülüyorsanız, içeriğin kendisi özgün dilde kalsa bile meta verileri (örneğin, geçen süre) kendi dilinde görüntülemeniz gerekir.
  • Çeviri: Gelen verilerin makine çevirisini yapmak için uygulamanıza bir çeviri seçeneği oluşturabilirsiniz. Bu otomatik veya kullanıcının takdirine bağlı olabilir. Makine çevirileri hiçbir zaman mükemmel olmadığından, bunun gerçekleşip gerçekleşmediğini kullanıcıya bildirmeyi unutmayın!

Bu durum ses parçalarına veya videolara yönelik dış bağlantıları da etkileyebilir. Uygulamanızı tasarlarken çevrilmiş içerik kaynağını belirlemeyi veya kullanıcıların kendi dillerinde içerik sunulmadığında kullanıcı arabirimi tarafından yeterli şekilde bilgilendirilmelerini sağlamayı planladığınızdan emin olun.

Fazla çevirme

Uygulamanızdaki bazı dizelerin çeviriye ihtiyacı olmayabilir veya en azından çevirici tarafından özel bir dikkate ihtiyaç duyulabilir. Örnekler:

  • URL'ler : BIR URL'yi listelerseniz, url'nin dile göre ayarlanması gerekebilir veya gerekmeyebilir. Örneğin facebook.com çeviri gerektirmez ve ana sitede dili otomatik olarak algılar. Diğer sitelerin yerel ayara özgü içeriği vardır ve yahoo.com veya yahoo.fr veya yahoo.it gibi farklı bir URL sunmak isteyebilirsiniz.
  • Telefon numaraları – özellikle farklı ülke kodları veya belirli bir dili konuşan arayanlar için numaralar.
  • İletişim ayrıntıları – adresler ve diğer bilgiler dile veya yerel ayara göre farklılık gösterebilir.
  • Ticari markalar ve ürün adları – bazı dizelerin her zaman aynı dilde yazılması nedeniyle çeviriye gerek yoktur.

Son olarak, belirli dizeler özel işlem gerektiriyorsa çevirmen için ayrıntılı yönergeler eklemeyi unutmayın.

Biçimlendirilmiş metin

Dizeler genellikle zengin bir şekilde biçimlendirilmediğinden genellikle mobil uygulamalarla ilgili bir sorun olmaz. Ancak, uygulamanızda zengin metin (kalın veya italik biçimlendirme gibi) gerekiyorsa, çeviricinin biçimlendirmeyi nasıl giriş yaptığını bildiğinden emin olun, dize dosyalarınız bunu doğru şekilde depolar ve kullanıcıya görüntülenmeden önce düzgün biçimlendirilir (yani, biçimlendirme kodlarının yanlışlıkla kullanıcıya sunulmasına izin vermeyin).

Çeviri İpuçları

Bir uygulama tarafından kullanılan dizelerin çevrilmesi, yerelleştirme işleminin bir parçası olarak kabul edilir. Bu görev genellikle bir çeviri hizmetine dış kaynak olarak dağıtılır ve uygulamanızı veya işinizi bilmeyebilecek çok dilli personel tarafından gerçekleştirilir.

Aşağıdaki ipuçları, doğru şekilde çevrilmesi daha kolay dizeler oluşturmanıza ve bu nedenle yerelleştirilmiş uygulamalarınızın kalitesini artırmanıza yardımcı olur.

Sözcükleri değil tam dizeleri yerelleştirme

Bazen geliştiriciler uygulama genelinde yeniden kullanabilmeleri için tek sözcük veya tümce 'kod parçacıkları' belirtmeye çalışır. Örneğin, "5 iletiniz var" metni için çeviri için aşağıdaki dizeleri belirtebilirler.

Hatalı:

"You have"
"no"
"message"
"messages"

ve ardından dize birleştirmeyi kullanarak kodda anında doğru tümceciği oluşturmayı deneme:

Hatalı:

"You have" + " " + numMsgs + " " + "messages"
"You have" + " no " + "messages"

Bu önerilmez , çünkü her dilde çalışmayabilir ve çevirmenin her kısa segmentin bağlamını anlaması zor olacaktır. Ayrıca çevrilmiş dizelerin yeniden kullanılmasına da yol açar. Bu, daha sonra farklı bağlamlarda kullanılırlarsa sorunlara neden olabilir (ve sonra güncelleştirilir).

Parametrenin yeniden sıralanması için izin ver

Bazı programlama dilleri, bir dizedeki parametrelerin sırasını belirtmek için ek söz dizimi gerektirir, ancak .NET zaten numaralandırılmış yer tutucular kavramını destekler, bu nedenle

İyi:

"a {0} b {1} cde {3}"

aşağıdaki çevrilebilir (yer tutucuların konumu ve sırası değiştirilir)

"{2} {3} f g h {0}"

ve belirteçler çevirmen tarafından istendiği şekilde sıralanacaktır. Dizeyi bir çeviriciye gönderirken her yer tutucunun ne içerdiğine ilişkin bir açıklama eklemeyi unutmayın.

Kardinalite için birden çok dize kullanma

Daha iyi bir kullanıcı deneyimi sağlamak için Her durum için belirli dizeleri kullanma gibi "You have {0} message/s." dizelerden kaçının:

İyi:

"You have no messages."
"You have 1 message."
"You have 2 messages."
"You have {0} messages."

Görüntülenen sayıyı değerlendirmek ve uygun dizeyi seçmek için uygulamanıza kod yazmanız gerekir. Bazı platformlar (iOS ve Android dahil) geçerli dil/yerel ayar tercihlerine göre en iyi çoğul dizeyi otomatik olarak seçen yerleşik özelliklere sahiptir.

Cinsiyete izin verme

Latin tabanlı diller bazen konunun cinsiyetlerine bağlı olarak farklı sözcükler kullanır. Uygulamanız cinsiyeti biliyorsa çevrilmiş dizelerin bunu yansıtmasına izin vermelisiniz.

Ayrıca, dizelerin uygulamanızın belirli bir kişisine veya kullanıcısına başvurduğu İngilizcede bile daha belirgin bir durum vardır. Örneğin, bazı sitelerde gibi "Bob commented on his post" iletiler gösterilir; bu nedenle hem erkek, hem kadın hem de ikili olmayan veya bilinmeyen cinsiyet için dizelere ihtiyacınız vardır:

İyi:

"{0} commented on his post"
"{0} commented on her post"
"{0} commented on their post"

Dizeleri yeniden kullanma

Ya da daha doğru bir şekilde, dizenin kendisinin farklı bir amacı veya anlamı olduğunda benzer oldukları için dizeleri yeniden kullanamazsınız.

Örneğin: Uygulamanızda bir açma/kapatma anahtarınız olduğunu ve anahtar denetiminin yerelleştirilmesi için 'açık' ve 'kapalı' metninin gerekli olduğunu düşünün. Ayrıca bu ayarın değerini uygulamanın başka bir yerinde metin etiketinde de görüntülersiniz. Anahtar görüntüsü için anahtarın durumuyla (varsayılan dilinizde aynı dize olsalar bile) farklı dizeler kullanmalısınız; örneğin:

  • "Açık" – anahtarın kendisinde görüntülenir
  • "Kapalı" – anahtarın kendisinde görüntülenir
  • "Açık" – bir etikette görüntülenir
  • "Kapalı" – bir etikette görüntülenir

Bu, çevirmen için maksimum esneklik sağlar:

  • Tasarım nedenleriyle, anahtarın kendisi küçük harf "açık" ve "kapalı" kullanıyor olabilir, ancak görüntü etiketinde büyük harf "Açık" ve "Kapalı" kullanılır.
  • Bazı dillerde anahtar değerinin kullanıcı arabirimi denetimine sığacak şekilde kısaltılması gerekebilirken, tam (çevrilmiş) sözcük etikette görünebilir.
  • Alternatif olarak, bazı diller için anahtarınızın işlenmesi kültürel bilgi için "I" ve "O" kullanabilir, ancak etiketin "Açık" veya "Kapalı" olarak okunmasını isteyebilirsiniz.

Çeviri Hizmetleri

Makine çevirisi

Uygulamanızda çeviri özellikleri oluşturmak için Azure Çeviri Metin API'sini göz önünde bulundurun.

Test amacıyla, geliştirme sırasında uygulamanıza bazı yerelleştirilmiş metinler eklemek için birçok çevrimiçi çeviri aracından birini kullanabilirsiniz:

Diğer birçok kullanılabilir. Makine çevirisinin kalitesi genellikle profesyonel çevirmenler veya anadili konuşanlar tarafından incelenip test edilmeden bir uygulamayı yayınlamak için yeterli değildir.

Profesyonel çeviri

Ayrıca, dizelerinizi alıp kendi çevirmenlerine dağıtacak ve size ücretli olarak tamamlanmış çeviriler sağlayacak profesyonel çeviri hizmetleri de vardır.

En iyi bilinen hizmetlerden biri LionBridge'dir. Çoğu profesyonel hizmet dizeler, XML, RESX ve POT/PO gibi tüm yaygın dosya türlerini destekler.

Özet

Bu makalede, uygulamanızı uluslararası hale getirmeden ve kaynaklarınızı yerelleştirmeden önce tanımanız gereken bazı kavramlar tanıtıldı ve ayrıca her platform için dil tercihlerinin nasıl değiştirileceği ele alınmıştır.

Bu kavramlar, Xamarin ile mümkün olan çeşitli platforma özgü ve platformlar arası uluslararasılaştırma tekniklerine uygulanabilir.

İlgilendiğiniz platform için teknik ayrıntıları okumaya devam edin: