Saya (seperti yang lainnya) gunakan NSLocalizedString
untuk melokalkan aplikasi saya.
Sayangnya, ada beberapa "kelemahan" (belum tentu kesalahan NSLocalizedString itu sendiri), termasuk
- Tidak ada pelengkapan otomatis untuk string di Xcode. Ini membuat pekerjaan tidak hanya rawan kesalahan tetapi juga melelahkan.
- Anda mungkin akhirnya mendefinisikan ulang string hanya karena Anda tidak tahu string yang setara sudah ada (yaitu "Silakan masukkan kata sandi" vs. "Masukkan kata sandi terlebih dahulu")
- Mirip dengan masalah pelengkapan otomatis, Anda harus "mengingat" / menyalin string komentar, atau
genstring
akan berakhir dengan beberapa komentar untuk satu string - Jika Anda ingin menggunakan
genstring
setelah Anda telah melokalisasi beberapa string, Anda harus berhati-hati untuk tidak kehilangan pelokalan lama Anda. - String yang sama tersebar di seluruh proyek Anda. Misalnya, Anda menggunakan di
NSLocalizedString(@"Abort", @"Cancel action")
mana-mana, dan kemudian Peninjauan Kode meminta Anda untuk mengganti nama stringNSLocalizedString(@"Cancel", @"Cancel action")
agar kode lebih konsisten.
Apa yang saya lakukan (dan setelah beberapa pencarian di SO saya pikir banyak orang melakukan ini) adalah memiliki strings.h
file terpisah di mana saya #define
semua kode-localize. Sebagai contoh
// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);
Ini pada dasarnya menyediakan penyelesaian kode, satu tempat untuk mengubah nama variabel (jadi tidak perlu lagi membuat genstring), dan kata kunci unik untuk auto-refactor. Namun, ini datang dengan biaya berakhir dengan sejumlah #define
pernyataan yang tidak terstruktur secara inheren (yaitu seperti LocString.Common.Cancel atau sesuatu seperti itu).
Jadi, sementara ini bekerja agak baik, saya bertanya-tanya bagaimana kalian melakukannya dalam proyek Anda. Apakah ada pendekatan lain untuk menyederhanakan penggunaan NSLocalizedString? Apakah mungkin ada kerangka kerja yang merangkumnya?