Multilingual – Module with functions in context of languages, language codes, language names.

Functions for templates

edit

All functions expect one unnamed parameter 1 with the key information, and sometimes more optionals. Whitespace ahead and after any content is ignored. Upcasing of language code segments like in en-US does not matter; results are downcased.

The return value is an empty string (“nothing”), if the parameter value does not fulfil the expectations. If there is a result or the query condition is true, at least one visible character will be returned. The result does not begin or end with a space.

fair
Format language code according to RFC 5646 and check validity
  • Result: empty, if invalid
findCode
Retrieve code of language name in local (current project) language.
A code itself will be identified, too.
format
Format one or more languages.
  • 1 – language list or single item
  • slang – language of the answer, if not native
    • * – native (default)
    • ! – current project
    • any valid code
  • shift – capitalization
    • c – capitalize all
    • d – downcase everything
    • f – capitalize first item only
    • m – downcase every first word in item only
  • link=1 – link items
  • scream – category title in case of error
  • split – split pattern, if list expected; e.g. split=, – otherwise 1 is regarded as single item
  • separator – list separator, else split
  • start – prepend first list element, if any
getBase
Retrieve base language from possibly combined ISO language code.
getName
Which name is assigned to this language code?
  • 2 – language of the answer
    • * – in that language itself (default)
    • ! – in project language
    • Any ISO code.
isLang
Could this be an ISO language code?
  • nothing – if not
isLangWiki
Could this be a Wiki language version?
  • nothing – if not
kannDeutsch
Might someone with this language code understand German?
  • nothing – if not
userLang
Try to support user language by application.
  • 1 – space separated list of available ISO 639 codes
  • Result:
    • If the current user language is not a list element, the first element is used.
    • If the current user language is a variant like en-US or en-GB and that is not mentioned explicitly in list, base language (here en) will be tried.
    • If nothing matches and no list is provided, the project language (here en), at least en for English will be returned.
failsafe
Version ID: 2020-12-10
optional parameter 1 – required version
result: empty, if requirement not met

Examples (test page)

edit

A test page illustrates practical use.

Functions for Lua modules (API)

edit

All functions described above can be used by other modules:

local lucky, Multilingual = pcall( require, "Module:Multilingual" )
if type( Multilingual ) == "table" then
    Multilingual = Multilingual.Multilingual()
else
    -- failure; Multilingual is the error message
    return "<span class='error'>" .. Multilingual .. "</span>"
end

Subsequently there are available:

Multilingual.fair( ask )
  • ask – string, or table according to getLang()
Multilingual.findCode( ask )
Multilingual.format( apply, alien, alter, active, alert, frame, assembly, adjacent )
  • apply – string with language list or single item
  • alien – language of the answer
    • nil false "*" – native
    • "!" – current project
    • any valid code
  • alter – capitalization
    • "c" – capitalize
    • "d" – downcase everything
    • "f" – capitalize first item only, downcase anything else
  • active – link items, if true
  • alert – string with category title in case of error
  • frame – if available
  • assembly – string with split pattern, if list expected
  • adjacent – string with list separator, else assembly
  • ahead – string for optional prepending first element, if any
Multilingual.getBase( ask )
Multilingual.getLang( ask )
Split language code into components
Returns: table
.base – Basic language (2–3 lowercase letters)
.region – Country (2 uppercase letters)
.script – Scripting (4 letters, capitalized)
.year – year (4 digits)
.extension – Extension (1 lowercase letter)
.other – More
.legaltrue if valid
.n – Number of components
Multilingual.getName( ask, alien )
  • alien – language of the answer
    • nil false "*" – native
    • "!" – current project
    • Any ISO code.
Multilingual.isLang( ask )
Multilingual.isLangWiki( ask )
Multilingual.kannDeutsch( ask )
Multilingual.userLang( accept, frame )
  • accept – string with space separated list of available ISO 639 codes
  • frame – if available
Multilingual.failsafe( atleast )
  • atleast
    optional
    nil or required version
  • Returns: string or false

If succeeding, the Multilingual.get*() return a string, the Multilingual.is*() true; on failure false.

Usage

edit

General library; no limitations.

Dependencies

edit