Module:I18n: Difference between revisions
From Bodhicitta
((by SublimeText.Mediawiker)) Tag: Manual revert |
((by SublimeText.Mediawiker)) |
||
| Line 1: | Line 1: | ||
-- Module:I18n | -- Module:I18n (improved) | ||
local p = {} | local p = {} | ||
| Line 8: | Line 8: | ||
local default = args.default or 'en' | local default = args.default or 'en' | ||
-- | -- For server-side rendering, always default to the specified default | ||
-- JavaScript will handle the switching client-side | |||
local lang = default | local lang = default | ||
if mw.user and mw.user.getOption then | |||
-- Only try to get user preference for logged-in users | |||
if mw.user and not mw.user.isAnon() and mw.user.getOption then | |||
lang = mw.user.getOption('bca-language') or default | lang = mw.user.getOption('bca-language') or default | ||
end | end | ||
-- Create the HTML structure | -- Create the HTML structure with all language variants | ||
local html = mw.html.create('span') | local html = mw.html.create('span') | ||
:addClass('i18n-text') | :addClass('i18n-text') | ||
:attr('data-lang-en', en) | :attr('data-lang-en', en) | ||
:attr('data-lang-bo', bo) | :attr('data-lang-bo', bo) | ||
:attr('data-default', default) | |||
-- Set initial display | -- Set initial display | ||
if lang == 'bo' and bo ~= '' then | if lang == 'bo' and bo ~= '' then | ||
html:wikitext(bo) | html:wikitext(bo) | ||
| Line 30: | Line 34: | ||
end | end | ||
-- | -- Simple version that can be called with explicit language parameter | ||
function p.simple(frame) | function p.simple(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
| Line 44: | Line 48: | ||
end | end | ||
-- Function to get | -- Function to check if user is logged in and get their preference | ||
function p.getUserLang(frame) | function p.getUserLang(frame) | ||
local default = frame.args.default or 'en' | local default = frame.args.default or 'en' | ||
if mw.user and mw.user.getOption then | if mw.user and not mw.user.isAnon() and mw.user.getOption then | ||
return mw.user.getOption('bca-language') or default | return mw.user.getOption('bca-language') or default | ||
end | end | ||
Revision as of 21:21, 23 September 2025
Documentation for this module may be created at Module:I18n/doc
-- Module:I18n (improved)
local p = {}
function p.text(frame)
local args = frame:getParent().args
local en = args.en or args[1] or ''
local bo = args.bo
local default = args.default or 'en'
-- For server-side rendering, always default to the specified default
-- JavaScript will handle the switching client-side
local lang = default
-- Only try to get user preference for logged-in users
if mw.user and not mw.user.isAnon() and mw.user.getOption then
lang = mw.user.getOption('bca-language') or default
end
-- Create the HTML structure with all language variants
local html = mw.html.create('span')
:addClass('i18n-text')
:attr('data-lang-en', en)
:attr('data-lang-bo', bo)
:attr('data-default', default)
-- Set initial display
if lang == 'bo' and bo ~= '' then
html:wikitext(bo)
else
html:wikitext(en)
end
return tostring(html)
end
-- Simple version that can be called with explicit language parameter
function p.simple(frame)
local args = frame:getParent().args
local en = args.en or args[1] or ''
local bo = args.bo
local lang = args.lang or 'en'
if lang == 'bo' and bo ~= '' then
return bo
else
return en
end
end
-- Function to check if user is logged in and get their preference
function p.getUserLang(frame)
local default = frame.args.default or 'en'
if mw.user and not mw.user.isAnon() and mw.user.getOption then
return mw.user.getOption('bca-language') or default
end
return default
end
return p