<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.statbel.fgov.be/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ALinguistic</id>
	<title>Module:Linguistic - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.statbel.fgov.be/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ALinguistic"/>
	<link rel="alternate" type="text/html" href="https://wiki.statbel.fgov.be/w/index.php?title=Module:Linguistic&amp;action=history"/>
	<updated>2026-05-06T10:56:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://wiki.statbel.fgov.be/w/index.php?title=Module:Linguistic&amp;diff=136049&amp;oldid=prev</id>
		<title>Wikibase-admin: Created page with &quot;--[[   __  __           _       _        _     _                   _     _   _        |  \/  | ___   __| |_   _| | ___ _| |   (_)_ __   __ _ _   _(_)___| |_(_) ___   | |\/| |/...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.statbel.fgov.be/w/index.php?title=Module:Linguistic&amp;diff=136049&amp;oldid=prev"/>
		<updated>2023-04-17T06:31:09Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;--[[   __  __           _       _        _     _                   _     _   _        |  \/  | ___   __| |_   _| | ___ _| |   (_)_ __   __ _ _   _(_)___| |_(_) ___   | |\/| |/...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
  __  __           _       _        _     _                   _     _   _      &lt;br /&gt;
 |  \/  | ___   __| |_   _| | ___ _| |   (_)_ __   __ _ _   _(_)___| |_(_) ___ &lt;br /&gt;
 | |\/| |/ _ \ / _` | | | | |/ _ (_) |   | | '_ \ / _` | | | | / __| __| |/ __|&lt;br /&gt;
 | |  | | (_) | (_| | |_| | |  __/_| |___| | | | | (_| | |_| | \__ \ |_| | (__ &lt;br /&gt;
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)_____|_|_| |_|\__, |\__,_|_|___/\__|_|\___|&lt;br /&gt;
                                                  |___/                        &lt;br /&gt;
Simple internationalization functions that can be called by other modules.&lt;br /&gt;
This Module was copied from Wikimedia Commons, so please request changes there.&lt;br /&gt;
&lt;br /&gt;
Maintainers:&lt;br /&gt;
* Zolo - original version&lt;br /&gt;
* Jarekt&lt;br /&gt;
&lt;br /&gt;
Dependencies:&lt;br /&gt;
* Module:I18n/or&lt;br /&gt;
* Module:Delink&lt;br /&gt;
* Module:Yesno&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === Internal functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
&lt;br /&gt;
local function langSwitch(list,lang)&lt;br /&gt;
	local langList = mw.language.getFallbacksFor(lang)&lt;br /&gt;
	table.insert(langList,1,lang)&lt;br /&gt;
	for i,language in ipairs(langList) do&lt;br /&gt;
		if list[language] then&lt;br /&gt;
			return list[language]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === External functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.vowelfirst (str)&lt;br /&gt;
	if str then &lt;br /&gt;
		local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'&lt;br /&gt;
		str = mw.ustring.lower(mw.ustring.sub(str,1,1))&lt;br /&gt;
		return mw.ustring.find(vowels, str, 1, true ) &lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.inparentheses(str)&lt;br /&gt;
	if (not str) or (str == &amp;quot;&amp;quot;) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;(&amp;quot;.. str .. &amp;quot;)&amp;quot; -- same in all languages  ?&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.of(word, lang, raw, gender, number, determiner) -- rough translation of &amp;quot;of&amp;quot; in various languages&lt;br /&gt;
-- note that the cases when on &amp;quot;of&amp;quot; is employed varies a lot among languages, so it is more prudent to call this from lang specific function only&lt;br /&gt;
	if not raw or mw.text.trim(raw) == &amp;quot;&amp;quot; then &lt;br /&gt;
		local args = {}&lt;br /&gt;
		local Delink = require('Module:Delink')._delink&lt;br /&gt;
		args[1] = word&lt;br /&gt;
		raw = mw.ustring.lower(Delink(args))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -&amp;gt; 'italie'&lt;br /&gt;
	-- any way to automate this ?&lt;br /&gt;
	&lt;br /&gt;
	if lang == 'fr' then &lt;br /&gt;
		local yesno = require('Module:Yesno')&lt;br /&gt;
		determiner = yesno(determiner,false)&lt;br /&gt;
&lt;br /&gt;
		if determiner then&lt;br /&gt;
			if string.sub(number or '',1,1)=='p' then -- number == 'plural'&lt;br /&gt;
				return 'des&amp;amp;#32;' .. word&lt;br /&gt;
			elseif p.vowelfirst(raw) then&lt;br /&gt;
				return 'de l’' .. word&lt;br /&gt;
			elseif string.sub(gender or '',1,1)=='f' then -- gender == 'feminine'&lt;br /&gt;
				return 'de la&amp;amp;#32;' .. word&lt;br /&gt;
			else&lt;br /&gt;
				return 'du&amp;amp;#32;' .. word&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if p.vowelfirst(raw) then&lt;br /&gt;
				return 'd’' .. word&lt;br /&gt;
			else&lt;br /&gt;
				return 'de&amp;amp;#32;' .. word&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif lang == 'ca' then&lt;br /&gt;
		-- implement [[Template:Of/ca]] or  https://ca.wikipedia.org/wiki/Plantilla:Deod%27/base for case where &amp;quot;{{{context}}}&amp;quot; is &amp;quot;en&amp;quot; (default on Commons)&lt;br /&gt;
		if ( p.vowelfirst(raw) and not mw.ustring.find( 'ia|ià|ie|io|iu|ua|ue|ui|uí|uï|uo|ya|ye|yi|yo|yu|', mw.ustring.sub(raw,1,2) .. '|')) then&lt;br /&gt;
			return 'd\'' .. word&lt;br /&gt;
		else&lt;br /&gt;
			return 'de ' .. word&lt;br /&gt;
		end&lt;br /&gt;
	end	&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.offromwiki(frame)&lt;br /&gt;
	args = frame.args&lt;br /&gt;
	return p.of(args.word, args.lang, args.raw, args.gender, args.number, args.determiner)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.noungroup(noun, adj, lang)&lt;br /&gt;
	if not noun or noun == '' then &lt;br /&gt;
		return nil -- not '' so that it is not counted as a string by mw.listToText&lt;br /&gt;
	end&lt;br /&gt;
	if not adj or adj == ''&lt;br /&gt;
		then return noun&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local wordsep = mw.message.new( &amp;quot;Word-separator&amp;quot; ):inLanguage(lang):plain()&lt;br /&gt;
	local LUT = { de=1, en=1, pl=1, zh=1, fr=2, es=2, it=2}&lt;br /&gt;
	local case = langSwitch(LUT, lang)&lt;br /&gt;
	if case==1 then     -- adjective before the noun&lt;br /&gt;
		return adj .. wordsep .. noun&lt;br /&gt;
	elseif case==2 then -- adjective after the noun&lt;br /&gt;
		return noun .. wordsep .. adj&lt;br /&gt;
	else                -- order unknown&lt;br /&gt;
		return noun ' (' .. adj .. ')'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.conj(args, lang, conjtype)&lt;br /&gt;
	local comma    = mw.message.new( &amp;quot;comma-separator&amp;quot;):inLanguage(lang):plain()&lt;br /&gt;
	local wordsep  = mw.message.new( &amp;quot;Word-separator&amp;quot; ):inLanguage(lang):plain()&lt;br /&gt;
	local andtable = { ar=' و', he=' ו', ja='および', pl=' i '} -- languages with a problem with the MediaWiki:And&lt;br /&gt;
	if conjtype == 'comma' then&lt;br /&gt;
		return mw.text.listToText(args, comma, comma)&lt;br /&gt;
	elseif conjtype == 'or' then &lt;br /&gt;
		local wordor = 	langSwitch(require('Module:I18n/or'), lang)&lt;br /&gt;
		return mw.text.listToText(args, comma, wordor  .. wordsep)&lt;br /&gt;
	elseif conjtype == 'explicit or' then -- adds &amp;quot;or&amp;quot; betwen all words when the context can be confusing&lt;br /&gt;
		local wordor = 	langSwitch(require('Module:I18n/or'), lang)&lt;br /&gt;
		return mw.text.listToText(args, wordor .. wordsep, wordor  .. wordsep)&lt;br /&gt;
	elseif conjtype and conjtype ~= 'and' and conjtype ~= '' then&lt;br /&gt;
		return mw.text.listToText(args, conjtype, conjtype)&lt;br /&gt;
	elseif andtable[lang] then &lt;br /&gt;
		return mw.text.listToText(args, comma, andtable[lang])&lt;br /&gt;
	else&lt;br /&gt;
		local wordand = mw.message.new( &amp;quot;and&amp;quot; ):inLanguage(lang):plain()&lt;br /&gt;
		return mw.text.listToText(args, comma, wordand .. wordsep)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.conjfromWiki(frame)&lt;br /&gt;
	args = frame.args&lt;br /&gt;
	if not args or not args[1] then&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local lang = args.lang&lt;br /&gt;
	if not lang or mw.text.trim(lang) == '' then&lt;br /&gt;
		lang = frame:callParserFunction( &amp;quot;int&amp;quot;, &amp;quot;lang&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	newargs = {}  -- transform args metatable into a table so it can be concetenated&lt;br /&gt;
	for i, j in pairs(args) do&lt;br /&gt;
			if type(i) == 'number' then&lt;br /&gt;
				j = mw.text.trim(j)&lt;br /&gt;
				if j ~= '' then&lt;br /&gt;
					table.insert(newargs, j)&lt;br /&gt;
				end&lt;br /&gt;
			else &lt;br /&gt;
				if i ~= 'type' and i ~= 'lang' then &lt;br /&gt;
					return 'error: bad parameter in template:Conj: ' .. i .. '[[Category:Pages with incorrect template usage/Conj|A]]'&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
	end&lt;br /&gt;
	return p.conj(newargs, lang, args.type)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Wikibase-admin</name></author>
	</entry>
</feed>