Module:Linguistic: Difference between revisions
From Neodyland Wiki
More actions
test with a "global" lang variable that might simplify much of the code |
doesnt seem to work |
||
| Line 3: | Line 3: | ||
local p = {} | local p = {} | ||
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ' | local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ' | ||
function isin(str, pattern) | function isin(str, pattern) | ||
| Line 17: | Line 10: | ||
end | end | ||
function langisin(str) | function langisin(str, lang) | ||
return langisin(str, lang .. ',') -- comma is necessary to avoid false positives like zh in zh-hans | return langisin(str, lang .. ',') -- comma is necessary to avoid false positives like zh in zh-hans | ||
end | end | ||
| Line 25: | Line 18: | ||
end | end | ||
function p.wordsep() -- default separator between words | function p.wordsep(lang) -- default separator between words | ||
-- language with no separator | -- language with no separator | ||
if langisin('zh, ja, zh-hans, zh-hant, zh-sg, zh-cn, sh-tw') then | if langisin('zh, ja, zh-hans, zh-hant, zh-sg, zh-cn, sh-tw') then | ||
| Line 34: | Line 27: | ||
end | end | ||
function p.noungroup(noun, adj) | function p.noungroup(noun, adj, lang) | ||
if not noun then | if not noun then | ||
return nil end | return nil end | ||
| Line 41: | Line 34: | ||
end | end | ||
-- adjective before the noun | -- adjective before the noun | ||
if langisin('de, de-at, de-ch, en, en-ca, en-gb, zh ') then | if langisin('de, de-at, de-ch, en, en-ca, en-gb, zh ', lang) then | ||
return adj .. p.wordsep(lang) .. noun | return adj .. p.wordsep(lang) .. noun | ||
-- adjective after the noun | -- adjective after the noun | ||
Revision as of 12:23, 22 November 2013
This documentation is transcluded from Module:Linguistic/doc.
-- some simple internationalization that can be called by other modules
local p = {}
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
function isin(str, pattern)
if mw.ustring.find(str, pattern, 1, true ) then
return true
end
end
function langisin(str, lang)
return langisin(str, lang .. ',') -- comma is necessary to avoid false positives like zh in zh-hans
end
function p.vowelfirst (str)
return isin(vowels, str[1])
end
function p.wordsep(lang) -- default separator between words
-- language with no separator
if langisin('zh, ja, zh-hans, zh-hant, zh-sg, zh-cn, sh-tw') then
return ''
end
-- default: white space
return ' '
end
function p.noungroup(noun, adj, lang)
if not noun then
return nil end
if not adj
then return noun
end
-- adjective before the noun
if langisin('de, de-at, de-ch, en, en-ca, en-gb, zh ', lang) then
return adj .. p.wordsep(lang) .. noun
-- adjective after the noun
elseif langisin('fr, fr-ca, it') then
return noun .. p.wordsep(lang) .. adj
else
return noun ' (' .. adj .. ')'
end
end
return p