nitc :: I18NPhase :: defaultinit
private class I18NPhase
super Phase
redef fun process_annotated_node(nmodule, nat) do
if not nat.name == "i18n" then return
if not nmodule isa AModuledecl then
toolcontext.error(nmodule.location, "Error: The localized language can only be used on module declarations.")
return
end
var domain = nmodule.n_name.n_id.text
var lang: nullable String = null
if nat.n_args.length > 0 then
lang = nat.arg_as_string(toolcontext.modelbuilder)
if lang == null then return
end
var module_dir = nmodule.location.file.filename.dirname.realpath
var locale_dir = module_dir / "languages"
if not locale_dir.file_exists then locale_dir.mkdir
var amodule = nmodule.parent.as(AModule)
var vi = new StringFinder(domain, locale_dir, toolcontext, amodule)
vi.enter_visit(amodule)
var module_name = nmodule.location.file.filename.basename(".nit")
var pot_path = locale_dir / module_name
var arr = vi.strings.values.to_a
var po = new POFile(arr)
po.write_template(pot_path)
if lang != null then
for i in po.strings do
i.msgstr = i.msgid
end
var lang_dir = locale_dir / lang
if not lang_dir.file_exists then lang_dir.mkdir
var messages_dir = lang_dir / "LC_MESSAGES"
if not messages_dir.file_exists then messages_dir.mkdir
po.write_to_file(messages_dir / module_name)
end
var lit = new LiteralVisitor(toolcontext)
lit.enter_visit(amodule)
end
end
src/frontend/i18n_phase.nit:28,1--81,3