Sepertinya saya tidak bisa membuat lokalisasi berfungsi.
Saya memiliki perpustakaan kelas. Sekarang saya ingin membuat file resx di sana, dan mengembalikan beberapa nilai berdasarkan budaya utas.
Bagaimana saya bisa melakukan itu?
Sepertinya saya tidak bisa membuat lokalisasi berfungsi.
Saya memiliki perpustakaan kelas. Sekarang saya ingin membuat file resx di sana, dan mengembalikan beberapa nilai berdasarkan budaya utas.
Bagaimana saya bisa melakukan itu?
Jawaban:
Klik kanan Properties di proyek, pilih Add -> New Item ... di menu konteks, kemudian dalam daftar Visual C # Item memilih "File sumber daya" dan beri nama
strings.resx
.System.Threading
danSystem.Globalization
Jalankan kode ini:
Itu harus mencetak "Halo".
Sekarang, tambahkan file sumber daya baru, bernama "strings.fr.resx" (perhatikan bagian "fr"; ini akan berisi sumber daya dalam bahasa Prancis). Tambahkan sumber daya string dengan nama yang sama seperti di strings.resx, tetapi dengan nilai dalam bahasa Prancis (Name = "Hello", Value = "Salut"). Sekarang, jika Anda menjalankan kode berikut, itu akan mencetak Salut:
Yang terjadi adalah bahwa sistem akan mencari sumber daya untuk "fr-FR". Ia tidak akan menemukan satu (karena kami telah menentukan "fr" di file Anda "). Kemudian akan kembali ke memeriksa" fr ", yang ditemukan (dan digunakan).
Kode berikut, akan mencetak "Halo":
Itu karena ia tidak menemukan sumber daya "en-AS", dan juga tidak ada sumber daya "en", sehingga akan kembali ke default, yang merupakan yang kami tambahkan dari awal.
Anda dapat membuat file dengan sumber daya yang lebih spesifik jika diperlukan (misalnya strings.fr-FR.resx dan strings.fr-CA.resx untuk bahasa Prancis di Perancis dan Kanada masing-masing). Di setiap file seperti itu Anda perlu menambahkan sumber daya untuk string yang berbeda dari sumber daya yang akan jatuh kembali. Jadi, jika sebuah teks sama di Perancis dan Kanada, Anda bisa meletakkannya di strings.fr.resx, sedangkan string yang berbeda di Kanada Perancis bisa masuk ke strings.fr-CA.resx.
sumber
Access Modifier
harus ditetapkanPublic
untuk kelas sumber daya yang akan dihasilkan. Kelas tidak perlu dalam namespace Properties, itu adalah tempat Anda meletakkan file .resx.Sebenarnya cukup sederhana. Buat file sumber daya baru, misalnya
Strings.resx
. SetelAccess Modifier
kePublic
. Gunakan templat file yang sesuai, sehingga Visual Studio akan secara otomatis menghasilkan kelas accessor (namanya akanStrings
, dalam hal ini). Ini adalah bahasa default Anda.Sekarang, ketika Anda ingin menambahkan, katakanlah, pelokalan Jerman, tambahkan file resx lokal. Ini biasanya
Strings.de.resx
dalam kasus ini. Jika Anda ingin menambahkan pelokalan tambahan untuk, katakanlah, Austria, Anda juga akan membuatStrings.de-AT.resx
.Sekarang, buat string - misalkan string dengan nama
HelloWorld
. Di AndaStrings.resx
, tambahkan string ini dengan nilai "Halo, dunia!". DiStrings.de.resx
, tambahkan "Hallo, Welt!". Dan diStrings.de-AT.resx
, tambahkan "Servus, Welt!". Itu sejauh ini.Sekarang Anda memiliki
Strings
kelas yang dihasilkan ini , dan memiliki properti dengan pengambilHelloWorld
. Mendapatkan properti ini akan memuat "Servus, Welt!" ketika lokal Anda adalah de-AT, "Hallo, Welt! ketika lokal Anda adalah de lokal lain (termasuk de-DE dan de-CH), dan" Halo, Dunia! "ketika lokal Anda adalah hal lain. Jika sebuah string adalah hilang dalam versi yang dilokalkan, manajer sumber daya akan secara otomatis berjalan menaiki rantai, dari yang paling khusus ke sumber daya yang tidak tetap.Anda dapat menggunakan
ResourceManager
kelas untuk kontrol lebih lanjut tentang bagaimana sebenarnya Anda memuat sesuatu. Kelas yang dihasilkan jugaStrings
menggunakannya.sumber
Selain jawaban hebat @Fredrik Mörk pada string, untuk menambahkan lokalisasi ke formulir, lakukan hal berikut:
"Localizable"
untuktrue
Language
properti formulir ke bahasa yang Anda inginkan (dari drop-down yang bagus beserta semuanya)Sunting: Artikel MSDN ini tentang Pelokalan Formulir Windows bukan yang asli yang saya tautkan ... tetapi mungkin memberi lebih banyak cahaya jika diperlukan. (yang lama telah diambil)
sumber
Jawaban yang bagus dari F.Mörk. Tetapi jika Anda ingin memperbarui terjemahan, atau menambahkan bahasa baru setelah aplikasi dirilis, Anda mandek, karena Anda selalu harus mengkompilasi ulang untuk menghasilkan resources.dll.
Berikut ini adalah solusi untuk mengkompilasi dll sumber daya secara manual. Ini menggunakan alat resgen.exe dan al.exe (diinstal dengan SDK).
Katakanlah Anda memiliki file sumber daya Strings.fr.resx, Anda dapat mengkompilasi dll sumber daya dengan kumpulan berikut:
Pastikan untuk menyimpan namespace asli dalam nama file (di sini "WpfRibbonApplication1")
sumber
Perbaikan dan elaborasi jawaban @Fredrik Mörk .
strings.resx
file Resource ke proyek Anda (atau nama file yang berbeda)Access Modifier
kePublic
(distrings.resx
tab file yang dibuka )Hello
, nilaiHello
)Visual Studio auto-menghasilkan masing-masing
strings
kelas, yang sebenarnya ditempatkan distrings.Designer.cs
. Kelas berada dalam namespace yang sama dengan yang Anda harapkan baru dibuat.cs
untuk menempatkan file yang .Kode ini selalu dicetak
Hello
, karena ini adalah sumber daya default dan tidak ada sumber daya khusus bahasa yang tersedia:Sekarang tambahkan sumber daya khusus bahasa baru:
strings.fr.resx
(untuk Prancis)Hello
, nilaiSalut
)Kode berikut dicetak
Salut
:Sumber daya apa yang digunakan tergantung pada
Thread.CurrentThread.CurrentUICulture
. Ini diatur tergantung pada pengaturan bahasa Windows UI, atau dapat diatur secara manual seperti dalam contoh ini. Pelajari lebih lanjut tentang ini di sini .Anda dapat menambahkan sumber daya khusus negara seperti
strings.fr-FR.resx
ataustrings.fr-CA.resx
.String yang akan digunakan ditentukan dalam urutan prioritas ini:
strings.fr-CA.resx
strings.fr.resx
strings.resx
Perhatikan bahwa sumber daya khusus bahasa menghasilkan perangkat satelit .
Pelajari juga
CurrentCulture
perbedaannya dariCurrentUICulture
sini .sumber
Dalam kasus saya
di AssemblyInfo.cs mencegah hal-hal berfungsi seperti biasa.
sumber
Selain @Eric Bole-Feysot :
Berkat majelis satelit, pelokalan dapat dibuat berdasarkan file .dll / .exe . Cara ini:
Ada sedikit alat yang dikenal yang disebut LSACreator (gratis untuk penggunaan non-komersial atau opsi beli) yang memungkinkan Anda membuat lokalisasi berdasarkan file .dll / .exe. Bahkan, secara internal (dalam direktori proyek bahasa) ia membuat / mengelola versi file resx yang dilokalkan dan mengkompilasi sebuah perakitan dengan cara yang sama seperti yang dijelaskan oleh @Eric Bole-Feysot .
sumber
ResourceManager dan .resx agak berantakan.
Anda dapat menggunakan Lexical.Localization ¹ yang memungkinkan menanamkan nilai default dan nilai-nilai spesifik budaya ke dalam kode, dan diperluas dalam file lokalisasi eksternal untuk budaya lebih lanjut (seperti .json atau .resx).
¹ (Saya pengelola perpustakaan itu)
sumber
Secara umum Anda menempatkan terjemahan Anda dalam file sumber daya, mis.
Setiap budaya spesifik memiliki nama yang berbeda, misalnya resources.nl.resx, resources.fr.resx, resources.de.resx,…
Sekarang bagian terpenting dari solusi adalah menjaga terjemahan Anda. Di Visual Studio instal alat Microsoft MAT: Multilingual App Toolkit (MAT). Bekerja dengan winforms, wpf, asp.net (core), uwp, ...
Secara umum, misalnya untuk solusi WPF, dalam proyek WPF
[assembly: System.Resources.NeutralResourcesLanguage("en")]
Yang akan Anda lihat adalah folder baru akan dibuat, disebut "Sumber Multilingual" yang berisi
....nl.xlf
file.Satu-satunya hal yang sekarang harus Anda lakukan adalah:
(File .xlf harus dibuka dengan "Editor Multilingual", jika ini tidak terjadi, klik kanan mouse pada file .xlf, pilih "Buka Dengan ..." dan pilih "Editor Multilingual".
Selamat bersenang-senang! sekarang Anda juga dapat melihat apa yang belum diterjemahkan, ekspor terjemahan dalam xlf ke perusahaan terjemahan eksternal, impor lagi, daur ulang terjemahan dari proyek lain dll ...
Info lebih lanjut:
sumber