10000 feat(service): format bcp47 with script and language only correctly · angular-translate/angular-translate@6c3b63e · GitHub
[go: up one dir, main page]

Skip to content
This repository was archived by the owner on Jan 29, 2024. It is now read-only.

Commit 6c3b63e

Browse files
tenjaaknalli
authored andcommitted
feat(service): format bcp47 with script and language only correctly
PR #1815 Solves #1811
1 parent 776c90a commit 6c3b63e

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

src/service/translate.js

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,29 @@ function $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvide
5656
bcp47 : function (tag) {
5757
var temp = (tag || '').split('_').join('-');
5858
var parts = temp.split('-');
59-
return parts.length > 1 ? (parts[0].toLowerCase() + '-' + parts[1].toUpperCase()) : temp;
59+
60+
switch (parts.length) {
61+
case 1: // language only
62+
parts[0] = parts[0].toLowerCase();
63+
break;
64+
case 2: // language-script or language-region
65+
parts[0] = parts[0].toLowerCase();
66+
if (parts[1].length === 4) { // parts[1] is script
67+
parts[1] = parts[1].charAt(0).toUpperCase() + parts[1].slice(1).toLowerCase();
68+
} else { // parts[1] is region
69+
parts[1] = parts[1].toUpperCase();
70+
}
71+
break;
72+
case 3: // language-script-region
73+
parts[0] = parts[0].toLowerCase();
74+
parts[1] = parts[1].charAt(0).toUpperCase() + parts[1].slice(1).toLowerCase();
75+
parts[2] = parts[2].toUpperCase();
76+
break;
77+
default:
78+
return temp;
79+
}
80+
81+
return parts.join('-');
6082
},
6183
'iso639-1' : function (tag) {
6284
var temp = (tag || '').split('_').join('-');
@@ -825,9 +847,12 @@ function $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvide
825847
* en_US => en_US
826848
* en-us => en_US
827849
* * BCP 47 (RFC 4646 & 4647)
850+
* EN => en
828851
* en-US => en-US
829852
* en_US => en-US
830853
* en-us => en-US
854+
* sr-latn => sr-Latn
855+
* sr-latn-rs => sr-Latn-RS
831856
*
832857
* See also:
833858
* * http://en.wikipedia.org/wiki/IETF_language_tag

test/unit/service/translate.determineLocale.spec.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,20 @@ describe('pascalprecht.translate', function () {
373373
});
374374

375375
describe('using resolver "bcp47"', function () {
376+
describe('should resolve to EN to en', function () {
377+
beforeEach(module('pascalprecht.translate', function ($translateProvider, $provide, pascalprechtTranslateOverrider) {
378+
pascalprechtTranslateOverrider.getLocale = function () {
379+
return 'EN';
380+
};
381+
$translateProvider
382+
.uniformLanguageTag('bcp47')
383+
.determinePreferredLanguage();
384+
}));
385+
it('test', inject(function ($window, $translate) {
386+
expect($translate.use()).toEqual('en');
387+
}));
388+
});
389+
376390
describe('should resolve to en-US to en-US', function () {
377391
beforeEach(module('pascalprecht.translate', function ($translateProvider, $provide, pascalprechtTranslateOverrider) {
378392
pascalprechtTranslateOverrider.getLocale = function () {
@@ -428,6 +442,34 @@ describe('pascalprecht.translate', function () {
428442
expect($translate.use()).toEqual('en');
429443
}));
430444
});
445+
446+
describe('should resolve script without region', function () {
447+
beforeEach(module('pascalprecht.translate', function ($translateProvider, $provide, pascalprechtTranslateOverrider) {
448+
pascalprechtTranslateOverrider.getLocale = function () {
449+
return 'sr-latn';
450+
};
451+
$translateProvider
452+
.uniformLanguageTag('bcp47')
453+
.determinePreferredLanguage();
454+
}));
455+
it('test', inject(function ($window, $translate) {
456+
expect($translate.use()).toEqual('sr-Latn');
457+
}));
458+
});
459+
460+
describe('should resolve script with region', function () {
461+
beforeEach(module('pascalprecht.translate', function ($translateProvider, $provide, pascalprechtTranslateOverrider) {
462+
pascalprechtTranslateOverrider.getLocale = function () {
463+
return 'sr-latn-rs';
464+
};
465+
$translateProvider
466+
.uniformLanguageTag('bcp47')
467+
.determinePreferredLanguage();
468+
}));
469+
it('test', inject(function ($window, $translate) {
470+
expect($translate.use()).toEqual('sr-Latn-RS');
471+
}));
472+
});
431473
});
432474

433475
describe('using resolver "iso639-1"', function () {

0 commit comments

Comments
 (0)
0