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'
      
      
     -- Get user language preference (fallback to default if not available)
     -- 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 based on user preference or default
     -- 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


-- Alternative simpler version that just returns the appropriate language
-- 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 current user's language preference
-- 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