2011-02-03 17 views
36

NSLocalizedString ile yer tutucuları olan bir dizeyi nasıl yerelleştirebilirim? ÖrneğinBiçimlendirme yer tutucularıyla bir dizeyi nasıl yerelleştirebilirim?

: Bunu lokalize nasıl

[NSString stringWithFormat:@"You can afford %i at %@%li.",[kCash integerValue]/self.price, kYen, self.price] 

? Dizeleri birden çok yerelleştirilmiş dizeye ayırmak mı? O zaman nasıl değişen cümle yapısı ve dilbilgisi ile ilgilenirim?

cevap

19

Yerelleştirilmiş dizeler yer tutucuları içerir. Bu, aksi belirtilmedikçe, bunu yapabilmeniz için gereken tek uygun yol olup, değişen kelime siparişlerini hesaba katamazsınız. Bu doğrultuda

şey: stringWithFormat Normal olarak kullanabilirsiniz böylece

[NSString stringWithFormat:NSLocalizedString(@"Foo %i", @"Foo %i"), 123] 
+0

Will bu iş yine de? NSLocalizedString, yer tutucuları bilecek ve keyfi metin olarak kabul etmeyecek mi? – Moshe

+3

Bu, bir argüman için çalışacaktır, ancak iki argümanınız varsa, o zaman birçok dilde, yer tutucuların gösterdiği sırayı değiştirmek isteyeceksiniz. –

+18

-1 Bu kod, siparişe duyarlı metinler için çalışmaz. Bunun yerine konumsal argümanları kullanmalıdır (ör.% 1 $ @). Ayrıca, NSLocalizedString'in ikinci parametresinin, çevrilmekte olan metnin içeriğini daha iyi anlamak için çevirmenlere bir yorum olması amaçlanmıştır. İlk metni tekrarlamak, özellikle biçimlendirici dizgilerle anlamsızdır. – rbrown

5

Buna başka bir yaklaşım yerelleştirilmiş dosyada şunlara sahip olabilir edilmektedir:

key = "String with %@ placeholder"; 

[NSString stringWithFormat:@"You can afford %1$i at %[email protected]%3$li.", 
           [kCash integerValue]/self.price, kYen, self.price] 
burada

diğer bilgiler - senin örnekte, numaralandırılmış tutucuları kullanarak muhtemelen iyi bir fikir olduğunu

ve uygulamanızda:

Bunu herhangi bir sayıda argüman ile yapabilirsiniz, sadece yerelleştirme dosyalarınız arasında tutarlı olması gerekir.

1

Bu şekilde daha verimli görünüyor:

[NSString stringWithFormat:@"%@ %@", NSLocalizedString(@"Key", @"Comment for localised string"), value]; 
İlgili konular