]> git.gir.st - VimFx.git/blob - extension/packages/l10n.coffee
Closes #120. Cleaned up locales folder. Fixed logic of locale discovery.
[VimFx.git] / extension / packages / l10n.coffee
1 { classes: Cc, interfaces: Ci } = Components
2
3 { getFirefoxPref } = require 'prefs'
4
5 # Generates the underscore function
6 l10n = do ->
7 splitter = /(\w+)-\w+/
8
9 # Current locale
10 locale = getFirefoxPref('general.useragent.locale')
11
12 getStr = (aStrBundle, aKey) ->
13 try return aStrBundle.GetStringFromName(aKey)
14
15 return (filename, defaultLocale = 'en-US') ->
16
17 filePath = (locale) ->
18 getResourceURI("locale/#{ locale }/#{ filename }").spec
19
20 # Folder in the format `en-US`, e.g. locale/en-US/vimfx.properties
21 defaultBundle = Services.strings.createBundle(filePath(locale))
22
23 if locale_base = locale.match(splitter)
24 # Folder in the basic format: `en`, e.g. locale/en/vimfx.properties
25 defaultBasicBundle = Services.strings.createBundle(filePath(locale_base[1]))
26
27 # Folder named after `defaultLocale`
28 addonsDefaultBundle = Services.strings.createBundle(filePath(defaultLocale))
29
30 # The underscore function
31 l10n_underscore = (aKey, aLocale) ->
32 localeBundle = null
33 localeBasicBundle = null
34
35 # Yet another way to specify a folder: both `en` or `en-US` are possible here
36 if aLocale
37 localeBundle = Services.strings.createBundle(filePath(aLocale))
38
39 # And locale version without the region, e.g. `en`
40 if locale_base = aLocale.match(splitter)
41 localeBasicBundle = Services.strings.createBundle(filePath(locale_base[1]))
42
43 aVal = getStr(localeBundle, aKey) \
44 or getStr(localeBasicBundle, aKey) \
45 or (defaultBundle && (getStr(defaultBundle, aKey) or (defaultBundle = null))) \
46 or (defaultBasicBundle && (getStr(defaultBasicBundle, aKey) or (defaultBasicBundle = null))) \
47 or getStr(addonsDefaultBundle, aKey)
48
49 return aVal
50
51 unload(Services.strings.flushBundles)
52
53 return l10n_underscore
54
55 exports.l10n = l10n
Imprint / Impressum