Kutafsiri Maombi ya PyGObject katika Lugha Tofauti - Sehemu ya 5


Tunaendelea na mfululizo wa programu ya PyGObject nawe na hapa katika sehemu ya 5 hii, tutajifunza jinsi ya kutafsiri programu zetu za PyGObject katika lugha tofauti. Kutafsiri programu zako ni muhimu ikiwa utaichapisha kwa ajili ya ulimwengu, itakuwa rahisi zaidi kwa watumiaji wa mwisho kwa sababu si kila mtu anaelewa Kiingereza.

Jinsi Mchakato wa Tafsiri Unavyofanya kazi

Tunaweza kufupisha hatua za kutafsiri programu yoyote chini ya eneo-kazi la Linux kwa kutumia hatua hizi:

  1. Nyoa mifuatano inayoweza kutafsiriwa kutoka kwa faili ya Python.
  2. Hifadhi mifuatano kwenye .pot faili ambayo ni umbizo linalokuruhusu kuitafsiri baadaye kwa lugha nyingine.
  3. Anza kutafsiri mifuatano.
  4. Hamisha mifuatano mipya iliyotafsiriwa hadi kwenye faili ya .po ambayo itatumika kiotomatiki wakati lugha ya mfumo itabadilishwa.
  5. Ongeza mabadiliko madogo ya kiprogramu kwenye faili kuu ya Python na faili ya .desktop.

Na ndivyo hivyo! Baada ya kufanya hatua hizi ombi lako litakuwa tayari kutumika kwa watumiaji wa mwisho kutoka kote ulimwenguni (ita.. Unapaswa kutafsiri programu yako kwa lugha zote ulimwenguni, ingawa !), Inaonekana rahisi sivyo? :-)

Kwanza, ili kuokoa muda, pakua faili za mradi kutoka kwa kiungo kilicho hapa chini na utoe faili kwenye saraka yako ya nyumbani.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

Fungua faili \setup.py na utambue mabadiliko tuliyofanya:

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

Pia fungua faili \myprogram na uone mabadiliko ya kiprogramu ambayo tulifanya, mabadiliko yote yameelezwa kwenye maoni:

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

Sasa .. Hebu tuanze kutafsiri programu yetu. Kwanza unda faili ya .pot (faili iliyo na mifuatano yote inayoweza kutafsiriwa katika programu) ili
inaweza kuanza kutafsiri kwa kutumia amri ifuatayo:

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

Hii itaunda \myprogram.pot faili ndani ya \po folda katika folda kuu ya mradi iliyo na msimbo ufuatao:

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

Sasa ili kuanza kutafsiri mifuatano.. Unda faili iliyotenganishwa kwa kila lugha ambayo ungependa kutafsiri programu yako kwa kutumia \ISO-639-1 misimbo ya lugha ndani ya \po” folda, kwa mfano, ikiwa ungependa kutafsiri programu yako hadi Kiarabu, unda faili inayoitwa \ar.po na unakili yaliyomo. kutoka kwa \myprogram.pot faili kwake.

Ikiwa ungependa kutafsiri programu yako hadi Kijerumani, unda faili ya \de.po” na unakili yaliyomo kutoka \myprogram.pot” faili kwake.. na kwa hivyo moja, lazima uunde faili kwa kila lugha ambayo ungependa kutafsiri programu yako.

Sasa, tutafanya kazi kwenye faili ya \ar.po, nakili yaliyomo kutoka faili ya \myprogram.pot na kuiweka ndani ya faili hiyo na kuhariri. zifwatazo:

  1. BAADHI YA KICHWA CHA MAELEZO: unaweza kuingiza mada ya mradi wako hapa ikiwa unataka.
  2. MWAKA WA MWENYE HAKI YA KIFURUSHI: badilisha na mwaka ambao umeunda mradi.
  3. FURUSHI: ibadilishe na jina la kifurushi.
  4. MWANDISHI WA KWANZA <[email >, YEAR: badilisha hii na jina lako halisi, Barua pepe na mwaka uliotafsiri faili.
  5. PACKAGE VERSION: ibadilishe na toleo la kifurushi kutoka kwa faili ya debian/control.
  6. YEAR-MO-DA HO:MI+ZONE: haihitaji maelezo, unaweza kuibadilisha hadi tarehe yoyote unayotaka.
  7. JINA KAMILI <[barua pepe imelindwa]>: pia badilisha jina lako na Barua pepe yako.
  8. Timu ya Lugha: badala yake uweke jina la lugha ambayo unatafsiri, kwa mfano \Kiarabu au \Kifaransa.
  9. Lugha: hapa, lazima uweke msimbo wa ISO-639-1 kwa lugha ambayo unatafsiri, kwa mfano \ar, \fr, \de ..nk, unaweza kupata orodha kamili hapa.
  10. CHARSET: hatua hii ni muhimu, badilisha mfuatano huu na \UTF-8 (bila manukuu) ambayo inatumia lugha nyingi.

Sasa anza kutafsiri! Ongeza tafsiri yako kwa kila mfuatano baada ya manukuu katika \msgstr”. Hifadhi faili na uondoke. Faili nzuri ya tafsiri ya
Lugha ya Kiarabu kama mfano inapaswa kuonekana kama hii:

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

Hakuna cha kufanya zaidi, funga programu tu kwa kutumia amri ifuatayo:

$ debuild -us -uc

Sasa jaribu kusakinisha kifurushi kipya kilichoundwa kwa kutumia amri ifuatayo.

$ sudo dpkg -i myprogram_1.0_all.deb

Na ubadilishe lugha ya mfumo kwa kutumia \Usaidizi wa Lugha au kutumia programu nyingine yoyote hadi Kiarabu (au lugha ambayo umetafsiri faili yako):

Baada ya kuchagua, programu yako itatafsiriwa kwa lugha ya Kiarabu.

Hapa inamalizia mfululizo wetu kuhusu programu ya PyGObject kwa eneo-kazi la Linux, bila shaka kuna mambo mengine mengi ambayo unaweza kujifunza kutoka kwa marejeleo ya Python GI API..

Una maoni gani kuhusu mfululizo huo? Je, unaona ni muhimu? Je, uliweza kuunda programu yako ya kwanza kwa kufuata mfululizo huu? Shiriki maoni yako!