i18n and i18n testing
darcs-hash:20070516154706-86b55-26ff27dcec5af50f9024791cebfccf4d07166618.gz
This commit is contained in:
@@ -87,7 +87,7 @@ class JCLComponent(Component, object):
|
||||
disco_category, \
|
||||
disco_type)
|
||||
# default values
|
||||
self.name = "Jabber Component Library generic component"
|
||||
self.name = lang.get_default_lang_class().component_name
|
||||
self.spool_dir = "."
|
||||
self.db_connection_str = db_connection_str
|
||||
self.version = VERSION
|
||||
@@ -229,6 +229,13 @@ class JCLComponent(Component, object):
|
||||
name = to_jid.node
|
||||
account_type = to_jid.resource
|
||||
lang_class = self.lang.get_lang_class_from_node(info_query.get_node())
|
||||
# * root
|
||||
# |-* account_type1
|
||||
# | |-* account1
|
||||
# | |-* account2
|
||||
# |-* account_type2
|
||||
# |-* account3
|
||||
# |-* account4
|
||||
if name is not None: # account
|
||||
self.__logger.debug("Applying behavior on account " + name)
|
||||
result = account_handler(name, from_jid, account_type or "", lang_class)
|
||||
@@ -264,7 +271,7 @@ class JCLComponent(Component, object):
|
||||
lambda name, from_jid, account_type, lang_class: \
|
||||
self.account_manager.account_type_disco_get_items(from_jid, account_type), \
|
||||
lambda name, from_jid, account_type, lang_class: \
|
||||
self.account_manager.root_disco_get_items(from_jid))
|
||||
self.account_manager.root_disco_get_items(from_jid, lang_class))
|
||||
|
||||
def handle_get_version(self, info_query):
|
||||
"""Get Version handler
|
||||
@@ -543,16 +550,23 @@ class AccountManager(object):
|
||||
+ " class not in account_classes")
|
||||
return disco_items
|
||||
|
||||
def root_disco_get_items(self, from_jid):
|
||||
def root_disco_get_items(self, from_jid, lang_class):
|
||||
"""Discovery get_items on root node"""
|
||||
disco_items = DiscoItems()
|
||||
regexp_type = re.compile("(.*)Account$")
|
||||
if self.has_multiple_account_type: # list accounts with only one type declared
|
||||
list_func = lambda disco_items, account_class, bare_from_jid, account_type: \
|
||||
DiscoItem(disco_items, \
|
||||
def _list_account_types(disco_items, account_class, bare_from_jid, account_type):
|
||||
type_label_attr = "type_" + account_type.lower() + "_name"
|
||||
if hasattr(lang_class, type_label_attr):
|
||||
type_label = getattr(lang_class, type_label_attr)
|
||||
else:
|
||||
type_label = account_type
|
||||
return DiscoItem(disco_items, \
|
||||
JID(unicode(self.component.jid) + "/" + account_type), \
|
||||
account_type, \
|
||||
account_type)
|
||||
type_label)
|
||||
list_func = _list_account_types
|
||||
|
||||
else:
|
||||
list_func = self._list_accounts
|
||||
|
||||
@@ -578,7 +592,6 @@ class AccountManager(object):
|
||||
info_query = info_query.make_result_response()
|
||||
account_class = self._get_account_class(account_type + "Account")
|
||||
self.db_connect()
|
||||
# TODO : do it only one time
|
||||
accounts = account_class.select(\
|
||||
AND(account_class.q.name == name, \
|
||||
account_class.q.user_jid == unicode(from_jid.bare())))
|
||||
|
||||
@@ -53,7 +53,6 @@ class FeederComponent(JCLComponent):
|
||||
port, \
|
||||
db_connection_str, \
|
||||
lang = lang)
|
||||
self.name = "Generic Feeder Component"
|
||||
# Define default feeder and sender, can be override
|
||||
self.feeder = Feeder(self)
|
||||
self.sender = Sender(self)
|
||||
|
||||
@@ -121,6 +121,10 @@ class MockStreamRaiseException(MockStream):
|
||||
def loop_iter(self, timeout):
|
||||
raise Exception("in loop error")
|
||||
|
||||
class LangExample(Lang):
|
||||
class en(Lang.en):
|
||||
type_example_name = "Type Example"
|
||||
|
||||
class JCLComponent_TestCase(unittest.TestCase):
|
||||
###########################################################################
|
||||
# Utility methods
|
||||
@@ -441,6 +445,7 @@ class JCLComponent_TestCase(unittest.TestCase):
|
||||
|
||||
def test_disco_get_items_2types_no_node(self):
|
||||
"""get_items on main entity. Must account types"""
|
||||
self.comp.lang = LangExample()
|
||||
self.comp.account_manager.account_classes = (ExampleAccount, Example2Account)
|
||||
account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL)
|
||||
account11 = ExampleAccount(user_jid = "user1@test.com", \
|
||||
@@ -458,10 +463,11 @@ class JCLComponent_TestCase(unittest.TestCase):
|
||||
disco_item = disco_items.get_items()[0]
|
||||
self.assertEquals(unicode(disco_item.get_jid()), unicode(self.comp.jid) + "/Example")
|
||||
self.assertEquals(disco_item.get_node(), "Example")
|
||||
self.assertEquals(disco_item.get_name(), "Example")
|
||||
self.assertEquals(disco_item.get_name(), LangExample.en.type_example_name)
|
||||
disco_item = disco_items.get_items()[1]
|
||||
self.assertEquals(unicode(disco_item.get_jid()), unicode(self.comp.jid) + "/Example2")
|
||||
self.assertEquals(disco_item.get_node(), "Example2")
|
||||
# no name in language class for type Example2, so fallback on type name
|
||||
self.assertEquals(disco_item.get_name(), "Example2")
|
||||
|
||||
# Be careful, account_classes cannot contains parent classes
|
||||
|
||||
165
src/jcl/lang.py
165
src/jcl/lang.py
@@ -66,11 +66,17 @@ class Lang:
|
||||
"""
|
||||
return self.get_lang_class(self.get_lang_from_node(node))
|
||||
|
||||
def get_default_lang_class(self):
|
||||
"""Return default lang class according to self.default_lang"""
|
||||
return self.get_lang_class(self.default_lang)
|
||||
|
||||
class en:
|
||||
register_title = u"Jabber Mail connection registration"
|
||||
component_name = u"Jabber Component Library generic component"
|
||||
register_title = u"Connection registration"
|
||||
register_instructions = u"Enter connection parameters"
|
||||
message_status = u" accounts registered."
|
||||
account_name = u"Connection name"
|
||||
|
||||
password_saved_for_session = u"Password will be kept during your " \
|
||||
u"Jabber session"
|
||||
ask_password_subject = u"Password request"
|
||||
@@ -78,8 +84,18 @@ class Lang:
|
||||
"for account %s\n"
|
||||
new_account_message_subject = u"New account '%s' created"
|
||||
new_account_message_body = u"New account created"
|
||||
update_account_message_subject = u"Updated account '%s'"
|
||||
update_account_message_body = u"Updated account"
|
||||
|
||||
mandatory_field = u"%s is required"
|
||||
|
||||
field_chat_action = u"Action when state is 'Free For Chat'"
|
||||
field_online_action = u"Action when state is 'Online'"
|
||||
field_away_action = u"Action when state is 'Away'"
|
||||
field_xa_action = u"Action when state is 'Not Available'"
|
||||
field_dnd_action = u"Action when state is 'Do not Disturb'"
|
||||
field_offline_action = u"Action when state is 'Offline'"
|
||||
|
||||
field_action_0 = u"Do nothing"
|
||||
field_chat_action_0 = field_action_0
|
||||
field_online_action_0 = field_action_0
|
||||
@@ -88,84 +104,49 @@ class Lang:
|
||||
field_dnd_action_0 = field_action_0
|
||||
field_offline_action_0 = field_action_0
|
||||
|
||||
update_account_message_subject = u"Updated account '%s'"
|
||||
update_account_message_body = u"Updated account"
|
||||
check_error_subject = u"Error while checking emails."
|
||||
check_error_body = u"An error appears while checking emails:\n\t%s"
|
||||
|
||||
# account_login = u"Login"
|
||||
# account_password = u"Password"
|
||||
# account_password_store = u"Store password on Jabber server?"
|
||||
# account_host = u"Host"
|
||||
# account_port = u"Port"
|
||||
# account_type = u"Mail server type"
|
||||
# account_mailbox = u"Mailbox path (IMAP)"
|
||||
# account_ffc_action = u"Action when state is 'Free For Chat'"
|
||||
# account_online_action = u"Action when state is 'Online'"
|
||||
# account_away_action = u"Action when state is 'Away'"
|
||||
# account_xa_action = u"Action when state is 'Not Available'"
|
||||
# account_dnd_action = u"Action when state is 'Do not Disturb'"
|
||||
# account_offline_action = u"Action when state is 'Offline'"
|
||||
# account_check_interval = u"Mail check interval (in minutes)"
|
||||
# account_live_email_only = u"Reports only emails received while " \
|
||||
# u"connected to Jabber"
|
||||
# action_nothing = u"Do nothing"
|
||||
# action_retrieve = u"Retrieve mail"
|
||||
# action_digest = u"Send mail digest"
|
||||
# update_title = u"Jabber mail connection update"
|
||||
# update_instructions = u"Modifying connection '%s'"
|
||||
# connection_label = u"%s connection '%s'"
|
||||
# new_mail_subject = u"New email from %s"
|
||||
# new_digest_subject = u"%i new email(s)"
|
||||
check_error_subject = u"Error"
|
||||
check_error_body = u"An error has occured:\n\t%s"
|
||||
|
||||
class fr:
|
||||
register_title = u"Enregistrement d'une nouvelle connexion à un " \
|
||||
u"serveur email."
|
||||
component_name = u"composant générique Jabber Component Library"
|
||||
register_title = u"Enregistrement d'une nouvelle connexion"
|
||||
register_instructions = u"Entrer les paramètres de connexion"
|
||||
message_status = u" comptes enregistrés."
|
||||
account_name = u"Nom de la connexion"
|
||||
account_login = u"Nom d'utilisateur"
|
||||
account_password = u"Mot de passe"
|
||||
account_password_store = u"Sauvegarder le mot de passe sur le " \
|
||||
u"serveur Jabber ?"
|
||||
account_host = u"Adresse du serveur email"
|
||||
account_port = u"Port du serveur email"
|
||||
account_type = u"Type du serveur email"
|
||||
account_mailbox = u"Chemin de la boîte email (IMAP)"
|
||||
account_ffc_action = u"Action lorsque l'état est 'Free For Chat'"
|
||||
account_online_action = u"Action lorsque l'état est 'Online'"
|
||||
account_away_action = u"Action lorsque l'état est 'Away'"
|
||||
account_xa_action = u"Action lorsque l'état est 'Not Available'"
|
||||
account_dnd_action = u"Action lorsque l'état est 'Do not Disturb'"
|
||||
account_offline_action = u"Action lorsque l'état est 'Offline'"
|
||||
account_check_interval = u"Interval de vérification de nouveaux " \
|
||||
u"emails (en minutes)"
|
||||
account_live_email_only = u"Vérifier les nouveaux emails seulement " \
|
||||
"lorsqu'une session Jabber est ouverte"
|
||||
action_nothing = u"Ne rien faire"
|
||||
action_retrieve = u"Récupérer l'email"
|
||||
action_digest = u"Envoyer un résumé"
|
||||
update_title = u"Mise à jour du compte JMC"
|
||||
update_instructions = u"Modification de la connexion '%s'"
|
||||
connection_label = u"Connexion %s '%s'"
|
||||
|
||||
password_saved_for_session = u"Le mot de passe sera garder tout au " \
|
||||
u"long de la session Jabber."
|
||||
ask_password_subject = u"Demande de mot de passe"
|
||||
ask_password_body = u"Répondre à ce message avec le mot de passe " \
|
||||
u"du compte %s\n"
|
||||
new_account_message_subject = u"Le compte '%s' a été créé"
|
||||
new_account_message_body = u"Compte créé"
|
||||
update_account_message_subject = u"Le compte '%s' a été mis " \
|
||||
u"à jour"
|
||||
update_account_message_body = u"Compte mis à jour"
|
||||
new_account_message_subject = u"Le compte '%s' a été créé"
|
||||
new_account_message_body = u"Compte créé"
|
||||
ask_password_subject = u"Demande de mot de passe"
|
||||
ask_password_body = u"Répondre à ce message avec le mot de passe " \
|
||||
u"du compte suivant : \n" \
|
||||
u"\thost = %s\n" \
|
||||
u"\tlogin = %s\n"
|
||||
password_saved_for_session = u"Le mot de passe sera garder tout au " \
|
||||
u"long de la session Jabber."
|
||||
check_error_subject = u"Erreur lors de la vérification des emails."
|
||||
check_error_body = u"Une erreur est survenue lors de la " \
|
||||
u"vérification des emails :\n\t%s"
|
||||
new_mail_subject = u"Nouvel email de %s"
|
||||
new_digest_subject = u"%i nouveau(x) email(s)"
|
||||
|
||||
mandatory_field = u"%s est requis"
|
||||
|
||||
field_chat_action = u"Action lorsque l'état est 'Free For Chat'"
|
||||
field_online_action = u"Action lorsque l'état est 'Online'"
|
||||
field_away_action = u"Action lorsque l'état est 'Away'"
|
||||
field_xa_action = u"Action lorsque l'état est 'Not Available'"
|
||||
field_dnd_action = u"Action lorsque l'état est 'Do not Disturb'"
|
||||
field_offline_action = u"Action lorsque l'état est 'Offline'"
|
||||
|
||||
field_action_0 = u"Ne rien Faire"
|
||||
field_chat_action_0 = field_action_0
|
||||
field_online_action_0 = field_action_0
|
||||
field_away_action_0 = field_action_0
|
||||
field_xa_action_0 = field_action_0
|
||||
field_dnd_action_0 = field_action_0
|
||||
field_offline_action_0 = field_action_0
|
||||
|
||||
check_error_subject = u"Erreur"
|
||||
check_error_body = u"Une erreur est survenue :\n\t%s"
|
||||
|
||||
class nl:
|
||||
# TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_nl_TestCase, 'test') line
|
||||
register_title = u"Registratie van verbindingen voor Jabber Mail"
|
||||
register_instructions = u"Instellingen voor verbinding"
|
||||
account_name = u"Accountnaam"
|
||||
@@ -211,6 +192,7 @@ class Lang:
|
||||
new_digest_subject = u"%i nieuwe e-mail(s)"
|
||||
|
||||
class es:
|
||||
# TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_es_TestCase, 'test') line
|
||||
register_title = u"Registro de nueva cuenta de email"
|
||||
register_instructions = u"Inserta los datos para la nueva cuenta"
|
||||
account_name = u"Nombre para la cuenta"
|
||||
@@ -260,6 +242,7 @@ class Lang:
|
||||
new_digest_subject = u"%i email(s) nuevo(s)"
|
||||
|
||||
class pl:
|
||||
# TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_pl_TestCase, 'test') line
|
||||
register_title = u"Rejestracja w komponencie E-Mail"
|
||||
register_instructions = u"Wprowadź parametry połączenia"
|
||||
account_name = u"Nazwa połączenia"
|
||||
@@ -303,3 +286,45 @@ class Lang:
|
||||
u"emaili:\n\t%s"
|
||||
new_mail_subject = u"Nowy email od %s"
|
||||
new_digest_subject = u"%i nowy(ch) email(i)"
|
||||
|
||||
class cs:
|
||||
register_title = u"Jabber MailNotify registrace"
|
||||
register_instructions = u"Vložte nastavení spojení"
|
||||
account_name = u"Název spojení"
|
||||
account_login = u"Přihlašovací jméno"
|
||||
account_password = u"Heslo"
|
||||
account_password_store = u"Uložit heslo na Jabber serveru?"
|
||||
account_host = u"Poštovní server"
|
||||
account_port = u"Port"
|
||||
account_type = u"Typ poštovního serveru"
|
||||
account_mailbox = u"Cesta IMAP schránky"
|
||||
account_ffc_action = u"Akce při statusu 'Ukecaný'"
|
||||
account_online_action = u"Akce při statusu 'Přítomen'"
|
||||
account_away_action = u"Akce při statusu 'Pryč'"
|
||||
account_xa_action = u"Akce při statusu 'Nepřítomen'"
|
||||
account_dnd_action = u"Akce při statusu 'Nerušit'"
|
||||
account_offline_action = u"Akce při statusu 'Odpojen'"
|
||||
account_check_interval = u"Interval kontroly pošty (v minutách)"
|
||||
account_live_email_only = u"Informuj pouze o emailech, které přišly během připojení k Jabberu"
|
||||
action_nothing = u"Nedělej nic"
|
||||
action_retrieve = u"Přijmi poštu"
|
||||
action_digest = u"Pošli upozornění na novou poštu"
|
||||
update_title = u"Jabber - aktualizace spojení k emailu"
|
||||
update_instructions = u"Aktualizace spojení '%s'"
|
||||
connection_label = u"%s spojení '%s'"
|
||||
update_account_message_subject = u"Aktualizováno %s spojení '%s'"
|
||||
update_account_message_body = u"Registrováno s přihlašovacím jménem '%s' a " \
|
||||
u"heslem '%s' v '%s'"
|
||||
new_account_message_subject = u"Nové spojení %s '%s' aktualizováno"
|
||||
new_account_message_body = u"Registrováno " \
|
||||
u"s přihlašovacím jménem '%s' a heslem '%s' v '%s'"
|
||||
ask_password_subject = u"Žádost o heslo"
|
||||
ask_password_body = u"Odpovězte na tuto zprávu posláním hesla " \
|
||||
u"pro následující spojení: \n" \
|
||||
u"\thost = %s\n" \
|
||||
u"\tlogin = %s\n"
|
||||
password_saved_for_session = u"Heslo bude uchováno během vašeho připojení k Jabberu"
|
||||
check_error_subject = u"Chyba při kontrole emailů."
|
||||
check_error_body = u"Nějaká chyba nastala při kontrole emailů:\n\t%s"
|
||||
new_mail_subject = u"Nový email od %s"
|
||||
new_digest_subject = u"%i má nový(é) email(y)"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# -*- coding: UTF-8 -*-
|
||||
##
|
||||
## test_lang.py
|
||||
## Login : David Rousselie <dax@happycoders.org>
|
||||
@@ -63,8 +62,81 @@ class Lang_TestCase(unittest.TestCase):
|
||||
lang = self.lang.get_lang_class_from_node(iq_node)
|
||||
self.assertEquals(lang, Lang.fr)
|
||||
|
||||
def test_get_default_lang_class(self):
|
||||
self.assertEquals(self.lang.get_default_lang_class(), Lang.en)
|
||||
|
||||
def test_get_default_lang_class_other(self):
|
||||
self.lang = Lang("fr")
|
||||
self.assertEquals(self.lang.get_default_lang_class(), Lang.fr)
|
||||
|
||||
class Language_TestCase(unittest.TestCase):
|
||||
"""Test language classes"""
|
||||
|
||||
def setUp(self):
|
||||
"""must define self.lang_class. Lang.en is default"""
|
||||
self.lang_class = Lang.en
|
||||
|
||||
def test_strings(self):
|
||||
self.assertNotEquals(self.lang_class.component_name, None)
|
||||
self.assertNotEquals(self.lang_class.register_title, None)
|
||||
self.assertNotEquals(self.lang_class.register_instructions, None)
|
||||
self.assertNotEquals(self.lang_class.message_status, None)
|
||||
self.assertNotEquals(self.lang_class.account_name, None)
|
||||
|
||||
self.assertNotEquals(self.lang_class.password_saved_for_session, None)
|
||||
self.assertNotEquals(self.lang_class.ask_password_subject, None)
|
||||
self.assertNotEquals(self.lang_class.ask_password_body % (""), None)
|
||||
self.assertNotEquals(self.lang_class.new_account_message_subject % (""), None)
|
||||
self.assertNotEquals(self.lang_class.new_account_message_body, None)
|
||||
self.assertNotEquals(self.lang_class.update_account_message_subject % (""), None)
|
||||
self.assertNotEquals(self.lang_class.update_account_message_body, None)
|
||||
|
||||
self.assertNotEquals(self.lang_class.mandatory_field % (""), None)
|
||||
|
||||
self.assertNotEquals(self.lang_class.field_chat_action, None)
|
||||
self.assertNotEquals(self.lang_class.field_online_action, None)
|
||||
self.assertNotEquals(self.lang_class.field_away_action, None)
|
||||
self.assertNotEquals(self.lang_class.field_xa_action, None)
|
||||
self.assertNotEquals(self.lang_class.field_dnd_action, None)
|
||||
self.assertNotEquals(self.lang_class.field_offline_action, None)
|
||||
|
||||
self.assertNotEquals(self.lang_class.field_action_0, None)
|
||||
self.assertNotEquals(self.lang_class.field_chat_action_0, None)
|
||||
self.assertNotEquals(self.lang_class.field_online_action_0, None)
|
||||
self.assertNotEquals(self.lang_class.field_away_action_0, None)
|
||||
self.assertNotEquals(self.lang_class.field_xa_action_0, None)
|
||||
self.assertNotEquals(self.lang_class.field_dnd_action_0, None)
|
||||
self.assertNotEquals(self.lang_class.field_offline_action_0, None)
|
||||
|
||||
self.assertNotEquals(self.lang_class.check_error_subject, None)
|
||||
self.assertNotEquals(self.lang_class.check_error_body % (""), None)
|
||||
|
||||
|
||||
class Language_fr_TestCase(Language_TestCase):
|
||||
def setUp(self):
|
||||
self.lang_class = Lang.fr
|
||||
|
||||
class Language_nl_TestCase(Language_TestCase):
|
||||
def setUp(self):
|
||||
self.lang_class = Lang.nl
|
||||
|
||||
class Language_es_TestCase(Language_TestCase):
|
||||
def setUp(self):
|
||||
self.lang_class = Lang.es
|
||||
|
||||
class Language_pl_TestCase(Language_TestCase):
|
||||
def setUp(self):
|
||||
self.lang_class = Lang.pl
|
||||
|
||||
def suite():
|
||||
return unittest.makeSuite(Lang_TestCase, 'test')
|
||||
suite = unittest.TestSuite()
|
||||
suite.addTest(unittest.makeSuite(Lang_TestCase, 'test'))
|
||||
suite.addTest(unittest.makeSuite(Language_TestCase, 'test'))
|
||||
suite.addTest(unittest.makeSuite(Language_fr_TestCase, 'test'))
|
||||
# suite.addTest(unittest.makeSuite(Language_nl_TestCase, 'test'))
|
||||
# suite.addTest(unittest.makeSuite(Language_es_TestCase, 'test'))
|
||||
# suite.addTest(unittest.makeSuite(Language_pl_TestCase, 'test'))
|
||||
return suite
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main(defaultTest='suite')
|
||||
|
||||
Reference in New Issue
Block a user