1 { classes: Cc, interfaces: Ci } = Components
3 { getFirefoxPref } = require 'prefs'
5 # Generates the underscore function
10 locale = getFirefoxPref('general.useragent.locale')
12 getStr = (aStrBundle, aKey) ->
13 try return aStrBundle.GetStringFromName(aKey)
15 return (filename, defaultLocale = 'en-US') ->
17 filePath = (locale) ->
18 getResourceURI("locale/#{ locale }/#{ filename }").spec
20 # Folder in the format `en-US`, e.g. locale/en-US/vimfx.properties
21 defaultBundle = Services.strings.createBundle(filePath(locale))
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]))
27 # Folder named after `defaultLocale`
28 addonsDefaultBundle = Services.strings.createBundle(filePath(defaultLocale))
30 # The underscore function
31 l10n_underscore = (aKey, aLocale) ->
33 localeBasicBundle = null
35 # Yet another way to specify a folder: both `en` or `en-US` are possible here
37 localeBundle = Services.strings.createBundle(filePath(aLocale))
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]))
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)
51 unload(Services.strings.flushBundles)
53 return l10n_underscore