Модуль: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