Secara umum, pada banyak platform, saya menulis sumber daya string saya ke file .resx atau .xml, dan kemudian saya membuatnya menggunakan beberapa pendekatan yang bergantung pada platform.
Yaitu, di iOS, saya mendapatkannya melalui NSBundle.MainBundle
, dan dengan menggunakan Context.Resources
di Android.
Apa kelebihan dari pendekatan ini, dan mengapa tidak dapat diakses langsung dalam kode, jadi, misalnya:
Dalam proyek lintas-platform, platform apa pun dapat mengaksesnya secara langsung, tanpa integrasi.
Tidak ada kekhawatiran selama membangun tentang apakah sumber daya dibangun dengan baik atau tidak.
- Coder dapat menggunakan fungsi seperti penanganan multi bahasa
Singkat cerita: apa alasan mengapa sumber daya string terstruktur seperti itu?
[Sunting]
Katakanlah file saya adalah bagian dari proyek "inti" yang dibagikan di antara proyek lain. (Pikirkan tentang struktur file proyek lintas platform PCL.)
Dan misalkan file saya benar-benar mirip dengan file .resx / .xml, terlihat seperti ini (saya bukan pro dalam xml, maaf!): Parameters Paramètres
Jadi, ini pada dasarnya adalah xml khusus, di mana Anda menunjuk ke kunci / bahasa untuk mendapatkan string yang tepat.
File akan menjadi bagian dari aplikasi sama seperti Anda menambahkan file yang dapat diakses di dalam aplikasi, dan sistem untuk mengakses sumber daya string, yang dikodekan menggunakan PCL. Apakah ini menambah overhead ke aplikasi?
sumber
Jawaban:
Lokalisasi dan internasionalisasi,
Menjaga string eksternal memungkinkan mereka untuk mengubah (baca: diterjemahkan) tanpa perlu mengkompilasi ulang (hanya relink paling banyak, dan hanya memasukkan folder baru di terbaik).
sumber
Jika Anda memiliki file yang hanya berisi sumber daya string maka Anda dapat memberikan file sumber daya ke agensi terjemahan atau sesuatu seperti itu dan mendapatkan terjemahan. Saya kira Anda dapat membayangkan betapa sulitnya itu jika Anda harus memberikan banyak file kode kepada orang awam untuk melakukan beberapa terjemahan (selain itu mungkin tidak ingin memberikan kode Anda kepada siapa pun).
sumber
Selain internasionalisasi / pelokalan, memisahkan string teks seperti ini juga memungkinkan korektor proofreader untuk mengirimkan koreksi ke pengejaan / tata bahasa / tanda baca yang diisolasi
messages.${LOCALE}
, tanpa harus menyentuh file kode sumber yang benar. Anda mungkin mengalami pemadaman perubahan kode tetapi menerima koreksi teks tersebut. Jika Anda menerima perubahan bersamaan untuk kedua kode dan pesan, memisahkannya membuatnya lebih mudah untuk menggabungkan tambalan, asalkan perubahan kode tidak mendefinisikan kembali pesan yang ada saat proofreader memeriksamessages.en_US
.Juga, tergantung pada bagaimana penerapannya, bahkan mungkin tidak perlu untuk menautkan kembali aplikasi. Kode dapat dengan mudah mengambil baris 138 dari
messages.${LOCALE}
untuk pesan tertentu, dengan nomor baris ditentukan pada saat run time.sumber
Ini hanya cara bahasa / platform Anda memutuskan untuk menerapkan pelokalan string. Semua pendekatan untuk pelokalan memerlukan beberapa jenis file sumber daya eksternal untuk mendapatkan terjemahan. Titik sakit utama adalah bagaimana Anda mempertahankan sumber daya ini.
Sepertinya Anda perlu mengelola file sumber daya ini secara manual , yang dapat menjadi beban. Ini juga mempersulit pembagian string yang berulang. Dan harus melakukan ini ketika Anda saat ini hanya mengirim satu bahasa, bahkan lebih membebani.
Alternatif umum adalah pendekatan GNU Gettext yang hanya menandai string yang dapat diterjemahkan dalam kode sumber dan secara otomatis mengekstraksi string ini ke file PO standar yang berfungsi dengan baik lintas platform dan lintas bahasa. Dari perspektif pengembang, ini mengalahkan pemeliharaan manual file sumber daya XML setiap hari.
sumber