PyGObject lietojumprogrammu tulkošana dažādās valodās - 5. daļa


Mēs turpinām PyGObject programmēšanas sēriju ar jums, un šeit šajā 5. daļā mēs iemācīsimies tulkot mūsu PyGObject lietojumprogrammas dažādās valodās. Lietojumprogrammu tulkošana ir svarīga, ja to plānojat publicēt visā pasaulē. Tas lietotājiem būs draudzīgāks, jo ne visi saprot angļu valodu.

Kā darbojas tulkošanas process

Mēs varam apkopot jebkuras programmas tulkošanas darbības Linux darbvirsmā, izmantojot šīs darbības:

  1. Izvelciet tulkojamās virknes no Python faila.
  2. Saglabājiet virknes failā .pot , kas ir formāts, kas ļauj tos vēlāk tulkot citās valodās.
  3. Sāciet tulkot virknes.
  4. Eksportējiet jaunās tulkotās virknes failā .po , kas tiks automātiski izmantots, mainot sistēmas valodu.
  5. Pievienojiet dažas nelielas programmatiskas izmaiņas galvenajam Python failam un .desktop failam.

Un viss! Pēc šo darbību veikšanas jūsu lietojumprogramma būs gatava lietošanai galalietotājiem no visas pasaules (tomēr .. jums tomēr ir jātulko sava programma visās valodās visā pasaulē!). Vai izklausās viegli? :-)

Pirmkārt, lai ietaupītu laiku, lejupielādējiet projekta failus no saites zemāk un izvelciet failu savā mājas direktorijā.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

Atveriet failu “setup.py ” un pamaniet mūsu veiktās izmaiņas:

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

Atveriet arī failu “myprogram ” un skatiet mūsu veiktās programmatiskās izmaiņas. Visas izmaiņas ir izskaidrotas komentāros:

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

Tagad .. Sāksim tulkot mūsu programmu. Vispirms izveidojiet failu .pot (fails, kurā ir visas programmas tulkojamās virknes), lai jūs
var sākt tulkot, izmantojot šādu komandu:

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

Ar to tiks izveidots fails “myprogram.pot ” mapē “po” galvenajā projekta mapē, kurā ir šāds kods:

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

Tagad, lai sāktu tulkot virknes .. Katrai valodai, uz kuru vēlaties tulkot programmu, izveidojiet atdalītu failu, izmantojot valodu kodus ISO-639-1 Piemēram, mapē ”, ja vēlaties tulkot programmu arābu valodā , izveidojiet failu ar nosaukumu ar.po un nokopējiet saturu no mapes myprogram.pot ”.

Ja vēlaties pārtulkot programmu vācu valodā , izveidojiet failu de.po un nokopējiet saturu no vietnes myprogram.pot failu tajā .. un tātad, jums ir jāizveido fails katrai valodai, uz kuru vēlaties tulkot programmu.

Tagad mēs strādāsim pie faila “ ar.po ”, nokopēsim saturu no faila “ myprogram.pot ” un ievietosim to failā un rediģēsim šo :

  1. DAŽI APRAKSTA NOSAUKUMS : ja vēlaties, šeit varat ievadīt sava projekta nosaukumu.
  2. GADS PAKETES AUTORTIESĪBU ĪPAŠNIEKS : aizstājiet to ar gadu, kad esat izveidojis projektu.
  3. PACKAGE : aizstājiet to ar pakotnes nosaukumu.
  4. PIRMAIS AUTORS <[email >, GADS : aizstājiet to ar savu īsto vārdu, e-pasta adresi un gadu, kurā tulkojāt failu.
  5. PACKAGE VERSION : aizstājiet to ar pakotnes versiju no debian/control faila.
  6. YEAR-MO-DA HO: MI + ZONA : nav nepieciešams paskaidrojums, varat to mainīt uz jebkuru vēlamo datumu.
  7. PILNS VĀRDS <[aizsargāts ar e-pastu]> : aizstājiet arī savu vārdu un e-pasta adresi.
  8. Valodu komanda : aizstājiet to ar tās valodas nosaukumu, uz kuru tulkojat, piemēram, “arābu” vai “franču”.
  9. Valoda : šeit jāievieto ISO-639-1 kods valodai, uz kuru tulkojat, piemēram, “ar”, “fr”, “de” utt. , pilnu sarakstu varat atrast šeit.
  10. CHARSET : šī darbība ir svarīga, aizstājiet šo virkni ar “UTF-8” (bez pēdiņām), kas atbalsta lielāko daļu valodu.

Tagad sāc tulkot! Pievienojiet tulkojumu katrai virknei pēc pēdiņām “ msgstr ”. Saglabājiet failu un izejiet. Labs tulkošanas fails
Arābu valodai kā piemēram jāizskatās šādi:

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

Vairāk nav ko darīt, vienkārši iesaiņojiet programmu, izmantojot šādu komandu:

$ debuild -us -uc

Tagad mēģiniet instalēt jauno izveidoto pakotni, izmantojot šādu komandu.

$ sudo dpkg -i myprogram_1.0_all.deb

Un nomainiet sistēmas valodu, izmantojot programmu Valodas atbalsts vai izmantojot jebkuru citu programmu uz Arābu (vai valodu, uz kuru esat tulkojis failu):

Pēc atlases jūsu programma tiks tulkota arābu valodā.

Šeit beidzas mūsu sērija par PyGObject programmēšanu Linux darbvirsmai, protams, ir daudzas citas lietas, kuras varat uzzināt no Python GI API atsauces.

Ko jūs domājat par sēriju? Vai jums tas šķiet noderīgi? Vai jūs varējāt izveidot savu pirmo lietojumprogrammu, sekojot šai sērijai? Dalieties ar mums savās domās!