Prevajanje aplikacij PyGObject v različne jezike - 5. del


Z vami nadaljujemo programsko serijo PyGObject in v tem 5. delu bomo izvedeli, kako prevesti naše aplikacije PyGObject v različne jezike. Prevajanje aplikacij je pomembno, če ga želite objaviti po vsem svetu, saj bo tako uporabnikom prijaznejše za končne uporabnike, ker vsi ne razumejo angleško.

Kako deluje proces prevajanja

Korake prevajanja katerega koli programa pod namizjem Linuxa lahko povzamemo po teh korakih:

  1. Izvlecite prevedljive nize iz datoteke Python.
  2. Shranite nize v datoteko .pot , ki je v obliki, ki vam omogoča poznejše prevajanje v druge jezike.
  3. Začnite prevajati nize.
  4. Izvozi nove prevedene nize v datoteko .po , ki bo samodejno uporabljena ob spremembi sistemskega jezika.
  5. Dodajte nekaj majhnih programskih sprememb v glavno datoteko Python in datoteko .desktop .

In to je to! Po teh korakih bo vaša aplikacija pripravljena za uporabo za končne uporabnike z vsega sveta (bo .. Vendar morate svoj program prevesti v vse jezike po vsem svetu!), Se sliši enostavno, kajne? :-)

Najprej, da prihranite nekaj časa, s spodnje povezave prenesite datoteke projekta in jih izvlecite v domači imenik.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

Odprite datoteko\" setup.py " in opazite spremembe, ki smo jih naredili:

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

Odprite tudi datoteko\" myprogram " in si oglejte programske spremembe, ki smo jih naredili, vse spremembe so pojasnjene v komentarjih:

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

Zdaj .. Začnimo s prevajanjem našega programa. Najprej ustvarite datoteko .pot (datoteko, ki vsebuje vse prevedljive nize v programu), tako da boste
lahko začnete prevajati z naslednjim ukazom:

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

S tem boste ustvarili datoteko\" myprogram.pot " v mapi\" po " v glavni mapi projekta, ki vsebuje naslednjo kodo:

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

Zdaj, da začnete prevajati nize. Ustvarite ločeno datoteko za vsak jezik, v katerega želite prevesti svoj program, z uporabo jezikovnih kod\" ISO-639-1 " znotraj\" po ”, na primer, če želite svoj program prevesti v arabščino , ustvarite datoteko z imenom \" ar.po "in kopirajte vsebino iz datoteke\" myprogram.pot ".

Če želite svoj program prevesti v nemščino , ustvarite datoteko\" de.po " in kopirajte vsebino iz\" myprogram.pot "V to datoteko .. in tako eno, morate ustvariti datoteko za vsak jezik, v katerega želite prevesti svoj program.

Zdaj bomo delali na datoteki\" ar.po ", kopirali vsebino iz datoteke\" myprogram.pot " in jo dali v to datoteko ter uredili naslednji:

  1. NEKATER OPISNI NASLOV : tukaj lahko vnesete naslov svojega projekta, če želite.
  2. LETO IMETNIKA AVTORSKIH PRAVIC PAKETA : zamenjajte ga z letnico, v kateri ste ustvarili projekt.
  3. PAKET : zamenjajte ga z imenom paketa.
  4. PRVI AVTOR <[email >, LETO : to zamenjajte s svojim pravim imenom, e-poštnim naslovom in letom, v katerem ste datoteko prevedli.
  5. RAZLIČICA PAKETA : zamenjajte ga z različico paketa iz debian/kontrolne datoteke.
  6. LETO-MO-DA HO: MI + ZONE : ne potrebuje razlag, lahko ga spremenite na poljuben datum.
  7. POLNO IME <[email > : zamenjajte ga tudi s svojim imenom in e-poštnim naslovom.
  8. Jezikovna skupina : zamenjajte ga z imenom jezika, v katerega prevajate, na primer\"arabščina" ali\"francoščina".
  9. Jezik : tukaj morate vstaviti kodo ISO-639-1 za jezik, v katerega prevajate, na primer\"ar",\"fr",\"de" .. itd, celoten seznam najdete tukaj.
  10. CHARSET : ta korak je pomemben, zamenjajte ta niz z\"UTF-8" (brez narekovajev), ki podpira večino jezikov.

Zdaj začnite prevajati! Dodajte prevod za vsak niz za narekovaji v\" msgstr ". Shranite datoteko in zapustite. Dobra datoteka za prevod za
Arabski jezik kot primer bi moral izgledati takole:

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

Nič več ni treba storiti, samo pakirajte program z naslednjim ukazom:

$ debuild -us -uc

Zdaj poskusite namestiti novo ustvarjeni paket z naslednjim ukazom.

$ sudo dpkg -i myprogram_1.0_all.deb

In spremenite sistemski jezik s programom\" Jezikovna podpora " ali s katerim koli drugim programom v arabščino (ali jezik, v katerega ste prevedli datoteko):

Po izbiri bo vaš program preveden v arabski jezik.

Tu se konča naša serija o programiranju PyGObject za namizje Linux, seveda pa se lahko naučite še marsičesa iz reference Python GI API.

Kaj menite o seriji? Se vam zdi koristno? Ste lahko po tej seriji ustvarili svojo prvo aplikacijo? Delite nam svoje misli!