Enable URL lang parameter for switching languages (fixes #1080)

This commit is contained in:
Dennis Wilson 2014-12-04 21:11:30 +01:00
parent c6041d2590
commit f62812a8dc
4 changed files with 45 additions and 38 deletions

1
.gitignore vendored
View File

@ -12,3 +12,4 @@ bin
perfstats*.csv
coverage.xml
!gui/scripts/syncthing
.DS_Store

View File

@ -583,7 +583,7 @@ angular.module('syncthing.core')
$scope.config.GUI = angular.copy($scope.tmpGUI);
['ListenAddress', 'GlobalAnnServers'].forEach(function (key) {
$scope.config.Options[key] = $scope.config.Options[key + "Str"].split(/[ ,]+/).map(function (x) {
$scope.config.Options[key] = $scope.config.Options[key + "Str"].split(/[ ,]+/).map(function (x) {
return x.trim();
});
});
@ -918,11 +918,12 @@ angular.module('syncthing.core')
var devices = $scope.folders[folderID].Devices
for (var i = 0; i < devices.length; i++) {
if (devices[i].DeviceID == deviceCfg.DeviceID) {
folders.push(folderID)
break
folders.push(folderID);
break;
}
}
};
folders.sort();
return folders;
};

View File

@ -12,7 +12,7 @@ angular.module('syncthing.core')
_availableLocales = locales;
};
this.$get = ['$http', '$translate', function ($http, $translate) {
this.$get = ['$http', '$translate', '$location', function ($http, $translate, $location) {
/**
* Requests the server in order to get the browser's requested locale strings.
@ -26,45 +26,50 @@ angular.module('syncthing.core')
}
function autoConfigLocale() {
var params = $location.search();
return readBrowserLocales().success(function (langs) {
// Find the first language in the list provided by the user's browser
// that is a prefix of a language we have available. That is, "en"
// sent by the browser will match "en" or "en-US", while "zh-TW" will
// match only "zh-TW" and not "zh-CN".
if(params.lang) {
$translate.use(params.lang);
} else {
readBrowserLocales().success(function (langs) {
// Find the first language in the list provided by the user's browser
// that is a prefix of a language we have available. That is, "en"
// sent by the browser will match "en" or "en-US", while "zh-TW" will
// match only "zh-TW" and not "zh-CN".
var i,
lang,
matching;
var i,
lang,
matching,
locale = _defaultLocale;
for (i = 0; i < langs.length; i++) {
lang = langs[i];
for (i = 0; i < langs.length; i++) {
lang = langs[i];
if (lang.length < 2) {
continue;
}
matching = _availableLocales.filter(function (possibleLang) {
// The langs returned by the /rest/langs call will be in lower
// case. We compare to the lowercase version of the language
// code we have as well.
possibleLang = possibleLang.toLowerCase();
if (possibleLang.length > lang.length) {
return possibleLang.indexOf(lang) === 0;
} else {
return lang.indexOf(possibleLang) === 0;
if (lang.length < 2) {
continue;
}
});
if (matching.length >= 1) {
$translate.use(matching[0]);
return;
matching = _availableLocales.filter(function (possibleLang) {
// The langs returned by the /rest/langs call will be in lower
// case. We compare to the lowercase version of the language
// code we have as well.
possibleLang = possibleLang.toLowerCase();
if (possibleLang.length > lang.length) {
return possibleLang.indexOf(lang) === 0;
} else {
return lang.indexOf(possibleLang) === 0;
}
});
if (matching.length >= 1) {
locale = matching[0];
break;
}
}
}
// Fallback if nothing matched
$translate.use(_defaultLocale);
});
// Fallback if nothing matched
$translate.use(locale);
});
}
}
function useLocale(language) {

File diff suppressed because one or more lines are too long