diff --git a/dist/jquery.localize.js b/dist/jquery.localize.js index 90f65fc..eb9c511 100644 --- a/dist/jquery.localize.js +++ b/dist/jquery.localize.js @@ -41,16 +41,11 @@ http://keith-wood.name/localisation.html } break; case 2: - if (lang.length >= 2) { - file = "" + pkg + "-" + (lang.substring(0, 2)) + "." + fileExtension; - return jsonCall(file, pkg, lang, level); - } - break; + file = "" + pkg + "-" + (lang.split('-')[0]) + "." + fileExtension; + return jsonCall(file, pkg, lang, level); case 3: - if (lang.length >= 5) { - file = "" + pkg + "-" + (lang.substring(0, 5)) + "." + fileExtension; - return jsonCall(file, pkg, lang, level); - } + file = "" + pkg + "-" + (lang.split('-').slice(0, 2).join('-')) + "." + fileExtension; + return jsonCall(file, pkg, lang, level); } }; jsonCall = function(file, pkg, lang, level) { diff --git a/dist/jquery.localize.min.js b/dist/jquery.localize.min.js index 999c0a8..195c491 100644 --- a/dist/jquery.localize.min.js +++ b/dist/jquery.localize.min.js @@ -1,4 +1,4 @@ -/*! Localize - v0.1.0 - 2015-08-21 +/*! Localize - v0.1.0 - 2016-08-26 * https://github.com/coderifous/jquery-localize - * Copyright (c) 2015 coderifous; Licensed MIT */ -!function(a){var b;return b=function(a){return a=a.replace(/_/,"-").toLowerCase(),a.length>3&&(a=a.substring(0,3)+a.substring(3).toUpperCase()),a},a.defaultLanguage=b(navigator.languages?navigator.languages[0]:navigator.language||navigator.userLanguage),a.localize=function(c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;return null==d&&(d={}),u=this,g={},f=d.fileExtension||"json",j=function(a,b,c){var e;switch(null==c&&(c=1),c){case 1:return g={},d.loadBase?(e=a+("."+f),h(e,a,b,c)):j(a,b,2);case 2:if(b.length>=2)return e=""+a+"-"+b.substring(0,2)+"."+f,h(e,a,b,c);break;case 3:if(b.length>=5)return e=""+a+"-"+b.substring(0,5)+"."+f,h(e,a,b,c)}},h=function(b,c,e,f){var h,i,k;return null!=d.pathPrefix&&(b=""+d.pathPrefix+"/"+b),k=function(b){return a.extend(g,b),p(g),j(c,e,f+1)},i=function(){return d.fallback&&d.fallback!==e?j(c,d.fallback):void 0},h={url:b,dataType:"json",async:!1,timeout:null!=d.timeout?d.timeout:500,success:k,error:i},"file:"===window.location.protocol&&(h.error=function(b){return k(a.parseJSON(b.responseText))}),a.ajax(h)},p=function(a){return null!=d.callback?d.callback(a,e):e(a)},e=function(b){return a.localize.data[c]=b,u.each(function(){var c,d,e;return c=a(this),d=c.data("localize"),d||(d=c.attr("rel").match(/localize\[(.*?)\]/)[1]),e=t(d,b),null!=e?k(c,d,e):void 0})},k=function(b,c,d){return b.is("input")?n(b,c,d):b.is("textarea")?n(b,c,d):b.is("img")?m(b,c,d):b.is("optgroup")?o(b,c,d):a.isPlainObject(d)||b.html(d),a.isPlainObject(d)?l(b,d):void 0},n=function(b,c,d){var e;return e=a.isPlainObject(d)?d.value:d,b.is("[placeholder]")?b.attr("placeholder",e):b.val(e)},l=function(a,b){return r(a,"title",b),r(a,"href",b),s(a,"text",b)},o=function(a,b,c){return a.attr("label",c)},m=function(a,b,c){return r(a,"alt",c),r(a,"src",c)},t=function(a,b){var c,d,e,f;for(c=a.split(/\./),d=b,e=0,f=c.length;f>e;e++)a=c[e],d=null!=d?d[a]:null;return d},r=function(a,b,c){return c=t(b,c),null!=c?a.attr(b,c):void 0},s=function(a,b,c){return c=t(b,c),null!=c?a.text(c):void 0},q=function(a){var b;return"string"==typeof a?"^"+a+"$":null!=a.length?function(){var c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(q(b));return e}().join("|"):a},i=b(d.language?d.language:a.defaultLanguage),d.skipLanguage&&i.match(q(d.skipLanguage))||j(c,i,1),u},a.fn.localize=a.localize,a.localize.data={}}(jQuery); \ No newline at end of file + * Copyright (c) 2016 coderifous; Licensed MIT */ +!function(a){var b;return b=function(a){return a=a.replace(/_/,"-").toLowerCase(),a.length>3&&(a=a.substring(0,3)+a.substring(3).toUpperCase()),a},a.defaultLanguage=b(navigator.languages?navigator.languages[0]:navigator.language||navigator.userLanguage),a.localize=function(c,d){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;return null==d&&(d={}),u=this,g={},f=d.fileExtension||"json",j=function(a,b,c){var e;switch(null==c&&(c=1),c){case 1:return g={},d.loadBase?(e=a+("."+f),h(e,a,b,c)):j(a,b,2);case 2:return e=""+a+"-"+b.split("-")[0]+"."+f,h(e,a,b,c);case 3:return e=""+a+"-"+b.split("-").slice(0,2).join("-")+"."+f,h(e,a,b,c)}},h=function(b,c,e,f){var h,i,k;return null!=d.pathPrefix&&(b=""+d.pathPrefix+"/"+b),k=function(b){return a.extend(g,b),p(g),j(c,e,f+1)},i=function(){return d.fallback&&d.fallback!==e?j(c,d.fallback):void 0},h={url:b,dataType:"json",async:!1,timeout:null!=d.timeout?d.timeout:500,success:k,error:i},"file:"===window.location.protocol&&(h.error=function(b){return k(a.parseJSON(b.responseText))}),a.ajax(h)},p=function(a){return null!=d.callback?d.callback(a,e):e(a)},e=function(b){return a.localize.data[c]=b,u.each(function(){var c,d,e;return c=a(this),d=c.data("localize"),d||(d=c.attr("rel").match(/localize\[(.*?)\]/)[1]),e=t(d,b),null!=e?k(c,d,e):void 0})},k=function(b,c,d){return b.is("input")?n(b,c,d):b.is("textarea")?n(b,c,d):b.is("img")?m(b,c,d):b.is("optgroup")?o(b,c,d):a.isPlainObject(d)||b.html(d),a.isPlainObject(d)?l(b,d):void 0},n=function(b,c,d){var e;return e=a.isPlainObject(d)?d.value:d,b.is("[placeholder]")?b.attr("placeholder",e):b.val(e)},l=function(a,b){return r(a,"title",b),r(a,"href",b),s(a,"text",b)},o=function(a,b,c){return a.attr("label",c)},m=function(a,b,c){return r(a,"alt",c),r(a,"src",c)},t=function(a,b){var c,d,e,f;for(c=a.split(/\./),d=b,e=0,f=c.length;f>e;e++)a=c[e],d=null!=d?d[a]:null;return d},r=function(a,b,c){return c=t(b,c),null!=c?a.attr(b,c):void 0},s=function(a,b,c){return c=t(b,c),null!=c?a.text(c):void 0},q=function(a){var b;return"string"==typeof a?"^"+a+"$":null!=a.length?function(){var c,d,e;for(e=[],c=0,d=a.length;d>c;c++)b=a[c],e.push(q(b));return e}().join("|"):a},i=b(d.language?d.language:a.defaultLanguage),d.skipLanguage&&i.match(q(d.skipLanguage))||j(c,i,1),u},a.fn.localize=a.localize,a.localize.data={}}(jQuery); \ No newline at end of file diff --git a/src/jquery.localize.coffee b/src/jquery.localize.coffee index 98036ad..dfa6473 100644 --- a/src/jquery.localize.coffee +++ b/src/jquery.localize.coffee @@ -34,13 +34,11 @@ do ($ = jQuery) -> else loadLanguage(pkg, lang, 2) when 2 - if lang.length >= 2 - file = "#{pkg}-#{lang.substring(0, 2)}.#{fileExtension}" - jsonCall(file, pkg, lang, level) + file = "#{pkg}-#{lang.split('-')[0]}.#{fileExtension}" + jsonCall(file, pkg, lang, level) when 3 - if lang.length >= 5 - file = "#{pkg}-#{lang.substring(0, 5)}.#{fileExtension}" - jsonCall(file, pkg, lang, level) + file = "#{pkg}-#{lang.split('-').slice(0,2).join('-')}.#{fileExtension}" + jsonCall(file, pkg, lang, level) jsonCall = (file, pkg, lang, level) -> file = "#{options.pathPrefix}/#{file}" if options.pathPrefix? diff --git a/test/lang/test-ast.json b/test/lang/test-ast.json new file mode 100644 index 0000000..9f3835d --- /dev/null +++ b/test/lang/test-ast.json @@ -0,0 +1,3 @@ +{ + "basic": "basic success" +} diff --git a/test/localize_test.coffee b/test/localize_test.coffee index c000fb8..064b567 100644 --- a/test/localize_test.coffee +++ b/test/localize_test.coffee @@ -149,6 +149,13 @@ do ($ = jQuery) -> t.localize("test", opts) equal t.text(), "country code success" + # Ref: https://github.com/coderifous/jquery-localize/issues/50 + test "three-letter language code", -> + opts = language: "ast", pathPrefix: "lang" + t = localizableTagWithRel("p", "basic", text: "basic fail") + t.localize("test", opts) + equal t.text(), "basic success" + module "Language optimization" test "skipping language using string match", -> diff --git a/test/localize_test.js b/test/localize_test.js index 9803a5b..07f0c9f 100644 --- a/test/localize_test.js +++ b/test/localize_test.js @@ -233,6 +233,18 @@ t.localize("test", opts); return equal(t.text(), "country code success"); }); + test("three-letter language code", function() { + var opts, t; + opts = { + language: "ast", + pathPrefix: "lang" + }; + t = localizableTagWithRel("p", "basic", { + text: "basic fail" + }); + t.localize("test", opts); + return equal(t.text(), "basic success"); + }); module("Language optimization"); test("skipping language using string match", function() { var opts, t;