Soru Yer tutucularla (`{0}`) dizgileri kaynaklara iyi bir fikir ekleyerek mi?


Bir kaynak dosyasına bir dize ekledim. Başvurum yerelleştirilecek.
Ancak, yer tutucuları ile dizeleri ekliyor ({0}) kaynaklara iyi bir fikir mi?
Teknik olmayan bir kişi yerelleştirme yaparsa ne olur? Bilmeden, onu kestirmenin bir yolu var mı?

Bu iyi bir fikir değilse, ne yapmalıyım?

İşte basit bir örnek. WPF kaynak sözlüklerini kullanacağım.

Örnek:

// Resource1.resx
//        Name               |            Value
//---------------------------------------------------------------
// RELATIONSHIP_STATUS_MSG   | {0} is in relationship with {1}. 
//


class Program
{
    static void Main(string[] args)
    {
        string msg = string.Format(Resource1.RELATIONSHIP_STATUS_MSG, 
                                   "Romeo", "Juliot");
        Console.WriteLine(msg);
    }
}

24
2018-05-25 09:48


Menşei




Cevaplar:


Eh, ben bu iyi bir fikir olduğuna inanıyorum çünkü bu, parametrized ve localized dizeleri işlemek için kolay ve hızlı bir yoldur.

Bu arada, sorunuzda söylediğin gibi, teknoloji dışı kişiler yerelleştirme dizelerinizi kırabilir, çünkü "{0}" ifadesinin ne olduğunu anlamıyorlar. Bu problemi çözmek için iki "yaklaşımım" var

  1. Teknik olmayan kişilerin, yerelleştirilmiş dizeleri koruyarak, metinleri parantez içinde tutmamaları gerektiğini fark ettiniz.

  2. Adlandırılmış yer tutucuları kullan: "{some-identifier}" ve sadece kullan someTextResource.Replace("{some-identifier}", someTextVar).

Yaklaşık bir tanesini kabul eden bazı yöntemleri uygulayabilirsiniz. IDictionary<TKey, TValue> ikame ilişkilerinin örneği, anahtarın değiştirilecek tanımlayıcı olduğu ve tanımlayıcıyı değiştirmeye koyduğu metne değer verdiği.


14
2018-05-25 09:56



Teşekkürler dostum!! Kullanarak çalıştı string.Format("{0:lover} is in love with {1:loveee}", "Romeo", "Juliot"); - Pratik Deoghare
Sorun değil! Sizin için yararlı olduğunu bilmek güzel: D - Matías Fidemraizer


değişir


5
2018-05-25 19:45





Bunu yaparsanız teknik olmayan çevirmenlerin davranışlarını belgelediğinizden emin olun. Aksi halde iyi olmalısın.


3
2018-05-25 09:52





Teknik olmayan çevirmenler için bir belge sağlasanız bile, hala bunu kullanabilme şansı vardır (bilmeden), böyle bir davayı kendi başınıza ele alırsanız sorun olmaz. Dize birleştirmeyi tercih ederim.


0
2018-05-25 09:58





Bu bence önerilen bir yaklaşım. GNU GetText için yönergeler, örneğin bunu yapmayı önerir.

Erno'nun yorumu gibi, çeviriyi yapan kişi, {0} 'ın neyi temsil ettiğini bildiğinden emin olun.

Bu yaklaşımın bir yararı, değerlerin nereye eklendiğini ve biçimlendirme değerlerinin bir kısmını da kontrol edebilmenizdir. Kaçırdığınız şey değerlerin çoğullaşmasıdır, ama bu başka bir tartışmadır.


0
2018-05-25 09:59





Çeviri sağlayıcıları tarafından döndürülen kaynak dosyalarının bütünlüğünü doğrulamak için otomatik test kullanın. İdeal olarak, satıcılara mümkün olan en kısa sürede hataları yakalamak için çevirme sırasında bunu yapacak araçlar sağlayın.


0
2018-05-25 10:10





Genellikle bu tür dizeler için bir adlandırma şeması ile geldim, bu yüzden kod içinde öne çıkıyorlar.

Strings gibi .RELATIONSHIP_STATUS_MSG_FORMAT


0
2018-02-21 15:19





Resharper'ın adlandırma kuralını seviyorum: __0__is_in_relationship_with__1__ 

Koddan kullanıldığında hangi argümanların beklendiğini açıklar:

string msg = string.Format(Properties.Resources.__0__is_in_relationship_with__1__,
                           "Romeo", 
                           "Juliet");

0
2017-10-21 23:13