Mods/Internationalization Lib for Minetest/ms: Difference between revisions

From Minetest
>Voxel
No edit summary
>Voxel
No edit summary
 
(No difference)

Latest revision as of 12:09, 8 April 2021


Internationalization Lib for Minetest
Blank.png
Sebuah mods
Mod Type Pelbagai
Author Diego Martínez (kaeza)
Forum topic 4929
Source code GitHub
Technical name intllib

Pustaka Pengantarabangsaan untuk Minetest (BI: Internationalization Lib for Minetest) atau juga dikenali sebagai Internationalization Library ialah sebuah mods yang dicipta oleh Diego Martínez (kaeza) dan diterbitkan di bawah Unlicense (bahasa Inggeris). Mods ini ialah suatu usaha untuk menyediakan sokongan pengantarabangsaan kepada mods. Sebarang komen atau cadangan dialu-alukan dekat topik forum dalam bahasa Inggeris. Pepijat boleh dilaporkan menggunakan penjejak pepijat Github.

Menggunakan pustaka sebagai pemain biasa

Jika anda pemain biasa yang mencari teks terjemahan, hanya pasangkan mods ini seperti mods lain, kemudian bolehkannya melalui GUI.

Mods ini cuba untuk mengesan bahasa anda, tetapi oleh kerana tiada cara mudah alih untuk melakukannya, ia cuba beberapa cara yang lain:

  • Tetapan language di dalam fail minetest.conf.
  • Pembolehubah sekitaran LANGUAGE.
  • Pembolehubah sekitaran LANG.
  • Jika semua di atas gagal, ia gunakan en.

Dalam apa jua keadaan, hasil akhirnya sepatutnya menjadi Kod Bahasa ISO 639-1 untuk bahasa yang dikehendaki.

Menggunakan pustaka sebagai penterjemah

Jika anda seorang penterjemah, anda perlu menentukan jenis antaramuka mods yang menyokong intllib tersebut, dan ikut langkah untuk antaramuka yang berkenaan.

Untuk menentukan antaramuka yang manakah mods tersebut gunakan, carilah subdirektori locale mods tersebut. Jika anda jumpa fail berbentuk fail teks kosong dalam format .txt, maka ianya menggunakan antaramuka yang lama. Kalau tidak, kemungkinan besar ianya menggunakan antaramuka baru, terutamanya jika failnya berupa fail gettext dalam format .po.

Antaramuka baru

Antaramuka baru menggunakan fail .po dari gettext (bahasa Inggeris). Lihat Format Fail PO (bahasa Inggeris) untuk maklumat lanjut.

Oleh itu, jika anda menterjemah mods yang menggunakan antaramuka baru ke dalam bahasa anda, gunakan alatan kegemaran anda untuk menyunting fail .po tersebut. Fail tersebut juga boleh disunting dengan penyunting teks kosong.

Antaramuka lama

Untuk menterjemah mods ke dalam bahasa anda, salin fail locale/template.txt kepada locale/BAHASA.txt (di mana BAHASA ialah Kod Bahasa ISO 639-1 untuk bahasa anda).

Buka fail baru tersebut dalam penyunting kegemaran anda, dan terjemahkan setiap barus dengan meletakkan teks terjemahan selepas tanda sama dengan.

Di sini contoh untuk fail terjemahan bahasa Melayu (ms.txt):

 # A comment.
 # Another comment.
 This line is ignored since it has no equals sign.
 Hello, World! = Hello, Dunia!
 String with\nnewlines = Rentetan dengan\nbaris baru
 String with an \= equals sign = Rentetan dengan \= tanda sama dengan

Fail terjemahan (atau penempatan) ialah fail teks biasa yang mempunyai baris-baris dalam bentuk teks asal = teks terjemahan. Fail tersebut mestilah berada di dalam subdirektori locale di dalam direktori mods, dan mesti dinamakan sebagai Kod Bahasa ISO 639-1 dua huruf untuk bahasa yang anda ingin terjemahkan.

Fail terjemahan mestilah menggunakan pengekodan UTF-8.

Baris yang bermula dengan tanda nombor/tanda pagar (#) ialah komen dan diabaikan oleh pemprosesan pembaca terjemahan. Ambil perhatian bahawa komen hanyalah sah sehingga penghujung baris; tidak ada sokongan untuk komen pelbagai baris. Baris-baris tanpa tanda sama dengan juga akan diabaikan.

Aksara yang dianggap "istimewa" boleh "dilepaskan" supaya ianya diambil bulat-bulat. Terdapat beberapa jujukan lepasan (escape sequence) yang boleh digunakan:

  • Mana-mana tanda nombor/tanda pagar (#), tanda sama dengan (=) boleh dilepaskan untuk diambil bulat-bulat. Jujukan \# sangat berguna sekiranya teks asal bermula dengan tanda nombor/tanda pagar (#).
  • Jujukan lepasan biasa \n dan \t setiap satunya membawa maksud baris baru dan tab mendatar.
  • Jujukan lepasan istimewa \s melambangkan aksara ruang (selang). Ianya berguna untuk memasukkan ruang hadapan atau ruang belakang ke dalam teks sumber atau terjemahan, kerana ruang-ruang ini akan dibuang jika tidak berbuat sedemikian. Contohnya, jika teks tersebut ialah perenggan dan perlu bermula dengan beberapa ruang, perlulah menggunakan jujukan lepasan ini.

Menggunakan pustaka sebagai pembangun

Sekiranya anda pembangun mods yang ingin menambah sokongan pengantarabangsaan kepada mods anda, anda perlu melalukan perkara berikut.

Membolehkan pengantarabangsaan

Untuk membolehkan pengantarabangsaan untuk mods anda, anda perlu salin fail lib/intllib.lua ke dalam direktori akar mods anda, kemudian masukkan kod plat dandang (boilerplate) ini ke dalam fail yang memerlukan pengantarabangsaan:

 -- Load support for intllib.
 local MP = minetest.get_modpath(minetest.get_current_modname())
 local S, NS = dofile(MP.."/intllib.lua")

Anda juga perlu bergantung secara pilihan kepada intllib, untuk menambah kebergantungan pilihan, masukkan intllib? ke dalam baris kosong di dalam fail depends.txt mods anda. Ambil perhatian bahawa jika intllib tidak dipasang, fungsi pengambil telah ditakrifkan untuk memulangkan rentetan tanpa perubahan. Perkara ini dibuat supaya anda tidak perlu merenjiskan beratus-ratus penyemak if (atau pembina lain yang serupa) untuk memeriksa sama ada pustaka tersebut memang telah dipasang.

Apabila kod tersebut telah dimasukkan, anda perlu menanda rentetan yang memerlukan terjemahan. Untuk setiap rentetan boleh terjemah dalam teks sumber anda, gunakan fungsi S (lihat atas) untuk memulangkan rentetan yang telah diterjemah. Contohnya:

 minetest.register_node("mymod:mynode", {
     -- Rentetan biasa:
     description = S("My Fabulous Node"),
     -- Rentetan dengan penyisipan:
     description = S("@1 Car", "Blue"),
     -- ...
 })

Fungsi NS pula serupa dengan ngettext. Ia patut digunakan apabila rentetan untuk diterjemah mempunyai bentuk mufrad dan bentuk jamak. Contohnya:

 -- `count` pertama untuk `ngettext` menentukan bentuk mana untuk digunakan.
 -- `count` kedua pula penggantian sebenar.
 print(NS("You have one item.", "You have @1 items.", count, count))

Menjana dan mengemaskini katalog

Ini alir kerja asas untuk bekerja dengan gettext

Setiap kali anda mempunyai rentetan baru untuk diterjemah, anda patut buat seperti berikut:

 cd /laluan/kepada/mods
 /laluan/kepada/mods/intllib/tools/xgettext.sh file1.lua file2.lua ...

Skrip tersebut akan mencipta direktori bernama locale jika ia belum wujud, dan ia akan menjana fail template.pot (sebuah templat dengan semua rentetan boleh terjemah). Jika anda sudah ada terjemahan, skrip tersebut akan mengemaskini kesemuanya dengan rentetan yang baru.

Skrip tersebut menghantar beberapa pilihan kepada xgettext sebenar yang sepatutnya cukup untuk kebanyakan waktunya. Anda boleh meletakkan pilihan lain jika mahu:

 xgettext.sh -o file.pot --keyword=blargh:4,5 a.lua b.lua ...

Ambil perhatian bahawa terdapat juga fail kelompok Windows xgettext.bat untuk pengguna Windows, tetapi anda perlu memasang alatan baris perintah secara berasingan. Lihat pengepala fail untuk konfigurasi.