Wikipédia:Esplanada/propostas/Conversor de idiomas para as variantes do português (30mai2010)/PHP

MediaWiki: Editar

País Tabela de conversão
Angola MediaWiki:Conversiontable/pt-ao
Brasil MediaWiki:Conversiontable/pt-br
Cabo Verde MediaWiki:Conversiontable/pt-cv
Guiné Equatorial MediaWiki:Conversiontable/pt-gq
Guiné-Bissau MediaWiki:Conversiontable/pt-gw
Macau MediaWiki:Conversiontable/pt-mo
Moçambique MediaWiki:Conversiontable/pt-mz
Portugal MediaWiki:Conversiontable/pt-pt
São Tomé e Príncipe MediaWiki:Conversiontable/pt-st
Timor-Leste MediaWiki:Conversiontable/pt-tl
pt
pt-br

classes/ Editar

LanguagePt.php Editar

PtConverter class for language conversion in portuguese:

<?php

require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );

/**
 * @ingroup Language
 */
class PtConverter extends LanguageConverter {

	function __construct( $langobj, $maincode, $variants = array(),
						$variantfallbacks = array(), $flags = array(),
						$manualLevel = array()
	)
	{

		parent::__construct( $langobj, $maincode, $variants, $variantfallbacks,
			$flags, $manualLevel
		);

		$names = array(
			'pt'      => 'Português (sem conversão de variantes)', #Original, no conversion
			'pt-ao'   => 'Português de Angola',
			'pt-br'   => 'Português do Brasil',
			'pt-cv'   => 'Português de Cabo Verde',
			'pt-gw'   => 'Português da Guiné-Bissau',
			'pt-gq'   => 'Português da Guiné Equatorial',
			'pt-mo'   => 'Português de Macau',
			'pt-mz'   => 'Português de Moçambique',
			'pt-pt'   => 'Português de Portugal',
			'pt-st'   => 'Português de São Tomé e Príncipe',
			'pt-tl'   => 'Português de Timor-Leste',
			# 'pt-??'   => 'Português de Goa, Damão e Diu', # Territory in Índia
		);
		$this->mVariantNames = array_merge( $this->mVariantNames, $names );
	}

	function loadDefaultTables() {
		/* Is this line necessary for Portuguese? What should be in each default table $pt2**?
		require( dirname( __FILE__ ) . "/../../includes/PtConversion.php" );
		*/

		# Is this syntax ok? Should this loop be used here?
		$variants = $this->mVariants;
		foreach ( $variants as $v ) {
			$this->mTables[$v] = new ReplacementArray;
		}
	}

	# Is this necessary for Portuguese?
	function postLoadTables() {
		# Which variants should use pt-pt conversion table as default and
		# eventually override some rules
		$vars = array(
			'pt-ao', 'pt-cv', 'pt-gw', 'pt-gq', 'pt-mo', 'pt-mz', 'pt-st',
			'pt-tl'
		);
		foreach ( $vars as $v ){
			$this->mTables[$v]->setArray(
				array_merge(
					$this->mTables['pt-pt']->getArray(),
					$this->mTables[$v]->getArray()
				)
			);
		}
	}

	/* there shouldn't be any latin text in Chinese conversion, so no need
	   to mark anything.
	   $noParse is there for compatibility with LanguageConvert::markNoConversion
	 */
	function markNoConversion( $text, $noParse = false ) {
		return $text;
	}

	function convertCategoryKey( $key ) {
		return $this->autoConvert( $key, 'pt' );
	}
}

/**
 * class that handles Portuguese variants
 *
 * @ingroup Language
 */
class LanguagePt extends Language {

	function __construct() {
		parent::__construct();

		$variants = array('pt','pt-ao','pt-br','pt-cv','pt-gw','pt-gq','pt-mo','pt-mz','pt-pt','pt-st','pt-tl');

		/* Should we update loadDefaultTables() above when changing the fallbacks below ?
		*/
		$variantfallbacks = array(
			'pt'      => array(
				'pt-pt', 'pt-ao', 'pt-br', 'pt-cv', 'pt-gw',
				'pt-gq', 'pt-mo', 'pt-mz', 'pt-st', 'pt-tl'
			),
			'pt-ao'   => array( 'pt-pt' ),
			'pt-br'   => array( 'pt-pt' ),
			'pt-cv'   => array( 'pt-pt' ),
			'pt-gw'   => array( 'pt-pt' ),
			'pt-gq'   => array( 'pt-pt' ),
			'pt-mo'   => array( 'pt-pt' ),
			'pt-mz'   => array( 'pt-pt' ),
			'pt-pt'   => array( 'pt-br' ),
			'pt-st'   => array( 'pt-pt' ),
			'pt-tl'   => array( 'pt-pt' ),
		);
		/* Should we use translated names for the flags, as in "Sr" language?
		$flags = array(
			'S' => 'S', 'писмо' => 'S', 'pismo' => 'S',
			'W' => 'W', 'реч'   => 'W', 'reč'   => 'W', 'ријеч' => 'W', 'riječ' => 'W'
		);
		*/
		$flags = array();

		$ml = array(
			'pt'    => 'disable',		/*#Should we use "unidirectional" or "bidirectional" manual level? What is the difference?
			'pt-ao' => 'unidirectional',	#Default is "bidirectional" for each variant
			'pt-br' => 'unidirectional',
			'pt-cv' => 'unidirectional',
			'pt-gw' => 'unidirectional',
			'pt-gq' => 'unidirectional',
			'pt-mo' => 'unidirectional',
			'pt-mz' => 'unidirectional',
			'pt-pt' => 'unidirectional',
			'pt-st' => 'unidirectional',
			'pt-tl' => 'unidirectional',*/
		);

		$this->mConverter = new PtConverter(
			$this, 'pt', $variants,
			$variantfallbacks, $flags, $ml
		);

		global $wgHooks;
		$wgHooks['ArticleSaveComplete'][] = $this->mConverter;
	}
}

messages/ Editar

Create and/or edit the following MediaWiki messages files:

MessagesPt.php Editar

MediaWiki messages to add:

/*
Short names for language variants used for language conversion links.
To disable showing a particular link, set it to 'disable', e.g.
'variantname-zh-sg' => 'disable',
Variants for portuguese language
*/
'variantname-pt'      => 'Sem conversão de variantes', # Original wikicode, no conversion
'variantname-pt-ao'   => 'Angolano', # Português de Angola
'variantname-pt-br'   => 'Brasileiro', # Português do Brasil
'variantname-pt-cv'   => 'Cabo-verdiano', # Cabo-verdense, Português de Cabo Verde
'variantname-pt-gw'   => 'Guinéu', # Guineano or Guineense, Português da Guiné-Bissau
'variantname-pt-gq'   => 'Guinéu-equatoriano', # Guineense, Português da Guiné Equatorial
'variantname-pt-mo'   => 'Macaense', # De Macau? Português de Macau
'variantname-pt-mz'   => 'Moçambicano', # Português de Moçambique
'variantname-pt-pt'   => 'Português', # Português de Portugal
'variantname-pt-st'   => 'São-tomense', # Português de São Tomé e Príncipe
'variantname-pt-tl'   => 'Timorense', # Maubere, Português de Timor-Leste

MessagesPt_*.php Editar

Create one file for each variant:

  • MessagesPt_ao.php
  • MessagesPt_br.php (already exists!)
  • MessagesPt_cv.php
  • MessagesPt_gw.php
  • MessagesPt_gq.php
  • MessagesPt_mo.php
  • MessagesPt_mz.php
  • MessagesPt_pt.php (Should the current MessagesPt.php be here, and the main file MessagesPt.php use messages as neutral as possible, to be useful in all variants? Or what?)
  • MessagesPt_st.php
  • MessagesPt_tl.php
/*
<?php
/** Portuguese (<Country ???>)
 *
 * See MessagesQqq.php for message documentation incl. usage of parameters
 * To improve a translation please visit http://translatewiki.net
 *
 * @ingroup Language
 * @file
 */

# Inherit everything for now
$fallback = 'pt';

Names.php Editar

MediaWiki language names to add:

	'pt-ao' => 'Português de Angola', # Portuguese (Angola)
	'pt-br' => 'Português do Brasil', # Portuguese (Brazil)
	'pt-cv' => 'Português de Cabo Verde', # Portuguese (Cape Verde)
	'pt-gw' => 'Português da Guiné-Bissau', # Portuguese (Guinea-Bissau)
	'pt-gq' => 'Português da Guiné Equatorial', # Portuguese (Equatorial Guinea)
	'pt-mo' => 'Português de Macau', # Portuguese (Macau)
	'pt-mz' => 'Português de Moçambique', # Portuguese (Mozambique)
	'pt-pt' => 'Português de Portugal', # Portuguese (Portugal)
	'pt-st' => 'Português de São Tomé e Príncipe', # Portuguese (São Tomé and Príncipe)
	'pt-tl' => 'Português de Timor-Leste', # Portuguese (East Timor)