r62253 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r62252‎ | r62253 | r62254 >
Date:17:55, 10 February 2010
Author:yaron
Status:deferred
Tags:
Comment:
Tag for version 0.3
Modified paths:
  • /tags/extensions/SemanticInternalObjects/REL_0_3 (added) (history)

Diff [purge]

Index: tags/extensions/SemanticInternalObjects/REL_0_3/SemanticInternalObjects.php
@@ -0,0 +1,42 @@
 2+<?php
 3+/**
 4+ * Initialization file for SemanticInternalObjects
 5+ *
 6+ * @file
 7+ * @ingroup SemanticInternalObjects
 8+ * @author Yaron Koren
 9+ */
 10+
 11+if ( !defined( 'MEDIAWIKI' ) ) die();
 12+
 13+define( 'SIO_VERSION', '0.3' );
 14+
 15+$wgExtensionCredits['parserhook'][] = array(
 16+ 'name' => 'Semantic Internal Objects',
 17+ 'version' => SIO_VERSION,
 18+ 'author' => 'Yaron Koren',
 19+ 'url' => 'http://www.mediawiki.org/wiki/Extension:Semantic_Internal_Objects',
 20+ 'description' => 'Setting of internal objects in Semantic MediaWiki',
 21+ 'descriptionmsg' => 'semanticinternalobjects-desc',
 22+);
 23+
 24+$wgHooks['ParserFirstCallInit'][] = 'siofRegisterParserFunctions';
 25+$wgHooks['LanguageGetMagic'][] = 'siofLanguageGetMagic';
 26+$wgHooks['smwDeleteSemanticData'][] = 'SIOHandler::updateData';
 27+
 28+$siogIP = $IP . '/extensions/SemanticInternalObjects';
 29+$wgExtensionMessagesFiles['SemanticInternalObjects'] = $siogIP . '/SemanticInternalObjects.i18n.php';
 30+$wgAutoloadClasses['SIOHandler'] = $siogIP . '/SemanticInternalObjects_body.php';
 31+
 32+function siofRegisterParserFunctions( &$parser ) {
 33+ $parser->setFunctionHook( 'set_internal', array( 'SIOHandler', 'doSetInternal' ) );
 34+ return true; // always return true, in order not to stop MW's hook processing!
 35+}
 36+
 37+function siofLanguageGetMagic( &$magicWords, $langCode = "en" ) {
 38+ switch ( $langCode ) {
 39+ default:
 40+ $magicWords['set_internal'] = array ( 0, 'set_internal' );
 41+ }
 42+ return true;
 43+}
Property changes on: tags/extensions/SemanticInternalObjects/REL_0_3/SemanticInternalObjects.php
___________________________________________________________________
Name: svn:eol-style
144 + native
Index: tags/extensions/SemanticInternalObjects/REL_0_3/README
@@ -0,0 +1,85 @@
 2+Semantic Internal Objects Extension
 3+
 4+ Version 0.3
 5+ Yaron Koren
 6+
 7+This is free software licensed under the GNU General Public License. Please
 8+see http://www.gnu.org/copyleft/gpl.html for further details, including the
 9+full text and terms of the license.
 10+
 11+== Overview ==
 12+
 13+Semantic Internal Objects is an extension to MediaWiki that defines a
 14+parser function, '#set_internal', that is used to define "internal objects"
 15+within the Semantic MediaWiki system. There are complex types of
 16+information sometimes known as 'n-ary relations' that involve more than one
 17+data value associated together. A simple example is in a cooking recipe; a
 18+recipe may call for 1 cup of flour, and the values "1", "cup" and "flour"
 19+must be encoded together; by themselves, the values are not meaningful (the
 20+third value has meaning, though not all of the meaning it could have). Such
 21+information can be stored already in SMW using multi-valued properties,
 22+though this approach is not flexible and currently leads to querying problems.
 23+Instead, #set_internal can be used to define "internal objects" within a page,
 24+which can then be queried as normal SMW pages would; a row of a recipe would
 25+be a good example of data that could be defined using #set_internal.
 26+
 27+The syntax of #set_internal is as follows:
 28+
 29+{{#set_internal:object_to_page_property
 30+|property1=value1
 31+|property2=value2
 32+...
 33+}}
 34+
 35+A sample call to #set_internal would be:
 36+
 37+{{#set_internal:Has recipe
 38+|Has quantity=1
 39+|Has unit=cup
 40+|Has ingredient=flour
 41+}}
 42+
 43+This call would be placed in a page for a recipe, and it would define an object
 44+that had an automatically-generated name; if it were in a page called "Carrot
 45+cake", for instance, the object would be called "Carrot cake#1". If that page
 46+had subsequent calls to #set_internal, the objects that those calls generated
 47+would be called "Carrot cake#2", "Carrot cake#3", etc.
 48+
 49+It should be noted that #set_internal does not display anything to the screen;
 50+display of the values has to be handled separately (this can be done easily
 51+if the function is called from a template).
 52+
 53+Internal objects, once stored, can be queried as if they were wiki pages. So
 54+the following query would show a table of all the recipes that contain more
 55+than 1/2 a cup of flour, and the number of cups they contain:
 56+
 57+{{#ask:[[Has recipe::+]][[Has ingredient::flour]][[Has unit::cup]][[Has quantity::>.5]]
 58+|mainlabel=-
 59+|? Has recipe
 60+|? Has quantity
 61+}}
 62+
 63+Note the "mainlabel=-" parameter in the query: that hides the names of the
 64+internal objects from users, since those names are meaningless.
 65+
 66+For more information, see the extension homepage at:
 67+http://www.mediawiki.org/wiki/Extension:Semantic_Internal_Objects
 68+
 69+== Requirements ==
 70+
 71+This version of the Semantic Internal Objects extension requires MediaWiki 1.8
 72+or higher and Semantic MediaWiki 1.4 or higher.
 73+
 74+== Installation ==
 75+
 76+To install the extension, place the entire 'SemanticInternalObjects' directory
 77+within your MediaWiki 'extensions' directory, then add the following
 78+line to your 'LocalSettings.php' file:
 79+
 80+ require_once( "$IP/extensions/SemanticInternalObjects/SemanticInternalObjects.php" );
 81+
 82+== Contact ==
 83+
 84+Comments, questions, suggestions and bug reports are welcome, and can
 85+be placed on the Talk page for the extension, or sent to Yaron at
 86+yaron57@gmail.com.
Property changes on: tags/extensions/SemanticInternalObjects/REL_0_3/README
___________________________________________________________________
Name: svn:eol-style
187 + native
Index: tags/extensions/SemanticInternalObjects/REL_0_3/SemanticInternalObjects.i18n.magic.php
@@ -0,0 +1,19 @@
 2+<?php
 3+
 4+$magicWords = array();
 5+
 6+$magicWords['en'] = array(
 7+ 'set_internal' => array( 0, 'set_internal' ),
 8+);
 9+
 10+$magicWords['ar'] = array(
 11+ 'set_internal' => array( '0', 'ضبط_داخلي', 'set_internal' ),
 12+);
 13+
 14+$magicWords['arz'] = array(
 15+ 'set_internal' => array( '0', 'ضبط_داخلي', 'set_internal' ),
 16+);
 17+
 18+$magicWords['nl'] = array(
 19+ 'set_internal' => array( '0', 'intern_instellen', 'set_internal' ),
 20+);
Property changes on: tags/extensions/SemanticInternalObjects/REL_0_3/SemanticInternalObjects.i18n.magic.php
___________________________________________________________________
Name: svn:eol-style
121 + native
Index: tags/extensions/SemanticInternalObjects/REL_0_3/SemanticInternalObjects_body.php
@@ -0,0 +1,187 @@
 2+<?php
 3+/**
 4+ * @author Yaron Koren
 5+ */
 6+
 7+if ( !defined( 'MEDIAWIKI' ) ) die();
 8+
 9+/**
 10+ * Class that holds information on a single internal object, including all
 11+ * its properties.
 12+ */
 13+class SIOInternalObject {
 14+ var $main_title;
 15+ var $index;
 16+ var $property_value_pairs;
 17+
 18+ public function SIOInternalObject( $main_title, $index ) {
 19+ $this->main_title = $main_title;
 20+ $this->index = $index;
 21+ $this->property_value_pairs = array();
 22+ }
 23+
 24+ public function addPropertyAndValue( $prop_name, $value ) {
 25+ $property = SMWPropertyValue::makeUserProperty( $prop_name );
 26+ $data_value = SMWDataValueFactory::newPropertyObjectValue( $property, $value );
 27+ if ( $data_value->isValid() ) {
 28+ $this->property_value_pairs[] = array( $property, $data_value );
 29+ } // else - show an error message?
 30+ }
 31+
 32+ public function getName() {
 33+ return $this->main_title->getDBkey() . '#' . $this->index;
 34+ }
 35+}
 36+
 37+/**
 38+ * Class for all database-related actions.
 39+ * This class exists mostly because SMWSQLStore2's functions makeSMWPageID()
 40+ * and makeSMWPropertyID(), which are needed for the DB access, are both
 41+ * protected, and thus can't be accessed externally.
 42+ */
 43+class SIOSQLStore extends SMWSQLStore2 {
 44+ function getIDsForDeletion( $page_name, $namespace ) {
 45+ $ids = array();
 46+
 47+ $iw = '';
 48+ $db =& wfGetDB( DB_SLAVE );
 49+ $res = $db->select( 'smw_ids', array( 'smw_id' ), 'smw_title LIKE ' . $db->addQuotes( $page_name . '#%' ) . ' AND ' . 'smw_namespace=' . $db->addQuotes( $namespace ) . ' AND smw_iw=' . $db->addQuotes( $iw ), 'SIO::getSMWPageObjectIDs', array() );
 50+ while ( $row = $db->fetchObject( $res ) ) {
 51+ $ids[] = $row->smw_id;
 52+ }
 53+ return $ids;
 54+ }
 55+
 56+ function getStorageSQL( $main_page_name, $namespace, $internal_object ) {
 57+ $main_page_id = $this->makeSMWPageID( $main_page_name, $namespace, '' );
 58+ $io_id = $this->makeSMWPageID( $internal_object->getName(), $namespace, '' );
 59+ $up_rels2 = array();
 60+ $up_atts2 = array();
 61+ $up_text2 = array();
 62+ // set all the properties pointing from this internal object
 63+ foreach ( $internal_object->property_value_pairs as $property_value_pair ) {
 64+ list( $property, $value ) = $property_value_pair;
 65+ // handling changed in SMW 1.5
 66+ if (method_exists('SMWSQLStore2', 'findPropertyTableID')) {
 67+ $tableid = SMWSQLStore2::findPropertyTableID( $property );
 68+ $is_relation = ($tableid == 'smw_rels2');
 69+ $is_attribute = ($tableid == 'smw_atts2');
 70+ $is_text = ($tableid == 'smw_text2');
 71+ } else {
 72+ $mode = SMWSQLStore2::getStorageMode( $property->getPropertyTypeID() );
 73+ $is_relation = ($mode == SMW_SQL2_RELS2);
 74+ $is_attribute = ($mode == SMW_SQL2_ATTS2);
 75+ $is_text = ($mode == SMW_SQL2_TEXT2);
 76+ }
 77+ if ($is_relation) {
 78+ $up_rels2[] = array(
 79+ 's_id' => $io_id,
 80+ 'p_id' => $this->makeSMWPropertyID( $property ),
 81+ 'o_id' => $this->makeSMWPageID( $value->getDBkey(), $value->getNamespace(), $value->getInterwiki() )
 82+ );
 83+ } elseif ($is_attribute) {
 84+ $keys = $value->getDBkeys();
 85+ $up_atts2[] = array(
 86+ 's_id' => $io_id,
 87+ 'p_id' => $this->makeSMWPropertyID( $property ),
 88+ 'value_unit' => $value->getUnit(),
 89+ 'value_xsd' => $keys[0],
 90+ 'value_num' => $value->getNumericValue()
 91+ );
 92+ } elseif ($is_text) {
 93+ $keys = $value->getDBkeys();
 94+ $up_text2[] = array(
 95+ 's_id' => $io_id,
 96+ 'p_id' => $this->makeSMWPropertyID($property),
 97+ 'value_blob' => $keys[0]
 98+ );
 99+ }
 100+ }
 101+ return array( $up_rels2, $up_atts2, $up_text2 );
 102+ }
 103+}
 104+
 105+/**
 106+ * Class for hook functions for creating and storing information
 107+ */
 108+class SIOHandler {
 109+
 110+ static $cur_page_name = '';
 111+ static $cur_page_namespace = 0;
 112+ static $internal_object_index = 1;
 113+ static $internal_objects = array();
 114+
 115+ public static function doSetInternal( &$parser ) {
 116+ $main_page_name = $parser->getTitle()->getDBKey();
 117+ $main_page_namespace = $parser->getTitle()->getNamespace();
 118+ if ( $main_page_name == self::$cur_page_name &&
 119+ $main_page_namespace == self::$cur_page_namespace ) {
 120+ self::$internal_object_index++;
 121+ } else {
 122+ self::$cur_page_name = $main_page_name;
 123+ self::$cur_page_namespace = $main_page_namespace;
 124+ self::$internal_object_index = 1;
 125+ }
 126+ $cur_object_num = self::$internal_object_index;
 127+ $params = func_get_args();
 128+ array_shift( $params ); // we already know the $parser...
 129+ $internal_object = new SIOInternalObject( $parser->getTitle(), $cur_object_num );
 130+ $obj_to_page_prop_name = array_shift( $params );
 131+ $internal_object->addPropertyAndValue( $obj_to_page_prop_name, $parser->getTitle() );
 132+ foreach ( $params as $param ) {
 133+ $parts = explode( "=", trim( $param ) );
 134+ if ( count( $parts ) == 2 ) {
 135+ $key = $parts[0];
 136+ $value = $parts[1];
 137+ $internal_object->addPropertyAndValue( $key, $value );
 138+ }
 139+ }
 140+ self::$internal_objects[] = $internal_object;
 141+ }
 142+
 143+ public static function updateData( $subject ) {
 144+ $sio_sql_store = new SIOSQLStore();
 145+ // Find all "pages" in the SMW IDs table that are internal
 146+ // objects for this page, and delete their properties from
 147+ // the SMW tables.
 148+ // Then save the current contents of the $internal_objects
 149+ // array.
 150+ $page_name = $subject->getDBKey();
 151+ $namespace = $subject->getNamespace();
 152+ $ids_for_deletion = $sio_sql_store->getIDsForDeletion($page_name, $namespace);
 153+
 154+ $all_rels2_inserts = array();
 155+ $all_atts2_inserts = array();
 156+ $all_text2_inserts = array();
 157+ foreach (self::$internal_objects as $internal_object) {
 158+ list($up_rels2, $up_atts2, $up_text2) = $sio_sql_store->getStorageSQL($page_name, $namespace, $internal_object);
 159+ $all_rels2_inserts = array_merge($all_rels2_inserts, $up_rels2);
 160+ $all_atts2_inserts = array_merge($all_atts2_inserts, $up_atts2);
 161+ $all_text2_inserts = array_merge($all_text2_inserts, $up_text2);
 162+ }
 163+
 164+ // now save everything to the database
 165+ $db =& wfGetDB( DB_MASTER );
 166+ $db->begin('SIO::updatePageData');
 167+ if (count($ids_for_deletion) > 0) {
 168+ $ids_string = '(' . implode (', ', $ids_for_deletion) . ')';
 169+ $db->delete('smw_rels2', array("(s_id IN $ids_string) OR (o_id IN $ids_string)"), 'SIO::deleteRels2Data');
 170+ $db->delete('smw_atts2', array("s_id IN $ids_string"), 'SIO::deleteAtts2Data');
 171+ $db->delete('smw_text2', array("s_id IN $ids_string"), 'SIO::deleteText2Data');
 172+ }
 173+
 174+ if (count($all_rels2_inserts) > 0) {
 175+ $db->insert( 'smw_rels2', $all_rels2_inserts, 'SIO::updateRels2Data');
 176+ }
 177+ if (count($all_atts2_inserts) > 0) {
 178+ $db->insert( 'smw_atts2', $all_atts2_inserts, 'SIO::updateAtts2Data');
 179+ }
 180+ if (count($all_text2_inserts) > 0) {
 181+ $db->insert( 'smw_text2', $all_text2_inserts, 'SIO::updateText2Data');
 182+ }
 183+ $db->commit('SIO::updatePageData');
 184+ self::$internal_objects = array();
 185+ return true;
 186+ }
 187+
 188+}
Property changes on: tags/extensions/SemanticInternalObjects/REL_0_3/SemanticInternalObjects_body.php
___________________________________________________________________
Name: svn:eol-style
1189 + native
Index: tags/extensions/SemanticInternalObjects/REL_0_3/SemanticInternalObjects.i18n.php
@@ -0,0 +1,275 @@
 2+<?php
 3+/**
 4+ * Internationalization file for Semantic Internal Objects
 5+ *
 6+ * @file
 7+ * @ingroup Language
 8+ * @ingroup I18n
 9+ * @ingroup SemanticInternalObjects
 10+ */
 11+
 12+// FIXME: Can be enabled when new style magic words are used (introduced in r52503)
 13+// require_once( dirname( __FILE__ ) . '/SemanticInternalObjects.i18n.magic.php' );
 14+
 15+$messages = array();
 16+
 17+/** English
 18+ * @author Yaron Koren
 19+ */
 20+$messages['en'] = array(
 21+ 'semanticinternalobjects-desc' => 'Setting of internal objects in Semantic MediaWiki',
 22+);
 23+
 24+/** Message documentation (Message documentation)
 25+ * @author Yaron Koren
 26+ */
 27+$messages['qqq'] = array(
 28+ 'semanticinternalobjects-desc' => '{{desc}}',
 29+);
 30+
 31+/** Arabic (العربية)
 32+ * @author Meno25
 33+ */
 34+$messages['ar'] = array(
 35+ 'semanticinternalobjects-desc' => 'ضبط الأشياء الداخلية في ميدياويكي الدلالي',
 36+);
 37+
 38+/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
 39+ * @author EugeneZelenko
 40+ */
 41+$messages['be-tarask'] = array(
 42+ 'semanticinternalobjects-desc' => "Устаноўкі ўнутраных аб'ектаў у Semantic MediaWiki",
 43+);
 44+
 45+/** Breton (Brezhoneg)
 46+ * @author Fulup
 47+ */
 48+$messages['br'] = array(
 49+ 'semanticinternalobjects-desc' => 'Kefluniadur traezoù diabarzh e Semanctic MediaWiki',
 50+);
 51+
 52+/** Bosnian (Bosanski)
 53+ * @author CERminator
 54+ */
 55+$messages['bs'] = array(
 56+ 'semanticinternalobjects-desc' => 'Postavljanje unutrašnjih objekata u Semantic MediaWiki',
 57+);
 58+
 59+/** German (Deutsch)
 60+ * @author Imre
 61+ */
 62+$messages['de'] = array(
 63+ 'semanticinternalobjects-desc' => 'Einstellung interner Objekte in Semantic MediaWiki',
 64+);
 65+
 66+/** Lower Sorbian (Dolnoserbski)
 67+ * @author Michawiki
 68+ */
 69+$messages['dsb'] = array(
 70+ 'semanticinternalobjects-desc' => 'Nastajenje internych objektow w Semantic MediaWiki',
 71+);
 72+
 73+/** Greek (Ελληνικά)
 74+ * @author Omnipaedista
 75+ */
 76+$messages['el'] = array(
 77+ 'semanticinternalobjects-desc' => 'Ρυθμίσεις εσωτερικών αντικειμένων στη Σημασιολογική MediaWiki',
 78+);
 79+
 80+/** Spanish (Español)
 81+ * @author Crazymadlover
 82+ */
 83+$messages['es'] = array(
 84+ 'semanticinternalobjects-desc' => 'Configuración de objetos internos en Semantic MediaWiki',
 85+);
 86+
 87+/** French (Français)
 88+ * @author Crochet.david
 89+ */
 90+$messages['fr'] = array(
 91+ 'semanticinternalobjects-desc' => 'Réglage des objets internes dans Semantic MediaWiki',
 92+);
 93+
 94+/** Galician (Galego)
 95+ * @author Toliño
 96+ */
 97+$messages['gl'] = array(
 98+ 'semanticinternalobjects-desc' => 'Configuracións de obxectos internos en Semantic MediaWiki',
 99+);
 100+
 101+/** Swiss German (Alemannisch)
 102+ * @author Als-Holder
 103+ */
 104+$messages['gsw'] = array(
 105+ 'semanticinternalobjects-desc' => 'Intärni Objäkt in Semantic MediaWiki yysetze',
 106+);
 107+
 108+/** Hebrew (עברית)
 109+ * @author Rotemliss
 110+ * @author YaronSh
 111+ */
 112+$messages['he'] = array(
 113+ 'semanticinternalobjects-desc' => 'הגדרות העצמים הפנימיים במדיה־ויקי הסמנטי',
 114+);
 115+
 116+/** Hiligaynon (Ilonggo)
 117+ * @author Tagimata
 118+ */
 119+$messages['hil'] = array(
 120+ 'semanticinternalobjects-desc' => 'Pagplastar sang internal na mga bagay sa Semantik MedyaWiki',
 121+);
 122+
 123+/** Upper Sorbian (Hornjoserbsce)
 124+ * @author Michawiki
 125+ */
 126+$messages['hsb'] = array(
 127+ 'semanticinternalobjects-desc' => 'Nastajenje internych objektow w Semantic MediaWiki',
 128+);
 129+
 130+/** Hungarian (Magyar)
 131+ * @author Glanthor Reviol
 132+ */
 133+$messages['hu'] = array(
 134+ 'semanticinternalobjects-desc' => 'Belső objektumok beállítása a szemantikus MediaWikiben',
 135+);
 136+
 137+/** Interlingua (Interlingua)
 138+ * @author McDutchie
 139+ */
 140+$messages['ia'] = array(
 141+ 'semanticinternalobjects-desc' => 'Configuration de objectos interne in Semantic MediaWiki',
 142+);
 143+
 144+/** Indonesian (Bahasa Indonesia)
 145+ * @author Bennylin
 146+ */
 147+$messages['id'] = array(
 148+ 'semanticinternalobjects-desc' => 'Seting untuk objek internal pada Semantic MediaWiki',
 149+);
 150+
 151+/** Italian (Italiano)
 152+ * @author Gianfranco
 153+ */
 154+$messages['it'] = array(
 155+ 'semanticinternalobjects-desc' => 'Configurazione degli oggetti interni in Semantic MediaWiki',
 156+);
 157+
 158+/** Japanese (日本語)
 159+ * @author Fryed-peach
 160+ */
 161+$messages['ja'] = array(
 162+ 'semanticinternalobjects-desc' => 'Semantic MediaWiki の内部オブジェクトの設定',
 163+);
 164+
 165+/** Ripoarisch (Ripoarisch)
 166+ * @author Purodha
 167+ */
 168+$messages['ksh'] = array(
 169+ 'semanticinternalobjects-desc' => 'De ennere Objäkte vum Semantesch MedijaWiki enschtälle.',
 170+);
 171+
 172+/** Luxembourgish (Lëtzebuergesch)
 173+ * @author Robby
 174+ */
 175+$messages['lb'] = array(
 176+ 'semanticinternalobjects-desc' => 'Astellung vun internen Objeten a Semantic MediaWiki',
 177+);
 178+
 179+/** Macedonian (Македонски)
 180+ * @author Bjankuloski06
 181+ */
 182+$messages['mk'] = array(
 183+ 'semanticinternalobjects-desc' => 'Поставање на внатрешни објекти во Semantic MediaWiki',
 184+);
 185+
 186+/** Dutch (Nederlands)
 187+ * @author Siebrand
 188+ */
 189+$messages['nl'] = array(
 190+ 'semanticinternalobjects-desc' => 'Interne objecten in Semantic MediaWiki instellen',
 191+);
 192+
 193+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
 194+ * @author Nghtwlkr
 195+ */
 196+$messages['no'] = array(
 197+ 'semanticinternalobjects-desc' => 'Innstilling for interne objekt i Semantic MediaWiki',
 198+);
 199+
 200+/** Occitan (Occitan)
 201+ * @author Cedric31
 202+ */
 203+$messages['oc'] = array(
 204+ 'semanticinternalobjects-desc' => 'Reglatge dels objèctes intèrnes dins Semantic MediaWiki',
 205+);
 206+
 207+/** Polish (Polski)
 208+ * @author Sp5uhe
 209+ */
 210+$messages['pl'] = array(
 211+ 'semanticinternalobjects-desc' => 'Ustawianie wewnętrznych obiektów Semantic MediaWiki.',
 212+);
 213+
 214+/** Piedmontese (Piemontèis)
 215+ * @author Dragonòt
 216+ */
 217+$messages['pms'] = array(
 218+ 'semanticinternalobjects-desc' => "Ampostassion d'oget intern an drinta a Semantic MediaWiki",
 219+);
 220+
 221+/** Portuguese (Português)
 222+ * @author Indech
 223+ */
 224+$messages['pt'] = array(
 225+ 'semanticinternalobjects-desc' => 'Configuração de objetos internos na MediaWiki Semântica',
 226+);
 227+
 228+/** Brazilian Portuguese (Português do Brasil)
 229+ * @author Eduardo.mps
 230+ */
 231+$messages['pt-br'] = array(
 232+ 'semanticinternalobjects-desc' => 'Definição de objetos internos no Semantic MediaWiki',
 233+);
 234+
 235+/** Tarandíne (Tarandíne)
 236+ * @author Joetaras
 237+ */
 238+$messages['roa-tara'] = array(
 239+ 'semanticinternalobjects-desc' => "'Mboste le oggette inderne jndr'à MediaUicchi Semandiche",
 240+);
 241+
 242+/** Russian (Русский)
 243+ * @author Александр Сигачёв
 244+ */
 245+$messages['ru'] = array(
 246+ 'semanticinternalobjects-desc' => 'Установка внутренних объектов в Semantic MediaWiki',
 247+);
 248+
 249+/** Slovak (Slovenčina)
 250+ * @author Helix84
 251+ */
 252+$messages['sk'] = array(
 253+ 'semanticinternalobjects-desc' => 'Nastavenie vnútorných objektov v Semantic MediaWiki',
 254+);
 255+
 256+/** Swedish (Svenska)
 257+ * @author Per
 258+ */
 259+$messages['sv'] = array(
 260+ 'semanticinternalobjects-desc' => 'Inställning för interna objekt i Semantic MediaWiki',
 261+);
 262+
 263+/** Turkish (Türkçe)
 264+ * @author Vito Genovese
 265+ */
 266+$messages['tr'] = array(
 267+ 'semanticinternalobjects-desc' => "Anlamsal MediaWiki'deki iç nesnelerin ayarlanması",
 268+);
 269+
 270+/** Vietnamese (Tiếng Việt)
 271+ * @author Minh Nguyen
 272+ */
 273+$messages['vi'] = array(
 274+ 'semanticinternalobjects-desc' => 'Thiết kế các đối tượng nội bộ trong Semantic MediaWiki',
 275+);
 276+
Property changes on: tags/extensions/SemanticInternalObjects/REL_0_3/SemanticInternalObjects.i18n.php
___________________________________________________________________
Name: svn:eol-style
1277 + native

Status & tagging log