PyGObject programmalaryny dürli dillere terjime etmek - 5-nji bölüm


PyGObject programmirleme seriýasyny siziň bilen dowam etdirýäris we şu 5-nji bölüminde PyGObject programmalarymyzy dürli dillere nädip terjime etmelidigini öwreneris. Arzalaryňyzy terjime etmek möhümdir, ony dünýä üçin çap etmek isleseňiz, ahyrky ulanyjylar üçin has amatly bolar, sebäbi hemmeler iňlis diline düşünmeýär.

Terjime prosesi nähili işleýär

Linux ädiminiň aşagyndaky islendik programmany terjime etmegiň ädimlerini şu ädimleri ulanyp jemläp bileris:

  1. Python faýlyndan terjime edilýän setirleri çykaryň.
  2. Setirleri soň başga dillere terjime etmäge mümkinçilik berýän formatda .pot faýlyna ýazdyryň.
  3. Setirleri terjime edip başlaň.
  4. Täze terjime edilen setirleri ulgam dili üýtgedilende awtomatiki usulda ulanyljak .po faýlyna eksport ediň.
  5. Esasy Python faýlyna we .desktop faýlyna käbir ownuk programma üýtgeşmeleri goşuň.

Ine! Bu ädimleri ýerine ýetireniňizden soň, programmaňyz dünýäniň dürli künjeginden soňky ulanyjylar üçin ulanmaga taýyn bolar (şeýlemi? Programmaňyzy dünýäniň ähli dillerine terjime etmeli bolarsyňyz!), Ses aňsat dälmi? :-)

Ilki bilen wagt tygşytlamak üçin taslama faýllaryny aşakdaky baglanyşykdan göçürip alyň we faýly öý katalogyňyzdan çykaryň.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

\ setup.py faýlyny açyň we eden üýtgeşmelerimize üns beriň:

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

Şeýle hem\ myprogram faýly açyň we eden programma üýtgeşmelerimizi görüň, ähli üýtgeşmeler teswirlerde düşündirilýär:

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

Indi .. Geliň, programmamyzy terjime edip başlalyň. Ilki bilen
aşakdaky buýrugy ulanyp terjime edip biler:

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

Bu, aşakdaky kody öz içine alýan esasy taslama bukjasyndaky\ po bukjasynyň içinde\ myprogram.pot faýlyny döreder:

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

Indi setirleri terjime edip başlamak üçin .. Programmaňyzy terjime etmek isleýän her diliňiz üçin\ ISO-639-1 dil kodlaryny\ po ”bukjasy, meselem, programmaňyzy arapça terjime etmek isleseňiz,\ ar.po atly bir faýl dörediň we mazmuny göçüriň\ myprogram.pot faýlyndan oňa.

Programmaňyzy nemes diline terjime etmek isleseňiz,\ de.po faýly dörediň we mazmuny\ myprogram.pot Faýl beriň .. we şonuň üçinem, programmaňyzy terjime etmek isleýän her diliňiz üçin bir faýl döretmeli.

Indi\ ar.po faýlynyň üstünde işläris, mazmuny\ myprogram.pot faýlyndan göçüreris we şol faýlyň içine salarys we redaktirläris aşakdakylar:

  1. KESIR DÜZGÜN TITLE : isleseňiz taslamanyňyzyň adyny şu ýere girizip bilersiňiz.
  2. <<
  3. GURBAN : paketiň ady bilen çalşyň.
  4. BIRINJI AUTOR <
  5. GURBAN WERSI : ony debian/dolandyryş faýlyndan paket wersiýasy bilen çalyşyň.
  6. ARYL-MO-DA HO: MI + ZONA : düşündiriş gerek däl, islän senä üýtgedip bilersiňiz.
  7. DOLY ADY <[e-poçta goralýar]> : adyňyzy we e-poçtaňyzy hem çalşyň.
  8. Dil topary : ony terjime edýän diliňiziň ady bilen çalşyň, mysal üçin\Arap ýa-da\Fransuz.
  9. Dil : şu ýerde, terjime edýän diliňiz üçin ISO-639-1 koduny girizmeli, mysal üçin\ar,\fr,\de ..etc, doly sanawy şu ýerden tapyp bilersiňiz.
  10. CHARSET : bu ädim möhümdir, bu setiri köp dilleri goldaýan\UTF-8 (sitatasyz) bilen çalşyň.

Indi terjime edip başlaň!\ msgstr daky sitatalardan soň her setir üçin terjimäňizi goşuň. Faýly ýazdyryň we çykyň.
üçin gowy terjime faýly Mysal hökmünde arap dili şeýle bolmaly:

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

Başga etmeli zat ýok, diňe aşakdaky buýrugy ulanyp programmany gaplaň:

$ debuild -us -uc

Indi aşakdaky buýrugy ulanyp täze döredilen bukjany gurmaga synanyşyň.

$ sudo dpkg -i myprogram_1.0_all.deb

\ Dil goldawy programmasyny ulanyp ýa-da başga bir programmany arapça (ýa-da faýlyňyzy terjime eden diliňiz) ulanyp ulgam dilini üýtgediň:

Saýlanyňyzdan soň programmaňyz arap diline terjime ediler.

Bu ýerde Linux iş stoly üçin PyGObject programmirleme baradaky seriýamyz gutarýar, elbetde Python GI API salgysyndan öwrenip boljak başga-da köp zat bar ..

Bu seriýa barada näme pikir edýärsiňiz? Peýdalymy? Bu seriýany yzarlap, ilkinji programmaňyzy döredip bildiňizmi? Pikirleriňizi bize paýlaşyň!


Rightshli hukuklar goralandyr. © Linux-Console.net • 2019-2024