Files
stf/res/app/settings/language/language-service.js
Gunther Brunner 2eb47f312a - Supported languages now all centralized.
Now the flow for adding a new language is just:
1.Add a new language entry to `res/common/lang/langs.json`.

And for translating it's just:
1. Run `gulp translate` (extracts all the strings).
2. Open `/res/common/lang/po/stf.pot` in PoEdit and translate.
3. Run `gulp translate` again (creates a json based on the new `po` file).
2014-03-27 13:53:57 +09:00

60 lines
1.9 KiB
JavaScript

var _ = require('lodash')
var supportedLanguages = require('./../../../common/lang/langs.json')
module.exports = function (SettingsService, $q, gettextCatalog) {
var LanguageService = {}
LanguageService.supportedLanguages = supportedLanguages
var browserLocale = navigator.language || navigator.userLanguage || 'en-US'
var browserLanguage = browserLocale.substring(0, 2)
var isLanguageMatched = _.some(supportedLanguages, function (value, key) {
return key === browserLanguage
})
var detectedLanguage = isLanguageMatched ? browserLanguage : 'en'
var defaultLanguage = 'ja'
LanguageService.detectedLanguage = defaultLanguage
LanguageService.selectedLanguage = null
// TODO: Can't this be refactored to something like this?
// SettingsService.sync(LanguageService.selectedLanguage, 'Language', {
// selected: LanguageService.detectedLanguage
// })
LanguageService.getSelectedLanguage = function () {
var deferred = $q.defer()
if (LanguageService.selectedLanguage) {
deferred.resolve(LanguageService.selectedLanguage)
} else {
SettingsService.getItem('Language.selected').then(function (data) {
if (data) {
deferred.resolve(data)
} else {
LanguageService.setSelectedLanguage(LanguageService.detectedLanguage)
.then(function () {
deferred.resolve(LanguageService.detectedLanguage)
})
}
})
}
return deferred.promise
}
// Initialize gettextCatalog
LanguageService.getSelectedLanguage()
LanguageService.setSelectedLanguage = function (lang) {
var deferred = $q.defer()
LanguageService.selectedLanguage = lang
gettextCatalog.currentLanguage = lang
SettingsService.setItem('Language.selected', lang).then(function () {
deferred.resolve(lang)
})
return deferred.promise
}
return LanguageService
}