Tools 是非官方社区Wiki。社区文档正在编写中,欢迎参与。 Wiki编辑答疑群:717421103
版本250722.2
全站通知:

帮助:解析函数/gender

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

gender是一个解析函数。帮助:解析函数页列出了所有解析函数的说明。

gender

根据用户设置的性别输出不同文字。MediaWiki原生支持。

BWiki中,用户默认称呼是中性,且每一个wiki均独立设置。因此gender函数在多数情况下没用。

语法

{{gender:用户名|男性文字|女性文字|中性文字}}

  • 用户名:在BWiki指用户的b站uid
  • 性别文字:可填写1-3个,分别对应男性、女性和中性。

性别文字参数只有一个时,默认使用中性。参数有两个时,如果用户没有指定性别则默认使用男性。

示例

  • {{gender:39886146|male text|female text|unspecified}} → unspecified (Lu在参数设置中指定了性别)
  • {{gender:39886146|unspecified}} → unspecified (仅有一个文字参数时直接输出)
  • {{gender:|male text|female text|unspecified}} → unspecified (bwiki默认使用中性)
  • {{gender:|male|female}} → male 如果不给出中性文字,默认是男性

底层代码

来自MediaWiki及其扩展的源代码,运行在服务端。此处仅供快速查阅,便于更充分的挖掘其“特性”。

/** mediawiki-1.37.0\includes\parser\CoreParserFunctions.php
 * @param Parser $parser
 * @param string $username
 * @param string ...$forms What to output for each gender
 * @return string
 */
public static function gender( $parser, $username, ...$forms ) {
	// Some shortcuts to avoid loading user data unnecessarily
	if ( count( $forms ) === 0 ) {
		return '';
	} elseif ( count( $forms ) === 1 ) {
		return $forms[0];
	}

	$username = trim( $username );

	$userOptionsLookup = MediaWikiServices::getInstance()->getUserOptionsLookup();
	$gender = $userOptionsLookup->getDefaultOption( 'gender' );

	// allow prefix and normalize (e.g. "*foo" -> "*foo" ).
	$title = Title::newFromText( $username, NS_USER );

	if ( $title && $title->inNamespace( NS_USER ) ) {
		$username = $title->getText();
	}

	// check parameter, or use the ParserOptions if in interface message
	$user = User::newFromName( $username );
	$genderCache = MediaWikiServices::getInstance()->getGenderCache();
	if ( $user ) {
		$gender = $genderCache->getGenderOf( $user, __METHOD__ );
	} elseif ( $username === '' && $parser->getOptions()->getInterfaceMessage() ) {
		$gender = $genderCache->getGenderOf( $parser->getOptions()->getUserIdentity(), __METHOD__ );
	}
	$ret = $parser->getFunctionLang()->gender( $gender, $forms );
	return $ret;
}
代码逻辑:
  • 第一个参数为用户名,后续为性别参数。
    • 性别参数数量为0 输出空字符串
    • 性别参数数量为1 输出此参数
  • 获取用户性别
    • 按性别返回对应性别参数
    • 没有指定性别则返回中性,没有指定中性则返回男性性别参数(第一个性别参数值)

实际用例

一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考