Interested Article - I18n

Документация

Модуль интернационализации предназначен для использования в других модулях, он позволяет загружать их файлы локализации и обращаться к переводным строкам по англоязычным условным названиям.

В загруженной локализации можно безопасно обращаться к строкам по условным названиям, — в случае отсутствия перевода для строки будет выдано значения ключа вместо nil . Таким образом, при копировании или обновлении интернационализованного модуля из иноязычного раздела Википедии портируемый модуль должен оказаться рабочим, но вместо отсутствующих переводов будут отображаться их условные названия.

В случае интернационализации файл локализации на текущий язык должен быть подстраницей подстраницы l10n модуля. Название файла локализации должно соответствовать коду языка ( ISO 639 ). Пример пути к файлу локализации на русский язык: Модуль:Путь_к_модулю/l10n/ru .

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
Источник —

Same as I18n