It-Traduzzjoni ta’ Applikazzjonijiet PyGObject f’Lingwi Differenti – Parti 5


Inkomplu s-serje ta’ programmar PyGObject miegħek u hawn f’din il-5 parti, se nitgħallmu kif nittraduċu l-applikazzjonijiet tagħna PyGObject f’lingwi differenti. It-traduzzjoni tal-applikazzjonijiet tiegħek hija importanti jekk se tippubblikaha għad-dinja, tkun aktar faċli għall-utent għall-utenti finali għaliex mhux kulħadd jifhem l-Ingliż.

Kif jaħdem il-Proċess tat-Traduzzjoni

Nistgħu nġabru fil-qosor il-passi biex nittraduċu kwalunkwe programm taħt id-desktop tal-Linux billi tuża dawn il-passi:

  1. Oħroġ il-kordi li jistgħu jiġu tradotti mill-fajl Python.
  2. Issejvja l-kordi f'fajl .pot li huwa format li jippermettilek tittraduċih aktar tard għal lingwi oħra.
  3. Ibda tittraduċi l-kordi.
  4. Esporta l-kordi l-ġodda tradotti f'fajl .po li jintuża awtomatikament meta tinbidel il-lingwa tas-sistema.
  5. Żid xi bidliet programmatiċi żgħar fil-fajl Python prinċipali u l-fajl .desktop.

U dak hu! Wara li tagħmel dawn il-passi l-applikazzjoni tiegħek tkun lesta għall-użu għall-utenti aħħarin minn madwar id-dinja (se.. Int trid tittraduċi l-programm tiegħek għal-lingwi kollha madwar id-dinja, għalkemm!), Ħsejjes faċli hux? :-)

L-ewwel, biex tiffranka ftit ħin, niżżel il-fajls tal-proġett minn hawn taħt il-link u estratt il-fajl fid-direttorju tad-dar tiegħek.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

Iftaħ il-fajl \setup.py u innota l-bidliet li għamilna:

# 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.

Iftaħ ukoll il-fajl \myprogram u ara l-bidliet programmatiċi li għamilna, il-bidliet kollha huma spjegati fil-kummenti:

#!/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()

Issa.. Nibdew nittraduċu l-programm tagħna. L-ewwel oħloq il-fajl .pot (fajl li fih il-kordi kollha li jistgħu jiġu tradotti fil-programm) sabiex tkun
tista' tibda tittraduċi billi tuża l-kmand li ġej:

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

Dan se joħloq il-fajl \myprogram.pot” ġewwa l-folder \po” fil-folder prinċipali tal-proġett li fih il-kodiċi li ġej:

# 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 >, 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 >\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 ""

Issa sabiex tibda tittraduċi l-kordi.. Oħloq fajl separat għal kull lingwa li trid tittraduċi l-programm tiegħek billi tuża l-kodiċi tal-lingwi \ISO-639-1 ġewwa l-\po” folder, pereżempju, jekk trid tittraduċi l-programm tiegħek għall-Għarbi, oħloq fajl imsejjaħ \ar.po” u kkopja l-kontenut mill-fajl \myprogram.pot” lejh.

Jekk trid tittraduċi l-programm tiegħek għall-Ġermaniż, oħloq fajl \de.po” u kkopja l-kontenut minn \myprogram.pot” fajl għalih.. u għalhekk wieħed, trid toħloq fajl għal kull lingwa li trid tittraduċi l-programm tiegħek għaliha.

Issa, naħdmu fuq il-fajl \ar.po”, nikkopja l-kontenut mill-fajl \myprogram.pot” u poġġih ġewwa dak il-fajl u editja dawn li ġejjin:

  1. XI TITOLU DESKRIPTIV: tista' ddaħħal it-titlu tal-proġett tiegħek hawn jekk trid.
  2. SENA ID-DETENTUR TAL-KOPYRIGHT TAL-PAKKETT: ibdelha mas-sena li tkun ħloqt il-proġett.
  3. PAKKETT: ibdelha bl-isem tal-pakkett.
  4. L-EWWEL AWTUR <[email >, SENA: ibdel dan bl-isem reali tiegħek, Email u s-sena li tkun ittradujt il-fajl.
  5. VERŻJONI TAL-PAKKETT: ibdelha bil-verżjoni tal-pakkett mill-fajl debian/control.
  6. SENA-MO-DA HO:MI+ŻONA: m'għandux bżonn spjegazzjoni, tista' tibdelha għal kwalunkwe data li trid.
  7. ISEM SĦIĦ <[email >: ibdel ukoll ismek u l-Email tiegħek.
  8. Tim tal-Lingwa: ibdelha bl-isem tal-lingwa li tkun qed tittraduċi għaliha, pereżempju \Għarbi jew \Franċiż.
  9. Lingwa: hawnhekk, trid daħħal il-kodiċi ISO-639-1 għal-lingwa li tkun qed tittraduċi għaliha, pereżempju \ar”, \fr”, \de” ..eċċ, tista' ssib lista kompleta hawn.
  10. CHARSET: dan il-pass huwa importanti, ibdel din is-sekwenza b'\UTF-8 (mingħajr il-kwotazzjonijiet) li jappoġġja l-biċċa l-kbira tal-lingwi.

Issa ibda tittraduċi! Żid it-traduzzjoni tiegħek għal kull string wara l-kwotazzjonijiet f'\msgstr. Issejvja l-fajl u oħroġ. Fajl ta' traduzzjoni tajjeb għall-
Il-lingwa Għarbija bħala eżempju għandha tidher bħal din:

# 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 "اضغط عليّ لفتح الطرفية"

M'hemm xejn aktar x'tagħmel, sempliċement ippakkja l-programm billi tuża l-kmand li ġej:

$ debuild -us -uc

Issa ipprova tinstalla l-pakkett il-ġdid maħluq billi tuża l-kmand li ġej.

$ sudo dpkg -i myprogram_1.0_all.deb

U ibdel il-lingwa tas-sistema billi tuża l-programm \Appoġġ tal-Lingwa” jew uża kwalunkwe programm ieħor għall-Għarbi (jew il-lingwa fejn ittradujt il-fajl tiegħek):

Wara li tagħżel, il-programm tiegħek jiġi tradott għal-lingwa Għarbija.

Hawnhekk tispiċċa s-serje tagħna dwar l-ipprogrammar ta' PyGObject għad-desktop tal-Linux, ovvjament hemm ħafna affarijiet oħra li tista' titgħallem mir-referenza tal-API Python GI.

X'taħseb dwar is-serje? Issibha utli? Kont kapaċi toħloq l-ewwel applikazzjoni tiegħek billi ssegwi din is-serje? Aqsamna l-ħsibijiet tiegħek!