[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Automatic .po file translator
- To: "Development Discussions" <developer at arabeyes dot org>
- Subject: Automatic .po file translator
- From: "Ahmad Sayed" <ahmad dot ahmadsayed at gmail dot com>
- Date: Sun, 27 Apr 2008 23:52:35 +0300
Hi all,
I am working in arabizing, SDL based games, to test my code i need to have a translation, considering that the game using gettext, so I wrote this script that read en.po, file and take the msgstr and send it to google translate then consrtuct the ar.po automatically, I find it useful if i share it with you guys.
Important: do not use this script for production it will help you with the new files carefully revise the tranlsation after using it, because automatic translators is really bad.
Best regards,
Ahmed Sayed
#################################################
# Developed By : Ahmed Sayed Hassan
# Email : ahmad dot ahmadsayed at gmail dot com
#################################################
import re, string, urllib, urllib2
magic_start = '# # #'
magic_end = '$ $ $'
__languages = { 'english' : 'en',
'french' : 'fr',
'arabic' : 'ar',
}
def clean(text):
return ' '.join(string.replace(text.strip(), "\n", ' ').split())
def translate(phrase, from_lang, to_lang):
phrase = clean(phrase)
try:
from_code = __languages[from_lang.lower()]
to_code = __languages[to_lang.lower()]
except KeyError, lang:
raise Exception(lang + 'Not Available')
url = 'http://translate.google.com/translate_t'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
params = urllib.urlencode( {
'text' : phrase,
'langpair' : from_code + '|' + to_code } )
req = urllib2.Request(url, params, headers)
try:
response = urllib2.urlopen(req)
except IOError, what:
raise Exception("Couldn't talk to server: %s" % what)
except:
print "Unexpected error:", sys.exc_info()[0]
html = response.read()
return clean(html[html.rfind(magic_start) + len(magic_start):html.rfind(magic_end)])
def google_translate(phrase, from_language, through_language):
phrase = clean(phrase)
phrase = magic_start + ' ' + phrase + ' ' + magic_end
phrase = translate(phrase, from_language, through_language)
return phrase
if __name__ == '__main__':
import sys
if len(sys.argv) < 4:
print "Usage: translate <filename> <from_language> <to_language>"
fp = sys.stdout
f = open(sys.argv[1])
all = f.readlines()
for st in all:
if st.find('msgstr') > -1:
st = st[st.find('\"')+1:st.rfind('\"')]
st = google_translate(st, sys.argv[2], sys.argv[3])
fp.write('msgstr ' + '\"'+ st +'\"')
else:
fp.write(st)
fp.close()