Interested Article - I18n
- 2020-12-13
- 1
Модуль интернационализации предназначен для использования в других модулях, он позволяет загружать их файлы локализации и обращаться к переводным строкам по англоязычным условным названиям.
В загруженной локализации можно безопасно обращаться к строкам по условным названиям, — в случае отсутствия перевода для строки будет выдано значения ключа вместо
nil
. Таким образом, при копировании или обновлении интернационализованного модуля из иноязычного раздела Википедии портируемый модуль должен оказаться рабочим, но вместо отсутствующих переводов будут отображаться их условные названия.
В случае интернационализации файл локализации на текущий язык должен быть подстраницей подстраницы
l10n
модуля. Название файла локализации должно соответствовать коду языка (
ISO 639
). Пример пути к файлу локализации на русский язык:
Модуль:Путь_к_модулю/l10n/ru
.
При создании нового файла локализации в комментарии к правке необходимо указать, что осуществляется перевод файла локализации, и указать викиссылку на исходный файл (достаточная атрибуция для лицензии CC BY-SA 4.0).
|
require('strict')
local p = {}
local Localization = {
__call = function(self, ...)
if arg.n == 0 then
return self
end
local v = self._
for i = 1, arg.n do
v = v[arg[i]]
if not v then
return arg[arg.n]
end
end
return v
end
}
function Localization:new(l10nPath)
local langObj = mw.getContentLanguage()
local langPath
if not l10nPath then
local frame = mw.getCurrentFrame()
l10nPath = frame:getTitle() .. '/l10n'
end
langPath = l10nPath .. '/' .. langObj:getCode()
local obj = {
_ = mw.loadData(langPath),
}
setmetatable(obj, self)
self.__index = obj._
return obj
end
function p.load(l10nPath)
return Localization:new(l10nPath)
end
return p
- 2020-12-13
- 1