translation.py :  » IDE » RUR » rurple1.0rc3 » rur_py » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » IDE » RUR 
RUR » rurple1.0rc3 » rur_py » translation.py
# -*- coding: latin-1 -*-

""" RUR-PLE: Roberge's Used Robot - a Python Learning Environment
    translation.py
    Version 1.0
    Author: Andre Roberge    Copyright  2006
    andre.roberge@gmail.com
"""

# This file can be modified to add translations to other languages.
# A "basic but complete" translation includes TWO files:
#  - a ".po" file, added in the proper directory (folder)
#  - a "rur.htm" file, also added in the proper directory (folder); this file
#    is the one displayed in the browser.  Ideally, this last folder should
#    also contain a translation of all the lessons! :-)  At the very least,
#    make a copy of an existing rur.htm file (e.g. the English one) and put
#    it in the appropriate folder.
#
#  For example, let HOME be the directory in which RUR_start.py is located.
#  The English .po file is located at HOME/rur_locale/en/english.po
#  and the English rur.htm file is located at HOME/lessons/en/rur.htm.

# wxPython comes in two basic "versions" (ansi and unicode). The recommended
# version is the unicode one; the following code, which has only been tested
# with earlier versions of rur-ple (circa 2005)
# should deal properly with the ansi version of wxPython.
import wx
def my_unicode(str):
    return str
def my_ansi(str):
    return str.encode('utf-8')
if "unicode" in wx.PlatformInfo:
    my_encode = my_unicode
else:
    my_encode = my_ansi

import os
import misc # needed for the locating rur-ple's home directory

# You can add a new language in the following dict.
# The first entry is the name of the language as you want it to appear in
# the menu;
# the second is simply an empty dict which will be filled with translation
# values when needed;
# the third is the language code (also the sub-directory name);
# the fourth is the name of the ".po" file, assumed to be utf-8 encoded.
languages = {
    'english': [my_encode('English'), {}, 'en', 'english.po'],
    'french': [my_encode(u'Franais'), {}, 'fr', 'french.po'],
    'german': [my_encode(u'Deutsch'), {}, 'de', 'german.po'],
    'spanish': [my_encode(u'Espaol'), {}, 'es', 'spanish.po'],
    'turkish': [my_encode(u'Trke'), {}, 'tr', 'turkish.po'],
    'welsh': [my_encode('Welsh'), {}, 'cy', 'welsh.po']
}

#============
#
# You should not need to modify any of the following.

# Note: the base directory is called "rur_locale" instead of "locale".
# If a directory named "locale" exists, wxPython assumes it uses the
# standard 'gettext' approach and expects some standard functions to
# be defined - which they are not in my customized version.
language_code = 'en'
_selected = None

_user_dir = os.path.join(os.path.expanduser("~"), ".rurple")
if not os.path.exists(_user_dir):  # first time ever
    try:
        os.makedirs(_user_dir)
    except:
        print "Could not create the user directory."
        _user_dir = None

_user_file = os.path.join(_user_dir, "rurple.lang")

def build_dict(filename):
    translation = {}
    """This function creates a Python dict from a simple standard .po file."""
    lines = open(filename).readlines()
    header = True
    msgid = False
    msgstr = False
    for line in lines:
        line = line.decode("utf-8") # encoding that was generated by poedit;
        if header:       # may need to be adapted to extract the information
            if line.startswith("#"): header = False # from the .po file
        else:
            if line.startswith("msgid "):
                msgid = True
                key = line[7:-2]  # strips extra quotes and newline character
                                  # as well as the "msgid " identifier
            elif line.startswith("msgstr "):
                msgstr = True
                msgid = False
                value = line[8:-2]
            elif line.startswith('"') or line.startswith("'"):
                if msgid:
                    key += line[1:-2]
                elif msgstr:
                    value += line[1:-2]
            elif line.startswith("\n"):
                key = key.replace("\\n","")
                value = value.replace("\\n", "\n")
                translation[key] = value
                msgid = False
                msgstr = False
    return translation

rur_locale = os.path.join(misc.HOME, "rur_locale")
for lang in languages:
    filename = os.path.join(rur_locale, languages[lang][2], languages[lang][3])
    languages[lang][1] = build_dict(filename)

def _select_code(lang_code):
    global _selected, _changed, language_code
    for lang in languages:
        if languages[lang][2] == lang_code:
            _selected = languages[lang][1]
            language_code = lang_code
            _save_language(lang_code)

def select(language):
    for lang in languages:
        if language == languages[lang][0]:
            _select_code(languages[lang][2])

def _(message):
    global _selected
    if _selected is None:
        _selected = 'en'
    key = message.replace("\n","")  # message is a key in a dict
    if key in _selected:
        return _selected[key]
    else:
        return message

def _save_language(lang):
    try:
        f = open(_user_file, 'w')
        f.write(lang)
        f.close()
    except:
        print "Could not save language preference"
        print "lang = ", lang
        print "_user_file = ", _user_file
        pass

def _load_default():
    global language_code
    try:
        lang = open(_user_file, 'r').read()
    except:
        print "Language preference not found; default to English."
        lang = 'en'
    _select_code(lang)

_load_default()  # import the default language at the start
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.