Oversættelse af PyGObject-applikationer til forskellige sprog - Del 5


Vi fortsætter PyGObject-programmeringsserien med dig, og her i denne 5. del vil vi lære at oversætte vores PyGObject-applikationer til forskellige sprog. Det er vigtigt at oversætte dine applikationer, hvis du vil udgive det for hele verden, det vil være mere brugervenligt for slutbrugere, fordi ikke alle forstår engelsk.

Sådan fungerer oversættelsesprocessen

Vi kan opsummere trinene til oversættelse af ethvert program under Linux-skrivebordet ved hjælp af disse trin:

  1. Uddrag de oversættelige strenge fra Python-filen.
  2. Gem strengene i en .pot -fil, der er format, der giver dig mulighed for at oversætte den senere til andre sprog.
  3. Begynd at oversætte strengene.
  4. Eksporter de nye oversatte strenge til en .po fil, der automatisk bruges, når systemsproget ændres.
  5. Tilføj nogle små programmatiske ændringer til Python-hovedfilen og .desktop -filen.

Og det er det! Efter at have udført disse trin, vil din applikation være klar til brug for slutbrugere fra hele verden (vil .. Du skal dog oversætte dit program til alle sprog over hele kloden!), Det lyder let, ikke? :-)

For at spare tid skal du først downloade projektfiler fra nedenstående link og udpakke filen i dit hjemmekatalog.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

Åbn filen " setup.py " og bemærk de ændringer, vi har foretaget:

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

Åbn også filen " mit program " og se de programmatiske ændringer, som vi har foretaget. Alle ændringer er forklaret i kommentarerne:

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

Nu .. Lad os begynde at oversætte vores program. Opret først .pot -filen (en fil, der indeholder alle de oversættelige strenge i programmet), så du
kan begynde at oversætte ved hjælp af følgende kommando:

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

Dette opretter filen " myprogram.pot " inde i mappen " po " i hovedprojektmappen, der indeholder følgende kode:

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

For at begynde at oversætte strengene .. Opret en separat fil for hvert sprog, som du vil oversætte dit program til ved hjælp af sprogkoderne " ISO-639-1 " inden for " po ”-mappe, hvis du f.eks. vil oversætte dit program til arabisk , skal du oprette en fil kaldet“ ar.po ”og kopiere indholdet fra“ myprogram.pot ”fil til den.

Hvis du vil oversætte dit program til tysk , skal du oprette en " de.po " -fil og kopiere indholdet fra " mitprogram.pot " fil til den .. og så en, skal du oprette en fil for hvert sprog, som du vil oversætte dit program til.

Nu skal vi arbejde på filen " ar.po ", kopiere indholdet fra filen " myprogram.pot " og placere det i den fil og redigere følgende :

  1. NOGEN BESKRIVENDE TITEL : Du kan indtaste titlen på dit projekt her, hvis du vil.
  2. ÅR PAKKENS INDEHAVER AF OPHAVSRET : udskift det med det år, du har oprettet projektet.
  3. PAKKE : udskift den med navnet på pakken.
  4. FØRSTE FORFATTER <[email >, ÅR : erstat dette med dit rigtige navn, e-mail og det år, hvor du oversatte filen.
  5. PAKKEVERSION : udskift den med pakkeversionen fra debian/kontrolfilen.
  6. YEAR-MO-DA HO: MI + ZONE : behøver ikke forklaring, du kan ændre den til en hvilken som helst dato.
  7. FULDT NAVN <[e-mail-beskyttet]> : udskift det også med dit navn og e-mail.
  8. Sprog-team : udskift det med navnet på det sprog, du oversætter til, f.eks. "arabisk" eller "fransk".
  9. Sprog : her skal du indsætte ISO-639-1-koden for det sprog, du oversætter til, for eksempel "ar", "fr", "de" .. osv. , kan du finde en komplet liste her.
  10. CHARSET : dette trin er vigtigt, erstat denne streng med “UTF-8” (uden anførselstegn), der understøtter de fleste sprog.

Begynd nu med at oversætte! Tilføj din oversættelse for hver streng efter citaterne i “ msgstr ”. Gem filen, og afslut. En god oversættelsesfil til
Arabisk sprog som et eksempel skal se sådan ud:

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

Der er ikke mere at gøre, bare pakke programmet ved hjælp af følgende kommando:

$ debuild -us -uc

Prøv nu at installere den nyoprettede pakke ved hjælp af følgende kommando.

$ sudo dpkg -i myprogram_1.0_all.deb

Og skift systemsproget ved hjælp af programmet " Sprogunderstøttelse " eller ved hjælp af et hvilket som helst andet program til Arabisk (eller det sprog, som du har oversat din fil til):

Efter valg er dit program oversat til arabisk.

Her slutter vores serie om PyGObject-programmering til Linux-skrivebordet, selvfølgelig er der mange andre ting, du kan lære af Python GI API-reference ..

Hvad synes du om serien? Synes du det er nyttigt? Kunne du oprette din første applikation ved at følge denne serie? Del os dine tanker!