| Aquesta pàgina està discontinuada es tradueix diferent |
# Scary transclusion
'scarytranscludedisabled' => '[La transclusió d\'interwiki està inhabilitada]',
'scarytranscludefailed' => '[L\'obtenció de la plantilla ha fallat]',
'scarytranscludetoolong' => '[L\'URL és massa llarg]',
# Trackbacks
'trackbackbox' => "<div id='mw_trackbacks'>
Referències a aquest article:<br />
$1
</div>
",
'trackback' => "; $4$5 : [$2 $1]\n",
'trackbackexcerpt' => "; $4$5 : [$2 $1]: $3\n",
'trackbackremove' => ' ([Suprimeix $1])',
'trackbacklink' => 'Referència',
'trackbackdeleteok' => 'La referència s\'ha suprimit amb èxit.',
'unit-pixel' => 'px',
);
/* a fake language converter */
class fakeConverter {
var $mLang;
function fakeConverter($langobj) {$this->mLang = $langobj;}
function convert($t, $i) {return $t;}
function getVariants() { return array( $this->mLang->getCode() ); }
function getPreferredVariant() {return $this->mLang->getCode(); }
function findVariantLink(&$l, &$n) {}
function getExtraHashOptions() {return '';}
function getParsedTitle() {return '';}
function markNoConversion($text) {return $text;}
function convertCategoryKey( $key ) {return $key; }
}
#--------------------------------------------------------------------------
# Internationalisation code
#--------------------------------------------------------------------------
class Language {
var $mConverter;
function Language() {
# Copies any missing values in the specified arrays from En to the current language
$fillin = array( 'wgSysopSpecialPages', 'wgValidSpecialPages', 'wgDeveloperSpecialPages' );
$name = get_class( $this );
if( strpos( $name, 'language' ) == 0){
$lang = ucfirst( substr( $name, 8 ) );
foreach( $fillin as $arrname ){
$langver = "{$arrname}{$lang}";
$enver = "{$arrname}En";
if( ! isset( $GLOBALS[$langver] ) || ! isset( $GLOBALS[$enver] ))
continue;
foreach($GLOBALS[$enver] as $spage => $text){
if( ! isset( $GLOBALS[$langver][$spage] ) )
$GLOBALS[$langver][$spage] = $text;
}
}
}
$this->mConverter = new fakeConverter($this);
}
/**
* Exports the default user options as defined in
* $wgDefaultUserOptionsEn, user preferences can override some of these
* depending on what's in (Local|Default)Settings.php and some defines.
*
* @return array
*/
function getDefaultUserOptions() {
global $wgDefaultUserOptionsEn ;
return $wgDefaultUserOptionsEn ;
}
/**
* Exports $wgBookstoreListEn
* @return array
*/
function getBookstoreList() {
global $wgBookstoreListEn ;
return $wgBookstoreListEn ;
}
/**
* @return array
*/
function getNamespaces() {
global $wgNamespaceNamesEn;
return $wgNamespaceNamesEn;
}
/**
* A convenience function that returns the same thing as
* getNamespaces() except with the array values changed to ' '
* where it found '_', useful for producing output to be displayed
* e.g. in <select> forms.
*
* @return array
*/
function getFormattedNamespaces() {
$ns = $this->getNamespaces();
foreach($ns as $k => $v) {
$ns[$k] = strtr($v, '_', ' ');
}
return $ns;
}
/**
* Get a namespace value by key
* <code>
* $mw_ns = $wgContLang->getNsText( NS_MEDIAWIKI );
* echo $mw_ns; // prints 'MediaWiki'
* </code>
*
* @param int $index the array key of the namespace to return
* @return mixed, string if the namespace value exists, otherwise false
*/
function getNsText( $index ) {
$ns = $this->getNamespaces();
return isset( $ns[$index] ) ? $ns[$index] : false;
}
/**
* A convenience function that returns the same thing as
* getNsText() except with '_' changed to ' ', useful for
* producing output.
*
* @return array
*/
function getFormattedNsText( $index ) {
$ns = $this->getNsText( $index );
return strtr($ns, '_', ' ');
}
/**
* Get a namespace key by value, case insensetive.
*
* @param string $text
* @return mixed An integer if $text is a valid value otherwise false
*/
function getNsIndex( $text ) {
$ns = $this->getNamespaces();
foreach ( $ns as $i => $n ) {
if ( strcasecmp( $n, $text ) == 0)
return $i;
}
return false;
}
/**
* short names for language variants used for language conversion links.
*
* @param string $code
* @return string
*/
function getVariantname( $code ) {
return wfMsg( "variantname-$code" );
}
function specialPage( $name ) {
return $this->getNsText(NS_SPECIAL) . ':' . $name;
}
function getQuickbarSettings() {
global $wgQuickbarSettingsEn;
return $wgQuickbarSettingsEn;
}
function getSkinNames() {
global $wgSkinNamesEn;
return $wgSkinNamesEn;
}
function getMathNames() {
global $wgMathNamesEn;
return $wgMathNamesEn;
}
function getDateFormats() {
global $wgDateFormatsEn;
return $wgDateFormatsEn;
}
function getValidationTypes() {
global $wgValidationTypesEn;
return $wgValidationTypesEn;
}
function getUserToggles() {
global $wgUserTogglesEn;
return $wgUserTogglesEn;
}
function getUserToggle( $tog ) {
return wfMsg( "tog-$tog" );
}
function getLanguageNames() {
global $wgLanguageNamesEn;
return $wgLanguageNamesEn;
}
function getLanguageName( $code ) {
global $wgLanguageNamesEn;
if ( ! array_key_exists( $code, $wgLanguageNamesEn ) ) {
return '';
}
return $wgLanguageNamesEn[$code];
}
function getMonthName( $key ) {
global $wgMonthNamesEn, $wgContLang;
// see who called us and use the correct message function
if( get_class( $wgContLang->getLangObj() ) == get_class( $this ) )
return wfMsgForContent($wgMonthNamesEn[$key-1]);
else
return wfMsg($wgMonthNamesEn[$key-1]);
}
/* by default we just return base form */
function getMonthNameGen( $key ) {
return $this->getMonthName( $key );
}
function getMonthAbbreviation( $key ) {
global $wgMonthAbbreviationsEn, $wgContLang;
// see who called us and use the correct message function
if( get_class( $wgContLang->getLangObj() ) == get_class( $this ) )
return wfMsgForContent(@$wgMonthAbbreviationsEn[$key-1]);
else
return wfMsg(@$wgMonthAbbreviationsEn[$key-1]);
}
function getWeekdayName( $key ) {
global $wgWeekdayNamesEn, $wgContLang;
// see who called us and use the correct message function
if( get_class( $wgContLang->getLangObj() ) == get_class( $this ) )
return wfMsgForContent($wgWeekdayNamesEn[$key-1]);
else
return wfMsg($wgWeekdayNamesEn[$key-1]);
}
/**
* Used by date() and time() to adjust the time output.
* @access public
* @param int $ts the time in date('YmdHis') format
* @param mixed $tz adjust the time by this amount (default false)
* @return int
*/
function userAdjust( $ts, $tz = false ) {
global $wgUser, $wgLocalTZoffset;
if (!$tz) {
$tz = $wgUser->getOption( 'timecorrection' );
}
if ( $tz === '' ) {
$hrDiff = isset( $wgLocalTZoffset ) ? $wgLocalTZoffset : 0;
$minDiff = 0;
} elseif ( strpos( $tz, ':' ) !== false ) {
$tzArray = explode( ':', $tz );
$hrDiff = intval($tzArray[0]);
$minDiff = intval($hrDiff < 0 ? -$tzArray[1] : $tzArray[1]);
} else {
$hrDiff = intval( $tz );
}
if ( 0 == $hrDiff && 0 == $minDiff ) { return $ts; }
$t = mktime( (
(int)substr( $ts, 8, 2) ) + $hrDiff, # Hours
(int)substr( $ts, 10, 2 ) + $minDiff, # Minutes
(int)substr( $ts, 12, 2 ), # Seconds
(int)substr( $ts, 4, 2 ), # Month
(int)substr( $ts, 6, 2 ), # Day
(int)substr( $ts, 0, 4 ) ); #Year
return date( 'YmdHis', $t );
}
/**
* This is meant to be used by time(), date(), and timeanddate() to get
* the date preference they're supposed to use, it should be used in
* all children.
*
*<code>
* function timeanddate([...], $format = true) {
* $datePreference = $this->dateFormat($format);
* [...]
*</code>
*
* @param bool $usePrefs: if false, the site/language default is used
* @return string
*/
function dateFormat( $usePrefs = true ) {
global $wgUser, $wgAmericanDates;
if( $usePrefs ) {
$datePreference = $wgUser->getOption( 'date' );
} else {
$options = $this->getDefaultUserOptions();
$datePreference = (string)$options['date'];
}
if( $datePreference == MW_DATE_DEFAULT || $datePreference == '' ) {
return $wgAmericanDates ? MW_DATE_MDY : MW_DATE_DMY;
}
return $datePreference;
}
/**
* @access public
* @param mixed $ts the time format which needs to be turned into a
* date('YmdHis') format with wfTimestamp(TS_MW,$ts)
* @param bool $adj whether to adjust the time output according to the
* user configured offset ($timecorrection)
* @param bool $format true to use user's date format preference
* @param string $timecorrection the time offset as returned by
* validateTimeZone() in Special:Preferences
* @return string
*/
function date( $ts, $adj = false, $format = true, $timecorrection = false ) {
global $wgUser;
if ( $adj ) { $ts = $this->userAdjust( $ts, $timecorrection ); }
$datePreference = $this->dateFormat( $format );
$month = $this->getMonthName( substr( $ts, 4, 2 ) );
$day = $this->formatNum( 0 + substr( $ts, 6, 2 ) );
$year = $this->formatNum( substr( $ts, 0, 4 ), true );
switch( $datePreference ) {
case MW_DATE_DMY: return "$day $month $year";
case MW_DATE_YMD: return "$year $month $day";
case MW_DATE_ISO: return substr($ts, 0, 4). '-' . substr($ts, 4, 2). '-' .substr($ts, 6, 2);
default: return "$month $day, $year";
}
}
/**
* @access public
* @param mixed $ts the time format which needs to be turned into a
* date('YmdHis') format with wfTimestamp(TS_MW,$ts)
* @param bool $adj whether to adjust the time output according to the
* user configured offset ($timecorrection)
* @param bool $format true to use user's date format preference
* @param string $timecorrection the time offset as returned by
* validateTimeZone() in Special:Preferences
* @return string
*/
function time( $ts, $adj = false, $format = true, $timecorrection = false ) {
global $wgUser;
if ( $adj ) { $ts = $this->userAdjust( $ts, $timecorrection ); }
$datePreference = $this->dateFormat( $format );
$t = substr( $ts, 8, 2 ) . ':' . substr( $ts, 10, 2 );
if ( $datePreference == MW_DATE_ISO ) {
$t .= ':' . substr( $ts, 12, 2 );
}
return $this->formatNum( $t );
}
/**
* @access public
* @param mixed $ts the time format which needs to be turned into a
* date('YmdHis') format with wfTimestamp(TS_MW,$ts)
* @param bool $adj whether to adjust the time output according to the
* user configured offset ($timecorrection)
* @param bool $format true to use user's date format preference
* @param string $timecorrection the time offset as returned by
* validateTimeZone() in Special:Preferences
* @return string
*/
function timeanddate( $ts, $adj = false, $format = true, $timecorrection = false) {
global $wgUser;
$datePreference = $this->dateFormat($format);
switch ( $datePreference ) {
case MW_DATE_ISO: return $this->date( $ts, $adj, $format, $timecorrection ) . ' ' .
$this->time( $ts, $adj, $format, $timecorrection );
default: return $this->time( $ts, $adj, $format, $timecorrection ) . ', ' .
$this->date( $ts, $adj, $format, $timecorrection );
}
}
function getMessage( $key ) {
global $wgAllMessagesEn;
return @$wgAllMessagesEn[$key];
}
function getAllMessages() {
global $wgAllMessagesEn;
return $wgAllMessagesEn;
}
function iconv( $in, $out, $string ) {
# For most languages, this is a wrapper for iconv
return iconv( $in, $out, $string );
}
function ucfirst( $string ) {
# For most languages, this is a wrapper for ucfirst()
return ucfirst( $string );
}
function lcfirst( $s ) {
return strtolower( $s{0} ). substr( $s, 1 );
}
function checkTitleEncoding( $s ) {
global $wgInputEncoding;
# Check for UTF-8 URLs; Internet Explorer produces these if you
# type non-ASCII chars in the URL bar or follow unescaped links.
$ishigh = preg_match( '/[\x80-\xff]/', $s);
$isutf = ($ishigh ? preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
'[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s ) : true );
if( ($wgInputEncoding != 'utf-8') and $ishigh and $isutf )
return @iconv( 'UTF-8', $wgInputEncoding, $s );
if( ($wgInputEncoding == 'utf-8') and $ishigh and !$isutf )
return utf8_encode( $s );
# Other languages can safely leave this function, or replace
# it with one to detect and convert another legacy encoding.
return $s;
}
/**
* Some languages have special punctuation to strip out
* or characters which need to be converted for MySQL's
* indexing to grok it correctly. Make such changes here.
*
* @param string $in
* @return string
*/
function stripForSearch( $in ) {
return strtolower( $in );
}
function convertForSearchResult( $termsArray ) {
# some languages, e.g. Chinese, need to do a conversion
# in order for search results to be displayed correctly
return $termsArray;
}
/**
* Get the first character of a string. In ASCII, return
* first byte of the string. UTF8 and others have to
* overload this.
*
* @param string $s
* @return string
*/
function firstChar( $s ) {
return $s[0];
}
function initEncoding() {
# Some languages may have an alternate char encoding option
# (Esperanto X-coding, Japanese furigana conversion, etc)
# If this language is used as the primary content language,
# an override to the defaults can be set here on startup.
#global $wgInputEncoding, $wgOutputEncoding, $wgEditEncoding;
}
function setAltEncoding() {
# Some languages may have an alternate char encoding option
# (Esperanto X-coding, Japanese furigana conversion, etc)
# If 'altencoding' is checked in user prefs, this gives a
# chance to swap out the default encoding settings.
#global $wgInputEncoding, $wgOutputEncoding, $wgEditEncoding;
}
function recodeForEdit( $s ) {
# For some languages we'll want to explicitly specify
# which characters make it into the edit box raw
# or are converted in some way or another.
# Note that if wgOutputEncoding is different from
# wgInputEncoding, this text will be further converted
# to wgOutputEncoding.
global $wgInputEncoding, $wgEditEncoding;
if( $wgEditEncoding == '' or
$wgEditEncoding == $wgInputEncoding ) {
return $s;
} else {
return $this->iconv( $wgInputEncoding, $wgEditEncoding, $s );
}
}
function recodeInput( $s ) {
# Take the previous into account.
global $wgInputEncoding, $wgOutputEncoding, $wgEditEncoding;
if($wgEditEncoding != "") {
$enc = $wgEditEncoding;
} else {
$enc = $wgOutputEncoding;
}
if( $enc == $wgInputEncoding ) {
return $s;
} else {
return $this->iconv( $enc, $wgInputEncoding, $s );
}
}
/**
* For right-to-left language support
*
* @return bool
*/
function isRTL() { return false; }
/**
* To allow "foo[[bar]]" to extend the link over the whole word "foobar"
*
* @return bool
*/
function linkPrefixExtension() { return false; }
function &getMagicWords() {
global $wgMagicWordsEn;
return $wgMagicWordsEn;
}
# Fill a MagicWord object with data from here
function getMagic( &$mw ) {
$raw = $this->getMagicWords();
if( !isset( $raw[$mw->mId] ) ) {
# Fall back to English if local list is incomplete
$raw =& Language::getMagicWords();
}
$rawEntry = $raw[$mw->mId];
$mw->mCaseSensitive = $rawEntry[0];
$mw->mSynonyms = array_slice( $rawEntry, 1 );
}
/**
* Italic is unsuitable for some languages
*
* @access public
*
* @param string $text The text to be emphasized.
* @return string
*/
function emphasize( $text ) {
return "<em>$text</em>";
}
/**
* This function enables formatting of numbers, it should only come
* into effect when the $wgTranslateNumerals variable is TRUE.
*
* Normally we output all numbers in plain en_US style, that is
* 293,291.235 for twohundredninetythreethousand-twohundredninetyone
* point twohundredthirtyfive. However this is not sutable for all
* languages, some such as Pakaran want ੨੯੩,੨੯੫.੨੩੫ and others such as
* Icelandic just want to use commas instead of dots, and dots instead
* of commas like "293.291,235".
*
* An example of this function being called:
* <code>
* wfMsg( 'message', $wgLang->formatNum( $num ) )
* </code>
*
* See LanguageGu.php for the Gujarati implementation and
* LanguageIs.php for the , => . and . => , implementation.
*
* @todo check if it's viable to use localeconv() for the decimal
* seperator thing.
* @access public
* @param mixed $number the string to be formatted, should be an integer or
* a floating point number.
* @param bool $year are we being passed a year? (turns off commafication)
* @return mixed whatever we're fed if it's a year, a string otherwise.
*/
function formatNum( $number, $year = false ) {
return $year ? $number : $this->commafy($number);
}
/**
* Adds commas to a given number
*
* @param mixed $_
* @return string
*/
function commafy($_) {
return strrev((string)preg_replace('/(\d{3})(?=\d)(?!\d*\.)/','$1,',strrev($_)));
}
/**
* For the credit list in includes/Credits.php (action=credits)
*
* @param array $l
* @return string
*/
function listToText( $l ) {
$s = '';
$m = count($l) - 1;
for ($i = $m; $i >= 0; $i--) {
if ($i == $m) {
$s = $l[$i];
} else if ($i == $m - 1) {
$s = $l[$i] . ' ' . $this->getMessage('and') . ' ' . $s;
} else {
$s = $l[$i] . ', ' . $s;
}
}
return $s;
}
# Crop a string from the beginning or end to a certain number of bytes.
# (Bytes are used because our storage has limited byte lengths for some
# columns in the database.) Multibyte charsets will need to make sure that
# only whole characters are included!
#
# $length does not include the optional ellipsis.
# If $length is negative, snip from the beginning
function truncate( $string, $length, $ellipsis = '' ) {
if( $length == 0 ) {
return $ellipsis;
}
if ( strlen( $string ) <= abs( $length ) ) {
return $string;
}
if( $length > 0 ) {
$string = substr( $string, 0, $length );
return $string . $ellipsis;
} else {
$string = substr( $string, $length );
return $ellipsis . $string;
}
}
/**
* Grammatical transformations, needed for inflected languages
* Invoked by putting {{grammar:case|word}} in a message
*
* @param string $word
* @param string $case
* @return string
*/
function convertGrammar( $word, $case ) {
return $word;
}
/**
* languages like Chinese need to be segmented in order for the diff
* to be of any use
*
* @param string $text
* @return string
*/
function segmentForDiff( $text ) {
return $text;
}
/**
* and unsegment to show the result
*
* @param string $text
* @return string
*/
function unsegmentForDiff( $text ) {
return $text;
}
# convert text to different variants of a language.
function convert( $text, $isTitle = false) {
return $this->mConverter->convert($text, $isTitle);
}
/**
* Perform output conversion on a string, and encode for safe HTML output.
* @param string $text
* @param bool $isTitle -- wtf?
* @return string
* @todo this should get integrated somewhere sane
*/
function convertHtml( $text, $isTitle = false ) {
return htmlspecialchars( $this->convert( $text, $isTitle ) );
}
function convertCategoryKey( $key ) {
return $this->mConverter->convertCategoryKey( $key );
}
/**
* get the list of variants supported by this langauge
* see sample implementation in LanguageZh.php
*
* @return array an array of language codes
*/
function getVariants() {
return $this->mConverter->getVariants();
}
function getPreferredVariant() {
return $this->mConverter->getPreferredVariant();
}
/**
* if a language supports multiple variants, it is
* possible that non-existing link in one variant
* actually exists in another variant. this function
* tries to find it. See e.g. LanguageZh.php
*
* @param string $link the name of the link
* @param mixed $nt the title object of the link
* @return null the input parameters may be modified upon return
*/
function findVariantLink( &$link, &$nt ) {
$this->mConverter->findVariantLink($link, $nt);
}
/**
* returns language specific options used by User::getPageRenderHash()
* for example, the preferred language variant
*
* @return string
* @access public
*/
function getExtraHashOptions() {
return $this->mConverter->getExtraHashOptions();
}
/**
* for languages that support multiple variants, the title of an
* article may be displayed differently in different variants. this
* function returns the apporiate title defined in the body of the article.
*
* @return string
*/
function getParsedTitle() {
return $this->mConverter->getParsedTitle();
}
/**
* Enclose a string with the "no conversion" tag. This is used by
* various functions in the Parser
*
* @param string $text text to be tagged for no conversion
* @return string the tagged text
*/
function markNoConversion( $text ) {
return $this->mConverter->markNoConversion( $text );
}
/**
* A regular expression to match legal word-trailing characters
* which should be merged onto a link of the form [[foo]]bar.
*
* @return string
* @access public
*/
function linkTrail() {
return $this->getMessage( 'linktrail' );
}
function getLangObj() {
return $this;
}
/**
* Get the RFC 3066 code for this language object
*/
function getCode() {
return str_replace( '_', '-', strtolower( substr( get_class( $this ), 8 ) ) );
}
}
# This should fail gracefully if there's not a localization available
wfSuppressWarnings();
include_once( 'Language' . str_replace( '-', '_', ucfirst( $wgLanguageCode ) ) . '.php' );
wfRestoreWarnings();
}
?>

