<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.minetest.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ALanguages</id>
	<title>Module:Languages - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.minetest.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ALanguages"/>
	<link rel="alternate" type="text/html" href="https://wiki.minetest.org/index.php?title=Module:Languages&amp;action=history"/>
	<updated>2026-05-01T02:30:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://wiki.minetest.org/index.php?title=Module:Languages&amp;diff=15081&amp;oldid=prev</id>
		<title>&gt;FnControlOption at 06:16, 24 September 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.minetest.org/index.php?title=Module:Languages&amp;diff=15081&amp;oldid=prev"/>
		<updated>2021-09-24T06:16:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local HtmlBuilder = require(&amp;quot;Module:HtmlBuilder&amp;quot;)&lt;br /&gt;
local makeInvokeFunc = require(&amp;quot;Module:Arguments&amp;quot;).makeInvokeFunc&lt;br /&gt;
local headers = mw.loadData('Module:Languages/headers')&lt;br /&gt;
&lt;br /&gt;
-- Get the language code of a page.&lt;br /&gt;
--&lt;br /&gt;
-- @param titleObj Title object of the page, defaults to current page&lt;br /&gt;
function p.getLanguageCode(titleObj)&lt;br /&gt;
    titleObj = titleObj or mw.title.getCurrentTitle() -- Set default if necessary&lt;br /&gt;
&lt;br /&gt;
    local title = titleObj.text -- e.g. Dirt/fr or Mods/Quartz&lt;br /&gt;
    local langCode = titleObj.subpageText -- e.g. fr or Quartz&lt;br /&gt;
&lt;br /&gt;
    -- titleObj.subpageText returns titleObj.text if not a subpage.&lt;br /&gt;
    -- If titleObj.subpageText is a subpage, check if it is a language code.&lt;br /&gt;
    if langCode == title or not headers[langCode] then&lt;br /&gt;
        return &amp;quot;en&amp;quot; -- Default to English&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return langCode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Create the linked text for a translation subpage if it exists.&lt;br /&gt;
--&lt;br /&gt;
-- @param frame Current frame, used for preprocessing&lt;br /&gt;
-- @param title Page title&lt;br /&gt;
-- @param langCode Language code&lt;br /&gt;
local function createLanguageText(frame, title, langCode)&lt;br /&gt;
    title = title .. &amp;quot;/&amp;quot; .. langCode&lt;br /&gt;
&lt;br /&gt;
    -- Get language name in native language (a.k.a. autonym)&lt;br /&gt;
    local parsedLang = mw.language.fetchLanguageName(langCode)&lt;br /&gt;
&lt;br /&gt;
    -- Use &amp;lt;bdi&amp;gt; to support both LTR languages and RTL languages&lt;br /&gt;
    local bdi = HtmlBuilder.create(&amp;quot;bdi&amp;quot;)&lt;br /&gt;
        :attr(&amp;quot;lang&amp;quot;, langCode)&lt;br /&gt;
        :wikitext(&amp;quot;[[&amp;quot;, title, &amp;quot;|&amp;quot;, parsedLang, &amp;quot;]]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- Use preprocessing with #ifexist to check if page exists&lt;br /&gt;
    return frame:preprocess(&amp;quot;{{#ifexist:&amp;quot; .. title .. &amp;quot;|&amp;amp;nbsp;• &amp;quot; .. tostring(bdi) .. &amp;quot;}}&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._languages(frame, args)&lt;br /&gt;
    local currentTitleObj = mw.title.getCurrentTitle()&lt;br /&gt;
    local currentLangCode = p.getLanguageCode(currentTitleObj)&lt;br /&gt;
    local currentHeader = headers[currentLangCode]&lt;br /&gt;
&lt;br /&gt;
    local title = args[1] -- Use input page name if given&lt;br /&gt;
    if not title then -- Otherwise, use current page&lt;br /&gt;
        local namespace = currentTitleObj.nsText&lt;br /&gt;
        local basename = currentTitleObj.baseText&lt;br /&gt;
        title = namespace .. &amp;quot;:&amp;quot; .. basename -- e.g. Template:Block Data&lt;br /&gt;
&lt;br /&gt;
        -- Check if current page is English subpage (e.g. Mods/Quartz)&lt;br /&gt;
        if currentLangCode == &amp;quot;en&amp;quot; then&lt;br /&gt;
            local subname = currentTitleObj.subpageText&lt;br /&gt;
            if subname ~= basename then&lt;br /&gt;
                title = title .. &amp;quot;/&amp;quot; .. subname&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local languagesText = &amp;quot;[[&amp;quot; .. title .. &amp;quot;|English]]&amp;quot; -- Start with English first&lt;br /&gt;
&lt;br /&gt;
    -- Bold English text if current language is English&lt;br /&gt;
    if currentLangCode == &amp;quot;en&amp;quot; then&lt;br /&gt;
        languagesText = &amp;quot;'''&amp;quot; .. languagesText .. &amp;quot;'''&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local translated = false -- Flag for checking if any translation exists&lt;br /&gt;
&lt;br /&gt;
    -- Create an alphabetically sorted table of language codes&lt;br /&gt;
    local langCodes = {}&lt;br /&gt;
    for langCode in pairs(headers) do&lt;br /&gt;
        table.insert(langCodes, langCode)&lt;br /&gt;
    end&lt;br /&gt;
    table.sort(langCodes)&lt;br /&gt;
&lt;br /&gt;
    -- Iterate through language codes in order&lt;br /&gt;
    for _, langCode in ipairs(langCodes) do&lt;br /&gt;
        if langCode ~= &amp;quot;en&amp;quot; then -- Skip English because already added&lt;br /&gt;
            local languageText = createLanguageText(frame, title, langCode)&lt;br /&gt;
            if languageText ~= &amp;quot;&amp;quot; then -- Check if subpage exists&lt;br /&gt;
                -- Bold language text if language is current language&lt;br /&gt;
                if langCode == currentLangCode then&lt;br /&gt;
                    languageText = &amp;quot;'''&amp;quot; .. languageText .. &amp;quot;'''&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                languagesText = languagesText .. languageText&lt;br /&gt;
                translated = true&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local nmbox = frame:expandTemplate{&lt;br /&gt;
        title = &amp;quot;nmbox&amp;quot;,&lt;br /&gt;
        args = {&lt;br /&gt;
            image = &amp;quot;[[File:Geographylogo.png|25px|Languages|link=]]&amp;quot;,&lt;br /&gt;
            header = currentHeader,&lt;br /&gt;
            text = languagesText&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if not args.nocat then&lt;br /&gt;
        local categories = &amp;quot;[[Category:Languages pages]]&amp;quot;&lt;br /&gt;
        if not translated then&lt;br /&gt;
            categories = categories .. &amp;quot;[[Category:Languages pages without translations]]&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        return nmbox .. categories&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return nmbox&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.languages = makeInvokeFunc(p._languages, {passFrameParam = true, inherited = true})&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>&gt;FnControlOption</name></author>
	</entry>
</feed>