PyGObject Uygulamalarını Farklı Dillere Çevirmek – Bölüm 5


PyGObject programlama serisine sizlerle birlikte devam ediyoruz ve bu 5. bölümde PyGObject uygulamalarımızı farklı dillere nasıl çevireceğimizi öğreneceğiz. Uygulamalarınızı dünya çapında yayınlayacaksanız çevirmek önemlidir, herkes İngilizce anlamadığından son kullanıcılar için daha kullanıcı dostu olacaktır.

Çeviri Süreci Nasıl Çalışır?

Herhangi bir programın Linux masaüstüne çevrilmesinin adımlarını şu adımları kullanarak özetleyebiliriz:

  1. Çevrilebilir dizeleri Python dosyasından çıkarın.
  2. Dizeleri, daha sonra diğer dillere çevirmenize olanak tanıyan formattaki bir .pot dosyasına kaydedin.
  3. Dizeleri çevirmeye başlayın.
  4. Yeni çevrilmiş dizeleri, sistem dili değiştirildiğinde otomatik olarak kullanılacak bir .po dosyasına aktarın.
  5. Ana Python dosyasına ve .desktop dosyasına bazı küçük programlı değişiklikler ekleyin.

Ve bu kadar! Bu adımları uyguladıktan sonra uygulamanız dünyanın her yerindeki son kullanıcıların kullanımına hazır olacaktır (ama programınızı dünyadaki tüm dillere çevirmeniz gerekecek!), Kulağa kolay geliyor değil mi? :-)

Öncelikle biraz zaman kazanmak için proje dosyalarını aşağıdaki bağlantıdan indirin ve dosyayı ana dizininize çıkarın.

  1. https://copy.com/TjyZAaNgeQ6BB7yn

setup.py ” dosyasını açın ve yaptığımız değişiklikleri fark edin:

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.

Ayrıca “programım” dosyasını açın ve yaptığımız programatik değişiklikleri görün, tüm değişiklikler yorumlarda açıklanmıştı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()

Şimdi.. Programımızı tercüme etmeye başlayalım. Öncelikle .pot dosyasını (programdaki tüm çevrilebilir dizeleri içeren bir dosya) oluşturun, böylece
aşağıdaki komutu kullanarak çeviriye başlayabilirsiniz:

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

Bu, aşağıdaki kodu içeren ana proje klasöründeki “po” klasörü içinde “myprogram.pot” dosyasını oluşturacaktır:

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

Şimdi dizeleri çevirmeye başlamak için.. Programınızı çevirmek istediğiniz her dil için “po” içindeki “ISO-639-1 ” dil kodlarını kullanarak ayrı bir dosya oluşturun. ” klasörüne gidin, örneğin programınızı Arapça diline çevirmek istiyorsanız “ar.po” adında bir dosya oluşturun ve içeriğini “ myprogram.pot ” dosyasını buraya kopyalayın.

Programınızı Almanca'ya çevirmek istiyorsanız, bir “de.po” dosyası oluşturun ve “myprogram.pot” içindeki içeriği kopyalayın. dosyanızı ona aktarın.. ve böylece, programınızı çevirmek istediğiniz her dil için bir dosya oluşturmalısınız.

Şimdi “ar.po” dosyası üzerinde çalışıp, “myprogram.pot” dosyasındaki içerikleri kopyalayıp o dosyanın içine koyacağız ve aşağıdakileri düzenleyeceğiz. :

  1. BAZI AÇIKLAMALI BAŞLIK: İsterseniz projenizin başlığını buraya girebilirsiniz.
  2. PAKETİN TELİF HAKKI SAHİBİ YIL: bunu projeyi oluşturduğunuz yılla değiştirin.
  3. PACKAGE: bunu paketin adıyla değiştirin.
  4. İLK YAZAR , YIL: bunu gerçek adınız, E-posta adresiniz ve dosyayı çevirdiğiniz yıl ile değiştirin.
  5. PAKET SÜRÜMÜ: bunu debian/control dosyasındaki paket sürümüyle değiştirin.
  6. YIL-MO-DA HO:MI+ZONE: açıklamaya gerek yoktur, istediğiniz tarihle değiştirebilirsiniz.
  7. TAM ADI : ayrıca adınızı ve E-posta adresinizi de değiştirin.
  8. Dil Ekibi: Bunu çeviri yaptığınız dilin adıyla değiştirin, örneğin “Arapça” veya “Fransızca”.
  9. Dil: buraya çeviri yapacağınız dilin ISO-639-1 kodunu girmelisiniz, örneğin “ar”, “fr”, “de”..vs. tam listeyi burada bulabilirsiniz.
  10. CHARSET: bu adım önemlidir, bu dizeyi çoğu dili destekleyen “UTF-8” (tırnak işaretleri olmadan) ile değiştirin.

Şimdi çeviriye başlayın! “msgstr” içindeki tırnak işaretlerinden sonra her dize için çevirinizi ekleyin. Dosyayı kaydet ve çık.
için iyi bir çeviri dosyası Örnek olarak Arapça dili şöyle görünmelidir:

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

Yapılacak başka bir şey yok, aşağıdaki komutu kullanarak programı paketlemeniz yeterli:

debuild -us -uc

Şimdi aşağıdaki komutu kullanarak yeni oluşturulan paketi kurmayı deneyin.

sudo dpkg -i myprogram_1.0_all.deb

Ve “Dil Desteği ” programını veya başka bir programı kullanarak sistem dilini Arapça (veya dosyanızı çevirdiğiniz dil) olarak değiştirin:

Seçim sonrasında programınız Arapça diline çevrilecektir.

Linux masaüstü için PyGObject programlama hakkındaki serimiz burada sona eriyor, elbette resmi belgelerden ve Python GI API referansından öğrenebileceğiniz başka birçok şey var.

Dizi hakkında ne düşünüyorsunuz? Yararlı buluyor musunuz? Bu seriyi takip ederek ilk uygulamanızı oluşturabildiniz mi? Düşüncelerinizi bizimle paylaşın!