Anda sedang mengembangkan aplikasi ASP.Net MVC, bukan? Jawaban lain tampaknya khusus untuk aplikasi desktop. Biarkan saya menangkap hal-hal umum:
Deteksi lokal
Sangat penting bahwa aplikasi Anda mendeteksi lokal pengguna dengan benar. Dalam aplikasi desktop, CultureInfo.CurrentCulture memegang lokal format pemformatan (yang harus digunakan untuk memformat angka, tanggal, mata uang, dll.) Sedangkan CultureInfo.CurrentUICulture memegang lokal Antarmuka Pengguna pilihan (yang harus digunakan untuk menampilkan pesan yang dilokalkan) . Untuk aplikasi web, Anda harus mengatur kedua budaya ke otomatis (untuk secara otomatis mendeteksi lokal dari header AcceptLanguage) kecuali jika Anda ingin menerapkan beberapa alur kerja deteksi lokal yang mewah (yaitu ingin mendukung perubahan bahasa sesuai permintaan).
Eksternalisasikan string
Semua string harus berasal dari sumber daya, yaitu file Resx. Di Aplikasi Winforms, hal itu mudah dicapai dengan menyetel properti form yang dapat dilokalkan ke true. Anda juga perlu secara manual (sayangnya) mengeksternalisasi string yang berasal dari model Anda. Ini juga relatif sederhana. Di Asp.Net Anda perlu mengeksternalkan semuanya secara manual ...
Tata letak
Anda pasti perlu mengizinkan untuk ekspansi string. Di dunia Winforms dapat dicapai melalui TableLayoutPanel yang harus digunakan untuk memastikan bahwa tata letak akan menyesuaikan secara otomatis untuk mengakomodasi teks yang lebih panjang. Di dunia web, Anda sedikit kurang beruntung. Anda mungkin perlu menerapkan Mekanisme Pelokalan CSS - cara untuk memodifikasi (menimpa) definisi CSS. Ini akan memungkinkan orang Lokalisasi untuk mengubah masalah gaya pada permintaan. Pastikan bahwa setiap elemen HTML di halaman yang diberikan memiliki id unik - itu akan memungkinkan untuk menargetkannya secara tepat.
Masalah spesifik budaya
Hindari menggunakan grafik, warna dan suara yang mungkin spesifik untuk budaya barat. Jika Anda benar-benar membutuhkannya, harap sediakan sarana Pelokalan. Hindari grafik yang sensitif terhadap arah (karena ini akan menjadi masalah ketika Anda mencoba melokalisasi untuk mengatakan bahasa Arab atau Ibrani). Juga, jangan berasumsi bahwa seluruh dunia menggunakan angka yang sama (yaitu tidak berlaku untuk bahasa Arab).
ToString () dan Parse ()
Pastikan untuk selalu melewati CultureInfo saat memanggil ToString () kecuali itu tidak didukung. Dengan begitu Anda mengomentari niat Anda. Misalnya: jika Anda menggunakan beberapa nomor secara internal dan karena alasan tertentu perlu mengubahnya menjadi penggunaan string:
int i = 42;
var s = i.ToString(CultureInfo.InvariantCulture);
Untuk angka yang akan ditampilkan untuk digunakan pengguna:
var s = i.ToString(CultureInfo.CurrentCulture); // formatting culture used
Hal yang sama berlaku untuk Parse (), TryParse () dan bahkan ParseExact () - beberapa bug jahat dapat diperkenalkan tanpa menggunakan CultureInfo dengan benar. Itu karena beberapa jiwa miskin di Microsoft, penuh dengan niat baik memutuskan bahwa itu adalah ide yang baik untuk memperlakukan CultureInfo.CurrentCulture sebagai default (itu akan digunakan jika Anda tidak melewati apa pun) - lagi pula ketika seseorang menggunakan ToString ( ) dia ingin menampilkannya kepada pengguna, bukan? Ternyata itu tidak selalu terjadi - misalnya mencoba untuk menyimpan nomor versi aplikasi Anda dalam database dan kemudian mengubahnya menjadi instance dari kelas Versi. Semoga berhasil.
Tanggal dan zona waktu
Pastikan untuk selalu menyimpan dan membuatkan DateTime dalam UTC (gunakan DateTime. Bukan sebaliknya DateTime. Sekarang). Konversikan ke waktu lokal dalam format lokal setelah ditampilkan:
DateTime now = DateTime.UtcNow;
var s = now.ToLocalTime().ToString(CultureInfo.CurrentCulture);
Jika Anda perlu mengirim email dengan referensi waktu di badan, pastikan untuk memasukkan informasi zona waktu - termasuk offset UTC dan daftar kota:
DateTime someDate; // i.e. from database
var formattedDate = String.Format("{0} {1}",
someDate.ToLocaleTime().ToString(CultureInfo.CurrentCulture),
TimeZoneInfo.Local.DisplayName);
Pesan majemuk
Anda sudah diperingatkan untuk tidak menggabungkan string. Sebagai gantinya Anda mungkin akan menggunakan String.Format () seperti yang ditunjukkan di atas. Namun, saya harus menyatakan bahwa Anda harus meminimalkan penggunaan pesan majemuk. Itu hanya karena aturan tata bahasa target sangat umum berbeda, sehingga penerjemah mungkin perlu tidak hanya memesan ulang kalimat (ini akan diselesaikan dengan menggunakan placeholder dan String.Format ()), tetapi menerjemahkan seluruh kalimat dengan cara yang berbeda berdasarkan pada apa yang akan diganti. Biarkan saya memberi Anda beberapa contoh:
// Multiple plural forms
English: 4 viruses found.
Polish: Znaleziono 4 wirusy. **OR** Znaleziono 5 wirusów.
// Conjugation
English: Program encountered incorrect character | Application encountered incorrect character.
Polish: Program napotkał nieznaną literę | Aplikacja napotkała nieznaną literę.
Masalah penggabungan lainnya
Rangkaian tidak terbatas pada string. Hindari meletakkan kontrol bersama, katakan:
Ingatkan saya lagi dalam [kotak teks dengan angka] hari.
Ini harus dirancang ulang untuk sesuatu seperti: Ingatkan saya lagi dalam beberapa hari ini: [kotak teks].
Pengodean karakter dan font
Selalu simpan, transfer, teks apa pun dalam Unicode (yaitu dalam UTF-8). Jangan font kode keras - Lokalisasi mungkin perlu memodifikasinya dan itu akan mematikan mekanisme default font fall-back (dalam kasus WinForms). Ingatlah untuk mengizinkan karakter "aneh" di sebagian besar bidang (yaitu nama pengguna).
Uji
Anda mungkin perlu menerapkan apa yang disebut terjemahan semu, yaitu menciptakan sumber daya untuk mengatakan budaya Jerman dan menyalin string bahasa Inggris Anda menambahkan awalan dan akhiran. Anda juga dapat membungkus penampung agar mudah mendeteksi string majemuk. Tujuan dari terjemahan semu adalah untuk mendeteksi masalah Pelokalan seperti string yang dikodekan keras, masalah tata letak, dan penggunaan berlebihan pesan majemuk.