This reverts commit 6bcaa00a4b
.
This commit is contained in:
parent
6bcaa00a4b
commit
ed5213c9a2
|
@ -23,28 +23,16 @@
|
|||
window.html10n = (function(window, document, undefined) {
|
||||
|
||||
// fix console
|
||||
var console = window.console
|
||||
function interceptConsole(method){
|
||||
if (!console) return function() {}
|
||||
|
||||
var original = console[method]
|
||||
|
||||
// do sneaky stuff
|
||||
if (original.bind){
|
||||
// Do this for normal browsers
|
||||
return original.bind(console)
|
||||
}else{
|
||||
return function() {
|
||||
// Do this for IE
|
||||
var message = Array.prototype.slice.apply(arguments).join(' ')
|
||||
original(message)
|
||||
(function() {
|
||||
var noop = function() {};
|
||||
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
|
||||
var console = (window.console = window.console || {});
|
||||
for (var i = 0; i < names.length; ++i) {
|
||||
if (!console[names[i]]) {
|
||||
console[names[i]] = noop;
|
||||
}
|
||||
}
|
||||
}
|
||||
var consoleLog = interceptConsole('log')
|
||||
, consoleWarn = interceptConsole('warn')
|
||||
, consoleError = interceptConsole('warn')
|
||||
|
||||
}());
|
||||
|
||||
// fix Array#forEach in IE
|
||||
// taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
|
||||
|
@ -148,7 +136,7 @@ window.html10n = (function(window, document, undefined) {
|
|||
for (var i=0, n=this.resources.length; i < n; i++) {
|
||||
this.fetch(this.resources[i], lang, function(e) {
|
||||
reqs++;
|
||||
if(e) consoleWarn(e)
|
||||
if(e) console.warn(e)
|
||||
|
||||
if (reqs < n) return;// Call back once all reqs are completed
|
||||
cb && cb()
|
||||
|
@ -192,7 +180,7 @@ window.html10n = (function(window, document, undefined) {
|
|||
}
|
||||
|
||||
// dat alng ain't here, man!
|
||||
if (!data) {
|
||||
if (!data[lang]) {
|
||||
var msg = 'Couldn\'t find translations for '+lang
|
||||
, l
|
||||
if(~lang.indexOf('-')) lang = lang.split('-')[0] // then let's try related langs
|
||||
|
@ -220,12 +208,12 @@ window.html10n = (function(window, document, undefined) {
|
|||
return
|
||||
}
|
||||
|
||||
if ('object' != typeof data) {
|
||||
if ('object' != typeof data[lang]) {
|
||||
cb(new Error('Translations should be specified as JSON objects!'))
|
||||
return
|
||||
}
|
||||
|
||||
this.langs[lang] = data
|
||||
this.langs[lang] = data[lang]
|
||||
// TODO: Also store accompanying langs
|
||||
cb()
|
||||
}
|
||||
|
@ -243,17 +231,6 @@ window.html10n = (function(window, document, undefined) {
|
|||
|
||||
html10n.rtl = ["ar","dv","fa","ha","he","ks","ku","ps","ur","yi"]
|
||||
|
||||
/**
|
||||
* Language-Script fallbacks for Language-Region language tags, for languages that
|
||||
* varies heavily on writing form and two-part locale expansion is not feasible.
|
||||
* See also: https://tools.ietf.org/html/rfc4646 (RFC 4646)
|
||||
*/
|
||||
html10n.scripts = {
|
||||
'zh-tw': 'zh-hant',
|
||||
'zh-hk': 'zh-hant',
|
||||
'zh-cn': 'zh-hans'
|
||||
}
|
||||
|
||||
/**
|
||||
* Get rules for plural forms (shared with JetPack), see:
|
||||
* http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
|
||||
|
@ -658,7 +635,7 @@ window.html10n = (function(window, document, undefined) {
|
|||
// return a function that gives the plural form name for a given integer
|
||||
var index = locales2rules[lang.replace(/-.*$/, '')];
|
||||
if (!(index in pluralRules)) {
|
||||
consoleWarn('plural form unknown for [' + lang + ']');
|
||||
console.warn('plural form unknown for [' + lang + ']');
|
||||
return function() { return 'other'; };
|
||||
}
|
||||
return pluralRules[index];
|
||||
|
@ -692,43 +669,24 @@ window.html10n = (function(window, document, undefined) {
|
|||
return str;
|
||||
};
|
||||
|
||||
/** Prepare localization context:
|
||||
*
|
||||
* - Populate translations with strings for the indicated languages
|
||||
* - adding in non-qualified versions of language codes immediately
|
||||
* after any qualified (e.g., "en" for "en-GB")
|
||||
* - Trigger "localized" event.
|
||||
*
|
||||
* @param {array} langs: diminishing-precedence lang codes, or one string.
|
||||
/**
|
||||
* Localize a document
|
||||
* @param langs An array of lang codes defining fallbacks
|
||||
*/
|
||||
html10n.localize = function(langs) {
|
||||
var that = this,
|
||||
candidates = [];
|
||||
// if a single string, bundle it as an array:
|
||||
if ('string' == typeof langs) {
|
||||
langs = [langs];
|
||||
}
|
||||
var that = this
|
||||
// if only one string => create an array
|
||||
if ('string' == typeof langs) langs = [langs]
|
||||
|
||||
// Determine candidates from langs:
|
||||
// - Omitting empty strings
|
||||
// - Adding in non-qualified versions of country-qualified codes.
|
||||
// Expand two-part locale specs
|
||||
var i=0
|
||||
langs.forEach(function(lang) {
|
||||
var splat;
|
||||
if(!lang) { return; }
|
||||
(candidates.indexOf(lang) == -1) && candidates.push(lang);
|
||||
splat = lang.split('-');
|
||||
if (splat[1]) {
|
||||
(candidates.indexOf(splat[0]) == -1) && candidates.push(splat[0]);
|
||||
}
|
||||
});
|
||||
if(!lang) return;
|
||||
langs[i++] = lang;
|
||||
if(~lang.indexOf('-')) langs[i++] = lang.substr(0, lang.indexOf('-'));
|
||||
})
|
||||
|
||||
// Append script fallbacks for region-specific locales if applicable
|
||||
for (var lang in html10n.scripts) {
|
||||
i = candidates.indexOf(lang);
|
||||
if (~i) candidates.splice(i, 0, html10n.scripts[lang])
|
||||
}
|
||||
|
||||
this.build(candidates, function(er, translations) {
|
||||
this.build(langs, function(er, translations) {
|
||||
html10n.translations = translations
|
||||
html10n.translateElement(translations)
|
||||
that.trigger('localized')
|
||||
|
@ -757,7 +715,7 @@ window.html10n = (function(window, document, undefined) {
|
|||
var i = 0
|
||||
, n = list.length
|
||||
iterator(list[i], i, function each(err) {
|
||||
if(err) consoleLog(err)
|
||||
if(err) console.error(err)
|
||||
i++
|
||||
if (i < n) return iterator(list[i],i, each);
|
||||
cb()
|
||||
|
@ -780,13 +738,8 @@ window.html10n = (function(window, document, undefined) {
|
|||
|
||||
html10n.get = function(id, args) {
|
||||
var translations = html10n.translations
|
||||
if(!translations) {
|
||||
if (! html10n.quiet) {
|
||||
consoleWarn('No translations available (yet)');
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(!translations[id]) return consoleWarn('Could not find string '+id)
|
||||
if(!translations) return console.warn('No translations available (yet)')
|
||||
if(!translations[id]) return console.warn('Could not find string '+id)
|
||||
|
||||
// apply macros
|
||||
var str = translations[id]
|
||||
|
@ -802,9 +755,8 @@ window.html10n = (function(window, document, undefined) {
|
|||
// replace {{arguments}} with their values or the
|
||||
// associated translation string (based on its key)
|
||||
function substArguments(str, args) {
|
||||
var reArgs = /\{\{\s*([a-zA-Z_\-\.]+)\s*\}\}/,
|
||||
translations = html10n.translations,
|
||||
match;
|
||||
var reArgs = /\{\{\s*([a-zA-Z\.]+)\s*\}\}/
|
||||
, match
|
||||
|
||||
while (match = reArgs.exec(str)) {
|
||||
if (!match || match.length < 2)
|
||||
|
@ -812,13 +764,12 @@ window.html10n = (function(window, document, undefined) {
|
|||
|
||||
var arg = match[1]
|
||||
, sub = ''
|
||||
if (args && (arg in args)) {
|
||||
if (arg in args) {
|
||||
sub = args[arg]
|
||||
} else if (arg in translations) {
|
||||
sub = translations[arg]
|
||||
} else {
|
||||
consoleWarn('Could not satisfy argument {{' + arg + '}}' +
|
||||
' for string "' + str + '"');
|
||||
console.warn('Could not find argument {{' + arg + '}}')
|
||||
return str
|
||||
}
|
||||
|
||||
|
@ -830,7 +781,7 @@ window.html10n = (function(window, document, undefined) {
|
|||
|
||||
// replace {[macros]} with their values
|
||||
function substMacros(key, str, args) {
|
||||
var regex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)((\s*([a-zA-Z]+)\: ?([^,]+?),?)+)*\s*\]\}/ //.exec('{{n}} {[plural(n) one: Bomba, other: Bombe]} ]}')
|
||||
var regex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)((\s*([a-zA-Z]+)\: ?([ a-zA-Z{}]+),?)+)*\s*\]\}/ //.exec('{[ plural(n) other: are {{n}}, one: is ]}')
|
||||
, match
|
||||
|
||||
while(match = regex.exec(str)) {
|
||||
|
@ -844,7 +795,7 @@ window.html10n = (function(window, document, undefined) {
|
|||
if (!(macroName in html10n.macros)) continue
|
||||
|
||||
if(optv) {
|
||||
optv.match(/(?=\s*)([a-zA-Z]+)\: ?([^,\]]+)(?=,?)/g).forEach(function(arg) {
|
||||
optv.match(/(?=\s*)([a-zA-Z]+)\: ?([ a-zA-Z{}]+)(?=,?)/g).forEach(function(arg) {
|
||||
var parts = arg.split(':')
|
||||
, name = parts[0]
|
||||
, value = parts[1].trim()
|
||||
|
@ -877,16 +828,16 @@ window.html10n = (function(window, document, undefined) {
|
|||
str.id = node.getAttribute('data-l10n-id')
|
||||
if (!str.id) return
|
||||
|
||||
if(!translations[str.id]) return consoleWarn('Couldn\'t find translation key '+str.id)
|
||||
if(!translations[str.id]) return console.warn('Couldn\'t find translation key '+str.id)
|
||||
|
||||
// get args
|
||||
if(window.JSON) {
|
||||
str.args = node.getAttribute('data-l10n-args') ? JSON.parse(node.getAttribute('data-l10n-args')) : [];
|
||||
str.args = JSON.parse(node.getAttribute('data-l10n-args'))
|
||||
}else{
|
||||
try{
|
||||
str.args = eval(node.getAttribute('data-l10n-args'))
|
||||
}catch(e) {
|
||||
consoleWarn('Couldn\'t parse args for '+str.id)
|
||||
console.warn('Couldn\'t parse args for '+str.id)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -900,7 +851,6 @@ window.html10n = (function(window, document, undefined) {
|
|||
, "innerHTML": 1
|
||||
, "alt": 1
|
||||
, "textContent": 1
|
||||
, "placeholder": 1
|
||||
, "value": 1
|
||||
}
|
||||
if (index > 0 && str.id.substr(index + 1) in attrList) { // an attribute has been specified
|
||||
|
@ -912,6 +862,9 @@ window.html10n = (function(window, document, undefined) {
|
|||
// Apply translation
|
||||
if (node.children.length === 0 || prop != 'textContent') {
|
||||
node[prop] = str.str
|
||||
node.setAttribute("aria-label", str.str); // Sets the aria-label
|
||||
// The idea of the above is that we always have an aria value
|
||||
// This might be a bit of an abrupt solution but let's see how it goes
|
||||
} else {
|
||||
var children = node.childNodes,
|
||||
found = false
|
||||
|
@ -926,7 +879,7 @@ window.html10n = (function(window, document, undefined) {
|
|||
}
|
||||
}
|
||||
if (!found) {
|
||||
consoleWarn('Unexpected error: could not translate element content for key '+str.id, node)
|
||||
console.warn('Unexpected error: could not translate element content for key '+str.id, node)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue