BUGFIX Fixed missing $H() reference in i18n.js (#2989)

ENHANCEMENT Added unit tests for i18n.js

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@64878 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Ingo Schommer 2008-10-29 13:20:38 +00:00
parent 1c435dfaee
commit 07bca16af6
2 changed files with 88 additions and 2 deletions

View File

@ -70,9 +70,28 @@ ss.i18n = {
}
},
/**
* Add entities to a dictionary. If a dictionary doesn't
* exist for this locale, its automatically created.
* Existing entities are overwritten.
*
* @param string locale
* @param Object dict
*/
addDictionary: function(locale, dict) {
if(!this.lang[locale]) this.lang[locale] = $H();
this.lang[locale] = $H(this.lang[locale]).merge(dict);
if(!this.lang[locale]) this.lang[locale] = {};
for(entity in dict) {
this.lang[locale][entity] = dict[entity];
}
},
/**
* Get dictionary for a specific locale.
*
* @param string locale
*/
getDictionary: function(locale) {
return this.lang[locale];
},
/**

View File

@ -0,0 +1,67 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="../../javascript/i18n.js"></script>
<link rel="stylesheet" href="http://dev.jquery.com/view/trunk/qunit/testsuite.css" type="text/css" media="screen" />
<!-- Needed for testing purposes -->
<meta http-equiv="Content-Language" content="de">
<script>
$(document).ready(function(){
test("test dictionary setting", function() {
ss.i18n.addDictionary('en_US', {'entity1': "Entity One"});
same(
ss.i18n.getDictionary('en_US'),
{'entity1': "Entity One"},
'New dictionary can be set'
);
ss.i18n.addDictionary('en_US', {'entity2': "Entity Two"});
same(
ss.i18n.getDictionary('en_US'),
{'entity1': "Entity One", 'entity2': "Entity Two"},
'Entites can be added to an existing dictionary'
);
});
test("test entity translation", function() {
ss.i18n.addDictionary('en_US', {'entity1': "Entity One",'untranslated': "Untranslated"});
ss.i18n.addDictionary('de_DE', {'entity1': "Entity Eins"});
ss.i18n.setLocale('de_DE');
equals(
ss.i18n._t('entity1'),
'Entity Eins',
'Entities can be translated through _t()'
);
equals(
ss.i18n._t('untranslated'),
'Untranslated',
'Untranslated entities fall back to default locale'
);
});
test("test locale detection", function() {
ss.i18n.setLocale('en_US');
// set in <meta> header
equals(
ss.i18n.detectLocale(),
'de_DE',
'Locale can be detected through <meta> tags'
);
});
});
</script>
</head>
<body>
<script type="text/javascript" src="http://jqueryjs.googlecode.com/svn/trunk/qunit/testrunner.js"></script>
<h1>i18nTest</h1>
<h2 id="banner"></h2>
<h2 id="userAgent"></h2>
<ol id="tests"></ol>
<div id="main"></div>
</body>
</html>