NSLocalizedString
Uygulamamı yerelleştirmek için (diğerleri gibi) kullanıyorum .
Ne yazık ki, birkaç "dezavantaj" vardır (NSLocalizedString'in kendisinin hatası olmak zorunda değildir),
- Xcode'daki dizeler için otomatik tamamlama yok. Bu, çalışmayı sadece hataya yatkın değil aynı zamanda yorucu hale getirir.
- Bir dizeyi daha önce var olan eşdeğer bir dizeyi bilmediğiniz için yeniden tanımlayabilirsiniz (örneğin, "Lütfen şifreyi girin" ve "Önce şifreyi girin")
- Otomatik tamamlama sorununa benzer şekilde, yorum dizelerini "hatırlamanız" / kopyalamanız gerekir, aksi
genstring
takdirde bir dize için birden fazla yorum elde edersiniz genstring
Bazı dizeleri yerelleştirdikten sonra kullanmak istiyorsanız, eski yerelleştirmelerinizi kaybetmemeye dikkat etmelisiniz.- Tüm projeniz boyunca aynı dizeler dağılmıştır. Örneğin,
NSLocalizedString(@"Abort", @"Cancel action")
her yerde kullandınız ve Kod İncelemesiNSLocalizedString(@"Cancel", @"Cancel action")
, kodu daha tutarlı hale getirmek için dizeyi yeniden adlandırmanızı ister .
Ne yaptığımı (ve bazı aramalar sonra ben birçok kişi bunu düşündüm) strings.h
burada #define
tüm yerelleştirme kodu ayrı bir dosyaya sahip olmaktır . Örneğin
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
Bu aslında kod tamamlama, değişken adlarını değiştirmek için tek bir yer (artık genstring'e gerek yok) ve otomatik refactor için benzersiz bir anahtar kelime sağlar. Bununla birlikte, bu, #define
doğası gereği yapılandırılmamış bir dizi ifadeyle sonuçlanmak pahasına gelir (örneğin, LocString.Common.Cancel veya bunun gibi bir şey gibi).
Yani, bu biraz iyi çalışıyor olsa da, bunu projelerinizde nasıl yaptığınızı merak ediyordum. NSLocalizedString kullanımını basitleştirmek için başka yaklaşımlar var mı? Onu çevreleyen bir çerçeve bile var mı?