Help:Lua/mw.language

来自滚动的天空Wiki

mw.language提供了与语言有关的相关功能。请使用本页的静态方法获取一个语言对象,然后才能调用实例方法。

静态方法[编辑源代码]

fetchLanguageName[编辑源代码]

mw.language.fetchLanguageName(code, inLanguage) 返回给定的语言代码的完整语言名称。如有inLanguage的值,则是code的这个语言在inLanguage中的语言名称,否则表示该语言的本地名称。例如:

  • 用俄语表示俄语:mw.language.fetchLanguageName('ru') → русский
  • 用法语表示俄语:mw.language.fetchLanguageName('ru', 'fr') → russe
  • 用中文表示俄语:mw.language.fetchLanguageName('ru', 'zh') → 俄语

fetchLanguageNames[编辑源代码]

mw.language.fetchLanguageName(inLanguage, include)

获取MediaWiki已知的语言列表,返回将语言代码映射到语言名称的表。

默认返回的名称是语言自称,但如果有inLanguage则返回那个语言下的所有名称。

默认只会返回MediaWiki已知的语言名称,若include'all'则表示所有可用的语言,'mwfile'表示包括拥有在MediaWiki核心或启用的扩展包括的自定义消息的语言。默认为'mw'

例如,mw.language.fetchLanguageNames()返回如下内容:

{
  ["aa"] = "Qafár af",
  ["ab"] = "Аҧсшәа",
  ["abs"] = "bahasa ambon",
  ["ace"] = "Acèh",
  ...
  
  ["zh-sg"] = "中文(新加坡)",
  ["zh-tw"] = "中文(台灣)",
  ["zh-yue"] = "粵語",
  ["zu"] = "isiZulu",
}

mw.language.fetchLanguageNames('ja')则会返回如下内容:

{
  ["aa"] = "アファル語",
  ["ab"] = "アブハズ語",
  ["abs"] = "Ambonese Malay",
  ["ace"] = "アチェ語",
  ...
  ["zh-tw"] = "中国語(台湾)",
  ["zh-yue"] = "広東語",
  ["zu"] = "ズールー語",
}

getContentLanguage[编辑源代码]

mw.language.getContentLanguage()mw.getContentLanguage()

返回wiki当前的默认语言的语言对象。

getFallbacksFor[编辑源代码]

mw.language.getFallbacksFor(code)

返回MediaWiki针对指定语言代码的备选语言代码列表。例如:

  • mw.language.getFallbacksFor('zh')返回{'zh-hans', 'en'}
  • mw.language.getFallbacksFor('ja')返回{'en'}
  • mw.language.getFallbacksFor('en')返回{}

isKnownLanguageTag[编辑源代码]

mw.language.isKnownLanguageTag(code)

若语言代码为MediaWiki已知的语言,返回true。语言代码“已知”意味着是个“有效的内置代码”(例如,对于mw.language.isValidBuiltInCode返回true),对于mw.language.fetchLanguageName返回一个非空字符串。

例如,mw.language.isKnownLanguageTag('zh')返回true,mw.language.isKnownLanguageTag('zh-shanghai')返回false。

isSupportedLanguage[编辑源代码]

mw.language.isSupportedLanguage(code)

检查MediaWiki的语言代码内是否有任何本地化可用。

语言“受支持”意味着是个“有效的”代码(对于mw.language.isValidCode返回true),不包含任何大写字母,并在MediaWiki的当前运行版本中有个消息文件。

一个语言代码可能既“受支持”又“未知”(例如,对mw.language.isKnownLanguageTag返回true)。还要注意,尽管mw.language.isValidBuiltInCode返回false,特定的代码仍是“受支持”的。

isValidBuiltInCode[编辑源代码]

mw.language.isValidBuiltInCode(code)

如果语言代码是用于MediaWiki内部自定义的有效形式,返回true。

这个代码可能不对应任何已知语言。

语言代码是“有效的内置代码”意味着这是个“有效”代码(比如,对于mw.language.isValidCode返回true),只包括ASCII字母、数字和连字符,并至少两个字符长度。

注意有些代码“受支持”(即mw.language.isSupportedLanguage会返回true),即使这个函数返回false。

isValidCode[编辑源代码]

mw.language.isValidCode(code)

若语言代码字符串是有效形式的,返回true,无论其是否存在。这包括了所有单独用于通过MediaWiki命名空间自定义使用的语言代码。

这个代码可能不对应任何已知语言。

一个语言代码有效意味着不包含任何不安全字符(逗号、单双引号、斜杠、反斜杠、尖括号、连字号或ASCII NUL)且允许出现在页面标题中。

new[编辑源代码]

mw.language.new(code)mw.getLanguage(code)

创建新的语言对象。语言对象没有任何可公开获取的属性,不过可以含有几个方法。不同语言代码在页面中的使用有次数限制。超过限制会报错。

实例方法[编辑源代码]

本页的所有实例中,lang均表示一个语言对象。

getCode[编辑源代码]

lang:getCode()

返回这个语言对象的语言代码。

getFallbackLanguages[编辑源代码]

lang:getFallbackLanguages()

返回MediaWiki针对此语言对象的备选语言代码列表。mw.language.getFallbackLanguages(lang:getCode())

isRTL[编辑源代码]

lang:isRTL()

若语言是从右至左写的,返回true,否则返回false。

lc[编辑源代码]

lang:lc()

将字符串转化为小写,但遵从给定的语言的任何特殊规则。mw.ustring.lower()函数会通过调用mw.language.getContentLanguage():lc(s)来实现。

lcfirst[编辑源代码]

lang:lcfirst()

将字符串的第一个字符转化为小写,就像lang:lc()那样。

uc[编辑源代码]

lang:uc()

将字符串转化为大写,但遵从给定的语言的任何特殊规则。mw.ustring.upper()函数会通过调用mw.language.getContentLanguage():lc(s)来实现。

ucfirst[编辑源代码]

lang:ucfirst()

将字符串的第一个字符转化为大写,就像lang:uc()那样。

caseFold[编辑源代码]

lang:caseFold()

将字符串转换为不区分大小写的比较表示形式。注意,显示其结果可能无任何意义。

formatNum[编辑源代码]

lang:formatNum(n, options)

格式化数字,使用给定语言的合适的分组符合小数点。给予123456.78,可能会产生123,456.78、123.456,78或甚至١٢٣٬٤٥٦٫٧٨,取决于语言和wiki配置。

options是包含选项设置的表,可以是:

  • noCommafy:若为true,则忽略分组符并使用点(.)作为小数点。数字转化仍会发生,可能包括转化数字分隔符。
=mw.getContentLanguage():formatNum(1234567.89)
1,234,567.89
=mw.language.new'ru':formatNum(1234567.89)
1 234 567,89
=mw.language.new'ar':formatNum(1234567.89)
١٬٢٣٤٬٥٦٧٫٨٩
=mw.language.new'ar':formatNum(1234567.89, {noCommafy=true})
١٢٣٤٥٦٧.٨٩

formatDate[编辑源代码]

lang:formatDate(format, timestamp, isLocal)

根据给定的格式字符串格式化一个日期。timestamp表示需要格式化的时间戳,默认为当前时间。isLocal如果是true,那么时间会格式化为当前时间而非UTC。format解析器函数{{#time:}}的格式相同。

formatDuration[编辑源代码]

lang:formatDuration(seconds, chosenIntervals)

将时间间隔(单位为秒)转化为更加易读的单位,例如12345转化为3 hours, 25 minutes and 45 seconds(3时25分45秒),返回字符串结果。

chosenIntervals,如提供,是一个指定了要在结果中使用的间隔单位名称的表(table)。包括millenniacenturiesdecadesyearsweeksdayshoursminutesseconds

例如:

=mw.getContentLanguage():formatDuration(114514)
17小时4834
=mw.getContentLanguage():formatDuration(1145141919810)
362个世纪883713小时3354
=mw.getContentLanguage():formatDuration(1145141919810, {'days', 'seconds'})
13,253,95735,010
=mw.language.new'ru':formatDuration(1145141919810)
36 тысячелетий, 2 века, 8 десятилетий, 8 лет, 37 дней, 13 часов, 33 минуты и 54 секунды

parseFormattedNumber[编辑源代码]

lang:parseFormattedNumber(s)

这需要一个以lang:formatNum()格式化的数字,并返回实际数字。换句话说,这基本上是tonumber的根据语言转换的版本。

convertPlural[编辑源代码]

lang:convertPlural(n, forms)lang:convertPlural(n, ...),此外lang:plural等价

forms(必须是数组)或可变参数...基于数字n选择合适的语法形式。以英语为例:

=mw.language.new'en':convertPlural(1, 'second', 'seconds')
second
=mw.language.new'en':convertPlural(20, 'second', 'seconds')
seconds

convertGrammar[编辑源代码]

lang:convertGrammar(word, case)lang:grammar(case, word),注意两者不等价

这会选择给定的变形码case的合适的word变形形式。

wordcase的可能的值是依赖于语言的、

gender[编辑源代码]

lang:gender(what, masculine, feminine, neutral)lang:gender(what, {masculine, femining, neutral})

选择对应what的性别的字符串,可以是male、female或注册的用户名。

getArrow[编辑源代码]

lang:getArrow(direction)

返回对应方向direction的Unicode箭头字符,可以有以下值:

  • forwards:“→”或“←”,取决于语言的书写方向。
  • backwards:“←”或“→”,取决于语言的书写方向。
  • left:“←”
  • right:“→”
  • up:“↑”
  • down:“↓”

例如:

=mw.language.new'en':getArrow('forwards')

=mw.language.new'he':getArrow('forwards')

如果direction无效,返回nil。

getDir[编辑源代码]

lang:getDir()

根据语言的书写方向,返回"ltr"(从左至右)或"rtl"(从右至左)。

getDirMark[编辑源代码]

lang:getDirMark(isOpposite)

返回包含U+200E(从左至右标记)或U+20F(从右至左标记)的字符串,取决于语言的书写方向以及isOpposite的值。

getDirMarkEntity[编辑源代码]

lang:getDirMarkEntity(isOpposite)

返回“‎”或“‏”,取决于语言的书写方向和isOpposite的值。

getDurationIntervals[编辑源代码]

lang:getDurationIntervals(seconds, chosenIntervals)

将秒数的时间间隔转化为更加已读的单位,并返回从单位名称映射到数字的表。

chosenIntervals,如提供,则表示返回的值中使用的时间间隔单位的表(table),可以包括millenniacenturiesdecadesyearsweeksdayshoursminutesseconds

这些单元关键字也是返回的表中使用的键。返回中仅设置具有非零值的单位,除非返回值为空,在这种情况下,返回值为0的最小单位。例如:

=mw.logObject(mw.getContentLanguage():getDurationIntervals(114514))
table#1 {
  ["days"] = 1,
  ["hours"] = 7,
  ["minutes"] = 48,
  ["seconds"] = 34,
}