diff options
author | Morris Jobke <hey@morrisjobke.de> | 2018-10-25 14:05:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-25 14:05:20 +0200 |
commit | 116268a2b594938b9adec2ee65ef4b0391327630 (patch) | |
tree | 111ccf1ff0776b4185a15b21fb4281a3ba32a9b7 /core | |
parent | 49c49d584834f7a5fa21edb5a0a3069c8c14291a (diff) | |
parent | d5e142a33653431eb2f608401e5ae0ba5e532c4c (diff) | |
download | nextcloud-server-116268a2b594938b9adec2ee65ef4b0391327630.tar.gz nextcloud-server-116268a2b594938b9adec2ee65ef4b0391327630.zip |
Merge pull request #11893 from caugner/7837-filesize-format-with-locale
Formats file sizes using the user's locale
Diffstat (limited to 'core')
-rw-r--r-- | core/js/js.js | 13 | ||||
-rw-r--r-- | core/js/tests/specs/coreSpec.js | 58 |
2 files changed, 71 insertions, 0 deletions
diff --git a/core/js/js.js b/core/js/js.js index 12c47d546c1..880b986e17b 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -771,6 +771,16 @@ var OCP = {}, }, /** + * Returns the user's locale as a BCP 47 compliant language tag + * + * @return {String} locale string + */ + getCanonicalLocale: function() { + var locale = this.getLocale(); + return typeof locale === 'string' ? locale.replace(/_/g, '-') : locale; + }, + + /** * Returns the user's locale * * @return {String} locale string @@ -1843,6 +1853,9 @@ function humanFileSize(size, skipSmallSizes) { else if(relativeSize.substr(relativeSize.length-2,2)==='.0'){ relativeSize=relativeSize.substr(0,relativeSize.length-2); } + else{ + relativeSize = parseFloat(relativeSize).toLocaleString(OC.getCanonicalLocale()); + } return relativeSize + ' ' + readableFormat; } diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js index 96c8e3f99ec..67b7d77be6c 100644 --- a/core/js/tests/specs/coreSpec.js +++ b/core/js/tests/specs/coreSpec.js @@ -273,6 +273,29 @@ describe('Core base tests', function() { expect(OC.filePath('files', 'ajax', 'test.php')).toEqual('http://localhost/index.php/apps/files/ajax/test.php'); }); }); + describe('getCanonicalLocale', function() { + var localeStub; + + beforeEach(function() { + localeStub = sinon.stub(OC, 'getLocale'); + }); + afterEach(function() { + localeStub.restore(); + }); + + it("Returns primary locales as is", function() { + localeStub.returns('de'); + expect(OC.getCanonicalLocale()).toEqual('de'); + localeStub.returns('zu'); + expect(OC.getCanonicalLocale()).toEqual('zu'); + }); + it("Returns extended locales with hyphens", function() { + localeStub.returns('az_Cyrl_AZ'); + expect(OC.getCanonicalLocale()).toEqual('az-Cyrl-AZ'); + localeStub.returns('de_DE'); + expect(OC.getCanonicalLocale()).toEqual('de-DE'); + }); + }); describe('Link functions', function() { var TESTAPP = 'testapp'; var TESTAPP_ROOT = OC.getRootPath() + '/appsx/testapp'; @@ -560,7 +583,26 @@ describe('Core base tests', function() { }); }); describe('Util', function() { + var locale; + var localeStub; + + beforeEach(function() { + locale = OC.getCanonicalLocale(); + localeStub = sinon.stub(OC, 'getCanonicalLocale'); + localeStub.returns(locale); + }); + + afterEach(function() { + localeStub.restore(); + }); + describe('humanFileSize', function() { + // cit() will skip tests if toLocaleString() is not supported. + // See https://github.com/ariya/phantomjs/issues/12581 + // + // Please run these tests in Chrome/Firefox manually. + var cit = 4.2.toLocaleString("de") !== "4,2" ? xit : it; + it('renders file sizes with the correct unit', function() { var data = [ [0, '0 B'], @@ -589,6 +631,22 @@ describe('Core base tests', function() { expect(OC.Util.humanFileSize(data[i][0], true)).toEqual(data[i][1]); } }); + cit('renders file sizes with the correct locale', function() { + localeStub.returns("de"); + var data = [ + [0, '0 B'], + ["0", '0 B'], + ["A", 'NaN B'], + [125, '125 B'], + [128000, '125 KB'], + [128000000, '122,1 MB'], + [128000000000, '119,2 GB'], + [128000000000000, '116,4 TB'] + ]; + for (var i = 0; i < data.length; i++) { + expect(OC.Util.humanFileSize(data[i][0])).toEqual(data[i][1]); + } + }); }); describe('computerFileSize', function() { it('correctly parses file sizes from a human readable formated string', function() { |