Merge pull request #11893 from caugner/7837-filesize-format-with-locale

Formats file sizes using the user's locale
This commit is contained in:
Morris Jobke 2018-10-25 14:05:20 +02:00 committed by GitHub
commit 116268a2b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 71 additions and 0 deletions

View File

@ -770,6 +770,16 @@ var OCP = {},
return false;
},
/**
* 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
*
@ -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;
}

View File

@ -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() {