Menerjemahkan Aplikasi PyGObject ke Berbagai Bahasa – Bagian 5


Kami melanjutkan seri pemrograman PyGObject bersama Anda dan di sini, di bagian 5 ini, kita akan mempelajari cara menerjemahkan aplikasi PyGObject ke berbagai bahasa. Menerjemahkan aplikasi Anda penting jika Anda ingin mempublikasikannya ke seluruh dunia, ini akan lebih ramah pengguna bagi pengguna akhir karena tidak semua orang mengerti bahasa Inggris.

Bagaimana Proses Penerjemahan Bekerja

Kami dapat meringkas langkah-langkah menerjemahkan program apa pun di desktop Linux menggunakan langkah-langkah berikut:

  1. Ekstrak string yang dapat diterjemahkan dari file Python.
  2. Simpan string ke dalam file .pot yang merupakan format yang memungkinkan Anda menerjemahkannya nanti ke bahasa lain.
  3. Mulailah menerjemahkan senarnya.
  4. Ekspor string baru yang diterjemahkan ke dalam file .po yang akan digunakan secara otomatis ketika bahasa sistem diubah.
  5. Tambahkan beberapa perubahan kecil terprogram pada file utama Python dan file .desktop.

Dan itu saja! Setelah melakukan langkah-langkah ini, aplikasi Anda akan siap digunakan oleh pengguna akhir dari seluruh dunia (namun.. Anda harus menerjemahkan program Anda ke semua bahasa di seluruh dunia!), Kedengarannya mudah bukan? :-)

Pertama, untuk menghemat waktu, unduh file proyek dari tautan di bawah ini dan ekstrak file di direktori home Anda.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

Buka file “setup.py ” dan perhatikan perubahan yang kita lakukan:

Here we imported the 'setup' module which allows us to install Python scripts to the local system beside performing some other tasks, you can find the documentation here: https://docs.python.org/2/distutils/apiref.html
from distutils.core import setup

Those modules will help us in creating the translation files for the program automatically.
from subprocess import call
from glob import glob
from os.path import splitext, split

DON'T FOTGET TO REPLACE 'myprogram' WITH THE NAME OF YOUR PROGRAM IN EVERY FILE IN THIS PROJECT.

data_files = [ ("lib/myprogram", ["ui.glade"]), # This is going to install the "ui.glade" file under the /usr/lib/myprogram path.
                     ("share/applications", ["myprogram.desktop"]) ] 

This code does everything needed for creating the translation files, first it will look for all the .po files inside the po folder, then it will define the default path for where to install the translation files (.mo) on the local system, then it's going to create the directory on the local system for the translation files of our program and finally it's going to convert all the .po files into .mo files using the "msgfmt" command.
po_files = glob("po/*.po")
for po_file in po_files:
  lang = splitext(split(po_file)[1])[0]
  mo_path = "locale/{}/LC_MESSAGES/myprogram.mo".format(lang)
Make locale directories
  call("mkdir -p locale/{}/LC_MESSAGES/".format(lang), shell=True)
Generate mo files
  call("msgfmt {} -o {}".format(po_file, mo_path), shell=True)
  locales = map(lambda i: ('share/'+i, [i+'/myprogram.mo', ]), glob('locale/*/LC_MESSAGES'))

Here, the installer will automatically add the .mo files to the data files to install them later.
  data_files.extend(locales)

setup(name = "myprogram", # Name of the program.
      version = "1.0", # Version of the program.
      description = "An easy-to-use web interface to create & share pastes easily", # You don't need any help here.
      author = "TecMint", # Nor here.
      author_email = "[email ",# Nor here :D
      url = "http://example.com", # If you have a website for you program.. put it here.
      license='GPLv3', # The license of the program.
      scripts=['myprogram'], # This is the name of the main Python script file, in our case it's "myprogram", it's the file that we added under the "myprogram" folder.

Here you can choose where do you want to install your files on the local system, the "myprogram" file will be automatically installed in its correct place later, so you have only to choose where do you want to install the optional files that you shape with the Python script
      data_files=data_files) # And this is going to install the .desktop file under the /usr/share/applications folder, all the folder are automatically installed under the /usr folder in your root partition, you don't need to add "/usr/ to the path.

Buka juga file “myprogram ” dan lihat perubahan program yang kami lakukan, semua perubahan dijelaskan di komentar:

#!/usr/bin/python 
-*- coding: utf-8 -*- 

## Replace your name and email.
My Name <[email >

## Here you must add the license of the file, replace "MyProgram" with your program name.
License:
   MyProgram is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
#
   MyProgram is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
#
   You should have received a copy of the GNU General Public License
   along with MyProgram.  If not, see <http://www.gnu.org/licenses/>.

from gi.repository import Gtk 
import os, gettext, locale

## This is the programmatic change that you need to add to the Python file, just replace "myprogram" with the name of your program. The "locale" and "gettext" modules will take care about the rest of the operation.
locale.setlocale(locale.LC_ALL, '')
gettext.bindtextdomain('myprogram', '/usr/share/locale')
gettext.textdomain('myprogram')
_ = gettext.gettext
gettext.install("myprogram", "/usr/share/locale")

class Handler: 
  
  def openterminal(self, button): 
    ## When the user clicks on the first button, the terminal will be opened.
    os.system("x-terminal-emulator ")
  
  def closeprogram(self, button):
    Gtk.main_quit()
    
Nothing new here.. We just imported the 'ui.glade' file. 
builder = Gtk.Builder() 
builder.add_from_file("/usr/lib/myprogram/ui.glade") 
builder.connect_signals(Handler()) 

label = builder.get_object("label1")
Here's another small change, instead of setting the text to ("Welcome to my Test program!") we must add a "_" char before it in order to allow the responsible scripts about the translation process to recognize that it's a translatable string.
label.set_text(_("Welcome to my Test program !"))

button = builder.get_object("button2")
And here's the same thing.. You must do this for all the texts in your program, elsewhere, they won't be translated.
button.set_label(_("Click on me to open the Terminal"))


window = builder.get_object("window1") 
window.connect("delete-event", Gtk.main_quit)
window.show_all() 
Gtk.main()

Sekarang.. Mari kita mulai menerjemahkan program kita. Pertama-tama buatlah file .pot (file yang berisi semua string yang dapat diterjemahkan dalam program) sehingga Anda
dapat mulai menerjemahkan menggunakan perintah berikut:

cd myprogram
xgettext --language=Python --keyword=_ -o po/myprogram.pot myprogram

Ini akan membuat file “myprogram.pot ” di dalam folder “po ” di folder proyek utama yang berisi kode berikut:

SOME DESCRIPTIVE TITLE.
Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
This file is distributed under the same license as the PACKAGE package.
FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-29 21:28+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email >\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: myprogram:48
msgid "Welcome to my Test program !"
msgstr ""

#: myprogram:52
msgid "Click on me to open the Terminal"
msgstr ""

Sekarang untuk mulai menerjemahkan string.. Buat file terpisah untuk setiap bahasa yang ingin Anda terjemahkan programnya menggunakan kode bahasa “ISO-639-1” di dalam “po ”, misalnya jika Anda ingin menerjemahkan program Anda ke Arab, buatlah file bernama “ar.po ” dan salin konten dari folder “ programsaya.pot ” ke dalamnya.

Jika Anda ingin menerjemahkan program Anda ke Jerman, buat file “de.po ” dan salin konten dari “myprogram.pot ” file ke dalamnya.. dan yang pertama, Anda harus membuat file untuk setiap bahasa yang ingin Anda terjemahkan program Anda.

Sekarang, kita akan mengerjakan file “ar.po ”, salin konten dari file “myprogram.pot ” dan masukkan ke dalam file itu dan edit yang berikut ini :

  1. BEBERAPA JUDUL DESKRIPTIF: Anda dapat memasukkan judul proyek Anda di sini jika Anda mau.
  2. TAHUN PEMEGANG HAK CIPTA PAKET: ganti dengan tahun pembuatan proyek.
  3. PAKET: ganti dengan nama paketnya.
  4. PENULIS PERTAMA , TAHUN: ganti dengan nama asli Anda, Email dan tahun Anda menerjemahkan file.
  5. VERSI PAKET: ganti dengan versi paket dari file debian/kontrol.
  6. TAHUN-MO-DA HO:MI+ZONE: tidak memerlukan penjelasan, Anda dapat mengubahnya ke tanggal mana pun yang Anda inginkan.
  7. NAMA LENGKAP : ganti juga dengan nama dan Email Anda.
  8. Tim Bahasa: ganti dengan nama bahasa yang Anda terjemahkan, misalnya “Arab” atau “Prancis”.
  9. Bahasa: di sini, Anda harus memasukkan kode ISO-639-1 untuk bahasa yang Anda terjemahkan, misalnya “ar ”, “fr ”, “de ”..dll, Anda bisa temukan daftar lengkapnya di sini.
  10. CHARSET: langkah ini penting, ganti string ini dengan “UTF-8 ” (tanpa tanda kutip) yang mendukung sebagian besar bahasa.

Sekarang mulailah menerjemahkan! Tambahkan terjemahan Anda untuk setiap string setelah tanda kutip di “msgstr ”. Simpan file dan keluar. File terjemahan yang bagus untuk
Bahasa Arab sebagai contoh akan terlihat seperti ini:

My Program
Copyright (C) 2014
This file is distributed under the same license as the myprogram package.
Hanny Helal <[email <, 2014.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-29 21:28+0200\n"
"PO-Revision-Date: 2014-12-29 22:28+0200\n"
"Last-Translator: M.Hanny Sabbagh <hannysabbagh<@hotmail.com<\n"
"Language-Team: Arabic <[email <\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: myprogram:48
msgid "Welcome to my Test program !"
msgstr "أهلًا بك إلى برنامجي الاختباري!"

#: myprogram:52
msgid "Click on me to open the Terminal"
msgstr "اضغط عليّ لفتح الطرفية"

Tidak ada lagi yang perlu dilakukan, cukup kemas programnya menggunakan perintah berikut:

debuild -us -uc

Sekarang coba instal paket yang baru dibuat menggunakan perintah berikut.

sudo dpkg -i myprogram_1.0_all.deb

Dan ubah bahasa sistem menggunakan program “Dukungan Bahasa ” atau menggunakan program lain ke Arab (atau bahasa yang digunakan untuk menerjemahkan file Anda):

Setelah memilih, program Anda akan diterjemahkan ke bahasa Arab.

Di sinilah berakhir seri kami tentang pemrograman PyGObject untuk desktop Linux, tentunya masih banyak hal lain yang bisa Anda pelajari dari dokumentasi resmi dan referensi Python GI API..

Apa pendapat Anda tentang serial ini? Apakah menurut Anda ini berguna? Apakah Anda dapat membuat aplikasi pertama Anda dengan mengikuti seri ini? Bagikan pendapat Anda kepada kami!