Praktik terbaik untuk membuat aplikasi multi bahasa di C # / WinForms? [Tutup]

94

Saya telah mencari cara membuat aplikasi yang cocok untuk banyak bahasa di C # karena saya perlu mengerjakan proyek kecil di mana ini masalahnya. Pada dasarnya saya telah menemukan dua cara untuk melakukan ini:

Setel properti Formulir yang Dapat Dilokalkan ke true, setel properti Bahasa, isi semua label dan semacamnya, dan Anda 'selesai'. Kelemahan utama yang saya lihat dalam hal ini adalah: bagaimana membuat hal-hal lain yang bukan merupakan bagian dari formulir yang siap untuk berbagai bahasa (misalnya jendela pop-up, file log atau jendela, dll).

Buat file sumber daya, misalnya 'Lang.en-us.resx' dan satu untuk setiap bahasa, misalnya 'Lang.nl-nl.resx' dan isi dengan Strings. IDE tampaknya menghasilkan kelas untuk saya secara otomatis, jadi dalam kode saya hanya dapat menggunakan Lang.SomeText. Kelemahan terbesar yang saya lihat dalam hal ini adalah: untuk setiap formulir saya perlu menyetel sendiri semua label dan keterangan lain dalam kode (dan tampaknya pengikatan data tidak berfungsi dengan sumber daya ini).

Saya yakin, bagaimanapun, bahwa ada metode lain untuk melakukan ini juga.

Jadi, apa praktik terbaiknya? Apa yang paling mudah untuk aplikasi kecil (beberapa formulir, koneksi database, dll) dan skala apa yang terbaik untuk aplikasi yang lebih besar?

Mihai Limbășan
sumber
3
Saya perhatikan, bahwa pertanyaan yang tidak konstruktif (atau jenis pertanyaan "tidak valid untuk SO" lainnya) adalah salah satu pertanyaan paling berharga :) Yang ini juga merupakan pertanyaan yang bagus (menurut saya suara membuktikannya) Berikut adalah demonstrasi yang bagus tentang caranya menggunakan add-in multi bahasa untuk dukungan multi bahasa youtube.com/watch?v=SNIyP1QQdVs
Prokurors
1
Terkadang sangat sulit untuk mengumpulkan semua potongan pengetahuan di internet, dan saya merasa pertanyaan ini sangat berharga sekarang. Tentunya ada kalanya menutup pertanyaan lembut kurang konstruktif daripada membiarkannya terbuka, dan menurut saya ini adalah salah satunya. :)

Jawaban:

20

Saya selalu menggunakan file sumber daya untuk aplikasi multi-bahasa.
Ada banyak artikel di web yang menjelaskan cara menggunakannya.

Saya telah menggunakan dua cara berbeda:

  • File sumber daya per formulir
  • File sumber daya global

File / formulir sumber daya, lebih mudah diimplementasikan, Anda hanya perlu memasukkan nilai-nilai dalam file sumber daya, tetapi saya merasa pendekatan ini lebih sulit dipertahankan, karena labelnya tersebar di seluruh aplikasi.

File sumber daya global memungkinkan Anda untuk memusatkan semua label (gambar, dll.) Dalam satu file (per bahasa), tetapi itu berarti mengatur label secara manual dalam pemuatan formulir. File ini juga dapat digunakan untuk pesan kesalahan dll.

Pertanyaan tentang rasa ...

Satu poin terakhir, saya menulis program dalam bahasa Inggris dan Prancis, saya menggunakan "en" dan "fr" dan bukan "en-US" dan "fr-FR". Jangan mempersulit, perbedaan bahasa Inggris (Amerika, Inggris, Australia dll) memiliki sedikit perbedaan yang cukup untuk digunakan hanya satu (hal yang sama berlaku untuk Prancis).

ThatBloke
sumber
2
Anda terkadang harus khawatir tentang dialek. Misalnya, karakter bahasa China sangat berbeda dalam bahasa China Tradisional (Taiwan) dibandingkan dengan bahasa China Sederhana (China daratan).
MarkJ
1
Dokumentasi @MarkJ MSDN menyebutkan bahwa Tionghoa Tradisional dan Tionghoa Sederhana bukanlah dialek (negara / wilayah) tetapi budaya netral. Msdn: "Budaya netral adalah budaya yang diasosiasikan dengan bahasa tetapi tidak dengan negara / wilayah. Budaya spesifik adalah budaya yang diasosiasikan dengan bahasa dan negara / wilayah. Misalnya," fr "adalah netral budaya dan "fr-FR" adalah budaya tertentu. Perhatikan bahwa "zh-CHS" (China Aksara Sederhana) dan "zh-CHT" (China Tradisional) adalah budaya netral. "
broadband
Saya baru-baru ini melakukan ini dengan bantuan link , 2 langkah yang tidak disebutkan di sana: 1. Klik semua file .resource dan setel properti "Build Action" ke "Content". 2. Klik semua file .resource dan setel properti "Salin ke Direktori Output" ke "Salin Selalu".
Sourav
1
@Kiquenet Untuk jawaban lengkap (dengan kode) termasuk dukungan lebar .NET, lihat: stackoverflow.com/a/35813707/2901207
CularBytes
9

Saya baru-baru ini menulis program dengan dukungan bahasa Jerman dan Inggris. Saya terkejut saat mengetahui bahwa jika saya hanya menamai sumber bahasa Inggris saya LanguageResources.resx dan sumber daya bahasa Jerman saya LanguageResources.de.resx, secara otomatis memilih bahasa yang benar. ResXFileCodeGenerator menangani semuanya untuk saya.

Perhatikan bahwa kolom di dua file adalah sama dan kolom bahasa Jerman yang belum dimasukkan akan muncul di aplikasi sebagai bahasa Inggris karena bahasa file yang paling tidak spesifik adalah file default. Saat mencari string, ia berubah dari yang paling spesifik (mis. De-DE.resx) ke paling tidak spesifik (mis. .Resx).

Untuk mendapatkan string Anda, gunakan panggilan ResourceManager.GetString atau ResourceManager.GetObject. Aplikasi ini akan memberi Anda ResourceManager secara gratis.

Rick Minerich
sumber
6

Untuk kepentingan orang lain yang mungkin menemukan ini (1+ tahun setelah posting terakhir), saya penulis produk pelokalan profesional yang membuat seluruh proses terjemahan menjadi sangat mudah. Ini adalah add-in Visual Studio yang akan mengekstrak semua string ".resx" dari sembarang solusi dan memuatnya ke dalam satu file yang dapat diterjemahkan menggunakan aplikasi mandiri gratis (penerjemah dapat mendownload ini dari situs saya). Add-in yang sama kemudian akan mengimpor string yang diterjemahkan kembali ke solusi Anda. Sangat mudah digunakan dengan banyak perlindungan bawaan, banyak fitur tambahan, dan bantuan online (Anda tidak akan membutuhkannya terlalu banyak). Lihat http://www.hexadigm.com

Larry
sumber
1
Ini harus ditambahkan sebagai fungsi asli ke visualstudio! Perangkat lunak hebat!
Caverna
Terima kasih banyak (dihargai). Saya akan setuju dengan Anda sebelum memulai produk (sekitar 10 tahun yang lalu) tetapi jika MSFT menerapkannya hari ini, hal itu akan membuat saya gulung tikar :)
Larry