„PyGObject“ programų vertimas į skirtingas kalbas - 5 dalis


Su jumis tęsiame „PyGObject“ programavimo seriją ir čia, šioje 5-ojoje dalyje, sužinosime, kaip išversti mūsų PyGObject programas į skirtingas kalbas. Versti programas yra svarbu, jei ketinate ją skelbti pasauliui, ji bus patogesnė vartotojams, nes ne visi supranta anglų kalbą.

Kaip veikia vertimo procesas

Mes galime apibendrinti bet kurios programos vertimo „Linux“ darbalaukyje veiksmus atlikdami šiuos veiksmus:

  1. Ištraukite verčiamas eilutes iš „Python“ failo.
  2. Išsaugokite eilutes į .pot failą, kurio formatas leidžia vėliau juos išversti į kitas kalbas.
  3. Pradėkite versti eilutes.
  4. Eksportuokite naujas išverstas eilutes į .po failą, kuris bus automatiškai naudojamas pakeitus sistemos kalbą.
  5. Pridėkite keletą nedidelių programinių pakeitimų pagrindiniame „Python“ faile ir .desktop faile.

Štai ir viskas! Atlikus šiuos veiksmus, jūsų programa bus paruošta naudoti galutiniams vartotojams iš viso pasaulio (ar .. Vis dėlto turėsite išversti savo programą į visas pasaulio kalbas!), Skamba lengvai, ar ne? :-)

Pirma, norėdami sutaupyti šiek tiek laiko, atsisiųskite projekto failus iš žemiau esančio saito ir išskleiskite failą savo namų kataloge.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

Atidarykite failą „setup.py “ ir pastebėkite atliktus pakeitimus:

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

Taip pat atidarykite „myprogram “ failą ir peržiūrėkite programinius pakeitimus, kuriuos atlikome. Visi pakeitimai paaiškinti komentaruose:

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

Dabar .. Pradėkime versti savo programą. Pirmiausia sukurkite failą .pot (failą, kuriame yra visos verčiamos programos eilutės), kad
galite pradėti versti naudodami šią komandą:

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

Tai sukurs failą „myprogram.pot “, esantį pagrindinio projekto aplanko aplanke „ po “, kuriame yra šis kodas:

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

Dabar, norėdami pradėti versti eilutes .. Sukurkite atskirą failą kiekvienai kalbai, į kurią norite išversti savo programą, naudodami „ po“ esančius kalbų kodus „ ISO-639-1 “. Pvz., aplanką “, jei norite išversti programą į arabų kalbą , sukurkite failą pavadinimu„ ar.po “ir nukopijuokite turinį iš aplanko myprogram.pot “failą.

Jei norite išversti savo programą į vokiečių kalbą , sukurkite „ de.po “ failą ir nukopijuokite turinį iš „ myprogram.pot “ failą į jį .. ir taip vienas, turite sukurti failą kiekvienai kalbai, į kurią norite išversti savo programą.

Dabar dirbsime prie failo „ ar.po “, nukopijuosime failo „ myprogram.pot “ turinį ir įdėsime jį į tą failą bei redaguosime toliau pateiktą informaciją. :

  1. KAI KURIS APRAŠYMO PAVADINIMAS : jei norite, čia galite įvesti savo projekto pavadinimą.
  2. METŲ PAKETO AUTORIŲ TEISIŲ TURĖTOJAS : pakeiskite jį metais, kuriais sukūrėte projektą.
  3. PAKUOTĖ : pakeiskite jį paketo pavadinimu.
  4. PIRMASIS AUTORIUS [[email >, YEAR : pakeiskite tai savo tikruoju vardu, el. pašto adresu ir failo išvertimo metais.
  5. PAKUOTĖS VERSIJA : pakeiskite ją paketo versija iš debian/control failo.
  6. YEAR-MO-DA HO: MI + ZONA : paaiškinti nereikia, galite pakeisti ją į bet kurią norimą datą.
  7. VISAS VARDAS <[apsaugotas el. paštu]> : taip pat pakeiskite savo vardą ir el. pašto adresą.
  8. Kalbos komanda : pakeiskite ją kalbos, į kurią verčiate, pavadinimu, pvz., „arabų“ arba „prancūzų“.
  9. Kalba : čia turite įterpti kalbos, į kurią verčiate, ISO-639-1 kodą, pvz., „ar“, „fr“, „de“ ir kt. , visą sąrašą galite rasti čia.
  10. CHARSET : šis žingsnis yra svarbus, pakeiskite šią eilutę „UTF-8“ (be kabučių), palaikančia daugumą kalbų.

Dabar pradėkite versti! Pridėkite kiekvienos eilutės vertimą po kabutėmis „ msgstr “. Išsaugokite failą ir išeikite. Geras vertimo failas, skirtas
Arabų kalba kaip pavyzdys turėtų atrodyti taip:

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

Daugiau nieko nereikia daryti, tiesiog pakuokite programą naudodami šią komandą:

$ debuild -us -uc

Dabar pabandykite įdiegti naują sukurtą paketą naudodami šią komandą.

$ sudo dpkg -i myprogram_1.0_all.deb

Ir pakeiskite sistemos kalbą naudodamiesi „ kalbos palaikymo “ programa arba naudodamiesi bet kuria kita programa į arabų kalbą (arba kalbą, į kurią išvertėte failą):

Pasirinkus, jūsų programa bus išversta į arabų kalbą.

Čia baigiama mūsų serija apie „PyGObject“ programavimą „Linux“ darbalaukyje, žinoma, yra daugybė kitų dalykų, kuriuos galite sužinoti iš „Python GI API“ nuorodos.

Ką manote apie serialą? Ar jums tai naudinga? Ar sekdamas šią seriją sugebėjote sukurti savo pirmąją programą? Pasidalink mums savo mintimis!