Saya ingin menginternasionalkan beberapa teks dalam permainan flash (bukan flex) yang sedang saya kerjakan dan saya tidak dapat menemukan cara mudah untuk mencapai itu ... Saya telah menemukan beberapa perpustakaan dan solusi lain, tetapi saya mengharapkan sesuatu yang jauh lebih mudah ( sangat mudah dengan teknologi lain).
Apakah Anda memiliki pengalaman dalam hal ini? Bagaimana Anda melakukannya?
flash
actionscript-3
miguelSantirso
sumber
sumber
Jawaban:
Saya baru-baru ini mengembangkan Flash Game yang saya terjemahkan ke Jerman dan Inggris. Anda dapat melihatnya di sini: http://www.bioaschi.ch/?lang=en#/game . Anda dapat mengubah bahasa dengan cepat di menu pengaturan .
Untuk menerjemahkan permainan, saya menggunakan pendekatan berikut: Saya memiliki kelas Config tertulis khusus yang pada dasarnya hanya merupakan pendaftar kunci => pasangan nilai . Kelas config dapat membaca dari file XML dan juga mengirimkan peristiwa ketika suatu nilai berubah.
Untuk permainan saya membuat 2 file konfigurasi yang berbeda. Satu adalah
main
konfigurasi, dan kemudian satu file yang berisi terjemahan (disebutlang
).main
Konfigurasi mereka berisi kunci yang menentukan bahasa, mis. lang = id . Dalam game saya mendengarkan perubahan acara pada tombol itu. Setiap kali itu terjadi, saya membaca / menerapkan nilai-nilai dari bahasa yang sesuai.Berikut cuplikan kecil kode yang menunjukkan bagaimana bahasa tersebut diaktifkan di game:
Di suatu tempat dalam kode panel "Pengaturan":
Kemudian di tempat lain di mana teks harus dilokalisasi:
Anda dapat melihat file yang sedang dimuat oleh permainan di sini: http://www.bioaschi.ch/game/language.xml
Untuk mengganti bagian teks dengan variabel (mis. Mentransformasikannya
your score is %d
menjadiyour score is 10000
), saya sarankan Anda menggunakan Perpustakaan Datastruktur Poligonal yang sangat baik . Ini berisi implementasi AS3 dari Sprintf .Alih-alih memiliki semua terjemahan dalam satu file, Anda juga dapat dengan mudah memiliki satu file tunggal per bahasa.
Demi kelengkapan, berikut adalah beberapa daftar kode:
Wow, ini agaknya menjadi posting yang panjang, maaf. Pendekatan yang saya ambil agak sederhana dan tidak mencakup topik-topik internasionalisasi yang lebih rumit, seperti format tanggal , format angka atau mata uang dll. Namun untuk terjemahan sederhana ini berfungsi dengan baik.
sumber
Berasal dari dunia C ++, ide umum untuk mengubah bahasa dengan cepat adalah memiliki semua teks bahasa dalam memori di suatu meja, dengan setiap string (atau sprite yang berisi teks) diberi ID numerik. Semua ID adalah sama dalam bahasa yang berbeda, ditambah offset bahasa. Sebagai contoh:
const LANG_EN: int = 0; const LANG_DE: int = 1000;
const STRING_HELLO_WORLD: int = 0;
var StringTable: array / * dari string * /; StringTable [STRING_HELLO_WORLD + LANG_EN] = "Halo, Dunia!" StringTable [STRING_HELLO_WORLD + LANG_DE] = "Halo, Veldt!"
Ini membutuhkan waktu pengaturan yang cukup, memang, tetapi hanya perlu dilakukan sekali.
Kemudian, dalam kode Anda, Anda cukup mereferensikan tabel menggunakan string dan offset bahasa saat ini: myObject.text = StringTable [STRING_HELLO_WORLD + currentLanguage];
sumber
Ikat komponen Anda ke objek flash.utils.Dictionary. Kamus pada dasarnya adalah array asosiatif. Jika Anda bertukar satu dengan yang lain, dan binding Anda ada di tempatnya, tampilan akan berubah secara otomatis. Gunakan dapat menempatkan informasi tanggal format dll ada dua. Saya juga memperkenalkan sistem "nomor id" yang tidak populer dan tidak ramah. Ini karena ketika Anda benar-benar menjelajahi aplikasi internasionalisasi / multibahasa, Anda akan menemukan bahwa beberapa kata bahasa Inggris menerjemahkan berbeda tergantung pada konteks (dalam bahasa Prancis atau Spanyol itu sangat umum).
sumber