Menterjemahkan aplikasi pygobject ke dalam bahasa yang berbeza - Bahagian 5

Menterjemahkan aplikasi pygobject ke dalam bahasa yang berbeza - Bahagian 5

Kami meneruskan siri pengaturcaraan pygobject dengan anda dan di sini dalam hal ini 5th Bahagian, kita akan belajar cara menterjemahkan aplikasi pygobject kami ke dalam bahasa yang berbeza. Menterjemahkan aplikasi anda adalah penting jika anda akan menerbitkannya untuk dunia, ia akan menjadi lebih mesra pengguna untuk pengguna akhir kerana tidak semua orang memahami bahasa Inggeris.

Menterjemahkan bahasa aplikasi pygobject

Bagaimana proses terjemahan berfungsi

Kita boleh meringkaskan langkah -langkah menterjemahkan mana -mana program di bawah desktop Linux menggunakan langkah -langkah ini:

  1. Ekstrak rentetan yang diterjemahkan dari fail python.
  2. Simpan rentetan ke dalam .periuk fail yang merupakan format yang membolehkan anda menterjemahkannya kemudian ke bahasa lain.
  3. Mula menerjemahkan rentetan.
  4. Mengeksport rentetan diterjemahkan baru ke dalam .PO fail yang akan digunakan secara automatik apabila bahasa sistem diubah.
  5. Tambahkan beberapa perubahan programatik kecil ke fail python utama dan .Desktop fail.

Dan itu sahaja! Setelah melakukan langkah-langkah ini, permohonan anda akan siap untuk digunakan untuk pengguna akhir dari seluruh dunia (akan ... anda perlu menterjemahkan program anda ke semua bahasa di seluruh dunia, walaupun !), Bunyi mudah bukan? :-)

Pertama, untuk menjimatkan masa, muat turun fail projek dari pautan di bawah dan ekstrak fail di direktori rumah anda.

  1. https: // copy.com/tjyzaangeq6bb7yn

Buka "Persediaan.py"Fail dan perhatikan perubahan yang kami lakukan:

Kod terjemahan
# Di sini kami mengimport modul 'Persediaan' yang membolehkan kami memasang skrip Python ke sistem tempatan selain melaksanakan beberapa tugas lain, anda boleh mencari dokumentasi di sini: https: // docs.python.org/2/distutils/apiref.html dari distutils.Persediaan Import Teras # Modul -modul tersebut akan membantu kami dalam membuat fail terjemahan untuk program secara automatik. dari panggilan import subprocess dari Glob Import Glob dari OS.Path Import Splitext, Split # Jangan fotget untuk menggantikan 'myprogram' dengan nama program anda dalam setiap fail dalam projek ini. data_files = [("lib/myprogram", ["ui.glade "]), # ini akan memasang" ui.Fail Glade "di bawah laluan/usr/lib/myprogram. ("Saham/Aplikasi", ["myprogram.Desktop"])] # Kod ini melakukan semua yang diperlukan untuk membuat fail terjemahan, pertama ia akan mencari semua .fail PO di dalam folder PO, maka ia akan menentukan laluan lalai untuk di mana untuk memasang fail terjemahan (.mo) di sistem tempatan, maka ia akan membuat direktori pada sistem tempatan untuk fail terjemahan program kami dan akhirnya ia akan menukar semua .PO fail ke .fail mo menggunakan arahan "msgfmt". po_files = glob ("po/*.po ") untuk po_file dalam po_files: lang = splitext (split (po_file) [1]) [0] mo_path =" locale//lc_messages/myprogram.mo ".Format (Lang) # Buat Direktori Locale Panggil ("Mkdir -P locale//lc_messages/".Format (lang), shell = true) # menjana fail mo panggilan ("msgfmt  -o ".Format (po_file, mo_path), shell = true) locales = map (lambda i: ('share/'+i, [i+'/myprogram.mo ',]), glob (' locale/*/lc_messages ')) # Di sini, pemasang akan secara automatik menambah .fail mo ke fail data untuk memasangnya kemudian. data_files.melanjutkan persediaan (tempatan) (name = "myprogram", # Nama program. versi = "1.0", # Versi program. Penerangan = "Antara muka web yang mudah digunakan untuk membuat & berkongsi pasta dengan mudah", # Anda tidak memerlukan bantuan di sini. pengarang = "Tecmint", # Atau di sini. pengarang_email = "[dilindungi e -mel]",# Atau di sini: D url ="http: // contoh.com", # Jika anda mempunyai laman web untuk program anda ... letakkan di sini. lesen = 'Gplv3', # Lesen program. skrip = ['myprogram'], # Ini adalah nama fail skrip python utama, dalam kes kami itu "myprogram", itu adalah fail yang kami tambahkan di bawah folder "myprogram". # Di sini anda boleh memilih di mana anda ingin memasang fail anda di sistem tempatan, fail "myprogram" akan dipasang secara automatik di tempat yang betul kemudian, jadi anda hanya perlu memilih di mana anda ingin memasang fail pilihan yang anda bentuk dengan skrip python data_files = data_files) # dan ini akan memasang .Fail desktop di bawah folder/usr/share/aplikasi, semua folder dipasang secara automatik di bawah folder/usr dalam partition root anda, anda tidak perlu menambah "/usr/ke jalan. 

Buka juga "myprogram"Fail dan lihat perubahan program yang kami lakukan, semua perubahan dijelaskan dalam komen:

#!/usr/bin/python #-*-pengekodan: UTF-8-*-## Gantikan nama dan e-mel anda. # Nama saya <[email protected]> ## Di sini anda mesti menambah lesen fail, ganti "myprogram" dengan nama program anda. # Lesen: # MyProgram adalah perisian percuma: anda boleh mengagihkan semula dan/atau mengubah suai # di bawah terma lesen umum GNU seperti yang diterbitkan oleh # Yayasan Perisian Percuma, sama ada versi 3 lesen, atau # (pada pilihan anda ) Mana -mana versi kemudian. # # MyProgram diedarkan dengan harapan ia akan berguna, # tetapi tanpa sebarang jaminan; tanpa jaminan tersirat # kebolehdagangan atau kecergasan untuk tujuan tertentu. Lihat Lesen Awam Umum # GNU untuk maklumat lanjut. # # Anda sepatutnya menerima salinan Lesen Awam Umum GNU # bersama dengan MyProgram. Sekiranya tidak, lihat . dari GI.Repository Import GTK Import OS, GetText, Locale ## Ini adalah perubahan programatik yang perlu anda tambahkan ke fail python, hanya ganti "myprogram" dengan nama program anda. Modul "locale" dan "gettext" akan menjaga seluruh operasi. locale.setLocale (locale.Lc_all, ") gettext.bindTextDomain ('myprogram', '/usr/share/locale') getText.TextDomain ('MyProgram') _ = getText.gettext getText.Pasang ("myprogram", "/usr/share/locale") pengendali kelas: def opentminal (diri, butang): ## Apabila pengguna mengklik pada butang pertama, terminal akan dibuka. OS.Sistem ("X-terminal-emulator") DEF CloseProgram (Butang, Butang): GTK.main_quit () # tidak ada yang baru di sini ... kami hanya mengimport 'ui.Fail Glade '. Builder = gtk.Pembina () pembina.add_from_file ("/usr/lib/myprogram/ui.glade ") pembina.Connect_signals (handler ()) label = pembina.get_object ("label1") # Berikut adalah satu lagi perubahan kecil, bukannya menetapkan teks ke ("Selamat datang ke program ujian saya!") Kita mesti menambah" _ "char sebelum ini untuk membolehkan skrip yang bertanggungjawab mengenai proses terjemahan untuk menyedari bahawa ia adalah rentetan yang boleh diterjemahkan. label.set_text (_ ("Selamat datang ke program ujian saya !")) Butang = pembina.get_object ("butang2") # dan inilah perkara yang sama ... anda mesti melakukan ini untuk semua teks dalam program anda, di tempat lain, mereka tidak akan diterjemahkan. butang.set_label (_ ("Klik pada saya untuk membuka terminal")) tetingkap = pembina.tetingkap get_object ("window1").Sambungkan ("Padam-Event", GTK.tetingkap main_quit).show_all () gtk.utama () 

Sekarang ... mari mula menerjemahkan program kami. Pertama buat .periuk fail (fail yang mengandungi semua rentetan yang diterjemahkan dalam program) supaya anda
boleh mula menerjemahkan menggunakan arahan berikut:

$ cd myprogram $ xgetText - -language = python --keyword = _ -o po/myprogram.periuk myprogram 

Ini akan mewujudkan "myprogram.periuk"Fail di dalam"PO"Folder dalam folder projek utama yang mengandungi kod berikut:

# Beberapa tajuk deskriptif. # Hak Cipta (c) Tahun Pakej Hak Cipta Pakej # Fail ini diedarkan di bawah lesen yang sama seperti pakej pakej. # Pengarang pertama <[email protected]>, Tahun. # #, fuzzy msgid "" msgstr "" "project-id-version: versi pakej \ n" "laporan-msgid-bugs-to: \ n" "Pot-creation-date: 2014-12-29 21: 28+ 0200 \ n "" PO-Revision-Tarikh: Tahun-Mo-Da Ho: Mi+Zon \ N "" Translator Terakhir: Nama Penuh <[email protected]>\ n "" bahasa-pasukan: bahasa <[email protected]>\ n "" Bahasa: \ n "" MIME-Version: 1.0 \ n "" Kandungan-jenis: Teks/Plain; charset = charset \ n "" pengekodan pemindahan kandungan: 8bit \ n " #: myprogram: 48 msgid" Selamat datang ke program ujian saya !"msgstr" " #: myprogram: 52 msgid" Klik pada saya untuk membuka terminal "msgstr" " 

Sekarang untuk mula menterjemahkan rentetan ... Buat fail yang dipisahkan untuk setiap bahasa yang anda ingin menterjemahkan program anda untuk menggunakan "ISO-639-1"Kod bahasa di dalam"PO"Folder, sebagai contoh, jika anda ingin menterjemahkan program anda ke Arab, Buat fail yang dipanggil "ar.PO"Dan salin kandungan dari"myprogram.periuk"Fail kepadanya.

Sekiranya anda ingin menterjemahkan program anda ke Jerman, Buat "de.PO"Fail dan salin kandungan dari"myprogram.periuk"Fail kepadanya ... dan sebagainya, anda mesti membuat fail untuk setiap bahasa yang anda ingin menterjemahkan program anda ke.

Sekarang, kita akan mengusahakan "ar.PO"Fail, salin kandungan dari"myprogram.periuk"Fail dan masukkannya ke dalam fail itu dan edit yang berikut:

  1. Beberapa tajuk deskriptif: anda boleh memasukkan tajuk projek anda di sini jika anda mahu.
  2. Tahun pemegang hak cipta pakej: Gantikannya dengan tahun yang anda telah buat projek.
  3. Pakej: ganti dengan nama pakej.
  4. Pengarang pertama <[email protected]>, Tahun: Gantikan ini dengan nama sebenar, e -mel dan tahun yang anda menerjemahkan fail tersebut.
  5. Versi pakej: Gantikannya dengan versi pakej dari fail debian/kawalan.
  6. Tahun-mo-da ho: mi+zon: tidak memerlukan penjelasan, anda boleh mengubahnya pada tarikh yang anda mahukan.
  7. NAMA PENUH <[email protected]>: Juga ganti nama dan e -mel anda.
  8. Pasukan bahasa: Gantikannya dengan nama bahasa yang anda terjemahkan, contohnya "Arab" atau "Perancis".
  9. Bahasa: Di sini, anda mesti memasukkan kod ISO-639-1 untuk bahasa yang anda terjemahan, contohnya "AR", "FR", "DE" ... dan lain-lain, anda boleh mencari senarai lengkap di sini.
  10. Charset: Langkah ini penting, ganti rentetan ini dengan "UTF-8" (tanpa petikan) yang menyokong kebanyakan bahasa.

Sekarang mula terjemahan! Tambahkan terjemahan anda untuk setiap rentetan selepas petikan dalam "msgstr". Simpan fail dan keluar. Fail terjemahan yang baik untuk
Bahasa Arab sebagai contoh harus kelihatan seperti ini:

# Program saya # Hakcipta (c) 2014 # Fail ini diedarkan di bawah lesen yang sama seperti pakej myprogram. # Hanny Helal <[email protected]<, 2014. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: 1.0 \ n"" Laporan-msgid-bugs-to: \ n "" Pot-Creation-date: 2014-12-29 21: 28+0200\ n "" po-revision-tarikh: 2014-12-29 22: 28+0200\ n "" Pengangkut terakhir: M.Hanny Sabbagh \ n "" pasukan bahasa: Arab <[email protected]<\ n "" Bahasa: ar \N "" MIME-Version: 1.0\ n "" jenis kandungan: teks/kosong; charset = UTF-8\ n "" Pengekodan pemindahan kandungan: 8bit\ n " #: myprogram: 48 msgid"Selamat datang ke program ujian saya !"msgstr""!" #: myprogram: 52 msgid"Klik pada saya untuk membuka terminal"msgstr"اضغط عليّ لفتح الطرفية" 

Tidak ada lagi yang perlu dilakukan, hanya bungkusan program menggunakan arahan berikut:

$ debuild -us -uc 

Sekarang cuba pasang pakej baru yang dibuat menggunakan arahan berikut.

$ sudo dpkg -i myprogram_1.0_All.Deb 

Dan menukar bahasa sistem menggunakan "Sokongan bahasa"Program atau menggunakan program lain untuk Arab (atau bahasa yang anda telah menerjemahkan fail anda ke):

Sokongan bahasa

Selepas memilih, program anda akan diterjemahkan ke bahasa Arab.

Diterjemahkan ke Arab

Di sini berakhir siri kami mengenai pengaturcaraan Pygobject untuk desktop Linux, tentu saja terdapat banyak perkara lain yang boleh anda pelajari dari dokumentasi rasmi dan rujukan Python GI API ..

Apa pendapat anda mengenai siri ini? Adakah anda merasa berguna? Adakah anda dapat membuat aplikasi pertama anda dengan mengikuti siri ini? Kongsi kami fikiran anda!