mirror of https://github.com/freeCodeCamp/devdocs
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
968 B
43 lines
968 B
class @I18n
|
|
default: 'en'
|
|
constructor: (@langs = [@default], @phrases) ->
|
|
|
|
_: (obj, substitution) =>
|
|
if typeof obj is 'object' or typeof obj is 'function'
|
|
@interpolate obj[@get_lang obj], substitution
|
|
else
|
|
obj
|
|
|
|
__: (key) =>
|
|
lang = @get_lang @phrases, (lang) => @phrases[lang]?[key]
|
|
@phrases[lang]?[key] ? ''
|
|
|
|
get_lang: (obj, test = (lang) -> obj[lang]) ->
|
|
for lang in @langs
|
|
# eg. en-US
|
|
return lang if test lang
|
|
|
|
lang = lang.replace /_\w+$/, ''
|
|
# eg. en
|
|
return lang if test lang
|
|
|
|
@default
|
|
|
|
interpolate: (str, substitution) ->
|
|
return '' if not str?
|
|
if substitution?
|
|
for key in Object.keys(substitution)
|
|
str = str.replace("{#{key}}", substitution[key])
|
|
str
|
|
|
|
@i18n = new I18n navigator.languages,
|
|
en:
|
|
enable: "Enable"
|
|
documentation: "Documentation"
|
|
ja:
|
|
enable: "有効"
|
|
documentation: "ドキュメンテーション"
|
|
|
|
@_ = @i18n._
|
|
@__ = @i18n.__
|