1 { classes: Cc, interfaces: Ci } = Components
3 PROPERTIES_FILE = 'vimfx.properties'
4 DEFAULT_LOCALE = 'en-US'
6 utils = require 'utils'
7 { unload } = require 'unload'
8 { getFirefoxPref } = require 'prefs'
10 # Generates the underscore function
12 splitter = /(\w+)-\w+/
15 locale = getFirefoxPref('general.useragent.locale')
17 getStr = (aStrBundle, aKey) ->
18 try return aStrBundle.GetStringFromName(aKey)
20 filePath = (locale) ->
21 utils.getResourceURI("locale/#{ locale }/#{ PROPERTIES_FILE }").spec
23 # Folder in the format `en-US`, e.g. locale/en-US/vimfx.properties
24 defaultBundle = Services.strings.createBundle(filePath(locale))
26 if locale_base = locale.match(splitter)
27 # Folder in the basic format: `en`, e.g. locale/en/vimfx.properties
28 defaultBasicBundle = Services.strings.createBundle(filePath(locale_base[1]))
30 # Folder named after extension default locale
31 addonsDefaultBundle = Services.strings.createBundle(filePath(DEFAULT_LOCALE))
33 # The underscore function
34 l10n_underscore = (aKey, aLocale) ->
36 localeBasicBundle = null
38 # Yet another way to specify a folder: both `en` or `en-US` are possible here
40 localeBundle = Services.strings.createBundle(filePath(aLocale))
42 # And locale version without the region, e.g. `en`
43 if locale_base = aLocale.match(splitter)
44 localeBasicBundle = Services.strings.createBundle(filePath(locale_base[1]))
46 aVal = getStr(localeBundle, aKey) \
47 or getStr(localeBasicBundle, aKey) \
48 or (defaultBundle && (getStr(defaultBundle, aKey) or (defaultBundle = null))) \
49 or (defaultBasicBundle && (getStr(defaultBasicBundle, aKey) or (defaultBasicBundle = null))) \
50 or getStr(addonsDefaultBundle, aKey)
54 unload(Services.strings.flushBundles)
56 return l10n_underscore