Þýðing á PyGObject forritum á mismunandi tungumál – 5. hluti


Við höldum áfram PyGObject forritunarröðinni með þér og hér í þessum 5. hluta munum við læra hvernig á að þýða PyGObject forritin okkar á mismunandi tungumál. Það er mikilvægt að þýða forritin þín ef þú ætlar að gefa þau út fyrir heiminn, það verður notendavænna fyrir notendur því það skilja ekki allir ensku.

Hvernig þýðingaferlið virkar

Við getum dregið saman skrefin við að þýða hvaða forrit sem er undir Linux skjáborðinu með þessum skrefum:

  1. Taktu þýðanlegu strengina úr Python skránni.
  2. Vista strengina í .pot skrá sem er á sniði sem gerir þér kleift að þýða hana síðar á önnur tungumál.
  3. Byrjaðu að þýða strengina.
  4. Flyttu út nýju þýddu strengina í .po skrá sem verður sjálfkrafa notuð þegar kerfistungumáli er breytt.
  5. Bættu smá forritunarbreytingum við aðal Python skrána og .desktop skrána.

Og þannig er það! Eftir að hafa gert þessi skref verður forritið þitt tilbúið til notkunar fyrir notendur alls staðar að úr heiminum (þú verður að þýða forritið þitt á öll tungumál um allan heim, þó!), Hljómar það auðvelt er það ekki? :-)

Í fyrsta lagi, til að spara tíma, hlaðið niður verkefnaskránum af hlekknum hér að neðan og dragið út skrána í heimamöppuna þína.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

Opnaðu \setup.py skrána og taktu eftir breytingunum sem við gerðum:

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

Opnaðu líka \myprogram skrána og sjáðu forritunarbreytingarnar sem við gerðum, allar breytingarnar eru útskýrðar í athugasemdunum:

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

Nú.. Byrjum að þýða forritið okkar. Búðu fyrst til .pot skrána (skrá sem inniheldur alla þýðanlega strengi í forritinu) þannig að þú
getur byrjað að þýða með því að nota eftirfarandi skipun:

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

Þetta mun búa til \myprogram.pot skrána í \po möppunni í aðalverkefnamöppunni sem inniheldur eftirfarandi kóða:

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

Nú til að byrja að þýða strengina.. Búðu til aðskilda skrá fyrir hvert tungumál sem þú vilt þýða forritið þitt á með því að nota \ISO-639-1 tungumálakóðana inni í \po” möppu, til dæmis, ef þú vilt þýða forritið þitt yfir á arabísku skaltu búa til skrá sem heitir \ar.po” og afrita innihaldið úr \myprogram.pot skránni yfir í hana.

Ef þú vilt þýða forritið þitt yfir á þýsku skaltu búa til \de.po skrá og afrita innihaldið úr \myprogram.pot >” skrá til þess.. og svo einn, þú verður að búa til skrá fyrir hvert tungumál sem þú vilt þýða forritið þitt á.

Nú munum við vinna að \ar.po skránni, afrita innihaldið úr \myprogram.pot skránni og setja það inn í þá skrá og breyta eftirfarandi:

  1. EINHVER LÝSINGARTITEL: þú getur slegið inn titil verkefnisins hér ef þú vilt.
  2. ÁR HÖFUNDARRETTIHAFI PAKKAINS: skiptu því út fyrir árið sem þú stofnaðir verkefnið.
  3. PAKKI: skiptu honum út fyrir nafn pakkans.
  4. FYRSTUHÖFUNDUR <[email >, ÁR: skiptu þessu út fyrir rétta nafnið þitt, netfang og árið sem þú þýddir skrána.
  5. PAKKAÚTGÁFA: skiptu henni út fyrir pakkaútgáfuna úr debian/control skránni.
  6. YEAR-MO-DA HO:MI+ZONE: þarf ekki útskýringar, þú getur breytt því í hvaða dagsetningu sem þú vilt.
  7. FULLT NAFN <[email >: skiptu líka um nafnið þitt og netfangið þitt.
  8. Tungumálsteymi: skiptu því út fyrir nafn tungumálsins sem þú ert að þýða yfir á, til dæmis \arabíska eða \frönsku.
  9. Tungumál: Hér verður þú að setja inn ISO-639-1 kóðann fyrir tungumálið sem þú ert að þýða á, til dæmis \ar, \fr, \de ..o.s.frv., þú getur fundið heildarlista hér.
  10. CHARSET: þetta skref er mikilvægt, skiptu þessum streng út fyrir \UTF-8 (án gæsalappa) sem styður flest tungumál.

Byrjaðu nú að þýða! Bættu við þýðingunni þinni fyrir hvern streng á eftir gæsalöppunum í \msgstr. Vistaðu skrána og farðu út. Góð þýðingarskrá fyrir
Arabíska sem dæmi ætti að líta svona út:

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

Það er ekkert meira að gera, pakkaðu bara forritinu með eftirfarandi skipun:

$ debuild -us -uc

Reyndu nú að setja upp nýja búna pakkann með því að nota eftirfarandi skipun.

$ sudo dpkg -i myprogram_1.0_all.deb

Og breyttu tungumáli kerfisins með því að nota \Tungumálastuðningur forritið eða með því að nota hvaða forrit sem er í arabísku (eða tungumálið sem þú hefur þýtt skrána þína á):

Eftir að þú hefur valið verður forritið þitt þýtt á arabísku.

Hér lýkur röð okkar um PyGObject forritun fyrir Linux skjáborðið, auðvitað er margt annað sem þú getur lært af Python GI API tilvísuninni.

Hvað finnst þér um seríuna? Finnst þér það gagnlegt? Varst þú fær um að búa til fyrsta forritið þitt með því að fylgja þessari röð? Deildu okkur hugsunum þínum!