Bagikan melalui


Praktik terbaik untuk mengembangkan aplikasi yang siap di dunia

Bagian ini menjelaskan praktik terbaik yang harus diikuti saat mengembangkan aplikasi yang siap di dunia.

Praktik terbaik globalisasi

  1. Buat aplikasi Anda Unicode secara internal.

  2. Gunakan kelas sadar budaya yang disediakan oleh System.Globalization namespace layanan untuk memanipulasi dan memformat data.

    • Untuk pengurutan, gunakan SortKey kelas dan CompareInfo kelas .
    • Untuk perbandingan string, gunakan CompareInfo kelas .
    • Untuk pemformatan tanggal dan waktu, gunakan DateTimeFormatInfo kelas .
    • Untuk pemformatan numerik, gunakan NumberFormatInfo kelas .
    • Untuk kalender Gregorian dan non-Gregorian, gunakan Calendar kelas atau salah satu implementasi kalender tertentu.
  3. Gunakan pengaturan properti budaya yang disediakan oleh System.Globalization.CultureInfo kelas dalam situasi yang sesuai. CultureInfo.CurrentCulture Gunakan properti untuk memformat tugas, seperti tanggal dan waktu atau pemformatan numerik. CultureInfo.CurrentUICulture Gunakan properti untuk mengambil sumber daya. Perhatikan bahwa CurrentCulture properti dan CurrentUICulture dapat diatur per utas.

  4. Aktifkan aplikasi Anda untuk membaca dan menulis data ke dan dari berbagai pengodean dengan menggunakan kelas pengodean di System.Text namespace. Jangan asumsikan data ASCII. Asumsikan bahwa karakter internasional akan disediakan di mana saja pengguna dapat memasukkan teks. Misalnya, aplikasi harus menerima karakter internasional dalam nama server, direktori, nama file, nama pengguna, dan URL.

  5. Saat menggunakan UTF8Encoding kelas , karena alasan keamanan, gunakan fitur deteksi kesalahan yang ditawarkan oleh kelas ini. Untuk mengaktifkan fitur deteksi kesalahan, buat instans kelas menggunakan konstruktor yang mengambil throwOnInvalidBytes parameter dan atur nilai parameter ini ke true.

  6. Jika memungkinkan, tangani string sebagai seluruh string alih-alih sebagai serangkaian karakter individual. Ini sangat penting saat mengurutkan atau mencari substring. Ini akan mencegah masalah yang terkait dengan penguraian karakter gabungan. Anda juga dapat bekerja dengan unit teks daripada karakter tunggal dengan menggunakan System.Globalization.StringInfo kelas .

  7. Tampilkan teks menggunakan kelas yang disediakan oleh System.Drawing namespace.

  8. Untuk konsistensi di seluruh sistem operasi, jangan izinkan pengaturan pengguna untuk mengambil CultureInfoalih . CultureInfo Gunakan konstruktor yang menerima useUserOverride parameter dan atur ke false.

  9. Uji fungsionalitas aplikasi Anda pada versi sistem operasi internasional, menggunakan data internasional.

  10. Jika keputusan keamanan didasarkan pada hasil perbandingan string atau operasi perubahan kasus, gunakan operasi string yang tidak peka terhadap budaya. Praktik ini memastikan bahwa hasilnya tidak dipengaruhi oleh nilai CultureInfo.CurrentCulture. Lihat bagian "Perbandingan String yang Menggunakan Budaya Saat Ini" dari Praktik Terbaik untuk Menggunakan String untuk contoh yang menunjukkan bagaimana perbandingan string yang sensitif terhadap budaya dapat menghasilkan hasil yang tidak konsisten.

  11. Untuk elemen apa pun yang digunakan untuk pertukaran (misalnya, bidang dalam dokumen JSON dalam panggilan API) atau penyimpanan, gunakan CultureInfo; selain itu, Anda harus secara eksplisit menentukan format pulang pergi (seperti penentu "o""O"format tanggal-waktu). Meskipun string format untuk budaya invarian stabil dan tidak mungkin berubah, menentukan string format eksplisit membantu mengklarifikasi niat kode Anda.

    • Untuk elemen tanggal/waktu, pertimbangkan saran dan pengamatan penulis Noda Time Jon Skeet, yang berbagi wawasan berharga. Untuk informasi selengkapnya, lihat Jon Skeet: Menyimpan UTC bukanlah peluru perak.
  12. Data globalisasi tidak stabil, dan Anda harus menulis aplikasi Anda dan pengujiannya dengan ingat ini. Ini diperbarui beberapa kali setahun melalui saluran OS host di semua platform yang didukung. Data ini biasanya tidak didistribusikan dengan runtime.

Praktik terbaik pelokalan

  1. Pindahkan semua sumber daya yang dapat dilokalkan untuk memisahkan DLL khusus sumber daya. Sumber daya yang dapat dilokalisasi mencakup elemen antarmuka pengguna, seperti string, pesan kesalahan, kotak dialog, menu, dan sumber daya objek yang disematkan.

  2. Jangan untai (karakter) hardcode atau sumber daya antarmuka pengguna.

  3. Jangan menempatkan sumber daya yang tidak dapat dilokalkan ke dalam DLL khusus sumber daya. Ini membingungkan penerjemah.

  4. Jangan gunakan string komposit yang dibangun pada waktu proses dari frasa yang digabungkan. String komposit sulit dilokalkan karena seringkali mengasumsikan urutan tata bahasa Inggris yang tidak berlaku untuk semua bahasa.

  5. Hindari konstruksi ambigu seperti "Folder Kosong" di mana string dapat diterjemahkan secara berbeda tergantung pada peran tata bahasa komponen string. Misalnya, "kosong" dapat berupa kata kerja atau kata sifat, yang dapat menyebabkan terjemahan yang berbeda dalam bahasa seperti Italia atau Prancis.

  6. Hindari menggunakan gambar dan ikon yang berisi teks dalam aplikasi Anda. Mereka mahal untuk dilokalkan.

  7. Izinkan banyak ruang untuk panjang string untuk diperluas di antarmuka pengguna. Dalam beberapa bahasa, frasa dapat memerlukan ruang 50-75 persen lebih banyak daripada yang mereka butuhkan dalam bahasa lain.

  8. System.Resources.ResourceManager Gunakan kelas untuk mengambil sumber daya berdasarkan budaya.

  9. Gunakan Visual Studio untuk membuat kotak dialog Formulir Windows sehingga dapat dilokalkan menggunakan Formulir Windows Resource Editor (Winres.exe). Jangan kode Formulir Windows kotak dialog dengan tangan.

  10. Mengatur pelokalan profesional (terjemahan).

  11. Untuk deskripsi lengkap tentang membuat dan melokalisasi sumber daya, lihat Sumber Daya di aplikasi .NET.

Praktik terbaik globalisasi untuk ASP.NET dan aplikasi server lainnya

Tip

Praktik terbaik berikut adalah untuk aplikasi ASP.NET Framework. Untuk aplikasi ASP.NET Core, lihat Globalisasi dan pelokalan di ASP.NET Core.

  1. Secara eksplisit mengatur CurrentUICulture properti dan CurrentCulture di aplikasi Anda. Jangan mengandalkan default.

  2. Perhatikan bahwa aplikasi ASP.NET adalah aplikasi terkelola dan oleh karena itu dapat menggunakan kelas yang sama dengan aplikasi terkelola lainnya untuk mengambil, menampilkan, dan memanipulasi informasi berdasarkan budaya.

  3. Ketahuilah bahwa Anda dapat menentukan tiga jenis pengodean berikut dalam ASP.NET:

    • requestEncoding menentukan pengodean yang diterima dari browser klien.
    • responseEncoding menentukan pengodean untuk dikirim ke browser klien. Dalam kebanyakan situasi, pengodean ini harus sama dengan yang ditentukan untuk requestEncoding.
    • fileEncoding menentukan pengodean default untuk penguraian file .aspx, .asmx, dan .asax .
  4. Tentukan nilai untuk requestEncodingatribut , responseEncoding, fileEncoding, culture, dan uiCulture di tiga tempat berikut dalam aplikasi ASP.NET:

    • Di bagian globalisasi file Web.config . File ini berada di luar aplikasi ASP.NET. Untuk informasi selengkapnya, lihat <elemen globalisasi>.
    • Dalam direktif halaman. Perhatikan bahwa, ketika aplikasi berada di halaman, file telah dibaca. Oleh karena itu, terlambat untuk menentukan fileEncoding dan requestEncoding. Hanya uiCulture, culture, dan responseEncoding dapat ditentukan dalam arahan halaman.
    • Secara terprogram dalam kode aplikasi. Pengaturan ini dapat bervariasi per permintaan. Seperti halnya arahan halaman, pada saat kode aplikasi tercapai, sudah terlambat untuk menentukan fileEncoding dan requestEncoding. Hanya uiCulture, culture, dan responseEncoding dapat ditentukan dalam kode aplikasi.
  5. Perhatikan bahwa nilai uiCulture dapat diatur ke bahasa penerima browser.

  6. Untuk aplikasi yang didistribusikan, izinkan pembaruan nol waktu henti (misalnya, Azure Container Apps), atau sejenisnya, Anda harus merencanakan situasi di mana mungkin ada beberapa instans aplikasi dengan aturan format yang berbeda atau data budaya lainnya, aturan zona waktu yang paling relevan.

    • Jika penyebaran aplikasi Anda menyertakan database, ingatlah bahwa database akan memiliki aturan globalisasinya sendiri. Dalam kebanyakan kasus, Anda harus menghindari melakukan fungsi terkait globalisasi dalam database.
    • Jika penyebaran aplikasi Anda menyertakan aplikasi klien atau frontend web menggunakan sumber daya globalisasi klien, asumsikan bahwa sumber daya klien berbeda dari sumber daya yang tersedia untuk server Anda. Pertimbangkan untuk melakukan fungsi globalisasi secara eksklusif pada klien.

Rekomendasi untuk pengujian yang kuat

  1. Untuk membuat dependensi lebih eksplisit dan pengujian berpotensi lebih mudah dan paralel, Anda harus mempertimbangkan untuk secara eksplisit meneruskan pengaturan yang relevan dengan budaya, seperti CultureInfo parameter, hingga metode yang melakukan pemformatan, dan TimeZoneInfo metode yang bekerja dengan tanggal dan waktu. Anda juga harus menggunakan TimeProvider atau jenis serupa saat mengambil waktu.

  2. Untuk sebagian besar pengujian, Anda tidak boleh secara eksplisit memvalidasi output yang tepat dari operasi pemformatan tertentu atau offset yang tepat dari zona waktu. Pemformatan dan data zona waktu dapat berubah kapan saja dan mungkin berbeda antara dua instans sistem operasi yang identik (dan proses yang berpotensi berbeda pada komputer yang sama). Mengandalkan nilai yang tepat membuat pengujian rapuh.

    • Umumnya, memvalidasi bahwa beberapa output diterima akan cukup (misalnya, string yang tidak kosong saat memformat).
    • Untuk beberapa elemen dan format data, memvalidasi bahwa data diurai ke nilai input dapat digunakan sebagai gantinya (roundtripping). Perawatan perlu diambil untuk kasus di mana bidang dihilangkan (misalnya, tahun untuk beberapa bidang terkait tanggal) atau nilai dipotong atau dibulatkan (seperti untuk output floating-point).
    • Jika Anda memiliki persyaratan eksplisit untuk memvalidasi semua output format yang dilokalkan, Anda harus mempertimbangkan untuk membuat dan menggunakan budaya kustom selama penyiapan pengujian. Untuk sebagian besar kasus sederhana, ini dapat dilakukan dengan membuat CultureInfo instans objek dengan konstruktornya new CultureInfo(..) dan mengatur DateTimeFormat properti dan NumberFormat . Untuk kasus yang lebih rumit, subkelas jenis memungkinkan penimpaan properti tambahan. Ada potensi manfaat tambahan untuk ini, seperti mengaktifkan pseudolocalization dengan file sumber daya.
    • Jika Anda memiliki persyaratan eksplisit untuk memvalidasi hasil semua operasi tanggal/waktu, Anda harus mempertimbangkan untuk membuat dan menggunakan instans kustom TimeZoneInfo selama penyiapan pengujian. Ada potensi manfaat tambahan untuk ini, seperti mengaktifkan pengujian stabil kasus tepi tertentu (misalnya, perubahan pada aturan DST).

Lihat juga