Vyhledávání na webu

Překlad aplikací PyGObject do různých jazyků – část 5


Pokračujeme s vámi v programovací sérii PyGObject a zde v této 5. části se naučíme, jak překládat naše aplikace PyGObject do různých jazyků. Překlad aplikací je důležitý, pokud je chcete publikovat pro svět, bude pro koncové uživatele uživatelsky přívětivější, protože ne každý rozumí angličtině.

Jak funguje proces překladu

Kroky překladu libovolného programu na ploše Linuxu můžeme shrnout pomocí těchto kroků:

  1. Extrahujte přeložitelné řetězce ze souboru Python.
  2. Uložte řetězce do souboru .pot, což je formát, který vám umožní přeložit jej později do jiných jazyků.
  3. Začněte překládat struny.
  4. Exportujte nové přeložené řetězce do souboru .po, který bude automaticky použit při změně jazyka systému.
  5. Přidejte malé programové změny do hlavního souboru Python a souboru .desktop.

A to je vše! Po provedení těchto kroků bude vaše aplikace připravena k použití pro koncové uživatele z celého světa (budete však muset svůj program přeložit do všech jazyků po celém světě!), Zní to jednoduše, že? :-)

Nejprve si stáhněte soubory projektu z níže uvedeného odkazu a extrahujte soubor ve svém domovském adresáři, abyste ušetřili čas.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

Otevřete soubor „setup.py“ a všimněte si změn, které jsme provedli:

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.

Otevřete také soubor „myprogram“ a podívejte se na programové změny, které jsme provedli, všechny změny jsou vysvětleny v komentářích:

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

Nyní... Začněme překládat náš program. Nejprve vytvořte soubor .pot (soubor, který obsahuje všechny přeložitelné řetězce v programu), abyste
můžete začít překládat pomocí následujícího příkazu:

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

Tím se vytvoří soubor „myprogram.pot“ ve složce „po“ v hlavní složce projektu, která obsahuje následující kód:

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

Nyní, abyste mohli začít překládat řetězce. Vytvořte samostatný soubor pro každý jazyk, do kterého chcete přeložit svůj program, pomocí jazykových kódů „ISO-639-1 “ uvnitř „po “, například pokud chcete přeložit svůj program do arabštiny, vytvořte soubor s názvem „ar.po “ a zkopírujte obsah ze složky „ myprogram.pot “.

Pokud chcete přeložit svůj program do němčiny, vytvořte soubor „de.po“ a zkopírujte obsah ze souboru „myprogram.pot“ file to it.. a tak jeden, musíte vytvořit soubor pro každý jazyk, do kterého chcete přeložit svůj program.

Nyní budeme pracovat na souboru „ar.po“, zkopírujeme obsah ze souboru „myprogram.pot“ a vložíme jej do tohoto souboru a upravíme následující :

  1. NĚJAKÝ POPISNÝ NÁZEV: zde můžete zadat název svého projektu, pokud chcete.
  2. ROK DRŽITELE AUTORSKÝCH PRÁV V BALÍČKU: nahraďte jej rokem, kdy jste projekt vytvořili.
  3. BALENÍ: nahraďte jej názvem balíčku.
  4. PRVNÍ AUTOR , ROK: nahraďte toto svým skutečným jménem, e-mailem a rokem, kdy jste soubor přeložili.
  5. VERZE BALÍKU: nahraďte ji verzí balíčku ze souboru debian/control.
  6. YEAR-PO-DA HO:MI+ZONE: nepotřebuje vysvětlení, můžete jej změnit na libovolné datum.
  7. CELÉ JMÉNO : nahraďte jej také svým jménem a e-mailem.
  8. Language-Team: nahraďte jej názvem jazyka, do kterého překládáte, například „arabština“ nebo „francouzština“.
  9. Jazyk: zde musíte vložit kód ISO-639-1 pro jazyk, do kterého překládáte, například „ar“, „fr“, „de“..atd. kompletní seznam najdete zde.
  10. CHARSET: tento krok je důležitý, nahraďte tento řetězec řetězcem „UTF-8“ (bez uvozovek), který podporuje většinu jazyků.

Nyní začněte překládat! Přidejte svůj překlad pro každý řetězec za uvozovky v „msgstr“. Uložte soubor a ukončete. Dobrý překladový soubor pro
Arabský jazyk jako příklad by měl vypadat takto:

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

Nezbývá nic jiného, než zabalit program pomocí následujícího příkazu:

debuild -us -uc

Nyní zkuste nainstalovat nově vytvořený balíček pomocí následujícího příkazu.

sudo dpkg -i myprogram_1.0_all.deb

A změňte jazyk systému pomocí programu „Language Support “ nebo pomocí jakéhokoli jiného programu na arabštinu (nebo jazyk, do kterého jste soubor přeložili):

Po výběru bude váš program přeložen do arabštiny.

Zde končí naše série o programování PyGObject pro desktop Linux, samozřejmě existuje mnoho dalších věcí, které se můžete naučit z oficiální dokumentace a reference Python GI API.

Co si o seriálu myslíte? Připadá vám to užitečné? Podařilo se vám vytvořit svou první aplikaci podle této série? Podělte se s námi o své myšlenky!