Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Wikipedia: Mediawiki-CVS

SVN: [26860] branches/mlmw

 

 

Wikipedia mediawiki-cvs RSS feed   Index | Next | Previous | View Threaded


downchuck at svn

Oct 20, 2007, 3:07 PM

Post #1 of 1 (8925 views)
Permalink
SVN: [26860] branches/mlmw

Revision: 26860
Author: downchuck
Date: 2007-10-20 22:07:28 +0000 (Sat, 20 Oct 2007)

Log Message:
-----------
Rough draft of MLMW (export/import broken)

Modified Paths:
--------------
branches/mlmw/includes/Article.php
branches/mlmw/includes/ChangesList.php
branches/mlmw/includes/DefaultSettings.php
branches/mlmw/includes/Defines.php
branches/mlmw/includes/EditPage.php
branches/mlmw/includes/GlobalFunctions.php
branches/mlmw/includes/ImagePage.php
branches/mlmw/includes/LinkBatch.php
branches/mlmw/includes/LinkCache.php
branches/mlmw/includes/Linker.php
branches/mlmw/includes/LinksUpdate.php
branches/mlmw/includes/MagicWord.php
branches/mlmw/includes/MessageCache.php
branches/mlmw/includes/Namespace.php
branches/mlmw/includes/Parser.php
branches/mlmw/includes/RecentChange.php
branches/mlmw/includes/Revision.php
branches/mlmw/includes/SearchMySQL.php
branches/mlmw/includes/SearchPostgres.php
branches/mlmw/includes/Setup.php
branches/mlmw/includes/Skin.php
branches/mlmw/includes/SkinTemplate.php
branches/mlmw/includes/SpecialAllpages.php
branches/mlmw/includes/SpecialContributions.php
branches/mlmw/includes/SpecialPage.php
branches/mlmw/includes/SpecialPopularpages.php
branches/mlmw/includes/SpecialRandompage.php
branches/mlmw/includes/SpecialRecentchanges.php
branches/mlmw/includes/SpecialUnusedtemplates.php
branches/mlmw/includes/SpecialWantedcategories.php
branches/mlmw/includes/SpecialWantedpages.php
branches/mlmw/includes/SpecialWatchlist.php
branches/mlmw/includes/SpecialWhatlinkshere.php
branches/mlmw/includes/StubObject.php
branches/mlmw/includes/Title.php
branches/mlmw/includes/User.php
branches/mlmw/includes/WatchedItem.php
branches/mlmw/includes/Wiki.php
branches/mlmw/includes/Xml.php
branches/mlmw/includes/XmlFunctions.php
branches/mlmw/languages/Language.php
branches/mlmw/languages/messages/MessagesEn.php
branches/mlmw/maintenance/rebuildrecentchanges.inc
branches/mlmw/maintenance/updaters.inc
branches/mlmw/skins/MonoBook.php

Added Paths:
-----------
branches/mlmw/languages/LanguageTags.php
branches/mlmw/maintenance/archives/patch-langtags.sql
branches/mlmw/maintenance/archives/patch-pagesets.sql
branches/mlmw/maintenance/archives/patch-user_langs.sql
branches/mlmw/maintenance/language/importLanguageTags.php
branches/mlmw/maintenance/language/importLanguageTags.sql
branches/mlmw/maintenance/language/tags/
branches/mlmw/maintenance/language/tags/iso-639-3-macrolanguages_20070323.tab
branches/mlmw/maintenance/language/tags/iso-639-3_20070516.tab
branches/mlmw/maintenance/language/tags/language-subtag-registry
branches/mlmw/maintenance/postgres/archives/patch-langtags.sql
branches/mlmw/maintenance/postgres/archives/patch-pagesets.sql
branches/mlmw/maintenance/postgres/archives/patch-user_langs.sql

Modified: branches/mlmw/includes/Article.php
===================================================================
--- branches/mlmw/includes/Article.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Article.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -205,6 +205,7 @@
* @return int The old id for the request
*/
function getOldIDFromRequest() {
+
global $wgRequest;
$this->mRedirectUrl = false;
$oldid = $wgRequest->getVal( 'oldid' );
@@ -257,7 +258,7 @@
* @param array $conditions
* @private
*/
- function pageData( $dbr, $conditions ) {
+ function pageData( $dbr, $conditions, $options = array() ) {
$fields = array(
'page_id',
'page_namespace',
@@ -269,14 +270,31 @@
'page_random',
'page_touched',
'page_latest',
- 'page_len',
- );
+ 'page_len' ) ;
+
+ global $wgLanguageTag; if($wgLanguageTag) {
+ global $wgLanguageMulti;
+ $fields[]='page_language';
+ if(array_key_exists('page_language',$conditions)) {
+ if(!strlen($conditions['page_language'])) {
+ $conditions[]='(page_language IS NULL)';
+ unset($conditions['page_language']);
+ }
+ else if((!$wgLanguageMulti) && $conditions['page_language']) {
+ $conditions[]="(page_language='{$conditions['page_language']}' or page_language = '0')";
+ unset($conditions['page_language']);
+ $options['ORDER BY']='page_language desc';
+ }
+ }
+ }
+
wfRunHooks( 'ArticlePageDataBefore', array( &$this, &$fields ) );
$row = $dbr->selectRow(
'page',
$fields,
$conditions,
- __METHOD__
+ __METHOD__ ,
+ $options
);
wfRunHooks( 'ArticlePageDataAfter', array( &$this, &$row ) );
return $row ;
@@ -287,9 +305,21 @@
* @param Title $title
*/
function pageDataFromTitle( $dbr, $title ) {
- return $this->pageData( $dbr, array(
- 'page_namespace' => $title->getNamespace(),
- 'page_title' => $title->getDBkey() ) );
+ $fields=array(
+ 'page_namespace' => $title->getNamespace(),
+ 'page_title' => $title->getDBkey() );
+
+ global $wgLanguageTag;
+ if($wgLanguageTag) {
+ if(strlen($title->getLanguage())) {
+ $fields['page_language']=$title->getLanguage();
+ }
+ else {
+ $fields[]='page_language is null';
+ }
+ }
+
+ return $this->pageData( $dbr, $fields );
}

/**
@@ -1007,7 +1037,7 @@
wfProfileIn( __METHOD__ );

$page_id = $dbw->nextSequenceValue( 'page_page_id_seq' );
- $dbw->insert( 'page', array(
+ $fields = array(
'page_id' => $page_id,
'page_namespace' => $this->mTitle->getNamespace(),
'page_title' => $this->mTitle->getDBkey(),
@@ -1019,7 +1049,12 @@
'page_touched' => $dbw->timestamp(),
'page_latest' => 0, # Fill this in shortly...
'page_len' => 0, # Fill this in shortly...
- ), __METHOD__ );
+ );
+ global $wgLanguageTag;
+ if($wgLanguageTag) {
+ $fields['page_language']=$this->mTitle->getLanguage();
+ }
+ $dbw->insert( 'page', $fields, __METHOD__ );
$newid = $dbw->insertId();

$this->mTitle->resetArticleId( $newid );
@@ -1849,6 +1884,10 @@
# Better double-check that it hasn't been deleted yet!
$dbw = wfGetDB( DB_MASTER );
$conds = $this->mTitle->pageCond();
+ if(array_key_exists('page_language',$conds) && !strlen($conds['page_language'])) {
+ $conds[]='page_language IS NULL';
+ unset($conds['page_language']);
+ }
$latest = $dbw->selectField( 'page', 'page_latest', $conds, __METHOD__ );
if ( $latest === false ) {
$wgOut->showFatalError( wfMsg( 'cannotdelete' ) );
@@ -2461,6 +2500,10 @@
}

if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+ global $wgLanguageTag;
+ if($wgLanguageTag && strlen($this->mTitle->getLanguage())) {
+ $shortTitle.='/'.$this->mTitle->getLanguage();
+ }
$wgMessageCache->replace( $shortTitle, $text );
}

@@ -2903,6 +2946,55 @@
return array( 'edits' => $edits, 'authors' => $authors );
}

+ /**
+ * Return a list of language tags used by this article.
+ *
+ * @return array Array of Title objects
+ */
+ function getUsedLanguages() {
+ $result = array();
+ $id = $this->mTitle->getArticleID();
+ if( $id == 0 ) {
+ return array();
+ }
+
+ $dbr = wfGetDB( DB_SLAVE );
+
+ $sql="
+select language_id,tag_name,wikimedia_key,rfc4646,preferred_id from langtags join (
+select distinct language_id from
+(
+ select pl_language from pagelinks where pl_from = '$id'
+ union
+ select cl_language from categorylinks where cl_from = '$id'
+ union
+ select tl_language from templatelinks where tl_from = '$id'
+ union
+ select page_language from page where page_id = '$id'
+ union
+ select page_language from page join pagesets on (page_id = '$id' or set_id = '$id')
+)
+as pagesets (language_id) ) pagesets using (language_id) where tag_name is not null
+";
+ GLOBAL $wgLanguageIds,$wgLanguageWikimedia,$wgLanguageProper;
+ $res = $dbr->query($sql);
+ if ( false !== $res ) {
+ if ( $dbr->numRows( $res ) ) {
+ while ( $row = $dbr->fetchObject( $res ) ) {
+ $wgLanguageIds[$row->language_id]=$row->tag_name;
+ if($row->wikimedia_key) {
+ $wgLanguageWikimedia[$row->tag_name] = $row->wikimedia_key;
+ }
+ if($row->rfc4646) {
+ $wgLanguageProper[$row->language_id] = $row->rfc4646;
+ }
+ }
+ }
+ }
+ $dbr->freeResult( $res );
+ return $result;
+ }
+
/**
* Return a list of templates used by this article.
* Uses the templatelinks table
@@ -2917,14 +3009,23 @@
}

$dbr = wfGetDB( DB_SLAVE );
+ $fields = array( 'tl_namespace', 'tl_title' );
+ global $wgLanguageTag; if($wgLanguageTag) {
+ $fields[]='tl_language';
+ }
$res = $dbr->select( array( 'templatelinks' ),
- array( 'tl_namespace', 'tl_title' ),
+ $fields,
array( 'tl_from' => $id ),
'Article:getUsedTemplates' );
if ( false !== $res ) {
if ( $dbr->numRows( $res ) ) {
while ( $row = $dbr->fetchObject( $res ) ) {
- $result[] = Title::makeTitle( $row->tl_namespace, $row->tl_title );
+ if($wgLanguageTag) {
+ $result[] = Title::makeTitle( $row->tl_namespace, $row->tl_title, $row->tl_language );
+ }
+ else {
+ $result[] = Title::makeTitle( $row->tl_namespace, $row->tl_title );
+ }
}
}
}
@@ -3044,8 +3145,10 @@
$tlTemplates = array();

$dbr = wfGetDB( DB_SLAVE );
+ $fields = array( 'tl_namespace', 'tl_title' );
+ global $wgLanguageTag; if($wgLanguageTag) $fields[]='tl_language';
$res = $dbr->select( array( 'templatelinks' ),
- array( 'tl_namespace', 'tl_title' ),
+ $fields,
array( 'tl_from' => $id ),
'Article:getUsedTemplates' );


Modified: branches/mlmw/includes/ChangesList.php
===================================================================
--- branches/mlmw/includes/ChangesList.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/ChangesList.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -142,6 +142,7 @@
if( $rc->mAttribs['rc_type'] == RC_NEW || $rc->mAttribs['rc_type'] == RC_LOG ) {
$diffLink = $this->message['diff'];
} else {
+
$rcidparam = $unpatrolled
? array( 'rcid' => $rc->mAttribs['rc_id'] )
: array();

Modified: branches/mlmw/includes/DefaultSettings.php
===================================================================
--- branches/mlmw/includes/DefaultSettings.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/DefaultSettings.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -700,8 +700,18 @@
# Language settings
#
/** Site language code, should be one of ./languages/Language(.*).php */
-$wgLanguageCode = 'en';
+$wgLanguageCode = 'en';

+/* false | $wgInterwikiMagic, old behaviour; true, use language tables */
+$wgLanguageTag = false;
+/* wgLanguageDomain: true = [language-code].domain.com ,
+ with wgLanguageTag: true, mimicks &uselang=[language-code] */
+$wgLanguageDomain= false;
+/* On converting from monolingual multilingual,
+ wgLanguageTag defaults to treat old pages as having a null langspace.
+ with this enabled, plain page links point to the "mult" language space. */
+$wgLanguageMulti = false;
+
/**
* Some languages need different word forms, usually for different cases.
* Used in Language::convertGrammar().
@@ -880,7 +890,7 @@
/**
* The debug log file should be not be publicly accessible if it is used, as it
* may contain private data. */
-$wgDebugLogFile = '';
+$wgDebugLogFile = ''; // /tmp/tot';

/**#@+
* @global bool

Modified: branches/mlmw/includes/Defines.php
===================================================================
--- branches/mlmw/includes/Defines.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Defines.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -61,6 +61,8 @@
define('NS_HELP_TALK', 13);
define('NS_CATEGORY', 14);
define('NS_CATEGORY_TALK', 15);
+define('NS_SET', 16);
+define('NS_SET_TALK', 17);
/**#@-*/

/**

Modified: branches/mlmw/includes/EditPage.php
===================================================================
--- branches/mlmw/includes/EditPage.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/EditPage.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -37,6 +37,7 @@
var $textbox1 = '', $textbox2 = '', $summary = '';
var $edittime = '', $section = '', $starttime = '';
var $oldid = 0, $editintro = '', $scrolltop = null;
+ var $textset = '';

# Placeholders for text injection by hooks (must be HTML)
# extensions should take care to _append_ to the present value
@@ -477,6 +478,7 @@
# whitespace from the text boxes. This may be significant formatting.
$this->textbox1 = $this->safeUnicodeInput( $request, 'wpTextbox1' );
$this->textbox2 = $this->safeUnicodeInput( $request, 'wpTextbox2' );
+ $this->textset = $this->safeUnicodeInput( $request, 'wpTextboxSet');
$this->mMetaData = rtrim( $request->getText( 'metadata' ) );
# Truncate for whole multibyte characters. +5 bytes for ellipsis
$this->summary = $wgLang->truncate( $request->getText( 'wpSummary' ), 250 );
@@ -543,6 +545,7 @@
wfDebug( "$fname: Not a posted form.\n" );
$this->textbox1 = '';
$this->textbox2 = '';
+ $this->textset = '';
$this->mMetaData = '';
$this->summary = '';
$this->edittime = '';
@@ -878,6 +881,28 @@
# update the article here
if( $this->mArticle->updateArticle( $text, $this->summary, $this->minoredit,
$this->watchthis, '', $sectionanchor ) ) {
+
+ if(strlen($this->textset)) {
+ $x=explode('[.[.',$this->textset); $textset=array();
+ global $wgLanguageTag; $dbr=$this->mArticle->getDB();
+ array_shift($x); foreach($x as $y) {
+ $t=strpos($y,']]');
+ if($t===false) continue;
+ $t=substr($y,0,$t); $tt=$this->mTitle->newFromText($t);
+ if(null===$tt->mLanguage) $tt->mLanguage=$this->mTitle->mLanguage;
+ $t=$this->mArticle->pageDataFromTitle($dbr,$tt);
+ if($t && $t->page_id>0) $textset[$t->page_id]=$t;
+ }
+ $x=$dbr->select('pagesets',array('page_id'),array('set_id'=>$this->mTitle->mArticleID));
+ $z=array(); while($y=$dbr->fetchRow($x)) $z[]=$y['page_id'];
+ $x=array_keys($textset);
+ foreach($x as $v) if(!in_array($v,$z))
+ $dbr->insert('pagesets',array('page_id'=>$v, 'set_id'=>$this->mTitle->mArticleID));
+ $z=array_diff($z,$x);
+ if(count($z)) foreach($z as $v)
+ $dbr->delete('pagesets',array('page_id'=>$v, 'set_id'=>$this->mTitle->mArticleID));
+ }
+
wfProfileOut( $fname );
return false;
} else {
@@ -899,6 +924,10 @@

if ( !$this->mArticle->exists() && $this->mArticle->mTitle->getNamespace() == NS_MEDIAWIKI )
$this->textbox1 = wfMsgWeirdKey( $this->mArticle->mTitle->getText() );
+ $dbr=&$this->mArticle->getDB();
+ $x=$dbr->select('pagesets',array('page_id'),array('set_id'=>$this->mTitle->mArticleID));
+ $z=array(); while($y=$dbr->fetchRow($x)) $z[]=$this->mArticle->mTitle->nameOf($y);
+ if(count($z)) $this->textset = '[['.join (']] [[', $z).']]';
wfProxyCheck();
return true;
}
@@ -1116,7 +1145,6 @@
}
}

-
$wgOut->addHTML( $this->editFormTextTop );

# if this is a comment, show a subject line at the top, which is also the edit summary.
@@ -1150,6 +1178,25 @@
}
else $metadata = "" ;

+ if($this->mTitle->mNamespace==NS_SET) {
+ $metadata.=wfMsgWikiHtml( 'otherlanguages');
+ $metadata.="<textarea tabindex=7 id='wpTextboxSet' name=\"wpTextboxSet\" rows='4' cols='{$cols}' wrap='virtual'>"
+ . htmlspecialchars( $this->safeUnicodeOutput( $this->textset ) ) . "\n</textarea>";
+ }
+ else if($this->mTitle->mNamespace!=NS_MEDIA) {
+
+ $dbr =& wfGetDB( DB_SLAVE );
+ $x=$dbr->select('pagesets',array('set_id'),array('page_id'=>$this->mTitle->mArticleID));
+ $y=$dbr->fetchRow($x); $set_id=$y?$y[0]:'';
+ if($set_id) { $set_id=$this->mTitle->newFromId($set_id); $set_id=$set_id->getFullText(); }
+ if(1) $metadata.="Current page set: &nbsp;<input type='text' size='25' name=\"wpTextboxSet\" value=\"$set_id\"><br>Current language tag: &nbsp;<input type='text' size='20' name='wpLanguageTag' value='".$this->mTitle->getLanguageCode()."'><br><br>";
+ else {
+ $metadata.=wfMsgWikiHtml( 'otherlanguages');
+ $metadata.="<textarea tabindex=7 id='wpTextboxSet' name=\"wpTextboxSet\" rows='4' cols='{$cols}' wrap='virtual'>"
+ . htmlspecialchars( $this->safeUnicodeOutput( $this->textset ) ) . "\n</textarea>";
+ }
+ }
+
$hidden = '';
$recreate = '';
if ($this->deletedSinceEdit) {
@@ -1240,6 +1287,7 @@
</div>
" );

+
/**
* To make it harder for someone to slip a user a page
* which submits an edit form to the wiki without their
@@ -1442,6 +1490,11 @@
# ParserOutput might have altered the page title, so reset it
$wgOut->setPageTitle( wfMsg( 'editing', $this->mTitle->getPrefixedText() ) );

+ if($GLOBALS['wgLanguageTag']) // FIXME
+ foreach ( $parserOutput->getTemplates() as $ns => $template)
+ foreach ( $template as $dbk)
+ $this->mPreviewTemplates[] = Title::newFromId($dbk);
+ else
foreach ( $parserOutput->getTemplates() as $ns => $template)
foreach ( array_keys( $template ) as $dbk)
$this->mPreviewTemplates[] = Title::makeTitle($ns, $dbk);

Modified: branches/mlmw/includes/GlobalFunctions.php
===================================================================
--- branches/mlmw/includes/GlobalFunctions.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/GlobalFunctions.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -346,6 +346,9 @@
if( is_array( $wgForceUIMsgAsContentMsg ) &&
in_array( $key, $wgForceUIMsgAsContentMsg ) )
$forcontent = false;
+ global $wgLanguageTag; if($wgLanguageTag) {
+ $forcontent=false;
+ }
return wfMsgReal( $key, $args, true, $forcontent );
}

@@ -360,6 +363,7 @@
if( is_array( $wgForceUIMsgAsContentMsg ) &&
in_array( $key, $wgForceUIMsgAsContentMsg ) )
$forcontent = false;
+ global $wgLanguageTag; if($wgLanguageTag) $forcontent=false;
return wfMsgReal( $key, $args, true, $forcontent, false );
}


Modified: branches/mlmw/includes/ImagePage.php
===================================================================
--- branches/mlmw/includes/ImagePage.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/ImagePage.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -54,6 +54,14 @@
} else {
$showmeta = false;
}
+
+ global $wgLanguageTag;
+ if($wgLanguageTag && $this->mTitle->mLanguage!==0) {
+ $x=Title::makeTitle($this->mTitle->mNamespace,$this->mTitle->mTextform, 0);
+ if($x->getArticleId() && $x->getArticleID()!=$this->mTitle->getArticleId()) {
+ $wgOut->addWikiText('<noinclude>{{'.$x->getPrefixedText().'}}</noinclude>');
+ }
+ }

if ($this->img->exists())
$wgOut->addHTML($this->showTOC($showmeta));
@@ -304,7 +312,6 @@
$showLink = true;
}

-
if ($showLink) {
$filename = wfEscapeWikiText( $this->img->getName() );

@@ -342,6 +349,7 @@
'wpDestFile=' . urlencode( $this->img->getName() ) );
$wgOut->addHTML( wfMsgWikiHtml( 'noimage', $link ) );
}
+
}

function printSharedImageText() {
@@ -450,15 +458,16 @@

function imageLinks()
{
- global $wgUser, $wgOut;
+ global $wgUser, $wgOut, $wgLanguageTag;

$wgOut->addHTML( Xml::element( 'h2', array( 'id' => 'filelinks' ), wfMsg( 'imagelinks' ) ) . "\n" );

$dbr = wfGetDB( DB_SLAVE );
$page = $dbr->tableName( 'page' );
$imagelinks = $dbr->tableName( 'imagelinks' );
+ $lang=''; if($wgLanguageTag) $lang=',page_language';

- $sql = "SELECT page_namespace,page_title FROM $imagelinks,$page WHERE il_to=" .
+ $sql = "SELECT page_namespace,page_title{$lang} FROM $imagelinks,$page WHERE il_to=" .
$dbr->addQuotes( $this->mTitle->getDBkey() ) . " AND il_from=page_id";
$sql = $dbr->limitResult($sql, 500, 0);
$res = $dbr->query( $sql, "ImagePage::imageLinks" );
@@ -471,7 +480,8 @@

$sk = $wgUser->getSkin();
while ( $s = $dbr->fetchObject( $res ) ) {
- $name = Title::MakeTitle( $s->page_namespace, $s->page_title );
+ if($wgLanguageTag) $name = Title::MakeTitle( $s->page_namespace, $s->page_title, $s->page_language);
+ else $name = Title::MakeTitle( $s->page_namespace, $s->page_title );
$link = $sk->makeKnownLinkObj( $name, "" );
$wgOut->addHTML( "<li>{$link}</li>\n" );
}

Modified: branches/mlmw/includes/LinkBatch.php
===================================================================
--- branches/mlmw/includes/LinkBatch.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/LinkBatch.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -9,7 +9,8 @@
class LinkBatch {
/**
* 2-d array, first index namespace, second index dbkey, value arbitrary
- */
+ * with $wgLanguageTag enabled, 3-d array, third index language
+ */
var $data = array();

function __construct( $arr = array() ) {
@@ -20,13 +21,13 @@

function addObj( $title ) {
if ( is_object( $title ) ) {
- $this->add( $title->getNamespace(), $title->getDBkey() );
+ $this->add( $title->getNamespace(), $title->getDBkey(), $title->getLanguage() );
} else {
wfDebug( "Warning: LinkBatch::addObj got invalid title object\n" );
}
}

- function add( $ns, $dbkey ) {
+ function add( $ns, $dbkey, $language=false ) {
if ( $ns < 0 ) {
return;
}
@@ -34,6 +35,11 @@
$this->data[$ns] = array();
}

+ if(false!==$language) {
+ array_key_exists($dbkey, $this->data[$ns]) ? ( is_array($this->data[$ns][$dbkey])?1:
+ $this->data[$ns][$dbkey]=array(''=>$this->data[$ns][$dbkey])):$this->data[$ns][$dbkey]=array();
+ $this->data[$ns][$dbkey][$language]=1;
+ } else
$this->data[$ns][$dbkey] = 1;
}

@@ -86,18 +92,30 @@

$ids = array();
$remaining = $this->data;
+ global $wgLanguageTag;
while ( $row = $res->fetchObject() ) {
- $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ if($wgLanguageTag) {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title, $row->page_language );
+ unset( $remaining[$row->page_namespace][$row->page_title] ); // [$row->page_language] );
+ } else {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ unset( $remaining[$row->page_namespace][$row->page_title] );
+ }
$cache->addGoodLinkObj( $row->page_id, $title );
$ids[$title->getPrefixedDBkey()] = $row->page_id;
- unset( $remaining[$row->page_namespace][$row->page_title] );
}
$res->free();

// The remaining links in $data are bad links, register them as such
foreach ( $remaining as $ns => $dbkeys ) {
- foreach ( $dbkeys as $dbkey => $unused ) {
- $title = Title::makeTitle( $ns, $dbkey );
+ foreach ( $dbkeys as $dbkey => $nothing ) {
+ if($wgLanguageTag && is_array($nothing)) {
+ foreach($nothing as $lang=>$nothing2)
+ $title = Title::makeTitle( $ns, $dbkey, $lang);
+ }
+ else {
+ $title = Title::makeTitle( $ns, $dbkey );
+ }
$cache->addBadLinkObj( $title );
$ids[$title->getPrefixedDBkey()] = 0;
}
@@ -126,7 +144,8 @@
wfProfileOut( $fname );
return false;
}
- $sql = "SELECT page_id, page_namespace, page_title FROM $page WHERE $set";
+ GLOBAL $wgLanguageTag; $lang=$wgLanguageTag?",page_language ":'';
+ $sql = "SELECT page_id, page_namespace, page_title{$lang} FROM $page WHERE $set";

// Do query
$res = new ResultWrapper( $dbr, $dbr->query( $sql, $fname ) );
@@ -157,12 +176,66 @@
$sql .= ' OR ';
}

+
+ ### MLMW Patch
+
+ $sql .= "({$prefix}_namespace=$ns AND ";
+
+ $firstTitle = true;
+
+ global $wgLanguageTag; if($wgLanguageTag) {
+
+ foreach($dbkeys as $dbkey => $nothing) {
+
+ if(!is_array($nothing)) continue;
+ $isnull=false;
+ $nothing=array_keys($nothing);
+ if(false!==$tmp=array_search('',$nothing,1)) {
+ $isnull=true;
+ unset($nothing[$tmp]);
+ }
+ if($firstTitle) {
+ $firstTitle=false;
+ $sql.='(';
+ }
+ else {
+ $sql.=' OR ';
+ }
+ $sql.="({$prefix}_title = ".$db->addQuotes($dbkey);
+ if($nothing) {
+ if(count($nothing)==1) {
+ $sql.=" AND {$prefix}_language = '".current(array_keys($nothing))."'";
+ }
+ else {
+ $sql.=" AND {$prefix}_language IN (".join(',',array_keys($nothing)).')';
+ }
+ }
+ if($isnull) {
+ if($nothing) $sql.=" OR ";
+ else $sql.=" AND ";
+ $sql.="{$prefix}_language is null";
+ }
+ $sql.= ")";
+ unset($dbkeys[$dbkey]);
+ }
+ if(!$firstTitle) {
+ $sql.=')';
+ if(count($dbkeys)) $sql.=" OR ";
+ }
+ }
+
+ ### Undefined Language
+
if (count($dbkeys)==1) { // avoid multiple-reference syntax if simple equality can be used
$singleKey = array_keys($dbkeys);
$sql .= "({$prefix}_namespace=$ns AND {$prefix}_title=".
$db->addQuotes($singleKey[0]).
")";
- } else {
+ # if($wgLanguageTag && is_array(current($dbkeys))) {
+ # $sql.=" AND {$prefix}_language=".$db->addQuotes(current(array_keys(current($dbkeys))));
+ # }
+
+ } elseif(count($dbkeys)) {
$sql .= "({$prefix}_namespace=$ns AND {$prefix}_title IN (";

$firstTitle = true;
@@ -176,7 +249,9 @@
}
$sql .= '))';
}
+ $sql .= ')';
}
+
if ( $first && $firstTitle ) {
# No titles added
return false;

Modified: branches/mlmw/includes/LinkCache.php
===================================================================
--- branches/mlmw/includes/LinkCache.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/LinkCache.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -105,6 +105,8 @@
function addLinkObj( &$nt ) {
global $wgMemc, $wgLinkCacheMemcached, $wgAntiLockFlags;
$title = $nt->getPrefixedDBkey();
+ // global $wgLanguageTag; if($wgLanguageTag && empty($nt->mLanguage)) $title=$nt->mTextform;
+
if ( $this->isBadLink( $title ) ) { return 0; }
$id = $this->getGoodLinkID( $title );
if ( 0 != $id ) { return $id; }
@@ -141,9 +143,15 @@
$options = array();
}

+ $conds=array( 'page_namespace' => $ns, 'page_title' => $t );
+ global $wgLanguageTag; if($wgLanguageTag) {
+ if(strlen($nt->getLanguage())) $conds['page_language']=$nt->getLanguage();
+ else $conds[]='page_language is null';
+ }
$id = $db->selectField( 'page', 'page_id',
- array( 'page_namespace' => $ns, 'page_title' => $t ),
+ $conds,
$fname, $options );
+
if ( !$id ) {
$id = 0;
}
@@ -156,6 +164,7 @@
} else {
$this->addGoodLinkObj( $id, $nt );
}
+
wfProfileOut( $fname );
return $id;
}

Modified: branches/mlmw/includes/Linker.php
===================================================================
--- branches/mlmw/includes/Linker.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Linker.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -309,6 +309,15 @@
if ( $aprops !== '' ) $aprops = ' ' . $aprops;

list( $inside, $trail ) = Linker::splitTrail( $trail );
+ global $wgLanguageTag,$wgLanguageDomain;
+ if($wgLanguageTag && $wgLanguageDomain) {
+ global $wgServerName,$wgServer,$wgContLang;
+ if($wgContLang->getCode3()!=$nt->getLanguageCode()) {
+ $lang = strpos($wgServer,'.');
+ $langr=substr($wgServerName,0,strpos($wgServerName,'.'));
+ $u = str_replace($langr,$nt->getLanguageCode(),substr($wgServer,0,$lang)).substr($wgServer,$lang).$u;
+ }
+ }
$r = "<a href=\"{$u}\"{$style}{$aprops}>{$prefix}{$text}{$inside}</a>{$trail}";
wfProfileOut( __METHOD__ );
return $r;

Modified: branches/mlmw/includes/LinksUpdate.php
===================================================================
--- branches/mlmw/includes/LinksUpdate.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/LinksUpdate.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -317,12 +317,21 @@
* @private
*/
function getLinkInsertions( $existing = array() ) {
+ global $wgLanguageTag;
$arr = array();
foreach( $this->mLinks as $ns => $dbkeys ) {
# array_diff_key() was introduced in PHP 5.1, there is a compatibility function
# in GlobalFunctions.php
$diffs = isset( $existing[$ns] ) ? array_diff_key( $dbkeys, $existing[$ns] ) : $dbkeys;
foreach ( $diffs as $dbk => $id ) {
+ if($wgLanguageTag && is_array($id)) foreach($id as $lang=>$id) {
+ $arr[] = array(
+ 'pl_from' => $this->mId,
+ 'pl_namespace' => $ns,
+ 'pl_title' => $dbk,
+ 'pl_language' => $lang
+ );
+ } else
$arr[] = array(
'pl_from' => $this->mId,
'pl_namespace' => $ns,
@@ -338,10 +347,18 @@
* @private
*/
function getTemplateInsertions( $existing = array() ) {
- $arr = array();
+ $arr = array(); global $wgLanguageTag;
foreach( $this->mTemplates as $ns => $dbkeys ) {
$diffs = isset( $existing[$ns] ) ? array_diff_key( $dbkeys, $existing[$ns] ) : $dbkeys;
foreach ( $diffs as $dbk => $id ) {
+ if($wgLanguageTag && is_array($id)) foreach($id as $lang=>$id) {
+ $arr[] = array(
+ 'tl_from' => $this->mId,
+ 'tl_namespace' => $ns,
+ 'tl_title' => $dbk,
+ 'tl_language' => $lang
+ );
+ } else
$arr[] = array(
'tl_from' => $this->mId,
'tl_namespace' => $ns,
@@ -349,6 +366,7 @@
);
}
}
+
return $arr;
}

@@ -500,7 +518,8 @@
*/
function getExistingLinks() {
$fname = 'LinksUpdate::getExistingLinks';
- $res = $this->mDb->select( 'pagelinks', array( 'pl_namespace', 'pl_title' ),
+ $fields = array( 'pl_namespace', 'pl_title' ); if($GLOBALS['wgLanguageTag']) $fields[]='pl_language';
+ $res = $this->mDb->select( 'pagelinks', $fields,
array( 'pl_from' => $this->mId ), $fname, $this->mOptions );
$arr = array();
while ( $row = $this->mDb->fetchObject( $res ) ) {
@@ -519,7 +538,8 @@
*/
function getExistingTemplates() {
$fname = 'LinksUpdate::getExistingTemplates';
- $res = $this->mDb->select( 'templatelinks', array( 'tl_namespace', 'tl_title' ),
+ $fields = array( 'tl_namespace', 'tl_title' ); if($GLOBALS['wgLanguageTag']) $fields[]='tl_language';
+ $res = $this->mDb->select( 'templatelinks', $fields,
array( 'tl_from' => $this->mId ), $fname, $this->mOptions );
$arr = array();
while ( $row = $this->mDb->fetchObject( $res ) ) {
@@ -528,6 +548,7 @@
}
$arr[$row->tl_namespace][$row->tl_title] = 1;
}
+
$this->mDb->freeResult( $res );
return $arr;
}

Modified: branches/mlmw/includes/MagicWord.php
===================================================================
--- branches/mlmw/includes/MagicWord.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/MagicWord.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -99,6 +99,8 @@
'contentlanguage',
'pagesinnamespace',
'numberofadmins',
+ 'languagespace',
+ 'userlanguage',
'defaultsort',
);


Modified: branches/mlmw/includes/MessageCache.php
===================================================================
--- branches/mlmw/includes/MessageCache.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/MessageCache.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -314,22 +314,44 @@
while ( $row = $dbr->fetchObject( $res ) ) {
$this->mCache[$row->page_title] = '!TOO BIG';
}
- $dbr->freeResult( $res );

+ $dbr->freeResult( $res );
+
+ $fields = array( 'page_title', 'old_text', 'old_flags' );
+
+ $conditions = array( 'page_is_redirect' => 0,
+ 'page_namespace' => NS_MEDIAWIKI,
+ 'page_latest=rev_id',
+ 'rev_text_id=old_id',
+ 'page_len <= ' . intval( $wgMaxMsgCacheEntrySize ) ) ;
+
+ global $wgLanguageTag,$wgLang;
+ if($wgLanguageTag) {
+ if(!$wgLang->mCodeId) $wgLang->setCode($wgLang->getCode());
+ // FIXME wgLang=&wgContLang and wgContLang does not have mCodeId property
+ if($wgLang->mCodeId) {
+ if(strlen($wgLang->getCode())) $conditions['page_language']=$wgLang->mCodeId;
+ else $conditions[]='page_language is null';
+ }
+ $fields[]='page_language';;
+ }
+
# Load text for the remaining pages
$res = $dbr->select( array( 'page', 'revision', 'text' ),
- array( 'page_title', 'old_text', 'old_flags' ),
- array(
- 'page_is_redirect' => 0,
- 'page_namespace' => NS_MEDIAWIKI,
- 'page_latest=rev_id',
- 'rev_text_id=old_id',
- 'page_len <= ' . intval( $wgMaxMsgCacheEntrySize ) ),
- __METHOD__ );
+ $fields,
+ $conditions,
+ __METHOD__ );

+
for ( $row = $dbr->fetchObject( $res ); $row; $row = $dbr->fetchObject( $res ) ) {
- $this->mCache[$row->page_title] = ' ' . Revision::getRevisionText( $row );
+
+ if($wgLanguageTag && strlen($row->page_language)) {
+ $this->mCache[$row->page_title.'/'.$row->page_language] = Revision::getRevisionText( $row );
+ } else {
+ $this->mCache[$row->page_title] = ' ' . Revision::getRevisionText( $row );
+ }
}
+
$this->mCache['VERSION'] = MSG_CACHE_VERSION;
$dbr->freeResult( $res );
wfProfileOut( __METHOD__ );
@@ -426,12 +448,32 @@
*/
function get( $key, $useDB = true, $forContent = true, $isFullKey = false ) {
global $wgContLanguageCode, $wgContLang, $wgLang;
+
+ global $wgLanguageCode; // $forContent=0;
+ global $wgTitle; global $wgLanguageTag;
+
+ if( !$forContent ) if(!method_exists($wgLang,'getCode')) if(!$wgTitle->mLanguage) $wgLang=$wgContLang;
+
if( $forContent ) {
- $lang =& $wgContLang;
+ $lang = &$wgContLang;
+ $clang = $wgContLanguageCode;
} else {
- $lang =& $wgLang;
- }
+ $lang = &$wgLang;
+ $clang = &$wgLanguageCode;
+ } // $clang=$wgLanguageCode;
$langcode = $lang->getCode();
+ // if(!$lang->mCodeId)
+
+ // FIXME $lang->mCodeId
+ if($lang->getCode3() == 'und') $lang->setCode($lang->getCode3());
+ else $lang->setCode($lang->getCode());
+
+ // if(!$lang->getCode()) $lang->setCode($wgLanguageCode);
+ // $lang->setCode($clang);
+// $clang=$lang->getCode();
+// langcode;
+// $lang->setCode($clang);
+
# If uninitialised, someone is trying to call this halfway through Setup.php
if( !$this->mInitialised ) {
return '&lt;' . htmlspecialchars($key) . '&gt;';
@@ -449,11 +491,20 @@

# Try the MediaWiki namespace
if( !$this->mDisable && $useDB ) {
+ if($wgLanguageTag) {
+ $title = $lang->ucfirst( $key );
+ if(!$isFullKey && ($langcode != $clang) ) {
+ global $wgLanguageTag; if($wgLanguageTag) $title .= '/' . $langcode;
+ }
+ $message = $this->getMsgFromNamespace( $title , $lang->getCodeId());
+ }
+ else {
$title = $wgContLang->ucfirst( $lckey );
if(!$isFullKey && ($langcode != $wgContLanguageCode) ) {
$title .= '/' . $langcode;
}
$message = $this->getMsgFromNamespace( $title );
+ }
}
# Try the extension array
if( $message === false && isset( $this->mExtensionMessages[$langcode][$lckey] ) ) {
@@ -492,8 +543,14 @@
# Is this a custom message? Try the default language in the db...
if( ($message === false || $message === '-' ) &&
!$this->mDisable && $useDB &&
+
+ !$isFullKey && ($langcode != $clang) ) {
+ $message = $this->getMsgFromNamespace( $lang->ucfirst( $key ), $lang->mCodeId );
+/*
!$isFullKey && ($langcode != $wgContLanguageCode) ) {
$message = $this->getMsgFromNamespace( $wgContLang->ucfirst( $lckey ) );
+*/
+
}

# Final fallback
@@ -512,10 +569,15 @@
*
* @param string $title Message cache key with initial uppercase letter
*/
- function getMsgFromNamespace( $title ) {
+ function getMsgFromNamespace( $title, $language=false ) {
+
$message = false;
+
+ $otitle=$title; if($language!==false) $title.='/'.$language;
+
$type = false;

+
# Try the cache
if( $this->mUseCache && isset( $this->mCache[$title] ) ) {
$entry = $this->mCache[$title];
@@ -559,7 +621,7 @@
}

# Try loading it from the DB
- $revision = Revision::newFromTitle( Title::makeTitle( NS_MEDIAWIKI, $title ) );
+ $revision = Revision::newFromTitle( Title::makeTitle( NS_MEDIAWIKI, $otitle, $language ) );
if( $revision ) {
$message = $revision->getText();
if ($this->mUseCache) {

Modified: branches/mlmw/includes/Namespace.php
===================================================================
--- branches/mlmw/includes/Namespace.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Namespace.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -25,6 +25,8 @@
NS_HELP_TALK => 'Help_talk',
NS_CATEGORY => 'Category',
NS_CATEGORY_TALK => 'Category_talk',
+ NS_SET => 'Set',
+ NS_SET_TALK => 'Set_talk',
);

if( is_array( $wgExtraNamespaces ) ) {

Modified: branches/mlmw/includes/Parser.php
===================================================================
--- branches/mlmw/includes/Parser.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Parser.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -1698,6 +1698,11 @@
continue;
}

+ global $wgLanguageTag; if($wgLanguageTag && !(strlen($nt->mInterwiki) || strlen($nt->mLanguageCode))) {
+ $nt = Title::makeTitle( $nt->mNamespace, $nt->mDbkeyform, $this->mTitle->mLanguage );
+ }
+ if(!$nt->mUserCaseDBKey) $nt->mUserCaseDBKey=$nt->mDbkeyform; // FIXME: MLMW Hack
+
$ns = $nt->getNamespace();
$iw = $nt->getInterWiki();
wfProfileOut( "$fname-title" );
@@ -1705,6 +1710,7 @@
if ($might_be_img) { # if this is actually an invalid link
wfProfileIn( "$fname-might_be_img" );
if ($ns == NS_IMAGE && $noforce) { #but might be an image
+
$found = false;
while (isset ($a[$k+1]) ) {
#look at the next 'line' to see if we can close it there
@@ -1842,8 +1848,10 @@
continue;
}
}
+
$s .= $this->makeLinkHolder( $nt, $text, '', $trail, $prefix );
}
+
wfProfileOut( $fname );
return $s;
}
@@ -1857,6 +1865,7 @@
*/
function makeLinkHolder( &$nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
wfProfileIn( __METHOD__ );
+
if ( ! is_object($nt) ) {
# Fail gracefully
$retVal = "<!-- ERROR -->{$prefix}{$text}{$trail}";
@@ -2605,7 +2614,18 @@
return $wgContLang->getDirMark();
case 'contentlanguage':
global $wgContLanguageCode;
+ global $wgLanguageTag;
+ if($wgLanguageTag) return $this->mTitle->getLanguageCode();
return $wgContLanguageCode;
+ case 'languagespace':
+ return $this->mTitle->getLanguageCode();
+ case 'userlanguage':
+ global $wgLang;
+ global $wgLanguageCode;
+ if($wgLang) return $wgLang->getCode3() ? $wgLang->getCode3() : $wgLanguageCode;
+ global $wgLanguageTag;
+ if($wgLanguageTag) return $wgLanguageCode ? $wgLanguageCode:$this->mTitle->getLanguageCode();
+ return $wgLanguageCode;
default:
$ret = null;
if ( wfRunHooks( 'ParserGetVariableValueSwitch', array( &$this, &$varCache, &$index, &$ret ) ) )
@@ -4077,6 +4097,7 @@
function replaceLinkHolders( &$text, $options = 0 ) {
global $wgUser;
global $wgContLang;
+ global $wgLanguageTag;

$fname = 'Parser::replaceLinkHolders';
wfProfileIn( $fname );
@@ -4124,6 +4145,7 @@
if ( !isset( $current ) ) {
$current = $ns;
$query = "SELECT page_id, page_namespace, page_title";
+ if($wgLanguageTag) $query.=', page_language';
if ( $threshold > 0 ) {
$query .= ', page_len, page_is_redirect';
}
@@ -4135,6 +4157,7 @@
$query .= ', ';
}

+ # wgLanguageTag should use LinkBatch:constructSet or similar for page_language IN
$query .= $dbr->addQuotes( $this->mLinkHolders['dbkeys'][$key] );
}
}
@@ -4151,7 +4174,8 @@
# 1 = known
# 2 = stub
while ( $s = $dbr->fetchObject($res) ) {
- $title = Title::makeTitle( $s->page_namespace, $s->page_title );
+ if($wgLanguageTag) $title = Title::makeTitle( $s->page_namespace, $s->page_title, $s->page_language );
+ else $title = Title::makeTitle( $s->page_namespace, $s->page_title );
$pdbk = $title->getPrefixedDBkey();
$linkCache->addGoodLinkObj( $s->page_id, $title );
$this->mOutput->addLink( $title, $s->page_id );
@@ -4218,6 +4242,7 @@
$titleClause = $linkBatch->constructSet('page', $dbr);

$variantQuery = "SELECT page_id, page_namespace, page_title";
+ global $wgLanguageTag; if($wgLanguageTag) $variantQuery.=", page_language";
if ( $threshold > 0 ) {
$variantQuery .= ', page_len, page_is_redirect';
}

Modified: branches/mlmw/includes/RecentChange.php
===================================================================
--- branches/mlmw/includes/RecentChange.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/RecentChange.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -121,7 +121,9 @@
function &getTitle()
{
if ( $this->mTitle === false ) {
- $this->mTitle = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'] );
+ global $wgLanguageTag; if($wgLanguageTag) // FIXME!
+ $this->mTitle = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'], $this->mAttribs['rc_language']);
+ else $this->mTitle = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'] );
}
return $this->mTitle;
}
@@ -297,6 +299,9 @@
'rc_new_len' => $newSize
);

+ global $wgLanguageTag;
+ if($wgLanguageTag) $rc->mAttribs['rc_language'] = $title->getLanguage();
+
$rc->mExtra = array(
'prefixedDBkey' => $title->getPrefixedDBkey(),
'lastTimestamp' => $lastTimestamp,
@@ -490,7 +495,7 @@
'rc_old_len' => $row->rc_old_len,
'rc_new_len' => $row->rc_new_len,
);
-
+ global $wgLanguageTag; if($wgLanguageTag) $this->mAttribs['rc_language']=$row->page_language;
$this->mExtra = array();
}


Modified: branches/mlmw/includes/Revision.php
===================================================================
--- branches/mlmw/includes/Revision.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Revision.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -43,11 +43,16 @@
} else {
$matchId = 'page_latest';
}
- return Revision::newFromConds(
- array( "rev_id=$matchId",
- 'page_id=rev_page',
- 'page_namespace' => $title->getNamespace(),
- 'page_title' => $title->getDbkey() ) );
+
+ $conds=array( "rev_id=$matchId",
+ 'page_id=rev_page',
+ 'page_namespace' => $title->getNamespace(),
+ 'page_title' => $title->getDbkey() );
+
+ global $wgLanguageTag;
+ if($wgLanguageTag) $conds['page_language']=$title->getLanguage();
+
+ return Revision::newFromConds( $conds );
}

/**
@@ -105,12 +110,17 @@
} else {
$matchId = 'page_latest';
}
- return Revision::loadFromConds(
- $db,
- array( "rev_id=$matchId",
- 'page_id=rev_page',
- 'page_namespace' => $title->getNamespace(),
- 'page_title' => $title->getDbkey() ) );
+
+ $conds=array( "rev_id=$matchId",
+ 'page_id=rev_page',
+ 'page_namespace' => $title->getNamespace(),
+ 'page_title' => $title->getDbkey() );
+
+ global $wgLanguageTag;
+ if($wgLanguageTag) $conds['page_language']=$title->getLanguage();
+
+ return Revision::loadFromConds( $db, $conds );
+
}

/**
@@ -126,12 +136,16 @@
* @static
*/
public static function loadFromTimestamp( &$db, &$title, $timestamp ) {
- return Revision::loadFromConds(
- $db,
+ $conds =
array( 'rev_timestamp' => $db->timestamp( $timestamp ),
'page_id=rev_page',
'page_namespace' => $title->getNamespace(),
- 'page_title' => $title->getDbkey() ) );
+ 'page_title' => $title->getDbkey() );
+
+ global $wgLanguageTag;
+ if($wgLanguageTag) $conds['page_language']=$title->getLanguage();
+
+ return Revision::loadFromConds( $db, $conds );
}

/**
@@ -187,11 +201,15 @@
* @static
*/
public static function fetchAllRevisions( &$title ) {
- return Revision::fetchFromConds(
- wfGetDB( DB_SLAVE ),
+ $conds =
array( 'page_namespace' => $title->getNamespace(),
'page_title' => $title->getDbkey(),
- 'page_id=rev_page' ) );
+ 'page_id=rev_page' );
+
+ global $wgLanguageTag;
+ if($wgLanguageTag) $conds['page_language']=$title->getLanguage();
+
+ return Revision::fetchFromConds( wfGetDB( DB_SLAVE ), $conds );
}

/**
@@ -205,12 +223,17 @@
* @static
*/
public static function fetchRevision( &$title ) {
- return Revision::fetchFromConds(
- wfGetDB( DB_SLAVE ),
+ $conds =
array( 'rev_id=page_latest',
'page_namespace' => $title->getNamespace(),
'page_title' => $title->getDbkey(),
- 'page_id=rev_page' ) );
+ 'page_id=rev_page' );
+
+ global $wgLanguageTag;
+ if($wgLanguageTag) $conds['page_language']=$title->getLanguage();
+
+ return Revision::fetchFromConds( wfGetDB( DB_SLAVE ), $conds );
+
}

/**
@@ -225,8 +248,16 @@
* @static
*/
private static function fetchFromConds( $db, $conditions ) {
- $res = $db->select(
- array( 'page', 'revision' ),
+
+ global $wgLanguageTag; if($wgLanguageTag) {
+ if(array_key_exists('page_language',$conditions)) {
+ if(!strlen($conditions['page_language'])) {
+ $conditions[]='(page_language IS NULL)';
+ unset($conditions['page_language']);
+ }
+ }}
+
+ $fields =
array( 'page_namespace',
'page_title',
'page_latest',
@@ -239,7 +270,12 @@
'rev_minor_edit',
'rev_timestamp',
'rev_deleted',
- 'rev_len' ),
+ 'rev_len' );
+ if($wgLanguageTag) $fields[]='page_language';
+
+ $res = $db->select(
+ array( 'page', 'revision' ),
+ $fields,
$conditions,
'Revision::fetchRow',
array( 'LIMIT' => 1 ) );
@@ -270,7 +306,7 @@
* @param object $row
* @access private
*/
- function Revision( $row ) {
+ function Revision( $row ) { global $wgLanguageTag;
if( is_object( $row ) ) {
$this->mId = intval( $row->rev_id );
$this->mPage = intval( $row->rev_page );

Modified: branches/mlmw/includes/SearchMySQL.php
===================================================================
--- branches/mlmw/includes/SearchMySQL.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SearchMySQL.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -133,7 +133,8 @@
$match = $this->parseQuery( $filteredTerm, $fulltext );
$page = $this->db->tableName( 'page' );
$searchindex = $this->db->tableName( 'searchindex' );
- return 'SELECT page_id, page_namespace, page_title ' .
+ global $wgLanguageTag; $lang = $wgLanguageTag ? ', page_language ' : '';
+ return "SELECT page_id, page_namespace, page_title{$lang} " .
"FROM $page,$searchindex " .
'WHERE page_id=si_page AND ' . $match;
}

Modified: branches/mlmw/includes/SearchPostgres.php
===================================================================
--- branches/mlmw/includes/SearchPostgres.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SearchPostgres.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -117,6 +117,8 @@
*/
function searchQuery( $term, $fulltext, $colname ) {
global $wgDBversion;
+ global $wgLanguageTag;
+ $lang = $wgLanguageTag ? 'page_language, ' : '';

if ( !isset( $wgDBversion ) ) {
$this->db->getServerVersion();
@@ -135,7 +137,7 @@
$top = pg_fetch_result($res,0,0);

if ($top === "") { ## e.g. if only stopwords are used XXX return something better
- $query = "SELECT page_id, page_namespace, page_title, 0 AS score ".
+ $query = "SELECT page_id, page_namespace, page_title,{$lang} 0 AS score ".
"FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
"AND r.rev_text_id = c.old_id AND 1=0";
}
@@ -148,7 +150,7 @@
}

$rankscore = $wgDBversion > 8.2 ? 5 : 1;
- $query = "SELECT page_id, page_namespace, page_title, ".
+ $query = "SELECT page_id, page_namespace, page_title,{$lang} ".
"rank($fulltext, to_tsquery('default',$searchstring), $rankscore) AS score ".
"FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
"AND r.rev_text_id = c.old_id AND $fulltext @@ to_tsquery('default',$searchstring)";
@@ -197,7 +199,8 @@
*/
class PostgresSearchResult extends SearchResult {
function PostgresSearchResult( $row ) {
- $this->mTitle = Title::makeTitle( $row->page_namespace, $row->page_title );
+ global $wgLanguageTag;
+ $this->mTitle = Title::makeTitle( $row->page_namespace, $row->page_title, $wgLanguageTag?$row->page_language:false );
$this->score = $row->score;
}
function getScore() {

Modified: branches/mlmw/includes/Setup.php
===================================================================
--- branches/mlmw/includes/Setup.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Setup.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -172,6 +172,7 @@
# These are now the same, always
# To determine the user language, use $wgLang->getCode()
$wgContLanguageCode = $wgLanguageCode;
+# They are not the same when wgLanguageTag = true

wfProfileOut( $fname.'-misc1' );
wfProfileIn( $fname.'-memcached' );
@@ -227,6 +228,9 @@

$wgLoadBalancer = new StubObject( 'wgLoadBalancer', 'LoadBalancer',
array( $wgDBservers, false, $wgMasterWaitTimeout, true ) );
+
+if(array_key_exists('uselang',$_REQUEST)) $wgContLanguageCode=$_REQUEST['uselang'];
+
$wgContLang = new StubContLang;

// Now that variant lists may be available...

Modified: branches/mlmw/includes/Skin.php
===================================================================
--- branches/mlmw/includes/Skin.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Skin.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -156,6 +156,7 @@
}

function initPage( &$out ) {
+ global $wgFavicon, $wgScriptPath, $wgSitename, $wgContLang, $wgLanguageNames;
global $wgFavicon, $wgScriptPath, $wgSitename, $wgContLang;

wfProfileIn( __METHOD__ );
@@ -1417,6 +1418,7 @@
$s = wfMsg( 'otherlanguages' ) . ': ';
$first = true;
if($wgContLang->isRTL()) $s .= '<span dir="LTR">';
+
foreach( $a as $l ) {
if ( ! $first ) { $s .= ' | '; }
$first = false;
@@ -1595,6 +1597,7 @@
function buildSidebar() {
global $parserMemc, $wgEnableSidebarCache;
global $wgLang, $wgContLang;
+ global $wgLanguageTag;

$fname = 'SkinTemplate::buildSidebar';

@@ -1614,6 +1617,7 @@

$bar = array();
$lines = explode( "\n", wfMsgForContent( 'sidebar' ) );
+ $href='';
foreach ($lines as $line) {
if (strpos($line, '*') !== 0)
continue;
@@ -1631,6 +1635,12 @@
if (wfEmptyMsg($line[0], $link))
$link = $line[0];

+ if($wgLanguageTag && strlen($link) && // FIXME apply to all unnamed?
+ false===strpos($link,':')) {
+ $link=$wgLang->getCode3().":".$link;
+ $href = self::makeInternalOrExternalUrl( $link );
+ }
+ else
if ( preg_match( '/^(?:' . wfUrlProtocols() . ')/', $link ) ) {
$href = $link;
} else {
@@ -1643,6 +1653,7 @@
}
}

+
$bar[$heading][] = array(
'text' => $text,
'href' => $href,
@@ -1658,4 +1669,4 @@
return $bar;
}

-}
\ No newline at end of file
+}

Modified: branches/mlmw/includes/SkinTemplate.php
===================================================================
--- branches/mlmw/includes/SkinTemplate.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SkinTemplate.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -139,6 +139,15 @@
$fname = 'SkinTemplate::outputPage';
wfProfileIn( $fname );

+ global $wgLanguageTag;
+ $code=$wgTitle->getLanguageCode();
+ if($wgLanguageTag && false !== ($lid = wgLanguageId($code))) {
+ $code = wgLanguageWikimedia($code);
+ }
+ if($code!=$wgContLanguageCode) {
+ $wgContLang=Language::factory($code);
+ }
+
// Hook that allows last minute changes to the output page, e.g.
// adding of CSS or Javascript by extensions.
wfRunHooks( 'BeforePageDisplay', array( &$out ) );
@@ -270,15 +279,19 @@
$tpl->setRef( 'scriptpath', $wgScriptPath );
$tpl->setRef( 'serverurl', $wgServer );
$tpl->setRef( 'logopath', $wgLogo );
- $tpl->setRef( "lang", $wgContLanguageCode );
- $tpl->set( 'dir', $wgContLang->isRTL() ? "rtl" : "ltr" );
- $tpl->set( 'rtl', $wgContLang->isRTL() );
+ $tpl->set( "lang", $wgContLanguageCode=='und'?'':$wgContLanguageCode);
+ $tpl->set( 'dir', $wgLang->isRTL() ? "rtl" : "ltr" );
+ $tpl->set( 'rtl', $wgLang->isRTL() );
+ if($wgContLang->isRTL()!=$wgLang->isRTL()||1)
+ $tpl->set( 'contentdir', $wgContLang->isRTL() ? "rtl" : "ltr");
+ $tpl->set( 'lang', $wgContLang->getCode()=='und'?'':$wgContLang->getCode());
$tpl->set( 'langname', $wgContLang->getLanguageName( $wgContLanguageCode ) );
$tpl->set( 'showjumplinks', $wgUser->getOption( 'showjumplinks' ) );
$tpl->set( 'username', $wgUser->isAnon() ? NULL : $this->username );
$tpl->setRef( 'userpage', $this->userpage);
$tpl->setRef( 'userpageurl', $this->userpageUrlDetails['href']);
- $tpl->set( 'userlang', $wgLang->getCode() );
+ $userlang=
+ $tpl->set( 'userlang', $wgLang->getCode()=='und'?'':$wgLang->getCode() );
$tpl->set( 'pagecss', $this->setupPageCss() );
$tpl->setRef( 'usercss', $this->usercss);
$tpl->setRef( 'userjs', $this->userjs);
@@ -412,6 +425,38 @@
# Language links
$language_urls = array();

+ // FIXME! Move to Skin.php?
+ // Should do one query, use makeTitle, and have an optional page_title (if page_id is null/0)
+ global $wgLanguageTag;
+ if($wgLanguageTag) if(!(array_key_exists('action',$_REQUEST) && $_REQUEST['action']=='edit')) {
+ global $wgLanguageNames,$wgLanguageIds;
+ $dbr =& wfGetDB( DB_SLAVE );
+ $x=$dbr->select('pagesets',array('set_id'),array('page_id'=>$this->mTitle->mArticleID));
+ $y=$dbr->fetchRow($x); $set_id=$y[0];
+ if($this->mTitle->mNamespace===NS_SET) {
+ if($this->mTitle->mArticleID) if(!$_REQUEST['action']) $wgOut->mBodytext.="\n<hr>";//<h3>set</h3>";
+ $set_id = $this->mTitle->mArticleID;
+ }
+ if($this->mTitle->mNamespace===NS_IMAGE) {
+ $x=$dbr->select(array('page','langtags'),array('page_language','page_namespace','page_title','display_name','tag_name'),
+ array(0=>'page_language=language_id','page_title'=>$this->mTitle->mDbkeyform,'page_namespace'=>NS_IMAGE),null,array('ORDER BY'=>'display_name'));
+ } else if($set_id)
+ $x=$dbr->select(array('pagesets','page','langtags'),array('page_language','page_namespace','page_title','display_name','tag_name'),
+ array(0=>'page_language=language_id AND pagesets.page_id=page.page_id','set_id'=>$set_id),null,array('ORDER BY'=>'display_name'));
+// set_id=page.page_id OR (pagesets.page_id=page.page_id AND page_language is null AND language_id is null)',
+ while($row=$dbr->fetchObject($x)) {
+ $wgLanguageNames[$row->page_language]=$row->display_name;
+ $wgLanguageIds[$row->page_language]=$row->tag_name;
+ $text = $row->display_name; // $tis->mTextform;
+ if($row->page_namespace == NS_SET) $text.=" - set";
+ $ts = Title::makeTitle( $row->page_namespace, $row->page_title, $row->page_language);
+ if($this->mTitle->mNamespace==NS_SET) { if(!$_REQUEST['action']) $wgOut->mBodytext.="\n ".$this->makeKnownLinkObj($ts).'<br>'; }
+ else $language_urls[] = array ('href'=> $ts->getFullURL(), 'text'=>$text, 'class'=>'interlang-'.$ts->mLanguageCode);
+ }
+ }
+
+
+
if ( !$wgHideInterlanguageLinks ) {
foreach( $wgOut->getLanguageLinks() as $l ) {
$tmp = explode( ':', $l, 2 );
@@ -978,7 +1023,9 @@
$siteargs .= '&ts=' . $wgUser->mTouched;
}

- if( $wgContLang->isRTL() ) {
+ global $wgLang;
+ if( $wgLang->isRTL() || $wgContLang->isRTL()) {
+// if( $wgContLang->isRTL() ) {
global $wgStyleVersion;
$sitecss .= "@import \"$wgStylePath/$this->stylename/rtl.css?$wgStyleVersion\";\n";
}

Modified: branches/mlmw/includes/SpecialAllpages.php
===================================================================
--- branches/mlmw/includes/SpecialAllpages.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialAllpages.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -50,7 +50,7 @@
* @param string $from Article name we are starting listing at.
*/
function namespaceForm ( $namespace = NS_MAIN, $from = '' ) {
- global $wgScript, $wgContLang;
+ global $wgScript, $wgContLang, $wgLanguageTag, $wgLanguageCode;
$t = SpecialPage::getTitleFor( $this->name );
$align = $wgContLang->isRtl() ? 'left' : 'right';

@@ -75,10 +75,21 @@
Xml::submitButton( wfMsg( 'allpagessubmit' ) ) .
"</td>
</tr>";
+ if($wgLanguageTag) {
+ $out .= "<tr>
+ <td align='$align'>" .
+ Xml::label( 'Language filter', 'languagefilter' ) .
+ "</td>
+ <td>" .
+ Xml::languagefilterSelector($wgLanguageCode, null).
+ "</td>
+ </tr>";
+ }
$out .= Xml::closeElement( 'table' );
$out .= Xml::closeElement( 'form' );
$out .= Xml::closeElement( 'div' );
return $out;
+
}

/**
@@ -212,7 +223,7 @@
* @param string $from list all pages from this name (default FALSE)
*/
function showChunk( $namespace = NS_MAIN, $from, $including = false ) {
- global $wgOut, $wgUser, $wgContLang;
+ global $wgOut, $wgUser, $wgContLang, $wgLanguageTag;

$fname = 'indexShowChunk';
$sk = $wgUser->getSkin();
@@ -233,8 +244,11 @@
list( $namespace, $fromKey, $from ) = $fromList;

$dbr = wfGetDB( DB_SLAVE );
+ $fields = array( 'page_namespace', 'page_title', 'page_is_redirect' );
+ if($wgLanguageTag) $fields[]='page_language';
+
$res = $dbr->select( 'page',
- array( 'page_namespace', 'page_title', 'page_is_redirect' ),
+ $fields,
array(
'page_namespace' => $namespace,
'page_title >= ' . $dbr->addQuotes( $fromKey )
@@ -250,9 +264,12 @@
$out = '<table style="background: inherit;" border="0" width="100%">';

while( ($n < $this->maxPerPage) && ($s = $dbr->fetchObject( $res )) ) {
- $t = Title::makeTitle( $s->page_namespace, $s->page_title );
+
+ $t = $wgLanguageTag ? Title::makeTitle( $s->page_namespace, $s->page_title, $s->page_language ) :
+ Title::makeTitle( $s->page_namespace, $s->page_title );
if( $t ) {
- $link = ($s->page_is_redirect ? '<div class="allpagesredirect">' : '' ) .
+ $link = ($wgLanguageTag && $t->getLanguageCode() && $t->getLanguageCode()!='und' ? $t->getLanguageCode().':':'').
+ ($s->page_is_redirect ? '<div class="allpagesredirect">' : '' ) .
$sk->makeKnownLinkObj( $t, htmlspecialchars( $t->getText() ), false, false ) .
($s->page_is_redirect ? '</div>' : '' );
} else {

Modified: branches/mlmw/includes/SpecialContributions.php
===================================================================
--- branches/mlmw/includes/SpecialContributions.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialContributions.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -198,6 +198,7 @@
$ret = "<li>$ret</li>\n";
wfProfileOut( __METHOD__ );
return $ret;
+
}

/**
@@ -421,14 +422,18 @@
$f .= "\t" . Xml::hidden( $name, $value ) . "\n";
}

+ global $wgLanguageCode,$wgLanguageTag;
+ $languagefilter = $wgLanguageTag ? '<br /> '.Xml::label( 'Language filter', 'languagefilter' ) . Xml::languagefilterSelector( $wgLanguageCode, null ) : '';
+
$f .= '<fieldset>' .
Xml::element( 'legend', array(), wfMsg( 'sp-contributions-search' ) ) .
- Xml::radioLabel( wfMsgExt( 'sp-contributions-newbies', array( 'parseinline' ) ), 'contribs' , 'newbie' , 'newbie', $options['contribs'] == 'newbie' ? true : false ) . '<br />' .
+ Xml::radioLabel( wfMsgExt( 'sp-contributions-newbies', array( 'parseinline' ) ), 'contribs' , 'newbie' , 'newbie', $options['contribs'] == 'newbie' ? true : false ) . '<br /> ' .
Xml::radioLabel( wfMsgExt( 'sp-contributions-username', array( 'parseinline' ) ), 'contribs' , 'user', 'user', $options['contribs'] == 'user' ? true : false ) . ' ' .
Xml::input( 'target', 20, $options['target']) . ' '.
'<span style="white-space: nowrap">' .
Xml::label( wfMsg( 'namespace' ), 'namespace' ) . ' ' .
Xml::namespaceSelector( $options['namespace'], '' ) .
+ $languagefilter .
'</span>' .
Xml::openElement( 'p' ) .
'<span style="white-space: nowrap">' .
@@ -451,3 +456,5 @@
Xml::closeElement( 'form' );
return $f;
}
+
+?>

Modified: branches/mlmw/includes/SpecialPage.php
===================================================================
--- branches/mlmw/includes/SpecialPage.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialPage.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -200,7 +200,7 @@
$aliases = $wgContLang->getSpecialPageAliases();
$missingPages = self::$mList;
self::$mAliases = array();
- foreach ( $aliases as $realName => $aliasList ) {
+ if($aliases) foreach ( $aliases as $realName => $aliasList ) {
foreach ( $aliasList as $alias ) {
self::$mAliases[$wgContLang->caseFold( $alias )] = $realName;
}
@@ -489,6 +489,7 @@
*/
static function getLocalNameFor( $name, $subpage = false ) {
global $wgContLang;
+
$aliases = $wgContLang->getSpecialPageAliases();
if ( isset( $aliases[$name][0] ) ) {
$name = $aliases[$name][0];

Modified: branches/mlmw/includes/SpecialPopularpages.php
===================================================================
--- branches/mlmw/includes/SpecialPopularpages.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialPopularpages.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -23,12 +23,13 @@
function getSQL() {
$dbr = wfGetDB( DB_SLAVE );
$page = $dbr->tableName( 'page' );
-
+ global $wgLanguageTag; $page_language=$wgLanguageTag?',page_language':'';
$query =
"SELECT 'Popularpages' as type,
page_namespace as namespace,
page_title as title,
page_counter as value
+ $page_language
FROM $page ";
$where =
"WHERE page_is_redirect=0 AND page_namespace";
@@ -46,8 +47,9 @@
}

function formatResult( $skin, $result ) {
- global $wgLang, $wgContLang;
- $title = Title::makeTitle( $result->namespace, $result->title );
+ global $wgLang, $wgContLang,$wgLanguageTag;
+ $title = $wgLanguageTag ? Title::makeTitle( $result->namespace, $result->title, $result->page_language ) :
+ Title::makeTitle( $result->namespace, $result->title );
$link = $skin->makeKnownLinkObj( $title, htmlspecialchars( $wgContLang->convert( $title->getPrefixedText() ) ) );
$nv = wfMsgExt( 'nviews', array( 'parsemag', 'escape'),
$wgLang->formatNum( $result->value ) );

Modified: branches/mlmw/includes/SpecialRandompage.php
===================================================================
--- branches/mlmw/includes/SpecialRandompage.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialRandompage.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -72,6 +72,10 @@
if( !$row )
$row = $this->selectRandomPageFromDB( "0" );

+ global $wgLanguageTag;
+
+ if( $row && $wgLanguageTag )
+ return Title::makeTitleSafe( $this->namespace, $row->page_title, $row->page_language );
if( $row )
return Title::makeTitleSafe( $this->namespace, $row->page_title );
else
@@ -90,8 +94,11 @@
$ns = (int) $this->namespace;
$redirect = $this->redirect ? 1 : 0;

+ global $wgLanguageTag;
+ $page_language = $wgLanguageTag ? ',page_language' : '';
+
$extra = $wgExtraRandompageSQL ? "AND ($wgExtraRandompageSQL)" : "";
- $sql = "SELECT page_title
+ $sql = "SELECT page_title{$page_language}
FROM $page $use_index
WHERE page_namespace = $ns
AND page_is_redirect = $redirect

Modified: branches/mlmw/includes/SpecialRecentchanges.php
===================================================================
--- branches/mlmw/includes/SpecialRecentchanges.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialRecentchanges.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -169,9 +169,19 @@
// Fetch results, prepare a batch link existence check query
$rows = array();
$batch = new LinkBatch;
+ global $wgLanguageTag;
while( $row = $dbr->fetchObject( $res ) ){
$rows[] = $row;
if ( !$feedFormat ) {
+ if($wgLanguageTag) {
+ // User page link
+ $title = Title::makeTitleSafe( NS_USER, $row->rc_user_text, $row->rc_language );
+ $batch->addObj( $title );
+
+ // User talk
+ $title = Title::makeTitleSafe( NS_USER_TALK, $row->rc_user_text , $row->rc_language);
+ $batch->addObj( $title );
+ } else {
// User page link
$title = Title::makeTitleSafe( NS_USER, $row->rc_user_text );
$batch->addObj( $title );
@@ -179,6 +189,7 @@
// User talk
$title = Title::makeTitleSafe( NS_USER_TALK, $row->rc_user_text );
$batch->addObj( $title );
+ }
}

}
@@ -603,6 +614,12 @@
<div id='nsselect' class='recentchanges'>
<label for='namespace'>" . wfMsgHtml('namespace') . "</label>
{$namespaceselect}{$submitbutton}{$invertbox} <label for='nsinvert'>" . wfMsgHtml('invert') . "</label>{$catbox}\n</div>";
+
+ global $wgLanguageCode,$wgLanguageTag;
+ if($wgLanguageTag) {
+ $languagefilter = HTMLlanguagefilterselector($wgLanguageCode, '');
+ $out .="<label for='languagefilter'>Language filter</label>{$languagefilter}{$submitbutton}";
+ }
$out .= '</form></div>';
return $out;
}

Modified: branches/mlmw/includes/SpecialUnusedtemplates.php
===================================================================
--- branches/mlmw/includes/SpecialUnusedtemplates.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialUnusedtemplates.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -17,9 +17,10 @@
function getSQL() {
$dbr = wfGetDB( DB_SLAVE );
list( $page, $templatelinks) = $dbr->tableNamesN( 'page', 'templatelinks' );
+ global $wgLanguageTag; $page_language=$wgLanguageTag?',page_language':'';
$sql = "SELECT 'Unusedtemplates' AS type, page_title AS title,
page_namespace AS namespace, 0 AS value
- FROM $page
+ $page_language FROM $page
LEFT JOIN $templatelinks
ON page_namespace = tl_namespace AND page_title = tl_title
WHERE page_namespace = 10 AND tl_from IS NULL";
@@ -27,7 +28,9 @@
}

function formatResult( $skin, $result ) {
- $title = Title::makeTitle( NS_TEMPLATE, $result->title );
+ global $wgLanguageTag;
+ $title = $wgLanguageTag ? Title::makeTitle( NS_TEMPLATE, $result->title, $result->page_language ) :
+ Title::makeTitle( NS_TEMPLATE, $result->title );
$pageLink = $skin->makeKnownLinkObj( $title, '', 'redirect=no' );
$wlhLink = $skin->makeKnownLinkObj(
SpecialPage::getTitleFor( 'Whatlinkshere' ),

Modified: branches/mlmw/includes/SpecialWantedcategories.php
===================================================================
--- branches/mlmw/includes/SpecialWantedcategories.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialWantedcategories.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -18,6 +18,10 @@
$dbr = wfGetDB( DB_SLAVE );
list( $categorylinks, $page ) = $dbr->tableNamesN( 'categorylinks', 'page' );
$name = $dbr->addQuotes( $this->getName() );
+
+ global $wgLanguageTag; $cl_language=$wgLanguageTag?',cl_language':'';
+ $pl_grp=$wgLanguageTag?',5':'';
+
return
"
SELECT
@@ -25,10 +29,12 @@
" . NS_CATEGORY . " as namespace,
cl_to as title,
COUNT(*) as value
+ $cl_language
FROM $categorylinks
LEFT JOIN $page ON cl_to = page_title AND page_namespace = ". NS_CATEGORY ."
WHERE page_title IS NULL
GROUP BY 1,2,3
+ $pl_grp
";
}

@@ -38,9 +44,11 @@
* Fetch user page links and cache their existence
*/
function preprocessResults( &$db, &$res ) {
+ global $wgLanguageTag;
$batch = new LinkBatch;
while ( $row = $db->fetchObject( $res ) )
- $batch->addObj( Title::makeTitleSafe( $row->namespace, $row->title ) );
+ $batch->addObj( $wgLanguageTag ? Title::makeTitleSafe( $row->namespace, $row->title, $row->cl_language ) :
+ Title::makeTitleSafe( $row->namespace, $row->title ) );
$batch->execute();

// Back to start for display
@@ -50,9 +58,10 @@
}

function formatResult( $skin, $result ) {
- global $wgLang, $wgContLang;
+ global $wgLang, $wgContLang, $wgLanguageTag;

- $nt = Title::makeTitle( $result->namespace, $result->title );
+ $nt = $wgLanguageTag ? Title::makeTitle( $result->namespace, $result->title, $result->cl_language ) :
+ Title::makeTitle( $result->namespace, $result->title );
$text = $wgContLang->convert( $nt->getText() );

$plink = $this->isCached() ?

Modified: branches/mlmw/includes/SpecialWantedpages.php
===================================================================
--- branches/mlmw/includes/SpecialWantedpages.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialWantedpages.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -31,11 +31,16 @@
$dbr = wfGetDB( DB_SLAVE );
$pagelinks = $dbr->tableName( 'pagelinks' );
$page = $dbr->tableName( 'page' );
+
+ global $wgLanguageTag; $pl_language=$wgLanguageTag?',pl_language':'';
+ $pl_grp=$wgLanguageTag?',5':'';
+
return
"SELECT 'Wantedpages' AS type,
pl_namespace AS namespace,
pl_title AS title,
COUNT(*) AS value
+ $pl_language
FROM $pagelinks
LEFT JOIN $page AS pg1
ON pl_namespace = pg1.page_namespace AND pl_title = pg1.page_title
@@ -44,7 +49,7 @@
WHERE pg1.page_namespace IS NULL
AND pl_namespace NOT IN ( 2, 3 )
AND pg2.page_namespace != 8
- GROUP BY 1,2,3
+ GROUP BY 1,2,3 {$pl_grp}
HAVING COUNT(*) > $count";
}

@@ -52,9 +57,11 @@
* Cache page existence for performance
*/
function preprocessResults( &$db, &$res ) {
+ global $wgLanguageTag;
$batch = new LinkBatch;
while ( $row = $db->fetchObject( $res ) )
- $batch->addObj( Title::makeTitleSafe( $row->namespace, $row->title ) );
+ $batch->addObj( $wgLanguageTag ? Title::makeTitleSafe( $row->namespace, $row->title, $row->pl_language ) :
+ Title::makeTitleSafe( $row->namespace, $row->title ) );
$batch->execute();

// Back to start for display
@@ -71,7 +78,12 @@
* @return string
*/
public function formatResult( $skin, $result ) {
- $title = Title::makeTitleSafe( $result->namespace, $result->title );
+
+ global $wgLang,$wgLanguageTag;
+
+ if($wgLanguageTag) $title = Title::makeTitleSafe( $result->namespace, $result->title, $result->pl_language );
+ else $title = Title::makeTitleSafe( $result->namespace, $result->title );
+
if( $title instanceof Title ) {
if( $this->isCached() ) {
$pageLink = $title->exists()

Modified: branches/mlmw/includes/SpecialWatchlist.php
===================================================================
--- branches/mlmw/includes/SpecialWatchlist.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialWatchlist.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -134,6 +134,7 @@
*/
}

+
# If the watchlist is relatively short, it's simplest to zip
# down its entirety and then sort the results.

@@ -364,4 +365,4 @@
$count = floor( $count / 2 );

return( $count );
-}
\ No newline at end of file
+}

Modified: branches/mlmw/includes/SpecialWhatlinkshere.php
===================================================================
--- branches/mlmw/includes/SpecialWhatlinkshere.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/SpecialWhatlinkshere.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -120,6 +120,7 @@

$options['LIMIT'] = $queryLimit;
$fields = array( 'page_id', 'page_namespace', 'page_title', 'page_is_redirect' );
+ global $wgLanguageTag; if($wgLanguageTag) $fields[]='page_language';

$options['ORDER BY'] = 'pl_from';
$plRes = $dbr->select( array( 'pagelinks', 'page' ), $fields,
@@ -205,7 +206,8 @@

$wgOut->addHTML( '<ul>' );
foreach ( $rows as $row ) {
- $nt = Title::makeTitle( $row->page_namespace, $row->page_title );
+ if($wgLanguageTag) $nt = Title::makeTitle( $row->page_namespace, $row->page_title, $row->page_language);
+ else $nt = Title::makeTitle( $row->page_namespace, $row->page_title );

if ( $row->page_is_redirect ) {
$extra = 'redirect=no';

Modified: branches/mlmw/includes/StubObject.php
===================================================================
--- branches/mlmw/includes/StubObject.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/StubObject.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -72,6 +72,15 @@

function _newObject() {
global $wgContLanguageCode;
+ global $wgTitle;
+ global $wgLanguageWikimedia,$wgLanguageTag;
+ if($wgLanguageTag && $wgTitle!==null) {
+ $code = $wgTitle->getLanguageCode();
+ if(array_key_exists($code,$wgLanguageWikimedia)) {
+ $wgContLanguageCode = $wgLanguageWikimedia[$code];
+ }
+ }
+
$obj = Language::factory( $wgContLanguageCode );
$obj->initEncoding();
$obj->initContLang();
@@ -88,16 +97,31 @@
}

function _newObject() {
- global $wgContLanguageCode, $wgRequest, $wgUser, $wgContLang;
- $code = $wgRequest->getVal('uselang', $wgUser->getOption('language') );
+ global $wgContLanguageCode, $wgRequest, $wgUser, $wgContLang, $wgLanguageTag;

+ $code = $wgRequest->getVal('uselang', ''); // $wgUser->getOption('language') );
+
+ if( $wgUser->mId )
+ if( $code == '' )
+ $code = $wgUser->getOption('language');
+
+ if( $code == '' && $wgLanguageTag) {
+ global $wgTitle,$wgLanguageWikimedia;
+ if((!$wgUser->mId) && $wgTitle) {
+ $code = $wgTitle->getLanguageCode();
+ }
+ if(array_key_exists($code,$wgLanguageWikimedia)) {
+ $code = $wgLanguageWikimedia[$code];
+ }
+ }
+
// if variant is explicitely selected, use it instead the one from wgUser
// see bug #7605
if($wgContLang->hasVariants()){
$variant = $wgContLang->getPreferredVariant();
if($variant != $wgContLanguageCode)
$code = $variant;
- }
+ }

# Validate $code
if( empty( $code ) || !preg_match( '/^[a-z-]+$/', $code ) ) {

Modified: branches/mlmw/includes/Title.php
===================================================================
--- branches/mlmw/includes/Title.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Title.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -63,6 +63,9 @@
var $mDefaultNamespace; # Namespace index when there is no namespace
# Zero except in {{transclusion}} tags
var $mWatched; # Is $wgUser watching this page? NULL if unfilled, accessed through userIsWatching()
+ var $mLanguageCode; # Language code
+ var $mLanguage; # Language index
+
/**#@-*/


@@ -137,7 +140,7 @@
$t = new Title();
$t->mDbkeyform = str_replace( ' ', '_', $filteredText );
$t->mDefaultNamespace = $defaultNamespace;
-
+ $t->mUserCaseDBKey = $t->mDbkeyform;
static $cachedcount = 0 ;
if( $t->secureAndSplit() ) {
if( $defaultNamespace == NS_MAIN ) {
@@ -193,13 +196,17 @@
public static function newFromID( $id ) {
$fname = 'Title::newFromID';
$dbr = wfGetDB( DB_SLAVE );
- $row = $dbr->selectRow( 'page', array( 'page_namespace', 'page_title' ),
+ global $wgLanguageTag;
+ $fields = array( 'page_namespace', 'page_title' );
+ if($wgLanguageTag) $fields[]='page_language';
+ $row = $dbr->selectRow( 'page', $fields,
array( 'page_id' => $id ), $fname );
if ( $row !== false ) {
- $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title, $wgLanguageTag ? $row->page_language : false);
} else {
$title = NULL;
}
+
return $title;
}

@@ -208,12 +215,13 @@
*/
public static function newFromIDs( $ids ) {
$dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( 'page', array( 'page_namespace', 'page_title' ),
+ global $wgLanguageTag; $lang = $wgLanguageTag ? array('page_language') : array();
+ $res = $dbr->select( 'page', array_merge(array( 'page_namespace', 'page_title' ) , $lang),
'page_id IN (' . $dbr->makeList( $ids ) . ')', __METHOD__ );

$titles = array();
while ( $row = $dbr->fetchObject( $res ) ) {
- $titles[] = Title::makeTitle( $row->page_namespace, $row->page_title );
+ $titles[] = Title::makeTitle( $row->page_namespace, $row->page_title, $wgLanguageTag ? $row->page_language : false );
}
return $titles;
}
@@ -229,11 +237,20 @@
* @param string $title the unprefixed database key form
* @return Title the new object
*/
- public static function &makeTitle( $ns, $title ) {
+ public static function &makeTitle( $ns, $title , $language=false ) {
$t = new Title();
$t->mInterwiki = '';
$t->mFragment = '';
+
+ if($language!==false) {
+ global $wgLanguageTag;
+ if($wgLanguageTag) {
+ $t->mLanguage = $language === null ? '' : $language;
+ $t->mLanguageCode=$language !==null && false!==($language=wgLanguageCode($language)) ? $language : 'und';
+ }
+ }
$t->mNamespace = $ns = intval( $ns );
+
$t->mDbkeyform = str_replace( ' ', '_', $title );
$t->mArticleID = ( $ns >= 0 ) ? -1 : 0;
$t->mUrlform = wfUrlencode( $t->mDbkeyform );
@@ -250,9 +267,9 @@
* @param string $title the database key form
* @return Title the new object, or NULL on an error
*/
- public static function makeTitleSafe( $ns, $title ) {
+ public static function makeTitleSafe( $ns, $title, $language=false ) {
$t = new Title();
- $t->mDbkeyform = Title::makeName( $ns, $title );
+ $t->mDbkeyform = Title::makeName( $ns, $title, $language );
if( $t->secureAndSplit() ) {
return $t;
} else {
@@ -313,11 +330,13 @@
function nameOf( $id ) {
$fname = 'Title::nameOf';
$dbr = wfGetDB( DB_SLAVE );
+ global $wgLanguageTag; $lang = $wgLanguageTag ? array('page_language') : array();

- $s = $dbr->selectRow( 'page', array( 'page_namespace','page_title' ), array( 'page_id' => $id ), $fname );
+ $s = $dbr->selectRow( 'page', array_merge(array( 'page_namespace','page_title' ) , $lang), array( 'page_id' => $id ), $fname );
if ( $s === false ) { return NULL; }
-
- $n = Title::makeName( $s->page_namespace, $s->page_title );
+## Revert? FIXME
+ if($wgLanguageTag) $n = Title::makeName( $s->page_namespace, $s->page_title, $s->page_language );
+ else $n = Title::makeName( $s->page_namespace, $s->page_title );
return $n;
}

@@ -365,11 +384,15 @@
* @param string $title the DB key form the title
* @return string the prefixed form of the title
*/
- public static function makeName( $ns, $title ) {
- global $wgContLang;
+ // Revert FIXME
+ public static function makeName( $ns, $title, $language=false ) {
+ global $wgContLang,$wgLanguageTag;
+ $n = $wgContLang->getNsText( $ns );
+ $title=$n == '' ? $title : "$n:$title";
+ if($wgLanguageTag && $language!==false) $language = !$language ? 'und' : wgLanguageCode($language);
+ if($language) $title="$language:$title";

- $n = $wgContLang->getNsText( $ns );
- return $n == '' ? $title : "$n:$title";
+ return $title;
}

/**
@@ -538,6 +561,18 @@
*/
public function getNamespace() { return $this->mNamespace; }
/**
+ * Get the language index
+ * @return int
+ * @access public
+ */
+ function getLanguage() { return $this->mLanguage; }
+ /**
+ * Get the language code (prefix)
+ * @return string
+ * @access public
+ */
+ function getLanguageCode() { return $this->mLanguageCode; }
+ /**
* Get the namespace text
* @return string
*/
@@ -741,7 +776,14 @@
// Ugly quick hack to avoid duplicate prefixes (bug 4571 etc)
// Correct fix would be to move the prepending elsewhere.
if ($wgRequest->getVal('action') != 'render') {
- $url = $wgServer . $url;
+ global $wgLanguageTag,$wgLanguageDomain;
+ if($wgLanguageTag && $wgLanguageDomain) {
+ $lang = strpos($wgServer,'.');
+ $url = str_replace($wgContLang->getCode3(),$this->getLanguageCode(),substr($wgServer,0,$lang)).substr($wgServer,$lang).$url;
+ }
+ else {
+ $url = $wgServer . $url;
+ }
}
} else {
$baseUrl = $this->getInterwikiLink( $this->mInterwiki );
@@ -793,6 +835,7 @@
}
} else {
$dbkey = wfUrlencode( $this->getPrefixedDBkey() );
+
if ( $query == '' ) {
if($variant!=false && $wgContLang->hasVariants()){
if($wgVariantArticlePath==false) {
@@ -836,6 +879,7 @@
}
}
wfRunHooks( 'GetLocalURL', array( &$this, &$url, $query ) );
+
return $url;
}

@@ -1435,6 +1479,7 @@
*/
public function getCascadeProtectionSources( $get_pages = true ) {
global $wgEnableCascadingProtection, $wgRestrictionTypes;
+ global $wgLanguageTag;

# Define our dimension of restrictions types
$pagerestrictions = array();
@@ -1467,10 +1512,12 @@
'tl_title' => $this->getDBkey(),
'tl_from=pr_page',
'pr_cascade' => 1 );
+ if($wgLanguageTag) $where_clauses['tl_language'] = $this->getLanguage();
}

if ( $get_pages ) {
$cols = array('pr_page', 'page_namespace', 'page_title', 'pr_expiry', 'pr_type', 'pr_level' );
+ if($wgLanguageTag) $cols[] = 'page_language';;
$where_clauses[] = 'page_id=pr_page';
$tables[] = 'page';
} else {
@@ -1490,7 +1537,7 @@
$page_id = $row->pr_page;
$page_ns = $row->page_namespace;
$page_title = $row->page_title;
- $sources[$page_id] = Title::makeTitle($page_ns, $page_title);
+ $sources[$page_id] = Title::makeTitle($page_ns, $page_title,$wgLanguageTag?$row->page_language:false);
# Add groups needed for each restriction type if its not already there
# Make sure this restriction type still exists
if ( isset($pagerestrictions[$row->pr_type]) && !in_array($row->pr_level, $pagerestrictions[$row->pr_type]) ) {
@@ -1645,8 +1692,9 @@
$n = 0;
} else {
$dbr = wfGetDB( DB_SLAVE );
- $n = $dbr->selectField( 'archive', 'COUNT(*)', array( 'ar_namespace' => $this->getNamespace(),
- 'ar_title' => $this->getDBkey() ), $fname );
+ $conds = array( 'ar_namespace' => $this->getNamespace(), 'ar_title' => $this->getDBkey() );
+ if($GLOBALS['wgLanguageTag']) $conds['ar_language'] = $this->getLanguage();
+ $n = $dbr->selectField( 'archive', 'COUNT(*)', $conds, $fname );
if( $this->getNamespace() == NS_IMAGE ) {
$n += $dbr->selectField( 'filearchive', 'COUNT(*)',
array( 'fa_name' => $this->getDBkey() ), $fname );
@@ -1673,6 +1721,7 @@
$this->mArticleID = $linkCache->addLinkObj( $this );
}
}
+
return $this->mArticleID;
}

@@ -1718,14 +1767,25 @@
return;
}

+ $conds=array( 'page_namespace' => $this->getNamespace() ,
+ 'page_title' => $this->getDBkey() );
+
+ global $wgLanguageTag;
+ if($wgLanguageTag) {
+ if(strlen($this->getLanguage())) {
+ $conds['page_language']=$this->getLanguage();
+ }
+ else {
+ $conds[]='page_language is null';
+ }
+ }
+
$dbw = wfGetDB( DB_MASTER );
+
$success = $dbw->update( 'page',
array( /* SET */
'page_touched' => $dbw->timestamp()
- ), array( /* WHERE */
- 'page_namespace' => $this->getNamespace() ,
- 'page_title' => $this->getDBkey()
- ), 'Title::invalidateCache'
+ ), $conds, 'Title::invalidateCache'
);

if ($wgUseFileCache) {
@@ -1745,7 +1805,20 @@
* @private
*/
/* private */ function prefix( $name ) {
+ global $wgContLang,$wgLanguageDomain,$wgLanguageTag;
+
$p = '';
+ if ( $wgLanguageTag && '' != $this->getLanguageCode() && !$wgLanguageDomain) {
+ $p = $this->getLanguageCode() . ':';
+ }
+ else if($wgLanguageTag && $wgContLang->getCode3() && !$wgLanguageDomain) {
+ if( 0!= $this->mNamespace ) {
+ $p = $wgContLang->getCode3() . ':';
+ }
+ }
+ if($p=='und:') {
+ $p='';
+ }
if ( '' != $this->mInterwiki ) {
$p = $this->mInterwiki . ':';
}
@@ -1766,7 +1839,8 @@
* @return bool true on success
*/
private function secureAndSplit() {
- global $wgContLang, $wgLocalInterwiki, $wgCapitalLinks;
+ global $wgLocalInterwiki, $wgCapitalLinks;
+ global $wgLanguageTag, $wgLanguageNames, $wgLanguageDomain;

# Initialisation
static $rxTc = false;
@@ -1780,12 +1854,27 @@

$dbkey = $this->mDbkeyform;

+ # wgServerName
+ if($wgLanguageDomain) {
+ global $wgServerName;
+ $lang=strpos($wgServerName,'.');
+ // if(wgLanguageMulti) $lang='und'; vs lang = 'mul';
+ if(false!==$lang) $lang=substr($wgServerName,0,$lang);
+ else $lang='mul'; // wgLanguageMulti $lang='und'; vs lang = 'mul';
+ if(false===wgLanguageCode($lang)) $lang='mul';
+ $this->mLanguageCode=$lang;
+ $this->mLanguage=wgLanguageId($lang);
+ # $firstPass = false;
+ }
+
+
# Strip Unicode bidi override characters.
# Sometimes they slip into cut-n-pasted page titles, where the
# override chars get included in list displays.
$dbkey = str_replace( "\xE2\x80\x8E", '', $dbkey ); // 200E LEFT-TO-RIGHT MARK
$dbkey = str_replace( "\xE2\x80\x8F", '', $dbkey ); // 200F RIGHT-TO-LEFT MARK

+
# Clean up whitespace
#
$dbkey = preg_replace( '/[ _]+/', '_', $dbkey );
@@ -1809,7 +1898,19 @@
$dbkey = substr( $dbkey, 1 ); # remove the colon but continue processing
$dbkey = trim( $dbkey, '_' ); # remove any subsequent whitespace
}
+ global $wgContLanguageCode,$wgLanguageWikimedia;

+ if(!$wgLanguageTag) $wgContLang=&$GLOBALS['wgContLang'];
+ else {
+ $wgContLang=&$GLOBALS['wgContLang'];
+ $wgContLangs=&$GLOBALS['wgContLangs'];
+ if(!$wgContLangs) $wgContLangs=array();
+
+ $wgContLangs[$GLOBALS['wgContLang']->getCode3()]=&$GLOBALS['wgContLang'];
+# $wgContLangs[$GLOBALS['wgLang']->getCode3()]=&$GLOBALS['wgLang'];
+
+ }
+
# Namespace or interwiki prefix
$firstPass = true;
do {
@@ -1820,6 +1921,28 @@
# Ordinary namespace
$dbkey = $m[2];
$this->mNamespace = $ns;
+ } elseif( $firstPass && $wgLanguageTag && // (!$this->mLanguageCode) &&
+ // strlen($p)==3 || strlen($p)>3&&$p{3}='-'
+ false !== $this->mLanguage = wgLanguageId($p)) {
+
+ # Language namespace
+ $dbkey = $m[2]; $this->mLanguageCode = wgLanguageCode($this->mLanguage);
+ if(array_key_exists($p,$wgLanguageWikimedia)) {
+ $p = $wgLanguageWikimedia[$p];
+ }
+ if(!$wgLanguageDomain); // FIXME Redirect to Subdomain or refine query
+ if($p != $wgContLanguageCode && $p!=$wgContLang->getCode3()) {
+ if(!$p) $p=$wgContLanguageCode;
+
+ if(!array_key_exists($p,$wgContLangs)) {
+ $wgContLangs[$p]=Language::factory($p);
+ $code = $wgContLangs[$p]->getCode3();
+ if($code!=$p) $wgContLangs[$code]=&$wgContLangs[$p];
+ }
+ $wgContLang=&$wgContLangs[$p];
+
+ }
+ $firstPass=false; continue;
} elseif( $this->getInterwikiLink( $p ) ) {
if( !$firstPass ) {
# Can't make a local interwiki link to an interwiki link.
@@ -1974,7 +2097,7 @@
* @return Title the object for the talk page
*/
public function getTalkPage() {
- return Title::makeTitle( Namespace::getTalk( $this->getNamespace() ), $this->getDBkey() );
+ return Title::makeTitle( Namespace::getTalk( $this->getNamespace() ), $this->getDBkey(), $this->mLanguage );
}

/**
@@ -1984,7 +2107,7 @@
* @return Title the object for the subject page
*/
public function getSubjectPage() {
- return Title::makeTitle( Namespace::getSubject( $this->getNamespace() ), $this->getDBkey() );
+ return Title::makeTitle( Namespace::getSubject( $this->getNamespace() ), $this->getDBkey(), $this->mLanguage );
}

/**
@@ -2006,8 +2129,10 @@
$db = wfGetDB( DB_SLAVE );
}

- $res = $db->select( array( 'page', $table ),
- array( 'page_namespace', 'page_title', 'page_id' ),
+ global $wgLanguageTag;
+ $fields=array( 'page_namespace', 'page_title', 'page_id' );
+ if($wgLanguageTag) $fields[]='page_language';
+ $res = $db->select( array( 'page', $table ), $fields,
array(
"{$prefix}_from=page_id",
"{$prefix}_namespace" => $this->getNamespace(),
@@ -2018,7 +2143,8 @@
$retVal = array();
if ( $db->numRows( $res ) ) {
while ( $row = $db->fetchObject( $res ) ) {
- if ( $titleObj = Title::makeTitle( $row->page_namespace, $row->page_title ) ) {
+ $titleObj = Title::makeTitle( $row->page_namespace, $row->page_title, $wgLanguageTag ? $row->page_language : false );
+ if ( $titleObj ) {
$linkCache->addGoodLinkObj( $row->page_id, $titleObj );
$retVal[] = $titleObj;
}
@@ -2061,7 +2187,13 @@
$db = wfGetDB( DB_SLAVE );
}

+ global $wgLanguageTag;
+ if($wgLanguageTag) $sql=
$res = $db->safeQuery(
+ $wgLanguageTag?"SELECT pl_namespace, pl_title, pl_language FROM ! LEFT JOIN !
+ ON pl_namespace=page_namespace AND pl_title=page_title and
+ pl_language=page_language WHERE
+ pl_from=? AND page_namespace IS NULL !":
"SELECT pl_namespace, pl_title
FROM !
LEFT JOIN !
@@ -2078,7 +2210,9 @@
$retVal = array();
if ( $db->numRows( $res ) ) {
while ( $row = $db->fetchObject( $res ) ) {
- $retVal[] = Title::makeTitle( $row->pl_namespace, $row->pl_title );
+
+ $retVal[] = $wgLanguageTag ? Title::makeTitle( $row->pl_namespace, $row->pl_title, $row->pl_language ) :
+ Title::makeTitle( $row->pl_namespace, $row->pl_title );
}
}
$db->freeResult( $res );
@@ -2217,7 +2351,21 @@
$oldtitle = $this->getDBkey();
$newtitle = $nt->getDBkey();

+ $sametitle = true;
if( $oldnamespace != $newnamespace || $oldtitle != $newtitle ) {
+ $sametitle = false;
+ }
+
+ global $wgLanguageTag;
+ if($wgLanguageTag && $sametitle) {
+ $oldlang = $this->getLanguage();
+ $newlang = $nt->getLanguage();
+ if($oldlang !== $newlang) {
+ $sametitle=false;
+ }
+ }
+
+ if( !$sametitle ) {
WatchedItem::duplicateEntries( $this, $nt );
}

@@ -2284,16 +2432,18 @@
$nullRevId = $nullRevision->insertOn( $dbw );

# Change the name of the target page:
- $dbw->update( 'page',
- /* SET */ array(
- 'page_touched' => $dbw->timestamp($now),
- 'page_namespace' => $nt->getNamespace(),
- 'page_title' => $nt->getDBkey(),
- 'page_latest' => $nullRevId,
- ),
- /* WHERE */ array( 'page_id' => $oldid ),
- $fname
+ $cols = array(
+ 'page_touched' => $dbw->timestamp($now),
+ 'page_namespace' => $nt->getNamespace(),
+ 'page_title' => $nt->getDBkey(),
+ 'page_latest' => $nullRevId,
);
+ global $wgLanguageTag;
+ global $wgLanguageTag; if($wgLanguageTag) {
+ $cols['page_language'] = $nt->getLanguage();
+ }
+
+ $dbw->update( 'page', $cols, array( 'page_id' => $oldid ), $fname );
$linkCache->clearLink( $nt->getPrefixedDBkey() );

# Recreate the redirect, this time in the other direction.
@@ -2316,12 +2466,15 @@
# Now, we record the link from the redirect to the new title.
# It should have no other outgoing links...
$dbw->delete( 'pagelinks', array( 'pl_from' => $newid ), $fname );
- $dbw->insert( 'pagelinks',
- array(
+ $cols = array(
'pl_from' => $newid,
'pl_namespace' => $nt->getNamespace(),
- 'pl_title' => $nt->getDbKey() ),
- $fname );
+ 'pl_title' => $nt->getDbKey()
+ );
+ global $wgLanguageTag; if($wgLanguageTag) {
+ $cols['pl_language'] = $nt->getLanguage();
+ }
+ $dbw->insert( 'pagelinks', $cols, $fname );

# Purge squid
if ( $wgUseSquid ) {
@@ -2354,16 +2507,16 @@
$nullRevId = $nullRevision->insertOn( $dbw );

# Rename cur entry
- $dbw->update( 'page',
- /* SET */ array(
+ $cols = array (
'page_touched' => $now,
'page_namespace' => $nt->getNamespace(),
- 'page_title' => $nt->getDBkey(),
- 'page_latest' => $nullRevId,
- ),
- /* WHERE */ array( 'page_id' => $oldid ),
- $fname
+ 'page_title' => $nt->getDBkey(),
+ 'page_latest' => $nullRevId,
);
+ global $wgLanguageTag; if($wgLanguageTag) {
+ $cols['page_language'] = $nt->getLanguage();
+ }
+ $dbw->update( 'page', $cols, array( 'page_id' => $oldid ), $fname );

$linkCache->clearLink( $nt->getPrefixedDBkey() );

@@ -2388,13 +2541,17 @@
Article::onArticleCreate( $nt );

# Record the just-created redirect's linking to the page
- $dbw->insert( 'pagelinks',
- array(
+ $cols = array (
'pl_from' => $newid,
'pl_namespace' => $nt->getNamespace(),
- 'pl_title' => $nt->getDBkey() ),
- $fname );
+ 'pl_title' => $nt->getDBkey()
+ );
+ global $wgLanguageTag; if($wgLanguageTag) {
+ $cols['pl_language'] = $nt->getLanguage();
+ }

+ $dbw->insert( 'pagelinks', $cols, $fname );
+
# Purge old title from squid
# The new title, and links to the new title, are purged in Article::onArticleCreate()
$this->purgeSquid();
@@ -2443,12 +2600,22 @@
}

# Does the article have a history?
+ $conds = array ( 'page_namespace' => $nt->getNamespace(),
+ 'page_title' => $nt->getDBkey(),
+ 'page_id=rev_page AND page_latest != rev_id' );
+
+ global $wgLanguageTag; if($wgLanguageTag) {
+ if(strlen($nt->getLanguage())) {
+ $conds['page_language']=$nt->getLanguage();
+ }
+ else {
+ $conds[]='page_language IS NULL';
+ }
+ }
+
$row = $dbw->selectRow( array( 'page', 'revision'),
array( 'rev_id' ),
- array( 'page_namespace' => $nt->getNamespace(),
- 'page_title' => $nt->getDBkey(),
- 'page_id=rev_page AND page_latest != rev_id'
- ), $fname, 'FOR UPDATE'
+ $conds, $fname, 'FOR UPDATE'
);

# Return true if there was no history
@@ -2465,6 +2632,7 @@
&& Namespace::isWatchable( $this->getNamespace() );
}

+
/**
* Get categories to which this Title belongs and return an array of
* categories' names.
@@ -2532,7 +2700,12 @@
* @return array
*/
public function pageCond() {
- return array( 'page_namespace' => $this->mNamespace, 'page_title' => $this->mDbkeyform );
+ $cond = array( 'page_namespace' => $this->mNamespace, 'page_title' => $this->mDbkeyform );
+ global $wgLanguageTag; if($wgLanguageTag) {
+ if(!strlen($this->mLanguage)) $cond[] = 'page_language IS NULL';
+ else $cond['page_language'] = $this->mLanguage();
+ }
+ return $cond;
}

/**
@@ -2584,9 +2757,11 @@
*/
public function equals( $title ) {
// Note: === is necessary for proper matching of number-like titles.
+ global $wgLanguageTag;
return $this->getInterwiki() === $title->getInterwiki()
&& $this->getNamespace() == $title->getNamespace()
- && $this->getDbkey() === $title->getDbkey();
+ && $this->getDbkey() === $title->getDbkey()
+ && ( !$wgLanguageTag ? true : $this->getLanguage() === $title->getLanguage() );
}

/**
@@ -2638,12 +2813,23 @@
*/
public function getTouched() {
$dbr = wfGetDB( DB_SLAVE );
- $touched = $dbr->selectField( 'page', 'page_touched',
- array(
+
+ $conds = array(
'page_namespace' => $this->getNamespace(),
'page_title' => $this->getDBkey()
- ), __METHOD__
);
+
+ global $wgLanguageTag; if($wgLanguageTag) {
+ if(strlen($this->getLanguage())) {
+ $conds['page_language'] = $this->getLanguage();
+ }
+ else {
+ $conds[] = 'page_language IS NULL';
+ }
+ }
+
+ $touched = $dbr->selectField( 'page', 'page_touched', $conds, __METHOD__ );
+
return $touched;
}


Modified: branches/mlmw/includes/User.php
===================================================================
--- branches/mlmw/includes/User.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/User.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -2146,8 +2146,13 @@
*/
function getPageRenderingHash() {
global $wgContLang, $wgUseDynamicDates, $wgLang;
- if( $this->mHash ){
- return $this->mHash;
+ $confstr=$this->mHash;
+ if( $confstr ){
+ global $wgLanguageTag,$wgTitle;
+ if($wgTitle && $wgLanguageTag) {
+ $confstr.='!'.$wgTitle->getLanguageCode();
+ }
+ return $confstr;
}

// stubthreshold is only included below for completeness,
@@ -2164,7 +2169,6 @@
// add in language specific options, if any
$extra = $wgContLang->getExtraHashOptions();
$confstr .= $extra;
-
// Give a chance for extensions to modify the hash, if they have
// extra options or other effects on the parser cache.
wfRunHooks( 'PageRenderingHash', array( &$confstr ) );
@@ -2172,6 +2176,10 @@
// Make it a valid memcached key fragment
$confstr = str_replace( ' ', '_', $confstr );
$this->mHash = $confstr;
+ global $wgLanguageTag,$wgTitle;
+ if($wgTitle && $wgLanguageTag) {
+ $confstr.='!'.$wgTitle->getLanguageCode();
+ }
return $confstr;
}


Modified: branches/mlmw/includes/WatchedItem.php
===================================================================
--- branches/mlmw/includes/WatchedItem.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/WatchedItem.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -26,6 +26,9 @@
$wl->ns = $title->getNamespace();

$wl->ti = $title->getDBkey();
+
+ $wl->lang = $title->getLanguage();
+
return $wl;
}

@@ -51,26 +54,30 @@
$fname = 'WatchedItem::addWatch';
wfProfileIn( $fname );

+ $fields = array (
+ 'wl_user' => $this->id,
+ 'wl_title' => $this->ti,
+ 'wl_notificationtimestamp' => NULL
+ );
+
+ global $wgLanguageTag; if($wgLanguageTag) {
+ $fields['wl_language']=$this->mTitle->mLanguage;
+ }
+
// Use INSERT IGNORE to avoid overwriting the notification timestamp
// if there's already an entry for this page
$dbw = wfGetDB( DB_MASTER );
+ $fields['wl_namespace'] = $this->ns & ~1;
$dbw->insert( 'watchlist',
- array(
- 'wl_user' => $this->id,
- 'wl_namespace' => ($this->ns & ~1),
- 'wl_title' => $this->ti,
- 'wl_notificationtimestamp' => NULL
- ), $fname, 'IGNORE' );
+ $fields,
+ $fname, 'IGNORE' );

// Every single watched page needs now to be listed in watchlist;
// namespace:page and namespace_talk:page need separate entries:
+ $fields['wl_namespace'] = $this->ns | 1;
$dbw->insert( 'watchlist',
- array(
- 'wl_user' => $this->id,
- 'wl_namespace' => ($this->ns | 1 ),
- 'wl_title' => $this->ti,
- 'wl_notificationtimestamp' => NULL
- ), $fname, 'IGNORE' );
+ $fields,
+ $fname, 'IGNORE' );

wfProfileOut( $fname );
return true;

Modified: branches/mlmw/includes/Wiki.php
===================================================================
--- branches/mlmw/includes/Wiki.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Wiki.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -87,7 +87,6 @@

$ret = NULL ;

-
if ( '' == $title && 'delete' != $action ) {
$ret = Title::newMainPage();
} elseif ( $curid = $request->getInt( 'curid' ) ) {
@@ -145,6 +144,26 @@
global $wgRequest;
wfProfileIn( 'MediaWiki::initializeSpecialCases' );

+
+ /* FIXME wgFallbackLanguage || en */
+ if($title) $code=$title->getLanguageCode();
+ else $code='en'; global $wgLanguageWikimedia,$wgLanguageTag;
+ $wgLanguageCode=$GLOBALS['wgLanguageCode'];
+ if($wgLanguageTag && $code!=$wgLanguageCode) {
+ if(array_key_exists($code,$wgLanguageWikimedia)) {
+ $code = $wgLanguageWikimedia[$code];
+ }
+ if($code=='und') $code='en';
+ $wgLanguageCode=$code;
+ $wgContLang=Language::factory($code);
+ if($title->getNamespace()==NS_SPECIAL) {
+ $GLOBALS['wgContLang']=$wgContLang;
+ }
+ } else {
+ global $wgContLang;
+ }
+
+
$action = $this->getVal('Action');
if( !$title or $title->getDBkey() == '' ) {
$title = SpecialPage::getTitleFor( 'Badtitle' );

Modified: branches/mlmw/includes/Xml.php
===================================================================
--- branches/mlmw/includes/Xml.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/Xml.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -144,6 +144,40 @@
. self::closeElement( 'select' );
}

+ public static function &languagefilterSelector($selected = '', $alllanguagefilters = null, $includehidden=false) {
+ global $wgContLang;
+ if( $selected !== '' ) {
+ if( is_null( $selected ) ) {
+ // No namespace selected; let exact match work without hitting Main
+ $selected = '';
+ } else {
+ // Let input be numeric strings without breaking the empty match.
+ $selected = intval( $selected );
+ }
+ }
+ $s = "\n<select id='languagefilter' name='languagefilter' class='languagefilterselector'>\n";
+ $arr = $wgContLang->getFormattedLanguagefilters();
+ if( !is_null($alllanguagefilters) ) {
+ $arr = array($alllanguagefilters => wfMsg('languagefiltersall')) + $arr;
+ }
+ foreach ($arr as $index => $name) {
+ if ($index < NS_MAIN) continue;
+
+ $name = $index !== 0 ? $name : wfMsg('blanklanguagefilter');
+
+ if ($index === $selected) {
+ $s .= "\t" . self::element("option",
+ array("value" => $index, "selected" => "selected"),
+ $name) . "\n";
+ } else {
+ $s .= "\t" . self::element("option", array("value" => $index), $name) . "\n";
+ }
+ }
+ $s .= "</select>\n";
+ return $s;
+ }
+
+
/**
*
* @param $language The language code of the selected language

Modified: branches/mlmw/includes/XmlFunctions.php
===================================================================
--- branches/mlmw/includes/XmlFunctions.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/includes/XmlFunctions.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -15,6 +15,9 @@
function wfCloseElement( $element ) {
return "</$element>";
}
+function HTMLlanguagefilterselector($selected = '', $allnamespaces = null, $includehidden=false) {
+ return Xml::languagefilterSelector( $selected, $allnamespaces, $includehidden );
+}
function HTMLnamespaceselector($selected = '', $allnamespaces = null, $includehidden=false) {
return Xml::namespaceSelector( $selected, $allnamespaces, $includehidden );
}

Modified: branches/mlmw/languages/Language.php
===================================================================
--- branches/mlmw/languages/Language.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/languages/Language.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -12,6 +12,11 @@
global $wgLanguageNames;
require_once( dirname(__FILE__) . '/Names.php' ) ;

+global $wgLanguageTag;
+if($wgLanguageTag) {
+ require_once( dirname(__FILE__) . '/LanguageTags.php' );
+}
+
global $wgInputEncoding, $wgOutputEncoding;

/**
@@ -47,6 +52,7 @@

class Language {
var $mConverter, $mVariants, $mCode, $mLoaded = false;
+ var $mCode3, $mCodeId=false;
var $mMagicExtensions = array(), $mMagicHookDone = false;

static public $mLocalisationKeys = array( 'fallback', 'namespaceNames',
@@ -96,6 +102,7 @@
static function factory( $code ) {
global $IP;
static $recursionLevel = 0;
+ global $wgLanguageCode; $und=0; if($code=='und' || (!$code)) { $und=1; $code=$wgLanguageCode; }

if ( $code == 'en' ) {
$class = 'Language';
@@ -123,6 +130,7 @@
} else {
$lang = new $class;
}
+ if($und) { $lang->mCode='und'; }

return $lang;
}
@@ -165,6 +173,14 @@
return $this->bookstoreList;
}

+ function getFormattedLanguagefilters() {
+ $ns=array(''=>'Languages I speak and new communities','en'=>'English');
+ foreach($ns as $k => $v) {
+ $ns[$k] = strtr($v, '_', ' ');
+ }
+ return $ns;
+ }
+
/**
* @return array
*/
@@ -368,6 +384,11 @@
function getLanguageName( $code ) {
global $wgLanguageNames;
if ( ! array_key_exists( $code, $wgLanguageNames ) ) {
+ global $wgLanguageTag; if($wgLanguageTag) {
+ return ''; global $dbr;
+ $name=$dbr->fetchObject('language',array('iso639_3'=>$name));
+ $wgLanguageNames[$code]=$name?$name:'';
+ }
return '';
}
return $wgLanguageNames[$code];
@@ -1135,7 +1156,8 @@
} else {
# Fall back to English if local list is incomplete
$magicWords =& Language::getMagicWords();
- $rawEntry = $magicWords[$mw->mId];
+ if($magicWords && array_key_exists($mw->mId,$magicWords)) $rawEntry = $magicWords[$mw->mId];
+ else return; // $rawEntry=false;
}
}

@@ -1550,8 +1572,36 @@
function getCode() {
return $this->mCode;
}
+ function getCode3() {
+ global $wgLanguageTag;
+ if(!$this->mCode3) if($wgLanguageTag) {
+ global $wgLanguageWikimedia;
+ if($wgLanguageWikimedia && array_key_exists($this->mCode,$wgLanguageWikimedia))
+ $this->mCode3=wgLanguageCode(wgLanguageId($this->mCode));
+ }
+ return $this->mCode3?$this->mCode3:$this->mCode;
+ }
+ function getCodeId() {
+ return $this->mCodeId;
+ }

+ /**
+ * Set the 639-3 and RFC 3066 codes for this language object
+ * setCode takes an RFC 3066 identifier
+ */
function setCode( $code ) {
+ global $wgLanguageTag,$wgLanguageWikimedia,$wgLanguageIds;
+
+ if($wgLanguageTag) if(function_exists('wgLanguageId')) {
+ if(!$code){
+ if($this->mCode3) $code = $this->mCode3;
+ else if($this->mCode) $code = $this->mCode;
+ }
+ $this->mCodeId = wgLanguageId($code);
+ $this->mCode3 = wgLanguageCode($this->mCodeId);
+ $code = wgLanguageCodeLegacy($code);
+ }
+
$this->mCode = $code;
}

@@ -1582,7 +1632,11 @@
static function loadLocalisation( $code, $disableCache = false ) {
static $recursionGuard = array();
global $wgMemc;
-
+ if(!$code) $code='en';
+/* if(strlen($code)==3) // Could be ISO 639-3
+ { global $wgLanguageWikimedia; $tmp=array_flip($wgLanguageWikimedia);
+ if(array_key_exists($code,$tmp)) $code=$tmp[$code]; }
+*/
if ( !$code ) {
throw new MWException( "Invalid language code requested" );
}
@@ -1780,7 +1834,7 @@
$this->namespaceNames[NS_PROJECT] = $wgMetaNamespace;
if ( $wgMetaNamespaceTalk ) {
$this->namespaceNames[NS_PROJECT_TALK] = $wgMetaNamespaceTalk;
- } else {
+ } else if(array_key_exists(NS_PROJECT_TALK,$this->namespaceNames)) {
$talk = $this->namespaceNames[NS_PROJECT_TALK];
$talk = str_replace( '$1', $wgMetaNamespace, $talk );


Added: branches/mlmw/languages/LanguageTags.php
===================================================================
--- branches/mlmw/languages/LanguageTags.php (rev 0)
+++ branches/mlmw/languages/LanguageTags.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,179 @@
+<?php
+/**
+ * wgLanguageWikimedia: Legacy Language Codes
+ * wgLanguageNames: Native language names
+ * wgLanguageIds: ISO 639-3+ Language Identifiers
+**/
+
+global $wgLanguageIds, $wgLanguageWikimedia, $wgLanguageNames, $wgMainCacheType;
+
+// FIXME: Don't do this.
+$vars=array('wgLanguageNames','wgLanguageIds','wgLanguageWikimedia','wgLanguageProper');
+foreach($vars as $v) $$v=array();
+if($wgMainCacheType!==CACHE_NONE) {
+ $cache = wfGetMessageCacheStorage(); // 80ms for 7k language codes
+ $x=0; foreach($vars as $v) if(!count($$v)) ($$v=$cache->get($v)) === false ? $$v=array() : $x++;
+}
+
+/**
+* Legacy to Language Tag
+**/
+
+function wgLanguageWikimedia($code='en') {
+ global $wgLanguageWikimedia,$wgLanguageNames;
+ if(!array_key_exists($code,$wgLanguageNames)) return $code;
+ if(array_key_exists($code,$wgLanguageWikimedia)) $code = $wgLanguageWikimedia[$code];
+ return $code;
+}
+
+/**
+* Unknown to ISO 639-3 per RFC 4646
+**/
+
+function wgLanguageCodeProper($str) {
+ global $wgLanguageIds, $wgLanguageWikimedia, $wgLanguageNames, $wgMainCacheType, $wgLanguageProper;
+ if(is_numeric($str)) if(array_key_exists($str,$wgLanguageProper)) return $wgLanguageProper[$str];
+ if(is_array($wgLanguageProper)) if(in_array($str,$wgLanguageProper,1)) return $str;
+ if($id=array_search($str,$wgLanguageIds,1)) if($wgLanguageProper && array_key_exists($id,$wgLanguageProper)) return $wgLanguageProper[$id];
+ if(in_array($str,$wgLanguageWikimedia,1)) return $wgLanguageProper[wgLanguageId($str)];
+}
+
+/**
+* Legacy to Language Tag
+**/
+function wgLanguageCodeLegacy($str) {
+ global $wgLanguageIds, $wgLanguageWikimedia, $wgLanguageNames, $wgMainCacheType;
+ if($str == 'und' || $str=='mul') return $GLOBALS['wgLanguageCode'];
+ if(strlen($str) < 3) return $str;
+
+ if(in_array($str,$wgLanguageIds,1)) {
+ if(!array_key_exists($str,$wgLanguageWikimedia)) {
+ $tmp=wgLanguageId($str); $tmp=wgLanguageCodeProper($str);
+ if(!$tmp) return $GLOBALS['wgLanguageCode'];
+ return $str;
+ }
+ return $wgLanguageWikimedia[$str];
+ }
+
+ if(!in_array($str,$wgLanguageWikimedia,1)) {
+ $id=wgLanguageId($str);
+ if(!$id && !is_int($id)) return $str;
+ if(!$id) return wgLanguageCode($str);
+ if(!in_array($str,$wgLanguageWikimedia)) return $str;
+ }
+
+ return $str;
+}
+
+/**
+* Unknown to Language Tag
+**/
+function wgLanguageCode3($str) {
+ global $wgLanguageIds, $wgLanguageWikimedia, $wgLanguageNames, $wgMainCacheType;
+ if(!strlen($str) || $str===null || $str==' ') return 'und';
+ if(in_array($str,$wgLanguageIds,1)) return $str;
+ if(!in_array($str,$wgLanguageWikimedia,1)) return wgLanguageCode(wgLanguageId($str));
+}
+
+function wgLanguageTagFromConds($conds) {
+ global $wgLanguageIds, $wgLanguageWikimedia, $wgLanguageProper, $wgMainCacheType;
+
+ $dbr =& wfGetDB( DB_SLAVE );
+
+ $result = $dbr->select('langtags',
+ array('language_id','tag_name','wikimedia_key','rfc4646','preferred_id'),
+ $conds,'wgLanguageTag::fromConds',
+ array('ORDER BY'=>'preferred_id asc'));
+ $found=false;
+ while( $row = $dbr->fetchObject( $result ) ) {
+ if(!$found) $found=true;
+ $wgLanguageIds[$row->language_id]=$row->tag_name;
+ if($row->rfc4646) {
+ $wgLanguageProper[$row->language_id] = $row->rfc4646;
+ }
+ else if($row->wikimedia_key) {
+ $wgLanguageProper[$row->language_id] = $row->wikimedia_key;
+ }
+ if($row->preferred_id) {
+ $wgLanguageProper[$row->language_id] = wgLanguageCode($row->preferred_id);
+ }
+ if($row->wikimedia_key) {
+ $wgLanguageWikimedia[$row->wikimedia_key] = $row->tag_name; //WRONG WRONG WRONG
+ $wgLanguageWikimedia[$row->tag_name] = $row->wikimedia_key; //RIGHT RIGHT RIGHT
+ }
+ }
+ $dbr->freeResult( $result );
+ return $found;
+ $vars=array('wgLanguageNames','wgLanguageIds','wgLanguageWikimedia','wgLanguageProper');
+ $cache = wfGetMessageCacheStorage();
+ if($wgMainCacheType!==CACHE_NONE) foreach($vars as $v) $cache->set($v,$$v);
+}
+
+/**
+* Integer to Language Tag
+**/
+function wgLanguageCode($lid=null,$legacy=false) {
+ global $wgLanguageIds, $wgLanguageWikimedia, $wgLanguageNames, $wgMainCacheType;
+ $vars=array('wgLanguageNames','wgLanguageIds','wgLanguageWikimedia');
+ $cache = wfGetMessageCacheStorage();
+
+ if($lid === null) return 'und';
+ if(!strlen(trim($lid))) return 'und';
+ if($lid === 0 ) return 'mul';
+
+ if( array_key_exists($lid,$wgLanguageIds) ) {
+ return $wgLanguageIds[$lid];
+ }
+
+ $wgLanguageIds[$lid]=null;
+ wgLanguageTagFromConds(array('language_id'=>$lid,'is_enabled'=>'1'));
+ return $wgLanguageIds[$lid];
+}
+
+/**
+* ISO 639-3+ to Integer
+**/
+function wgLanguageId($code='en',$strict=false) {
+ global $wgLanguageIds, $wgLanguageWikimedia, $wgLanguageProper, $wgMainCacheType;
+## First run of update.php
+# $wgLanguageIds[1]='eng';
+
+ if(!strlen(trim($code)) || $code===null) return null;
+ if($code == 'mul') return 0;
+
+ if($strict) {
+ if(strlen($code)>42 || strlen($code)<2) return false;
+ if(strpos($code,'-')>5) return false;
+ if(strpos($code,'-')===false) {
+ if(strlen($code)>3) return false;
+ }
+ else if(strpos($code,'-',2)) {
+ $code=substr($code,0,strpos($code,'-',2));
+ }
+ if(strpos($code,'-')=='2' && strlen($code)==5) {
+ $code=substr($code,3);
+ }
+ }
+
+ if(false !== $lid=array_search($code,$wgLanguageIds,1)) return $lid;
+ if(!$strict) {
+ if(strlen($code) != 3 && $lid=array_key_exists($code,$wgLanguageWikimedia)) $code = $wgLanguageWikimedia[$code];
+ if(false !== $lid=array_search($code,$wgLanguageIds,1)) return $lid;
+ }
+
+ wgLanguageTagFromConds(array('tag_name'=>$code,'is_enabled'=>'1'));
+
+ $lid=array_search($code,$wgLanguageIds,1);
+ if(false === $lid) {
+ $lid = null;
+# $wgLanguageWikimedia[$code]=null;
+ }
+ return $lid;
+}
+
+if(!$wgLanguageWikimedia) {
+### This fails when language tables are not yet defined
+// wgLanguageId('eng');
+}
+
+?>

Modified: branches/mlmw/languages/messages/MessagesEn.php
===================================================================
--- branches/mlmw/languages/messages/MessagesEn.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/languages/messages/MessagesEn.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -97,6 +97,8 @@
NS_HELP_TALK => 'Help_talk',
NS_CATEGORY => 'Category',
NS_CATEGORY_TALK => 'Category_talk',
+ NS_SET => 'Set',
+ NS_SET_TALK => 'Set_talk',
);

/**
@@ -327,6 +329,8 @@
'directionmark' => array( 1, 'DIRECTIONMARK', 'DIRMARK' ),
'language' => array( 0, '#LANGUAGE:' ),
'contentlanguage' => array( 1, 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+ 'languagespace' => array( 1, 'LANGUAGESPACE', 'LANGSPACE' ),
+ 'userlanguage' => array( 1, 'USERLANGUAGE', 'USERLANG'),
'pagesinnamespace' => array( 1, 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
'numberofadmins' => array( 1, 'NUMBEROFADMINS' ),
'formatnum' => array( 0, 'FORMATNUM' ),

Added: branches/mlmw/maintenance/archives/patch-langtags.sql
===================================================================
--- branches/mlmw/maintenance/archives/patch-langtags.sql (rev 0)
+++ branches/mlmw/maintenance/archives/patch-langtags.sql 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,125 @@
+--
+-- patch-langtags.sql
+-- Language tag support
+-- 2007-06-02
+--
+
+CREATE TABLE /*$wgDBprefix*/langtags (
+ language_id integer unsigned,
+ prefix_id integer unsigned,
+ preferred_id integer unsigned,
+
+ tag_name varchar(255),
+ display_name varchar(255),
+
+ native_name varchar(255),
+ english_name varchar(255),
+
+ rfc4646 varchar(42),
+ rfc4646_suppress varchar(4),
+ rfc4646_added date,
+ rfc4646_deprecated date,
+
+ iso639 char(3),
+ iso639_3 char(3),
+ iso639_3_revision date,
+
+ wikimedia_key varchar(15),
+
+ is_rtl smallint,
+ is_collection smallint,
+ is_enabled smallint,
+ is_private smallint,
+ is_searchable smallint,
+ tag_touched char(14) binary default ''
+) /*$wgDBTableOptions*/;
+
+CREATE UNIQUE INDEX langtags_tag_enabled
+ ON /*$wgDBprefix*/langtags (is_enabled,tag_name);
+CREATE UNIQUE INDEX langtags_tag_name
+ ON /*$wgDBprefix*/langtags (tag_name);
+CREATE INDEX langtags_iso639_key
+ ON /*$wgDBprefix*/langtags (iso639);
+CREATE INDEX langtags_rfc4646_key
+ ON /*$wgDBprefix*/langtags (rfc4646);
+
+CREATE TABLE /*$wgDBprefix*/langsets (
+ language_id integer unsigned,
+ group_name varchar(255)
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX language_id
+ ON /*$wgDBprefix*/langsets (language_id,group_name);
+CREATE INDEX group_name
+ ON /*$wgDBprefix*/langsets (group_name);
+
+ALTER TABLE /*$wgDBprefix*/archive
+ ADD COLUMN /*$wgDBprefix*/ar_language integer;
+DROP INDEX name_title_timestamp
+ ON /*$wgDBprefix*/archive;
+CREATE INDEX name_title_timestamp
+ ON /*$wgDBprefix*/archive (ar_language, ar_namespace, ar_title, ar_timestamp)
+
+ALTER TABLE /*$wgDBprefix*/page
+ ADD COLUMN /*$wgDBprefix*/page_language integer unsigned;
+DROP INDEX name_title
+ ON /*$wgDBprefix*/page;
+CREATE UNIQUE INDEX name_title
+ ON /*$wgDBprefix*/page (page_language, page_namespace, page_title);
+
+ALTER TABLE /*$wgDBprefix*/pagelinks
+ ADD COLUMN pl_language integer unsigned;
+DROP INDEX pl_from
+ ON /*$wgDBprefix*/pagelinks;
+DROP INDEX pl_namespace
+ ON /*$wgDBprefix*/pagelinks;
+CREATE UNIQUE INDEX pl_from
+ ON /*$wgDBprefix*/pagelinks (pl_from, pl_namespace, pl_language, pl_title);
+CREATE INDEX pl_namespace
+ ON /*$wgDBprefix*/pagelinks (pl_namespace, pl_language, pl_title, pl_from);
+
+ALTER TABLE /*$wgDBprefix*/recentchanges
+ ADD COLUMN rc_language integer unsigned;
+DROP INDEX rc_namespace_title
+ ON /*$wgDBprefix*/recentchanges;
+CREATE INDEX rc_namespace_title
+ ON /*$wgDBprefix*/recentchanges (rc_namespace, rc_language, rc_title);
+
+ALTER TABLE /*$wgDBprefix*/watchlist
+ ADD COLUMN wl_language integer unsigned;
+DROP INDEX wl_user
+ ON /*$wgDBprefix*/watchlist;
+DROP INDEX namespace_title
+ ON /*$wgDBprefix*/watchlist;
+CREATE UNIQUE INDEX wl_user
+ ON /*$wgDBprefix*/watchlist (wl_user, wl_namespace, wl_language, wl_title);
+CREATE INDEX namespace_title
+ ON /*$wgDBprefix*/watchlist (wl_namespace, wl_language, wl_title);
+
+ALTER TABLE /*$wgDBprefix*/categorylinks
+ ADD COLUMN cl_language integer unsigned;
+DROP INDEX cl_from
+ ON /*$wgDBprefix*/categorylinks;
+DROP INDEX cl_sortkey
+ ON /*$wgDBprefix*/categorylinks;
+DROP INDEX cl_timestamp
+ ON /*$wgDBprefix*/categorylinks;
+CREATE UNIQUE INDEX cl_from
+ ON /*$wgDBprefix*/categorylinks (cl_from, cl_language, cl_to);
+CREATE INDEX cl_sortkey
+ ON /*$wgDBprefix*/categorylinks (cl_language, cl_to, cl_sortkey);
+CREATE INDEX cl_timestamp
+ ON /*$wgDBprefix*/categorylinks (cl_language, cl_to, cl_timestamp);
+
+ALTER TABLE /*$wgDBprefix*/templatelinks
+ ADD COLUMN tl_language integer unsigned;
+DROP INDEX tl_from
+ ON /*$wgDBprefix*/templatelinks;
+DROP INDEX tl_namespace
+ ON /*$wgDBprefix*/templatelinks;
+CREATE UNIQUE INDEX tl_from
+ ON /*$wgDBprefix*/templatelinks (tl_from, tl_namespace, tl_language, tl_title);
+CREATE INDEX tl_from
+ ON /*$wgDBprefix*/templatelinks (tl_namespace, tl_language, tl_title, tl_from);
+
+ALTER TABLE /*$wgDBprefix*/querycache
+ ADD COLUMN qc_language integer unsigned;

Added: branches/mlmw/maintenance/archives/patch-pagesets.sql
===================================================================
--- branches/mlmw/maintenance/archives/patch-pagesets.sql (rev 0)
+++ branches/mlmw/maintenance/archives/patch-pagesets.sql 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,15 @@
+--
+-- patch-pagesets.sql
+--
+-- Support new Set: namespace
+-- Intended for user with the langtags table
+--
+
+CREATE TABLE /*$wgDBprefix*/pagesets (
+ set_id integer unsigned NOT NULL,
+ page_id integer unsigned NOT NULL
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX set_id
+ ON /*$wgDBprefix*/pagesets (set_id,page_id);
+CREATE INDEX page_id
+ ON /*$wgDBprefix*/pagesets (page_id);

Added: branches/mlmw/maintenance/archives/patch-user_langs.sql
===================================================================
--- branches/mlmw/maintenance/archives/patch-user_langs.sql (rev 0)
+++ branches/mlmw/maintenance/archives/patch-user_langs.sql 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,17 @@
+--
+-- User language preferences
+--
+-- This requires the langtags table
+--
+
+CREATE TABLE /*$wgDBprefix*/user_langs (
+ user_id integer unsigned NOT NULL,
+ language_id integer unsigned NOT NULL,
+ attribute varchar(15),
+ attribute_level integer
+) /*$wgDBTableOptions*/;
+CREATE UNIQUE INDEX user_id
+ ON /*$wgDBprefix*/user_langs (user_id,language_id);
+CREATE INDEX language_id
+ ON /*$wgDBprefix*/user_langs (language_id,attribute,attribute_level);
+

Added: branches/mlmw/maintenance/language/importLanguageTags.php
===================================================================
--- branches/mlmw/maintenance/language/importLanguageTags.php (rev 0)
+++ branches/mlmw/maintenance/language/importLanguageTags.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,225 @@
+<?
+
+function importLanguageTags($keepTables=false) {
+### Language codes per popular standards
+global $wgDBtype,$wgDBPrefix,$wgDatabase,$wgDBTableOptions;
+$wgDBTableOptions='';
+
+$db=& wfGetDB( DB_MASTER );
+$here=dirname( __FILE__ ).'/tags/';
+
+function doQueries($wgDatabase,$sql) {
+ global $wgDBPrefix,$wgDBTableOptions;
+ $sql=str_replace(
+ array("/*$wgDBPrefix*/","/*$wgDBTableOptions*/"),
+ array($wgDBPrefix,$wgDBTableOptions),$sql);
+ $sql=explode(';',$sql);
+ $wgDatabase->doQuery("begin");
+ foreach($sql AS $v) if(strlen($v=trim($v))) $wgDatabase->doQuery($v);
+ return $wgDatabase->doQuery("commit");
+}
+
+$sql=<<<E
+CREATE TABLE /*$wgDBPrefix*/langtags_iso639 (
+ tag varchar(42),
+ iso639 char(3),
+ iso639_m varchar(3),
+ iso639_2b varchar(3),
+ iso639_2t varchar(3),
+ iso639_3 char(3),
+ lang_scope char(1),
+ lang_type char(1),
+ english_name varchar(255),
+ iso639_3_revision date
+) /*$wgDBTableOptions*/;
+CREATE INDEX tag_idx ON /*$wgDBPrefix*/langtags_iso639(tag);
+CREATE INDEX iso639_3_idx ON /*$wgDBPrefix*/langtags_iso639(iso639_3);
+
+CREATE TABLE /*$wgDBPrefix*/langtags_rfc4646 (
+ tag varchar(42),
+ prefix varchar(42),
+ preferred_value varchar(42),
+ suppress_script varchar(4),
+ added date, deprecated date,
+ description varchar(255)
+) /*$wgDBTableOptions*/;
+
+CREATE TABLE /*$wgDBPrefix*/langtags_wikimedia (
+ wikimedia_key varchar(15),
+ native_name varchar(255)
+) /*$wgDBTableOptions*/;
+E;
+
+if($wgDBtype=='mysql') $sql.=<<<E
+ALTER TABLE /*$wgDBPrefix*/langtags
+ CHANGE language_id language_id int NOT NULL AUTO_INCREMENT;
+E;
+
+else if($wgDBtype=='postgres') $sql.=<<<E
+CREATE SEQUENCE /*$wgDBPrefix*/langtags_language_id_seq;
+ALTER TABLE /*$wgDBPrefix*/langtags
+ ALTER language_id SET DEFAULT nextval('/*$wgDBPrefix*/langtags_language_id_seq');
+E;
+
+doQueries($db,$sql);
+
+### Wikimedia Language Codes
+global $wgLanguageNames;
+if(!$wgLanguageNames) include(dirname(__FILE__)."/../../languages/Names.php");
+foreach($wgLanguageNames AS $k=>$v) {
+ $v=array('wikimedia_key'=>$k,'native_name'=>$v);
+ $db->insert('langtags_wikimedia',$v);
+}
+
+### ISO 639-3 Language Codes
+## Source: http://www.sil.org/iso639-3/iso-639-3_20070516.tab
+function parseIso639($a) {
+ $a=explode("\t",rtrim($a));
+ $b=array('iso639_3','iso639_2b','iso639_2t','iso639','lang_scope','lang_type','english_name');
+ if(count($a) != count($b)) return false;
+ $c=array(); foreach($b AS $k=>$v) if(strlen($a[$k])) $c[$v]=$a[$k];
+ return $c;
+}
+
+$iso639_revision='2007-05-16'; $file=$here.'iso-639-3_20070516.tab';
+if(!$a=@fopen($file,'r')) {
+ print "Language standards file missing: $file\n";
+ return false;
+}
+
+fgets($a,1024);
+while(!feof($a)) {
+ $b=parseIso639(fgets($a,1024));
+ if($b) $db->insert('langtags_iso639',$b);
+}
+$db->update('langtags_iso639',array('iso639_3_revision'=>$iso639_revision),array('iso639_3_revision is null'));
+
+### ISO 639-3 Macrolanguage Mappings
+## Source: http://www.sil.org/iso639-3/iso-639-3-macrolanguages_20070323.tab
+$iso639_m_revision='2007-03-23'; $file=$here.'iso-639-3-macrolanguages_20070323.tab';
+if(!$a=@fopen($file,'r')) {
+ print "Language standards file missing: $file\n";
+ return false;
+}
+
+fgets($a,1024);
+while(!feof($a)) {
+ $b=fgets($a,1024);
+ if(false===strpos($b,"\t")) continue;
+ $b=explode("\t",trim($b));
+ $db->update('langtags_iso639',array('iso639_m'=>$b[0]),array('iso639_3'=>$b[1]));
+
+}
+
+### Apply RFC4646 Tagging
+## Note: Does not use language subtag registry
+if($wgDBtype=='mysql') $sql=<<<E
+UPDATE /*$wgDBPrefix*/langtags_iso639 SET
+ iso639 = coalesce(iso639,iso639_3),
+ tag = coalesce(iso639,iso639_3);
+
+UPDATE /*$wgDBPrefix*/langtags_iso639, /*$wgDBPrefix*/langtags_iso639 a SET
+ langtags_iso639.tag = concat(COALESCE(a.tag,langtags_iso639.iso639_m), '-', langtags_iso639.tag)
+ WHERE langtags_iso639.iso639_m is not null
+ AND langtags_iso639.iso639_m = a.iso639_3;
+E;
+
+else if($wgDBtype=='postgres') $sql=<<<E
+UPDATE /*$wgDBPrefix*/langtags_iso639 SET
+ iso639 = coalesce(iso639,iso639_3),
+ tag = coalesce(iso639,iso639_3);
+
+UPDATE /*$wgDBPrefix*/langtags_iso639 SET
+ tag = coalesce( (SELECT tag FROM /*$wgDBPrefix*/langtags_iso639 a WHERE a.iso639_3 = langtags_iso639.iso639_m), iso639_m) || '-' || tag
+ WHERE iso639_m is not null;
+E;
+
+doQueries($db,$sql);
+
+
+### IANA Language Subtag Registry
+## Source: http://www.iana.org/assignments/language-subtag-registry
+function parseRfc4646($a) {
+ $fields = array('type','tag','subtag','added','deprecated','preferred_value','suppress_script','description','prefix');
+ $a=explode("\n",$a);
+ $b=array();
+ $prefix=array();
+ foreach($a AS $v) {
+ if(false===strpos($v,':')) continue;
+ list($k,$v)=explode(': ',rtrim($v),2);
+ if($k=='Prefix') {
+ $prefix[]=$v;
+ continue;
+ }
+ $k=str_replace('-','_',strtolower($k));
+ if(!in_array($k,$fields)) continue;
+ if(!array_key_exists($k,$b)) {
+ $b[$k]=$v;
+ }
+ }
+ if(!array_key_exists('type',$b)) return false;
+ if($b['type'] == 'grandfathered') { $b['type']='language'; $b['subtag']=$b['tag']; unset($b['tag']); }
+ if($b['type'] == 'variant') $b['type']='language';
+ if($b['type'] != 'language') return false;
+ $b['tag']=$b['subtag'];
+ unset($b['subtag']);
+ unset($b['type']);
+ return array($prefix,$b);
+}
+
+$file=$here.'language-subtag-registry'; $rfc4646_filedate='2007-05-04';
+if(!$a=@fopen($file,'r')) {
+ print "Language standards file missing: $file\n";
+ return false;
+}
+
+$rfc4646_filedate=substr(fgets($a,1024),11,10);
+fgets($a,1024); $b='';
+while(!feof($a)) {
+ $line=fgets($a,1024);
+ if($line=="%%\n") {
+ $insert=parseRfc4646($b); $ccc=$b; $b='';
+ if($insert===false) continue;
+ $prefixes = array_shift($insert);
+ $insert = array_pop($insert);
+ if(!count($prefixes)) {
+ $db->insert('langtags_rfc4646',$insert);
+ }
+ $tag=$insert['tag'];
+ foreach($prefixes AS $prefix) {
+ $insert['prefix']=$prefix;
+ $insert['tag']=$insert['prefix'].'-'.$tag;
+ $db->insert('langtags_rfc4646',$insert);
+ }
+ } else $b.=$line;
+}
+
+dbsource( 'language/importLanguageTags.sql', $wgDatabase );
+
+$db->update('langtags',array('tag_touched'=>$db->timestamp()),array('tag_touched'=>$wgDBtype=='mysql'?'':null));
+
+$sql='';
+// $keepTables = 1;
+if(!$keepTables) $sql=<<<E
+DROP TABLE /*$wgDBPrefix*/langtags_iso639;
+DROP TABLE /*$wgDBPrefix*/langtags_rfc4646;
+DROP TABLE /*$wgDBPrefix*/langtags_wikimedia;
+E;
+
+if($wgDBtype=='mysql') $sql.=<<<E
+ALTER TABLE /*$wgDBPrefix*/langtags DROP primary key;
+ALTER TABLE /*$wgDBPrefix*/langtags CHANGE language_id language_id int;
+CREATE UNIQUE INDEX language_id ON /*$wgDBPrefix*/langtags(language_id);
+E;
+
+$sql.=<<<E
+UPDATE /*$wgDBPrefix*/langtags SET language_id = null
+ WHERE iso639 = 'und';
+E;
+
+doQueries($db,$sql);
+
+return true;
+}
+
+?>

Added: branches/mlmw/maintenance/language/importLanguageTags.sql
===================================================================
--- branches/mlmw/maintenance/language/importLanguageTags.sql (rev 0)
+++ branches/mlmw/maintenance/language/importLanguageTags.sql 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,123 @@
+--- Import Language Tags
+
+--- Merge ISO639, RFC4646 AND Wikimedia
+INSERT INTO /*$wgDBPrefix*/langtags (native_name,wikimedia_key,
+ english_name,iso639,iso639_3,iso639_3_revision,
+ rfc4646,rfc4646_added,rfc4646_suppress,rfc4646_deprecated)
+
+SELECT langtags_wikimedia.native_name,langtags_wikimedia.wikimedia_key,
+ langtags_iso639.english_name,langtags_iso639.iso639,langtags_iso639.iso639_3,langtags_iso639.iso639_3_revision,
+ langtags_rfc4646.tag,langtags_rfc4646.added,langtags_rfc4646.suppress_script,langtags_rfc4646.deprecated
+ FROM
+ /*$wgDBPrefix*/langtags_wikimedia AS langtags_wikimedia,
+ /*$wgDBPrefix*/langtags_iso639 AS langtags_iso639,
+ /*$wgDBPrefix*/langtags_rfc4646 AS langtags_rfc4646
+
+ WHERE
+ (langtags_wikimedia.wikimedia_key = langtags_iso639.tag OR langtags_wikimedia.wikimedia_key=langtags_iso639.iso639)
+ AND langtags_wikimedia.wikimedia_key = langtags_rfc4646.tag
+;
+
+
+--- Merge ISO639 AND RFC4646
+INSERT INTO /*$wgDBPrefix*/langtags (native_name,wikimedia_key,
+ english_name,iso639,iso639_3,iso639_3_revision,
+ rfc4646,rfc4646_added,rfc4646_suppress,rfc4646_deprecated)
+
+SELECT null,null,
+ langtags_iso639.english_name,langtags_iso639.iso639,langtags_iso639.iso639_3,langtags_iso639.iso639_3_revision,
+ langtags_rfc4646.tag,langtags_rfc4646.added,langtags_rfc4646.suppress_script,langtags_rfc4646.deprecated
+ FROM
+ /*$wgDBPrefix*/langtags_iso639 AS langtags_iso639,
+ /*$wgDBPrefix*/langtags_rfc4646 AS langtags_rfc4646
+
+ WHERE
+ (langtags_iso639.tag = langtags_rfc4646.tag OR langtags_iso639.iso639 = langtags_rfc4646.tag)
+ AND NOT EXISTS (SELECT * FROM /*$wgDBPrefix*/langtags WHERE rfc4646 = langtags_rfc4646.tag)
+;
+
+--- Merge RFC4646 AND Wikimedia
+INSERT INTO /*$wgDBPrefix*/langtags (native_name,wikimedia_key,
+ rfc4646,rfc4646_added,rfc4646_suppress,rfc4646_deprecated,
+ english_name)
+
+SELECT langtags_wikimedia.native_name,langtags_wikimedia.wikimedia_key,
+ langtags_rfc4646.tag,langtags_rfc4646.added,langtags_rfc4646.suppress_script,langtags_rfc4646.deprecated,
+ langtags_rfc4646.description
+ FROM
+ /*$wgDBPrefix*/langtags_wikimedia AS langtags_wikimedia,
+ /*$wgDBPrefix*/langtags_rfc4646 AS langtags_rfc4646
+
+ WHERE
+ langtags_wikimedia.wikimedia_key = langtags_rfc4646.tag
+ AND NOT EXISTS (SELECT * FROM /*$wgDBPrefix*/langtags WHERE rfc4646 = langtags_rfc4646.tag)
+;
+
+--- Merge ISO639 AND Wikimedia
+INSERT INTO /*$wgDBPrefix*/langtags (native_name,wikimedia_key,
+ english_name,iso639,iso639_3,iso639_3_revision,
+ rfc4646)
+
+SELECT langtags_wikimedia.native_name,langtags_wikimedia.wikimedia_key,
+ langtags_iso639.english_name,langtags_iso639.iso639,langtags_iso639.iso639_3,langtags_iso639.iso639_3_revision,
+ langtags_iso639.tag
+ FROM
+ /*$wgDBPrefix*/langtags_wikimedia AS langtags_wikimedia,
+ /*$wgDBPrefix*/langtags_iso639 AS langtags_iso639
+
+ WHERE
+ (langtags_wikimedia.wikimedia_key = langtags_iso639.tag OR langtags_wikimedia.wikimedia_key=langtags_iso639.iso639)
+ AND NOT EXISTS (SELECT * FROM /*$wgDBPrefix*/langtags WHERE rfc4646 = langtags_wikimedia.wikimedia_key)
+;
+
+--- Append ISO639
+INSERT INTO /*$wgDBPrefix*/langtags (native_name,wikimedia_key,
+ english_name,iso639,iso639_3,iso639_3_revision,
+ rfc4646)
+
+SELECT null,null,
+ langtags_iso639.english_name,langtags_iso639.iso639,langtags_iso639.iso639_3,langtags_iso639.iso639_3_revision,
+ langtags_iso639.tag
+ FROM
+ /*$wgDBPrefix*/langtags_iso639 AS langtags_iso639
+
+ WHERE
+ NOT EXISTS (SELECT * FROM /*$wgDBPrefix*/langtags WHERE iso639 = langtags_iso639.iso639 OR rfc4646 = langtags_iso639.tag)
+;
+
+--- Append RFC4646
+INSERT INTO /*$wgDBPrefix*/langtags (native_name,wikimedia_key,
+ rfc4646,rfc4646_added,rfc4646_suppress,rfc4646_deprecated,
+ english_name)
+
+SELECT null,null,
+ langtags_rfc4646.tag,langtags_rfc4646.added,langtags_rfc4646.suppress_script,langtags_rfc4646.deprecated,
+ langtags_rfc4646.description
+ FROM
+ /*$wgDBPrefix*/langtags_rfc4646 AS langtags_rfc4646
+
+ WHERE
+ NOT EXISTS (SELECT * FROM /*$wgDBPrefix*/langtags WHERE rfc4646 = langtags_rfc4646.tag)
+;
+
+--- Append Wikimedia Codes
+INSERT INTO /*$wgDBPrefix*/langtags (native_name, wikimedia_key)
+
+SELECT langtags_wikimedia.native_name,langtags_wikimedia.wikimedia_key
+ FROM
+ /*$wgDBPrefix*/langtags_wikimedia AS langtags_wikimedia
+
+ WHERE
+ NOT EXISTS (SELECT * FROM /*$wgDBPrefix*/langtags WHERE wikimedia_key = langtags_wikimedia.wikimedia_key)
+;
+
+--- Test Suite
+SELECT count(*) FROM /*$wgDBPrefix*/langtags_rfc4646 WHERE NOT EXISTS (SELECT * FROM /*$wgDBPrefix*/langtags WHERE rfc4646 = tag);
+SELECT count(*) FROM /*$wgDBPrefix*/langtags_iso639 WHERE NOT EXISTS (SELECT * FROM /*$wgDBPrefix*/langtags WHERE iso639=langtags.iso639);
+SELECT count(*) FROM /*$wgDBPrefix*/langtags_wikimedia WHERE NOT EXISTS (SELECT * FROM /*$wgDBPrefix*/langtags WHERE wikimedia_key=langtags_wikimedia.wikimedia_key);
+
+UPDATE /*$wgDBPrefix*/langtags SET tag_name = coalesce(iso639_3,iso639,rfc4646,wikimedia_key,tag_name) where wikimedia_key <> 'zh-yue';
+UPDATE /*$wgDBPrefix*/langtags SET display_name = coalesce(native_name,english_name,display_name);
+UPDATE /*$wgDBPrefix*/langtags SET language_id = 0 WHERE iso639='mul';
+UPDATE /*$wgDBPrefix*/langtags SET is_enabled = 1 where iso639 IS NOT NULL;
+

Added: branches/mlmw/maintenance/language/tags/iso-639-3-macrolanguages_20070323.tab
===================================================================
--- branches/mlmw/maintenance/language/tags/iso-639-3-macrolanguages_20070323.tab (rev 0)
+++ branches/mlmw/maintenance/language/tags/iso-639-3-macrolanguages_20070323.tab 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,359 @@
+M_Id I_Id
+aka fat
+aka twi
+ara ayn
+ara abh
+ara apd
+ara arb
+ara ary
+ara aeb
+ara ajp
+ara abv
+ara aec
+ara acx
+ara ayp
+ara ars
+ara acm
+ara acw
+ara ayl
+ara ssh
+ara pga
+ara apc
+ara ayh
+ara aao
+ara bbz
+ara shu
+ara acy
+ara adf
+ara avl
+ara arz
+ara afb
+ara arq
+ara auz
+ara acq
+aym ayr
+aym ayc
+aze azj
+aze azb
+bal bcc
+bal bgn
+bal bgp
+bik bln
+bik bto
+bik cts
+bik bcl
+bik bhk
+bua bxu
+bua bxr
+bua bxm
+chm mhr
+chm mrj
+cre crm
+cre crk
+cre csw
+cre cwd
+cre crl
+cre crj
+del umu
+del unm
+den xsl
+den scs
+din dik
+din diw
+din dip
+din dks
+din dib
+doi dgo
+doi xnr
+fas prs
+fas pes
+ful fuv
+ful fuh
+ful fuc
+ful fue
+ful fuf
+ful fub
+ful ffm
+ful fuq
+ful fui
+gba gya
+gba gbq
+gba mdo
+gba gbp
+gba bdt
+gon ggo
+gon gno
+grb gbo
+grb gec
+grb grv
+grb gry
+grb grj
+grn gug
+grn gun
+grn gui
+grn gnw
+grn nhd
+hai hdn
+hai hax
+hbs srp
+hbs bos
+hbs hrv
+hmn hmi
+hmn mmr
+hmn hmc
+hmn hmw
+hmn hmh
+hmn hmg
+hmn hmp
+hmn hma
+hmn hea
+hmn mww
+hmn hmy
+hmn blu
+hmn hms
+hmn hmj
+hmn hmm
+hmn huj
+hmn hme
+hmn hmq
+hmn muq
+hmn hml
+hmn hmd
+iku ikt
+iku ike
+ipk esi
+ipk esk
+jrb yud
+jrb yhd
+jrb jye
+jrb ajt
+jrb aju
+kau krt
+kau kby
+kau knc
+kok gom
+kok knn
+kom koi
+kom kpv
+kon ldi
+kon kwy
+kon kng
+kpe xpe
+kpe gkp
+kur sdh
+kur ckb
+kur kmr
+lah phr
+lah skr
+lah xhe
+lah pmu
+lah jat
+lah hnd
+lah hno
+lah pnb
+man mlq
+man msc
+man mku
+man emk
+man myq
+man mnk
+man mwk
+mlg bjq
+mlg msh
+mlg tdx
+mlg bmm
+mlg plt
+mlg skg
+mlg xmw
+mlg txy
+mlg xmv
+mlg bhr
+mon khk
+mon mvf
+msa xmm
+msa msi
+msa mly
+msa mfa
+msa max
+msa meo
+msa vkt
+msa jax
+msa coa
+msa bvu
+msa bve
+msa btj
+msa mqg
+mwr wry
+mwr rwr
+mwr dhd
+mwr mtr
+mwr mve
+mwr swv
+nor nno
+nor nob
+oji ojc
+oji otw
+oji ojg
+oji ojw
+oji ciw
+oji ojb
+oji ojs
+orm gax
+orm hae
+orm gaz
+orm orc
+pus pbu
+pus pbt
+pus pst
+que qwh
+que qur
+que qvo
+que qul
+que qvn
+que qvp
+que qub
+que qxp
+que qvs
+que qxt
+que qws
+que quh
+que qvm
+que qup
+que qxn
+que qux
+que qud
+que qxr
+que qug
+que qvi
+que qvj
+que qvz
+que qxl
+que qus
+que quw
+que qxo
+que qxu
+que qxh
+que qva
+que quf
+que quy
+que qvc
+que qvl
+que quk
+que cqu
+que qxc
+que qwc
+que qwa
+que quz
+que qve
+que qvh
+que qxa
+que qvw
+que qxw
+raj hoj
+raj gda
+raj bgq
+raj gju
+raj mup
+raj wbr
+rom rmn
+rom rml
+rom rmc
+rom rmf
+rom rmo
+rom rmy
+rom rmw
+sqi als
+sqi aae
+sqi aat
+sqi aln
+srd sro
+srd sdc
+srd sdn
+srd src
+swa swh
+swa swc
+syr aii
+syr cld
+tmh ttq
+tmh thv
+tmh taq
+tmh thz
+uzb uzs
+uzb uzn
+yid yih
+yid ydd
+zap zpf
+zap zpr
+zap ztl
+zap zpi
+zap zpn
+zap zas
+zap ztn
+zap zpt
+zap zab
+zap zpx
+zap ztm
+zap zar
+zap ztq
+zap zaa
+zap zpe
+zap zph
+zap zao
+zap zpj
+zap zax
+zap zpq
+zap zpw
+zap ztx
+zap zpb
+zap zav
+zap zty
+zap zae
+zap zts
+zap ztg
+zap zpd
+zap zai
+zap zpk
+zap zac
+zap zpz
+zap ztt
+zap zat
+zap zsr
+zap zpu
+zap zaq
+zap zps
+zap zca
+zap ztc
+zap zpc
+zap zpm
+zap zpv
+zap zad
+zap zaf
+zap zoo
+zap zpp
+zap zpo
+zap zte
+zap zpg
+zap ztu
+zap zpa
+zap zpl
+zap ztp
+zap zpy
+zap zam
+zap zaw
+zha ccx
+zha ccy
+zho nan
+zho cdo
+zho hak
+zho czh
+zho cmn
+zho gan
+zho cpx
+zho wuu
+zho hsn
+zho yue
+zho mnp
+zho czo
+zho cjy
+zza diq
+zza kiu
\ No newline at end of file

Added: branches/mlmw/maintenance/language/tags/iso-639-3_20070516.tab
===================================================================
--- branches/mlmw/maintenance/language/tags/iso-639-3_20070516.tab (rev 0)
+++ branches/mlmw/maintenance/language/tags/iso-639-3_20070516.tab 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,7590 @@
+Id Part2B Part2T Part1 Scope Type Ref_Name
+aaa I L Ghotuo
+aab I L Alumu-Tesu
+aac I L Ari
+aad I L Amal
+aae I L Arbëreshë Albanian
+aaf I L Aranadan
+aai I L Arifama-Miniafia
+aak I L Ankave
+aal I L Afade
+aam I L Aramanik
+aan I L Anambé
+aao I L Algerian Saharan Arabic
+aap I L Pará Arára
+aaq I E Eastern Abnaki
+aar aar aar aa I L Afar
+aas I L Aasáx
+aat I L Arvanitika Albanian
+aau I L Abau
+aaw I L Solong
+aax I L Mandobo Atas
+aay I L Aariya
+aaz I L Amarasi
+aba I L Abé
+abb I L Bankon
+abc I L Ambala Ayta
+abd I L Camarines Norte Agta
+abe I L Western Abnaki
+abf I L Abai Sungai
+abg I L Abaga
+abh I L Tajiki Arabic
+abi I L Abidji
+abj I E Aka-Bea
+abk abk abk ab I L Abkhazian
+abl I L Abung
+abm I L Abanyom
+abn I L Abua
+abo I L Abon
+abp I L Abenlen Ayta
+abq I L Abaza
+abr I L Abron
+abs I L Ambonese Malay
+abt I L Ambulas
+abu I L Abure
+abv I L Baharna Arabic
+abw I L Pal
+abx I L Inabaknon
+aby I L Aneme Wake
+abz I L Abui
+aca I L Achagua
+acb I L Áncá
+acc I L Cubulco Achí
+acd I L Gikyode
+ace ace ace I L Achinese
+acf I L Saint Lucian Creole French
+ach ach ach I L Acoli
+aci I E Aka-Cari
+ack I E Aka-Kora
+acl I E Akar-Bale
+acm I L Mesopotamian Arabic
+acn I L Achang
+acp I L Eastern Acipa
+acq I L Ta'izzi-Adeni Arabic
+acr I L Rabinal Achí
+acs I E Acroá
+act I L Achterhoeks
+acu I L Achuar-Shiwiar
+acv I L Achumawi
+acw I L Hijazi Arabic
+acx I L Omani Arabic
+acy I L Cypriot Arabic
+acz I L Acheron
+ada ada ada I L Adangme
+adb I L Adabe
+add I L Dzodinka
+ade I L Adele
+adf I L Dhofari Arabic
+adg I L Andegerebinha
+adh I L Adhola
+adi I L Adi
+adj I L Adioukrou
+adl I L Galo Adi
+adn I L Adang
+ado I L Abu
+adp I L Adap
+adq I L Adangbe
+adr I L Adonara
+ads I L Adamorobe Sign Language
+adt I L Adynyamathanha
+adu I L Aduge
+adw I L Amundava
+adx I L Amdo Tibetan
+ady ady ady I L Adyghe
+aea I L Areba
+aeb I L Tunisian Arabic
+aec I L Saidi Arabic
+aed I L Argentine Sign Language
+aee I L Northeast Pashayi
+aek I L Haeke
+ael I L Ambele
+aem I L Arem
+aen I L Armenian Sign Language
+aeq I L Aer
+aer I L Eastern Arrernte
+aes I E Alsea
+aew I L Ambakich
+aex I L Amerax
+aey I L Amele
+afb I L Gulf Arabic
+afe I L Putukwam
+afh afh afh I C Afrihili
+afi I L Akrukay
+afn I L Defaka
+afo I L Eloyi
+afr afr afr af I L Afrikaans
+afs I L Afro-Seminole Creole
+aft I L Afitti
+afu I L Awutu
+afz I L Obokuitai
+aga I E Aguano
+agb I L Legbo
+agc I L Agatu
+agd I L Agarabi
+age I L Angal
+agf I L Arguni
+agg I L Angor
+agh I L Ngelima
+agi I L Agariya
+agj I L Argobba
+agk I L Isarog Agta
+agl I L Fembe
+agm I L Angaatiha
+agn I L Agutaynen
+ago I L Tainae
+agp I L Paranan
+agq I L Aghem
+agr I L Aguaruna
+ags I L Esimbi
+agt I L Central Cagayan Agta
+agu I L Aguacateco
+agv I L Remontado Agta
+agw I L Kahua
+agx I L Aghul
+agy I L Southern Alta
+agz I L Mt. Iriga Agta
+aha I L Ahanta
+ahb I L Axamb
+ahe I L Ahe
+ahg I L Qimant
+ahh I L Aghu
+ahi I L Tiagbamrin Aizi
+ahk I L Akha
+ahl I L Igo
+ahm I L Mobumrin Aizi
+ahn I L Àhàn
+aho I E Ahom
+ahp I L Aproumu Aizi
+ahr I L Ahirani
+ahs I L Ashe
+aht I L Ahtena
+aia I L Arosi
+aib I L Ainu (China)
+aic I L Ainbai
+aid I L Alngith
+aie I L Amara
+aif I L Agi
+aig I L Antigua and Barbuda Creole English
+aih I L Ai-Cham
+aii I L Assyrian Neo-Aramaic
+aij I L Lishanid Noshan
+aik I L Ake
+ail I L Aimele
+aim I L Aimol
+ain ain ain I L Ainu (Japan)
+aio I L Aiton
+aip I L Burumakok
+aiq I L Aimaq
+air I L Airoran
+ais I L Nataoran Amis
+ait I E Arikem
+aix I L Aigon
+aiy I L Ali
+aiz I L Aari
+aja I L Aja (Sudan)
+ajg I L Aja (Benin)
+aji I L Ajië
+ajp I L South Levantine Arabic
+ajt I L Judeo-Tunisian Arabic
+aju I L Judeo-Moroccan Arabic
+ajw I E Ajawa
+ajz I L Amri
+aka aka aka ak M L Akan
+akb I L Batak Angkola
+akc I L Mpur
+akd I L Ukpet-Ehom
+ake I L Akawaio
+akf I L Akpa
+akg I L Anakalangu
+akh I L Angal Heneng
+aki I L Aiome
+akj I E Aka-Jeru
+akk akk akk I A Akkadian
+akl I L Aklanon
+akm I E Aka-Bo
+akn I L Amikoana
+ako I L Akurio
+akp I L Siwu
+akq I L Ak
+akr I L Araki
+aks I L Akaselem
+akt I L Akolet
+aku I L Akum
+akv I L Akhvakh
+akw I L Akwa
+akx I E Aka-Kede
+aky I E Aka-Kol
+akz I L Alabama
+ala I L Alago
+alc I L Qawasqar
+ald I L Alladian
+ale ale ale I L Aleut
+alf I L Alege
+alh I L Alawa
+ali I L Amaimon
+alj I L Alangan
+alk I L Alak
+all I L Allar
+alm I L Amblong
+aln I L Gheg Albanian
+alo I L Larike-Wakasihu
+alp I L Alune
+alq I L Algonquin
+alr I L Alutor
+als I L Tosk Albanian
+alt alt alt I L Southern Altai
+alu I L 'Are'are
+alw I L Alaba
+alx I L Alatil
+aly I L Alyawarr
+alz I L Alur
+ama I E Amanayé
+amb I L Ambo
+amc I L Amahuaca
+amd I L Amapá Creole
+ame I L Yanesha'
+amf I L Hamer-Banna
+amg I L Amarag
+amh amh amh am I L Amharic
+ami I L Amis
+amj I L Amdang
+amk I L Ambai
+aml I L War
+amm I L Ama (Papua New Guinea)
+amn I L Amanab
+amo I L Amo
+amp I L Alamblak
+amq I L Amahai
+amr I L Amarakaeri
+ams I L Southern Amami-Oshima
+amt I L Amto
+amu I L Guerrero Amuzgo
+amv I L Ambelau
+amw I L Western Neo-Aramaic
+amx I L Anmatyerre
+amy I L Ami
+amz I L Atampaya
+ana I E Andaqui
+anb I E Andoa
+anc I L Ngas
+and I L Ansus
+ane I L Xârâcùù
+anf I L Animere
+ang ang ang I H Old English (ca. 450-1100)
+anh I L Nend
+ani I L Andi
+anj I L Anor
+ank I L Goemai
+anl I L Anu
+anm I L Anal
+ann I L Obolo
+ano I L Andoque
+anp anp anp I L Angika
+anq I L Jarawa (India)
+anr I L Andh
+ans I E Anserma
+ant I L Antakarinya
+anu I L Anuak
+anv I L Denya
+anw I L Anaang
+anx I L Andra-Hus
+any I L Anyin
+anz I L Anem
+aoa I L Angolar
+aob I L Abom
+aoc I L Pemon
+aod I L Andarum
+aoe I L Angal Enen
+aof I L Bragat
+aog I L Angoram
+aoh I E Arma
+aoi I L Anindilyakwa
+aoj I L Mufian
+aok I L Arhö
+aol I L Alor
+aom I L Ömie
+aon I L Bumbita Arapesh
+aor I L Aore
+aos I L Taikat
+aot I L A'tong
+aox I L Atorada
+aoz I L Uab Meto
+apb I L Sa'a
+apc I L North Levantine Arabic
+apd I L Sudanese Arabic
+ape I L Bukiyip
+apg I L Ampanang
+aph I L Athpariya
+api I L Apiacá
+apj I L Jicarilla Apache
+apk I L Kiowa Apache
+apl I L Lipan Apache
+apm I L Mescalero-Chiricahua Apache
+apn I L Apinayé
+apo I L Apalik
+app I L Apma
+apq I L A-Pucikwar
+apr I L Arop-Lukep
+aps I L Arop-Sissano
+apt I L Apatani
+apu I L Apurinã
+apw I L Western Apache
+apx I L Aputai
+apy I L Apalaí
+apz I L Safeyoka
+aqc I L Archi
+aqg I L Arigidi
+aqm I L Atohwaim
+aqn I L Northern Alta
+aqp I E Atakapa
+aqr I L Arhâ
+ara ara ara ar M L Arabic
+arb I L Standard Arabic
+arc arc arc I A Official Aramaic (700 - 300 BCE)
+ard I L Arabana
+are I L Western Arrarnta
+arf I L Arafundi
+arg arg arg an I L Aragonese
+arh I L Arhuaco
+ari I L Arikara
+arj I E Arapaso
+ark I L Arikapú
+arl I L Arabela
+arn arn arn I L Mapudungun
+aro I L Araona
+arp arp arp I L Arapaho
+arq I L Algerian Arabic
+arr I L Karo (Brazil)
+ars I L Najdi Arabic
+aru I E Arua
+arv I L Arbore
+arw arw arw I L Arawak
+arx I L Aruá
+ary I L Moroccan Arabic
+arz I L Egyptian Arabic
+asa I L Asu (Tanzania)
+asb I L Assiniboine
+asc I L Casuarina Coast Asmat
+asd I L Asas
+ase I L American Sign Language
+asf I L Australian Sign Language
+asg I L Cishingini
+ash I E Abishira
+asi I L Buruwai
+asj I L Nsari
+ask I L Ashkun
+asl I L Asilulu
+asm asm asm as I L Assamese
+asn I L Xingú Asuriní
+aso I L Dano
+asp I L Algerian Sign Language
+asq I L Austrian Sign Language
+asr I L Asuri
+ass I L Ipulo
+ast ast ast I L Asturian
+asu I L Asuriní
+asv I L Asoa
+asw I L Australian Aborigines Sign Language
+asx I L Muratayak
+asy I L Yaosakor Asmat
+asz I L As
+ata I L Pele-Ata
+atb I L Zaiwa
+atc I E Atsahuaca
+atd I L Ata Manobo
+ate I L Atemble
+atf I L Atuence
+atg I L Ivbie North-Okpela-Arhe
+ati I L Attié
+atj I L Atikamekw
+atk I L Ati
+atl I L Mt. Iraya Agta
+atm I L Ata
+atn I L Ashtiani
+ato I L Atong
+atp I L Pudtol Atta
+atq I L Aralle-Tabulahan
+atr I L Atruahí
+ats I L Gros Ventre
+att I L Pamplona Atta
+atu I L Reel
+atv I L Northern Altai
+atw I L Atsugewi
+atx I L Arutani
+aty I L Aneityum
+atz I L Arta
+aua I L Asumboa
+auc I L Waorani
+aud I L Anuta
+aue I L =/Kx'au//'ein
+aug I L Aguna
+auh I L Aushi
+aui I L Anuki
+auj I L Awjilah
+auk I L Heyo
+aul I L Aulua
+aum I L Asu (Nigeria)
+aun I L Molmo One
+auo I E Auyokawa
+aup I L Makayam
+auq I L Anus
+aur I L Aruek
+aut I L Austral
+auu I L Auye
+auw I L Awyi
+aux I L Aurá
+auy I L Awiyaana
+auz I L Uzbeki Arabic
+ava ava ava av I L Avaric
+avb I L Avau
+avd I L Alviri-Vidari
+ave ave ave ae I A Avestan
+avi I L Avikam
+avl I L Eastern Egyptian Bedawi Arabic
+avn I L Avatime
+avo I E Agavotaguerra
+avs I E Aushiri
+avt I L Au
+avu I L Avokaya
+avv I L Avá-Canoeiro
+awa awa awa I L Awadhi
+awb I L Awa
+awc I L Western Acipa
+awe I L Awetí
+awh I L Awbono
+awi I L Aekyom
+awk I E Awabakal
+awm I L Arawum
+awn I L Awngi
+awo I L Awak
+awr I L Awera
+aws I L South Awyu
+awt I L Araweté
+awu I L Central Awyu
+awv I L Jair Awyu
+aww I L Awun
+awx I L Awara
+awy I L Edera Awyu
+axb I E Abipon
+axg I E Mato Grosso Arára
+axk I L Yaka (Central African Republic)
+axm I H Middle Armenian
+axx I L Xaragure
+aya I L Awar
+ayb I L Ayizo Gbe
+ayc I L Southern Aymara
+ayd I L Ayabadhu
+aye I L Ayere
+ayg I L Ginyanga
+ayh I L Hadrami Arabic
+ayi I L Leyigha
+ayk I L Akuku
+ayl I L Libyan Arabic
+aym aym aym ay M L Aymara
+ayn I L Sanaani Arabic
+ayo I L Ayoreo
+ayp I L North Mesopotamian Arabic
+ayq I L Ayi (Papua New Guinea)
+ayr I L Central Aymara
+ays I L Sorsogon Ayta
+ayt I L Bataan Ayta
+ayu I L Ayu
+ayx I L Ayi (China)
+ayy I E Tayabas Ayta
+ayz I L Mai Brat
+azb I L South Azerbaijani
+aze aze aze az M L Azerbaijani
+azg I L San Pedro Amuzgos Amuzgo
+azj I L North Azerbaijani
+azm I L Ipalapa Amuzgo
+azo I L Awing
+azr I L Adzera
+azt I L Faire Atta
+azz I L Highland Puebla Nahuatl
+baa I L Babatana
+bab I L Bainouk-Gunyuño
+bac I L Badui
+bae I E Baré
+baf I L Nubaca
+bag I L Tuki
+bah I L Bahamas Creole English
+baj I L Barakai
+bak bak bak ba I L Bashkir
+bal bal bal M L Baluchi
+bam bam bam bm I L Bambara
+ban ban ban I L Balinese
+bao I L Waimaha
+bap I L Bantawa
+bar I L Bavarian
+bas bas bas I L Basa (Cameroon)
+bau I L Bada (Nigeria)
+bav I L Vengo
+baw I L Bambili-Bambui
+bax I L Bamun
+bay I L Batuley
+baz I L Tunen
+bba I L Baatonum
+bbb I L Barai
+bbc I L Batak Toba
+bbd I L Bau
+bbe I L Bangba
+bbf I L Baibai
+bbg I L Barama
+bbh I L Bugan
+bbi I L Barombi
+bbj I L Ghomálá'
+bbk I L Babanki
+bbl I L Bats
+bbm I L Babango
+bbn I L Uneapa
+bbo I L Northern Bobo Madaré
+bbp I L West Central Banda
+bbq I L Bamali
+bbr I L Girawa
+bbs I L Bakpinka
+bbt I L Mburku
+bbu I L Kulung (Nigeria)
+bbv I L Karnai
+bbw I L Baba
+bbx I L Bubia
+bby I L Befang
+bbz I L Babalia Creole Arabic
+bca I L Central Bai
+bcb I L Bainouk-Samik
+bcc I L Southern Balochi
+bcd I L North Babar
+bce I L Bamenyam
+bcf I L Bamu
+bcg I L Baga Binari
+bch I L Bariai
+bci I L Baoulé
+bcj I L Bardi
+bck I L Bunaba
+bcl I L Central Bicolano
+bcm I L Bannoni
+bcn I L Bali (Nigeria)
+bco I L Kaluli
+bcp I L Bali (Democratic Republic of Congo)
+bcq I L Bench
+bcr I L Babine
+bcs I L Kohumono
+bct I L Bendi
+bcu I L Awad Bing
+bcv I L Shoo-Minda-Nye
+bcw I L Bana
+bcx I L Pamona
+bcy I L Bacama
+bcz I L Bainouk-Gunyaamolo
+bda I L Bayot
+bdb I L Basap
+bdc I L Emberá-Baudó
+bdd I L Bunama
+bde I L Bade
+bdg I L Bonggi
+bdh I L Baka (Sudan)
+bdi I L Burun
+bdj I L Bai
+bdk I L Budukh
+bdl I L Indonesian Bajau
+bdm I L Buduma
+bdn I L Baldemu
+bdo I L Bernde
+bdp I L Bende
+bdq I L Bahnar
+bdr I L West Coast Bajau
+bds I L Burunge
+bdt I L Bokoto
+bdu I L Oroko
+bdv I L Bodo Parja
+bdw I L Baham
+bdx I L Budong-Budong
+bdy I L Bandjalang
+bdz I L Badeshi
+bea I L Beaver
+beb I L Bebele
+bec I L Iceve-Maci
+bed I L Bedoanas
+bee I L Byangsi
+bef I L Benabena
+beg I L Belait
+beh I L Biali
+bei I L Bekati'
+bej bej bej I L Beja
+bek I L Bebeli
+bel bel bel be I L Belarusian
+bem bem bem I L Bemba (Zambia)
+ben ben ben bn I L Bengali
+beo I L Beami
+bep I L Besoa
+beq I L Beembe
+bes I L Besme
+bet I L Guiberoua Béte
+beu I L Blagar
+bev I L Daloa Bété
+bew I L Betawi
+bex I L Jur Modo
+bey I L Beli (Papua New Guinea)
+bez I L Bena (Tanzania)
+bfa I L Bari
+bfb I L Pauri Bareli
+bfc I L Northern Bai
+bfd I L Bafut
+bfe I L Betaf
+bff I L Bofi
+bfg I L Busang Kayan
+bfh I L Blafe
+bfi I L British Sign Language
+bfj I L Bafanji
+bfk I L Ban Khor Sign Language
+bfl I L Banda-Ndélé
+bfm I L Mmen
+bfn I L Bunak
+bfo I L Malba Birifor
+bfp I L Beba
+bfq I L Badaga
+bfr I L Bazigar
+bfs I L Southern Bai
+bft I L Balti
+bfu I L Gahri
+bfw I L Bondo
+bfy I L Bagheli
+bfz I L Mahasu Pahari
+bga I L Gwamhi-Wuri
+bgb I L Bobongko
+bgc I L Haryanvi
+bgd I L Rathwi Bareli
+bge I L Bauria
+bgf I L Bangandu
+bgg I L Bugun
+bgh I L Bogan
+bgi I L Giangan
+bgj I L Bangolan
+bgk I L Bit
+bgl I L Bo (Laos)
+bgm I L Baga Mboteni
+bgn I L Western Balochi
+bgo I L Baga Koga
+bgp I L Eastern Balochi
+bgq I L Bagri
+bgr I L Bawm Chin
+bgs I L Tagabawa
+bgt I L Bughotu
+bgu I L Mbongno
+bgv I L Warkay-Bipim
+bgw I L Bhatri
+bgx I L Balkan Gagauz Turkish
+bgy I L Benggoi
+bgz I L Banggai
+bha I L Bharia
+bhb I L Bhili
+bhc I L Biga
+bhd I L Bhadrawahi
+bhe I L Bhaya
+bhf I L Odiai
+bhg I L Binandere
+bhh I L Bukharic
+bhi I L Bhilali
+bhj I L Bahing
+bhk I L Albay Bicolano
+bhl I L Bimin
+bhm I L Bathari
+bhn I L Bohtan Neo-Aramaic
+bho bho bho I L Bhojpuri
+bhp I L Bima
+bhq I L Tukang Besi South
+bhr I L Bara Malagasy
+bhs I L Buwal
+bht I L Bhattiyali
+bhu I L Bhunjia
+bhv I L Bahau
+bhw I L Biak
+bhx I L Bhalay
+bhy I L Bhele
+bhz I L Bada (Indonesia)
+bia I L Badimaya
+bib I L Bissa
+bic I L Bikaru
+bid I L Bidiyo
+bie I L Bepour
+bif I L Biafada
+big I L Biangai
+bii I L Bisu
+bij I L Vaghat-Ya-Bijim-Legeri
+bik bik bik M L Bikol
+bil I L Bile
+bim I L Bimoba
+bin bin bin I L Bini
+bio I L Nai
+bip I L Bila
+biq I L Bipi
+bir I L Bisorio
+bis bis bis bi I L Bislama
+bit I L Berinomo
+biu I L Biete
+biv I L Southern Birifor
+biw I L Kol (Cameroon)
+bix I L Bijori
+biy I L Birhor
+biz I L Baloi
+bja I L Budza
+bjb I E Banggarla
+bjc I L Bariji
+bjd I L Bandjigali
+bje I L Biao-Jiao Mien
+bjf I L Barzani Jewish Neo-Aramaic
+bjg I L Bidyogo
+bjh I L Bahinemo
+bji I L Burji
+bjj I L Kanauji
+bjk I L Barok
+bjl I L Bulu (Papua New Guinea)
+bjm I L Bajelani
+bjn I L Banjar
+bjo I L Mid-Southern Banda
+bjq I L Southern Betsimisaraka Malagasy
+bjr I L Binumarien
+bjs I L Bajan
+bjt I L Balanta-Ganja
+bju I L Busuu
+bjv I L Bedjond
+bjw I L Bakwé
+bjx I L Banao Itneg
+bjy I E Bayali
+bjz I L Baruga
+bka I L Kyak
+bkb I L Finallig
+bkc I L Baka (Cameroon)
+bkd I L Binukid
+bke I L Bengkulu
+bkf I L Beeke
+bkg I L Buraka
+bkh I L Bakoko
+bki I L Baki
+bkj I L Pande
+bkk I L Brokskat
+bkl I L Berik
+bkm I L Kom (Cameroon)
+bkn I L Bukitan
+bko I L Kwa'
+bkp I L Boko (Democratic Republic of Congo)
+bkq I L Bakairí
+bkr I L Bakumpai
+bks I L Masbate Sorsogon
+bkt I L Boloki
+bku I L Buhid
+bkv I L Bekwarra
+bkw I L Bekwil
+bkx I L Baikeno
+bky I L Bokyi
+bkz I L Bungku
+bla bla bla I L Siksika
+blb I L Bilua
+blc I L Bella Coola
+bld I L Bolango
+ble I L Balanta-Kentohe
+blf I L Buol
+blg I L Balau
+blh I L Kuwaa
+bli I L Bolia
+blj I L Bolongan
+blk I L Pa'o Karen
+bll I E Biloxi
+blm I L Beli (Sudan)
+bln I L Southern Catanduanes Bicolano
+blo I L Anii
+blp I L Blablanga
+blq I L Baluan-Pam
+blr I L Blang
+bls I L Balaesang
+blt I L Tai Dam
+blu I L Hmong Njua
+blv I L Bolo
+blw I L Balangao
+blx I L Mag-Indi Ayta
+bly I L Notre
+blz I L Balantak
+bma I L Lame
+bmb I L Bembe
+bmc I L Biem
+bmd I L Baga Manduri
+bme I L Limassa
+bmf I L Bom
+bmg I L Bamwe
+bmh I L Kein
+bmi I L Bagirmi
+bmj I L Bote-Majhi
+bmk I L Ghayavi
+bml I L Bomboli
+bmm I L Northern Betsimisaraka Malagasy
+bmn I E Bina (Papua New Guinea)
+bmo I L Bambalang
+bmp I L Bulgebi
+bmq I L Bomu
+bmr I L Muinane
+bms I L Bilma Kanuri
+bmt I L Biao Mon
+bmu I L Burum-Mindik
+bmv I L Bum
+bmw I L Bomwali
+bmx I L Baimak
+bmy I L Bemba (Democratic Republic of Congo)
+bmz I L Baramu
+bna I L Bonerate
+bnb I L Bookan
+bnc I L Central Bontoc
+bnd I L Banda (Indonesia)
+bne I L Bintauna
+bnf I L Masiwang
+bng I L Benga
+bnh I L Banawá
+bni I L Bangi
+bnj I L Eastern Tawbuid
+bnk I L Bierebo
+bnl I L Boon
+bnm I L Batanga
+bnn I L Bunun
+bno I L Bantoanon
+bnp I L Bola
+bnq I L Bantik
+bnr I L Butmas-Tur
+bns I L Bundeli
+bnu I L Bentong
+bnv I L Bonerif
+bnw I L Bisis
+bnx I L Bangubangu
+bny I L Bintulu
+bnz I L Beezen
+boa I L Bora
+bob I L Boni
+boc I L Bakung Kenyah
+bod tib bod bo I L Tibetan
+boe I L Mundabli
+bof I L Bolon
+bog I L Bamako Sign Language
+boh I L Boma
+boi I E Barbareño
+boj I L Anjam
+bok I L Bonjo
+bol I L Bole
+bom I L Berom
+bon I L Bine
+boo I L Tièma Cièwè Bozo
+bop I L Bonkiman
+boq I L Bogaya
+bor I L Borôro
+bos bos bos bs I L Bosnian
+bot I L Bongo
+bou I L Bondei
+bov I L Tuwuli
+bow I E Rema
+box I L Buamu
+boy I L Bodo (Central African Republic)
+boz I L Tiéyaxo Bozo
+bpa I L Dakaka
+bpb I E Barbacoas
+bpd I L Banda-Banda
+bpg I L Bonggo
+bph I L Botlikh
+bpi I L Bagupi
+bpj I L Binji
+bpk I L Orowe
+bpl I L Broome Pearling Lugger Pidgin
+bpm I L Biyom
+bpn I L Dzao Min
+bpo I L Anasi
+bpp I L Kaure
+bpq I L Banda Malay
+bpr I L Koronadal Blaan
+bps I L Sarangani Blaan
+bpt I L Barrow Point
+bpu I L Bongu
+bpv I L Bian Marind
+bpw I L Bo (Papua New Guinea)
+bpx I L Palya Bareli
+bpy I L Bishnupriya
+bpz I L Bilba
+bqa I L Tchumbuli
+bqb I L Bagusa
+bqc I L Boko (Benin)
+bqd I L Bung
+bqe I L Navarro-Labourdin Basque
+bqf I E Baga Kaloum
+bqg I L Bago-Kusuntu
+bqh I L Baima
+bqi I L Bakhtiari
+bqj I L Bandial
+bqk I L Banda-Mbrès
+bql I L Bilakura
+bqm I L Wumboko
+bqn I L Bulgarian Sign Language
+bqo I L Balo
+bqp I L Busa
+bqq I L Biritai
+bqr I L Burusu
+bqs I L Bosngun
+bqt I L Bamukumbit
+bqu I L Boguru
+bqv I L Begbere-Ejar
+bqw I L Buru (Nigeria)
+bqx I L Baangi
+bqy I L Bali Sign Language
+bqz I L Bakaka
+bra bra bra I L Braj
+brb I L Lave
+brc I L Berbice Creole Dutch
+brd I L Baraamu
+bre bre bre br I L Breton
+brf I L Bera
+brg I L Baure
+brh I L Brahui
+bri I L Mokpwe
+brj I L Bieria
+brk I E Birked
+brl I L Birwa
+brm I L Barambu
+brn I L Boruca
+bro I L Brokkat
+brp I L Barapasi
+brq I L Breri
+brr I L Birao
+brs I L Baras
+brt I L Bitare
+bru I L Eastern Bru
+brv I L Western Bru
+brw I L Bellari
+brx I L Bodo (India)
+bry I L Burui
+brz I L Bilbil
+bsa I L Abinomn
+bsb I L Brunei Bisaya
+bsc I L Bassari
+bsd I L Sarawak Bisaya
+bse I L Wushi
+bsf I L Bauchi
+bsg I L Bashkardi
+bsh I L Kati
+bsi I L Bassossi
+bsj I L Bangwinji
+bsk I L Burushaski
+bsl I E Basa-Gumna
+bsm I L Busami
+bsn I L Barasana
+bso I L Buso
+bsp I L Baga Sitemu
+bsq I L Bassa
+bsr I L Bassa-Kontagora
+bss I L Akoose
+bst I L Basketo
+bsu I L Bahonsuai
+bsv I E Baga Sobané
+bsw I L Baiso
+bsx I L Yangkam
+bsy I L Sabah Bisaya
+bsz I L Souletin Basque
+bta I L Bata
+btb I L Beti (Cameroon)
+btc I L Bati (Cameroon)
+btd I L Batak Dairi
+bte I E Gamo-Ningi
+btf I L Birgit
+btg I L Gagnoa Bété
+bth I L Biatah
+bti I L Burate
+btj I L Bacanese Malay
+btl I L Bhatola
+btm I L Batak Mandailing
+btn I L Ratagnon
+bto I L Iriga Bicolano
+btp I L Budibud
+btq I L Batek
+btr I L Baetora
+bts I L Batak Simalungun
+btt I L Bete-Bendi
+btu I L Batu
+btv I L Bateri
+btw I L Butuanon
+btx I L Batak Karo
+bty I L Bobot
+btz I L Batak Alas-Kluet
+bua bua bua M L Buriat
+bub I L Bua
+buc I L Bushi
+bud I L Ntcham
+bue I E Beothuk
+buf I L Bushoong
+bug bug bug I L Buginese
+buh I L Younuo Bunu
+bui I L Bongili
+buj I L Basa-Gurmana
+buk I L Bugawac
+bul bul bul bg I L Bulgarian
+bum I L Bulu (Cameroon)
+bun I L Sherbro
+buo I L Terei
+bup I L Busoa
+buq I L Brem
+bus I L Bokobaru
+but I L Bungain
+buu I L Budu
+buv I L Bun
+buw I L Bubi
+bux I L Boghom
+buy I L Bullom So
+buz I L Bukwen
+bva I L Barein
+bvb I L Bube
+bvc I L Baelelea
+bvd I L Baeggu
+bve I L Berau Malay
+bvf I L Boor
+bvg I L Bonkeng
+bvh I L Bure
+bvi I L Belanda Viri
+bvj I L Baan
+bvk I L Bukat
+bvl I L Bolivian Sign Language
+bvm I L Bamunka
+bvn I L Buna
+bvo I L Bolgo
+bvq I L Birri
+bvr I L Burarra
+bvs I L Belgian Sign Language
+bvt I L Bati (Indonesia)
+bvu I L Bukit Malay
+bvv I E Baniva
+bvw I L Boga
+bvx I L Dibole
+bvz I L Bauzi
+bwa I L Bwatoo
+bwb I L Namosi-Naitasiri-Serua
+bwc I L Bwile
+bwd I L Bwaidoka
+bwe I L Bwe Karen
+bwf I L Boselewa
+bwg I L Barwe
+bwh I L Bishuo
+bwi I L Baniwa
+bwj I L Láá Láá Bwamu
+bwk I L Bauwaki
+bwl I L Bwela
+bwm I L Biwat
+bwn I L Wunai Bunu
+bwo I L Boro
+bwp I L Mandobo Bawah
+bwq I L Southern Bobo Madaré
+bwr I L Bura-Pabir
+bws I L Bomboma
+bwt I L Bafaw-Balong
+bwu I L Buli (Ghana)
+bwv I L Bahau River Kenyah
+bww I L Bwa
+bwx I L Bu-Nao Bunu
+bwy I L Cwi Bwamu
+bwz I L Bwisi
+bxa I L Bauro
+bxb I L Belanda Bor
+bxc I L Molengue
+bxd I L Pela
+bxe I L Birale
+bxf I L Bilur
+bxg I L Bangala
+bxh I L Buhutu
+bxi I E Pirlatapa
+bxj I L Bayungu
+bxk I L Bukusu
+bxl I L Jalkunan
+bxm I L Mongolia Buriat
+bxn I L Burduna
+bxo I L Barikanchi
+bxp I L Bebil
+bxq I L Beele
+bxr I L Russia Buriat
+bxs I L Busam
+bxt I L Buxinhua
+bxu I L China Buriat
+bxv I L Berakou
+bxw I L Bankagooma
+bxx I L Borna
+bxz I L Binahari
+bya I L Batak
+byb I L Bikya
+byc I L Ubaghara
+byd I L Benyadu'
+bye I L Pouye
+byf I L Bete
+byg I E Baygo
+byh I L Bujhyal
+byi I L Buyu
+byj I L Bina (Nigeria)
+byk I L Biao
+byl I L Bayono
+bym I L Bidyara
+byn byn byn I L Bilin
+byo I L Biyo
+byp I L Bumaji
+byq I E Basay
+byr I L Baruya
+bys I L Burak
+byt I E Berti
+byu I L Buyang
+byv I L Medumba
+byw I L Belhariya
+byx I L Qaqet
+byy I L Buya
+byz I L Banaro
+bza I L Bandi
+bzb I L Andio
+bzd I L Bribri
+bze I L Jenaama Bozo
+bzf I L Boikin
+bzg I L Babuza
+bzh I L Mapos Buang
+bzj I L Belize Kriol English
+bzk I L Nicaragua Creole English
+bzl I L Boano (Sulawesi)
+bzm I L Bolondo
+bzn I L Boano (Maluku)
+bzo I L Bozaba
+bzp I L Kemberano
+bzq I L Buli (Indonesia)
+bzr I E Biri
+bzs I L Brazilian Sign Language
+bzt I C Brithenig
+bzu I L Burmeso
+bzv I L Bebe
+bzw I L Basa (Nigeria)
+bzx I L Hainyaxo Bozo
+bzy I L Obanliku
+bzz I L Evant
+caa I L Chortí
+cab I L Garifuna
+cac I L San Sebastián Coatán Chuj
+cad cad cad I L Caddo
+cae I L Lehar
+caf I L Southern Carrier
+cag I L Nivaclé
+cah I L Cahuarano
+caj I E Chané
+cak I L Central Cakchiquel
+cal I L Carolinian
+cam I L Cemuhî
+can I L Chambri
+cao I L Chácobo
+cap I L Chipaya
+caq I L Car Nicobarese
+car car car I L Galibi Carib
+cas I L Tsimané
+cat cat cat ca I L Catalan
+cav I L Cavineña
+caw I L Callawalla
+cax I L Chiquitano
+cay I L Cayuga
+caz I E Canichana
+cbb I L Cabiyarí
+cbc I L Carapana
+cbd I L Carijona
+cbe I E Chipiajes
+cbg I L Chimila
+cbh I E Cagua
+cbi I L Chachi
+cbj I L Ede Cabe
+cbk I L Chavacano
+cbl I L Bualkhaw Chin
+cbm I L Yepocapa Southwestern Cakchiquel
+cbn I L Nyahkur
+cbo I L Izora
+cbr I L Cashibo-Cacataibo
+cbs I L Cashinahua
+cbt I L Chayahuita
+cbu I L Candoshi-Shapra
+cbv I L Cacua
+cby I L Carabayo
+cca I E Cauca
+ccc I L Chamicuro
+ccd I L Cafundo Creole
+cce I L Chopi
+ccg I L Samba Daka
+cch I L Atsam
+ccj I L Kasanga
+ccl I L Cutchi-Swahili
+ccm I L Malaccan Creole Malay
+cco I L Comaltepec Chinantec
+ccp I L Chakma
+ccq I L Chaungtha
+ccr I E Cacaopera
+ccx I L Northern Zhuang
+ccy I L Southern Zhuang
+cda I L Choni
+cde I L Chenchu
+cdf I L Chiru
+cdg I L Chamari
+cdh I L Chambeali
+cdi I L Chodri
+cdj I L Churahi
+cdm I L Chepang
+cdn I L Chaudangsi
+cdo I L Min Dong Chinese
+cdr I L Cinda-Regi-Tiyal
+cds I L Chadian Sign Language
+cdz I L Koda
+cea I E Lower Chehalis
+ceb ceb ceb I L Cebuano
+ceg I L Chamacoco
+ces cze ces cs I L Czech
+cet I L Centúúm
+cfa I L Dijim-Bwilim
+cfd I L Cara
+cfg I L Como Karim
+cga I L Changriwa
+cgc I L Kagayanen
+cgg I L Chiga
+cgk I L Chocangacakha
+cha cha cha ch I L Chamorro
+chb chb chb I E Chibcha
+chc I E Catawba
+chd I L Highland Oaxaca Chontal
+che che che ce I L Chechen
+chf I L Tabasco Chontal
+chg chg chg I E Chagatai
+chh I L Chinook
+chj I L Ojitlán Chinantec
+chk chk chk I L Chuukese
+chl I L Cahuilla
+chm chm chm M L Mari (Russia)
+chn chn chn I L Chinook jargon
+cho cho cho I L Choctaw
+chp chp chp I L Chipewyan
+chq I L Quiotepec Chinantec
+chr chr chr I L Cherokee
+chs I E Chumash
+cht I E Cholón
+chu chu chu cu I A Church Slavic
+chv chv chv cv I L Chuvash
+chw I L Chuwabu
+chx I L Chantyal
+chy chy chy I L Cheyenne
+chz I L Ozumacín Chinantec
+cia I L Cia-Cia
+cib I L Ci Gbe
+cic I L Chickasaw
+cid I E Chimariko
+cie I L Cineni
+cih I L Chinali
+cik I L Chitkuli Kinnauri
+cim I L Cimbrian
+cin I L Cinta Larga
+cip I L Chiapanec
+cir I L Tiri
+cit I L Chittagonian
+ciw I L Chippewa
+ciy I L Chaima
+cja I L Western Cham
+cje I L Chru
+cjh I E Upper Chehalis
+cji I L Chamalal
+cjk I L Chokwe
+cjm I L Eastern Cham
+cjn I L Chenapian
+cjo I L Ashéninka Pajonal
+cjp I L Cabécar
+cjr I E Chorotega
+cjs I L Shor
+cjv I L Chuave
+cjy I L Jinyu Chinese
+cka I L Khumi Awa Chin
+ckb I L Central Kurdish
+ckc I L Northern Cakchiquel
+ckd I L South Central Cakchiquel
+cke I L Eastern Cakchiquel
+ckf I L Southern Cakchiquel
+ckh I L Chak
+cki I L Santa María De Jesús Cakchiquel
+ckj I L Santo Domingo Xenacoj Cakchiquel
+ckk I L Acatenango Southwestern Cakchiquel
+ckl I L Cibak
+cko I L Anufo
+ckq I L Kajakse
+ckr I L Kairak
+cks I L Tayo
+ckt I L Chukot
+cku I L Koasati
+ckv I L Kavalan
+ckw I L Western Cakchiquel
+ckx I L Caka
+cky I L Cakfem-Mushere
+ckz I L Cakchiquel-Quiché Mixed Language
+cla I L Ron
+clc I L Chilcotin
+cld I L Chaldean Neo-Aramaic
+cle I L Lealao Chinantec
+clh I L Chilisso
+cli I L Chakali
+clk I L Idu-Mishmi
+cll I L Chala
+clm I L Clallam
+clo I L Lowland Oaxaca Chontal
+clu I L Caluyanun
+clw I L Chulym
+cly I L Eastern Highland Chatino
+cma I L Maa
+cme I L Cerma
+cmg I H Classical Mongolian
+cmi I L Emberá-Chamí
+cmk I E Chimakum
+cml I L Campalagian
+cmm I E Michigamea
+cmn I L Mandarin Chinese
+cmo I L Central Mnong
+cmr I L Mro Chin
+cms I A Messapic
+cmt I L Camtho
+cna I L Changthang
+cnb I L Chinbon Chin
+cnc I L Côông
+cng I L Northern Qiang
+cnh I L Haka Chin
+cni I L Asháninka
+cnk I L Khumi Chin
+cnl I L Lalana Chinantec
+cnm I L Ixtatán Chuj
+cno I L Con
+cns I L Central Asmat
+cnt I L Tepetotutla Chinantec
+cnu I L Chenoua
+cnw I L Ngawn Chin
+cnx I H Middle Cornish
+coa I L Cocos Islands Malay
+cob I E Chicomuceltec
+coc I L Cocopa
+cod I L Cocama-Cocamilla
+coe I L Koreguaje
+cof I L Colorado
+cog I L Chong
+coh I L Chonyi
+coj I E Cochimi
+cok I L Santa Teresa Cora
+col I L Columbia-Wenatchi
+com I L Comanche
+con I L Cofán
+coo I L Comox
+cop cop cop I E Coptic
+coq I E Coquille
+cor cor cor kw I L Cornish
+cos cos cos co I L Corsican
+cot I L Caquinte
+cou I L Wamey
+cov I L Cao Miao
+cow I E Cowlitz
+cox I L Nanti
+coy I E Coyaima
+coz I L Chochotec
+cpa I L Palantla Chinantec
+cpb I L Ucayali-Yurúa Ashéninka
+cpc I L Ajyíninka Apurucayali
+cpg I E Cappadocian Greek
+cpi I L Chinese Pidgin English
+cpn I L Cherepon
+cps I L Capiznon
+cpu I L Pichis Ashéninka
+cpx I L Pu-Xian Chinese
+cpy I L South Ucayali Ashéninka
+cqu I L Chilean Quechua
+cra I L Chara
+crb I E Island Carib
+crc I L Lonwolwol
+crd I L Coeur d'Alene
+cre cre cre cr M L Cree
+crf I E Caramanta
+crg I L Michif
+crh crh crh I L Crimean Tatar
+cri I L Sãotomense
+crj I L Southern East Cree
+crk I L Plains Cree
+crl I L Northern East Cree
+crm I L Moose Cree
+crn I L El Nayar Cora
+cro I L Crow
+crq I L Iyo'wujwa Chorote
+crr I E Carolina Algonquian
+crs I L Seselwa Creole French
+crt I L Iyojwa'ja Chorote
+cru I E Carútana
+crv I L Chaura
+crw I L Chrau
+crx I L Carrier
+cry I L Cori
+crz I E Cruzeño
+csa I L Chiltepec Chinantec
+csb csb csb I L Kashubian
+csc I L Catalonian Sign Language
+csd I L Chiangmai Sign Language
+cse I L Czech Sign Language
+csf I L Cuba Sign Language
+csg I L Chilean Sign Language
+csh I L Asho Chin
+csi I E Coast Miwok
+csk I L Jola-Kasa
+csl I L Chinese Sign Language
+csm I L Central Sierra Miwok
+csn I L Colombian Sign Language
+cso I L Sochiapan Chinantec
+csq I L Croatia Sign Language
+csr I L Costa Rican Sign Language
+css I E Southern Ohlone
+cst I E Northern Ohlone
+csw I L Swampy Cree
+csy I L Siyin Chin
+csz I L Coos
+cta I L Tataltepec Chatino
+ctc I L Chetco
+ctd I L Tedim Chin
+cte I L Tepinapa Chinantec
+cti I L Tila Chol
+ctl I L Tlacoatzintepec Chinantec
+ctm I E Chitimacha
+ctn I L Chhintange
+cto I L Emberá-Catío
+ctp I L Western Highland Chatino
+cts I L Northern Catanduanes Bicolano
+ctu I L Tumbalá Chol
+ctz I L Zacatepec Chatino
+cua I L Cua
+cub I L Cubeo
+cuc I L Usila Chinantec
+cug I L Cung
+cuh I L Chuka
+cui I L Cuiba
+cuj I L Mashco Piro
+cuk I L San Blas Kuna
+cul I L Culina
+cum I E Cumeral
+cun I L Cunén Quiché
+cuo I E Cumanagoto
+cup I E Cupeño
+cuq I L Cun
+cur I L Chhulung
+cut I L Teutila Cuicatec
+cuu I L Tai Ya
+cuv I L Cuvok
+cuw I L Chukwa
+cux I L Tepeuxila Cuicatec
+cvn I L Valle Nacional Chinantec
+cwa I L Kabwa
+cwb I L Maindo
+cwd I L Woods Cree
+cwe I L Kwere
+cwg I L Chewong
+cwt I L Kuwaataay
+cya I L Nopala Chatino
+cyb I E Cayubaba
+cym wel cym cy I L Welsh
+cyo I L Cuyonon
+czh I L Huizhou Chinese
+czk I E Knaanic
+czn I L Zenzontepec Chatino
+czo I L Min Zhong Chinese
+czt I L Zotung Chin
+daa I L Dangaléat
+dac I L Dambi
+dad I L Marik
+dae I L Duupa
+daf I L Dan
+dag I L Dagbani
+dah I L Gwahatike
+dai I L Day
+daj I L Dar Fur Daju
+dak dak dak I L Dakota
+dal I L Dahalo
+dan dan dan da I L Danish
+dao I L Daai Chin
+dap I L Nisi
+daq I L Dandami Maria
+dar dar dar I L Dargwa
+das I L Daho-Doo
+dat I L Darang Deng
+dau I L Dar Sila Daju
+dav I L Taita
+daw I L Davawenyo
+dax I L Dayi
+daz I L Dao
+dba I L Bangeri Me Dogon
+dbb I L Deno
+dbd I L Dadiya
+dbe I L Dabe
+dbf I L Edopi
+dbg I L Dogul Dom Dogon
+dbi I L Doka
+dbj I L Ida'an
+dbl I L Dyirbal
+dbm I L Duguri
+dbn I L Duriankere
+dbo I L Dulbu
+dbp I L Duwai
+dbq I L Daba
+dbr I L Dabarre
+dbu I L Bondum Dom Dogon
+dbv I L Dungu
+dby I L Dibiyaso
+dcc I L Deccan
+dcr I E Negerhollands
+ddd I L Dongotono
+dde I L Doondo
+ddg I L Fataluku
+ddi I L Diodio
+ddj I L Jaru
+ddn I L Dendi (Benin)
+ddo I L Dido
+dds I L Donno So Dogon
+ddw I L Dawera-Daweloor
+dec I L Dagik
+ded I L Dedua
+dee I L Dewoin
+def I L Dezfuli
+deg I L Degema
+deh I L Dehwari
+dei I L Demisa
+dek I L Dek
+del del del M L Delaware
+dem I L Dem
+den den den M L Slave (Athapascan)
+dep I E Pidgin Delaware
+deq I L Dendi (Central African Republic)
+der I L Deori
+des I L Desano
+deu ger deu de I L German
+dev I L Domung
+dez I L Dengese
+dga I L Southern Dagaare
+dgc I L Casiguran Dumagat Agta
+dgd I L Dagaari Dioula
+dge I L Degenan
+dgg I L Doga
+dgh I L Dghwede
+dgi I L Northern Dagara
+dgk I L Dagba
+dgn I E Dagoman
+dgo I L Dogri (individual language)
+dgr dgr dgr I L Dogrib
+dgs I L Dogoso
+dgu I L Degaru
+dgx I L Doghoro
+dgz I L Daga
+dha I L Dhanwar (India)
+dhd I L Dhundari
+dhg I L Dhangu
+dhi I L Dhimal
+dhl I L Dhalandji
+dhm I L Zemba
+dhn I L Dhanki
+dho I L Dhodia
+dhr I L Dhargari
+dhs I L Dhaiso
+dhu I E Dhurga
+dhv I L Dehu
+dhw I L Dhanwar (Nepal)
+dia I L Dia
+dib I L South Central Dinka
+dic I L Lakota Dida
+did I L Didinga
+dif I E Dieri
+dig I L Digo
+dih I L Kumiai
+dii I L Dimbong
+dij I L Dai
+dik I L Southwestern Dinka
+dil I L Dilling
+dim I L Dime
+din din din M L Dinka
+dio I L Dibo
+dip I L Northeastern Dinka
+diq I L Dimli
+dir I L Dirim
+dis I L Dimasa
+dit I L Dirari
+diu I L Diriku
+div div div dv I L Dhivehi
+diw I L Northwestern Dinka
+dix I L Dixon Reef
+diy I L Diuwe
+diz I L Ding
+djb I L Djinba
+djc I L Dar Daju Daju
+djd I L Djamindjung
+dje I L Zarma
+djf I L Djangun
+dji I L Djinang
+djj I L Djeebbana
+djk I L Aukan
+djl I L Djiwarli
+djm I L Jamsay Dogon
+djn I L Djauan
+djo I L Djongkang
+djr I L Djambarrpuyngu
+dju I L Kapriman
+djw I L Djawi
+dka I L Dakpakha
+dkk I L Dakka
+dkl I L Kolum So Dogon
+dkr I L Kuijau
+dks I L Southeastern Dinka
+dkx I L Mazagway
+dlg I L Dolgan
+dlm I E Dalmatian
+dln I L Darlong
+dma I L Duma
+dmc I L Dimir
+dme I L Dugwor
+dmg I L Upper Kinabatangan
+dmk I L Domaaki
+dml I L Dameli
+dmm I L Dama
+dmo I L Kemezung
+dmr I L East Damar
+dms I L Dampelas
+dmu I L Dubu
+dmv I L Dumpas
+dmx I L Dema
+dmy I L Demta
+dna I L Upper Grand Valley Dani
+dnd I L Daonda
+dne I L Ndendeule
+dng I L Dungan
+dni I L Lower Grand Valley Dani
+dnk I L Dengka
+dnn I L Dzùùngoo
+dnr I L Danaru
+dnt I L Mid Grand Valley Dani
+dnu I L Danau
+dnw I L Western Dani
+dny I L Dení
+doa I L Dom
+dob I L Dobu
+doc I L Northern Dong
+doe I L Doe
+dof I L Domu
+doh I L Dong
+doi doi doi M L Dogri (macrolanguage)
+dok I L Dondo
+dol I L Doso
+don I L Toura (Papua New Guinea)
+doo I L Dongo
+dop I L Lukpa
+doq I L Dominican Sign Language
+dor I L Dori'o
+dos I L Dogosé
+dot I L Dass
+dov I L Dombe
+dow I L Doyayo
+dox I L Bussa
+doy I L Dompo
+doz I L Dorze
+dpp I L Papar
+drb I L Dair
+drd I L Darmiya
+dre I L Dolpo
+drg I L Rungus
+drh I L Darkhat
+dri I L C'lela
+drl I L Darling
+drn I L West Damar
+dro I L Daro-Matu
+drq I E Dura
+drr I E Dororo
+drs I L Gedeo
+drt I L Drents
+dru I L Rukai
+drw I L Darwazi
+dry I L Darai
+dsb dsb dsb I L Lower Sorbian
+dse I L Dutch Sign Language
+dsh I L Daasanach
+dsi I L Disa
+dsl I L Danish Sign Language
+dsn I L Dusner
+dso I L Desiya Oriya
+dsq I L Tadaksahak
+dta I L Daur
+dtb I L Labuk-Kinabatangan Kadazan
+dtk I L Tene Kan Dogon
+dtm I L Tomo Kan Dogon
+dtp I L Central Dusun
+dtr I L Lotud
+dts I L Toro So Dogon
+dtt I L Toro Tegu Dogon
+dua dua dua I L Duala
+dub I L Dubli
+duc I L Duna
+dud I L Hun-Saare
+due I L Umiray Dumaget Agta
+duf I L Dumbea
+dug I L Duruma
+duh I L Dungra Bhil
+dui I L Dumun
+duj I L Dhuwal
+duk I L Duduela
+dul I L Alabat Island Agta
+dum dum dum I H Middle Dutch (ca. 1050-1350)
+dun I L Dusun Deyah
+duo I L Dupaninan Agta
+dup I L Duano'
+duq I L Dusun Malang
+dur I L Dii
+dus I L Dumi
+duu I L Drung
+duv I L Duvle
+duw I L Dusun Witu
+dux I L Duungooma
+duy I E Dicamay Agta
+duz I E Duli
+dva I L Duau
+dwa I L Diri
+dws I C Dutton World Speedwords
+dww I L Dawawa
+dya I L Dyan
+dyb I L Dyaberdyaber
+dyd I L Dyugun
+dyg I E Villa Viciosa Agta
+dyi I L Djimini Senoufo
+dyk I L Land Dayak
+dyn I L Dyangadi
+dyo I L Jola-Fonyi
+dyu dyu dyu I L Dyula
+dyy I L Dyaabugay
+dza I L Duguza
+dzd I L Daza
+dzg I L Dazaga
+dzl I L Dzalakha
+dzn I L Dzando
+dzo dzo dzo dz I L Dzongkha
+ebg I L Ebughu
+ebo I L Teke-Ebo
+ebr I L Ebrié
+ebu I L Embu
+ecr I A Eteocretan
+ecs I L Ecuadorian Sign Language
+ecy I A Eteocypriot
+eee I L E
+efa I L Efai
+efe I L Efe
+efi efi efi I L Efik
+ega I L Ega
+ego I L Eggon
+egy egy egy I A Egyptian (Ancient)
+ehu I L Ehueun
+eip I L Eipomek
+eit I L Eitiep
+eiv I L Askopan
+eja I L Ejamat
+eka eka eka I L Ekajuk
+eke I L Ekit
+ekg I L Ekari
+eki I L Eki
+ekm I L Elip
+eko I L Koti
+ekp I L Ekpeye
+ekr I L Yace
+eky I L Eastern Kayah
+ele I L Elepi
+elh I L El Hugeirat
+eli I L Nding
+elk I L Elkei
+ell gre ell el I L Modern Greek (1453-)
+elm I L Eleme
+elo I L El Molo
+elp I L Elpaputih
+elu I L Elu
+elx elx elx I A Elamite
+ema I L Emai-Iuleha-Ora
+emb I L Embaloh
+eme I L Emerillon
+emg I L Eastern Meohang
+emi I L Mussau-Emira
+emk I L Eastern Maninkakan
+eml I L Emiliano-Romagnolo
+emm I E Mamulique
+emn I L Eman
+emo I E Emok
+emp I L Northern Emberá
+ems I L Pacific Gulf Yupik
+emu I L Eastern Muria
+emw I L Emplawas
+emy I E Epigraphic Mayan
+ena I L Apali
+enb I L Endo
+enc I L En
+end I L Ende
+enf I L Forest Enets
+eng eng eng en I L English
+enh I L Tundra Enets
+eni I L Enim
+enm enm enm I H Middle English (1100-1500)
+enn I L Engenni
+eno I L Enggano
+enq I L Enga
+enr I L Emumu
+env I L Enwan (Edu State)
+enw I L Enwan (Akwa Ibom State)
+eot I L Beti (Côte d'Ivoire)
+epi I L Epie
+epo epo epo eo I C Esperanto
+erg I L Sie
+erh I L Eruwa
+eri I L Ogea
+erk I L South Efate
+ero I L Horpa
+err I L Erre
+ers I L Ersu
+ert I L Eritai
+erw I L Erokwanas
+ese I L Ese Ejja
+esh I L Eshtehardi
+esi I L North Alaskan Inupiatun
+esk I L Northwest Alaska Inupiatun
+esl I L Egypt Sign Language
+esm I E Esuma
+esn I L Salvadoran Sign Language
+eso I L Estonian Sign Language
+esq I E Esselen
+ess I L Central Siberian Yupik
+est est est et I L Estonian
+esu I L Central Yupik
+etb I L Etebi
+etc I E Etchemin
+eth I L Ethiopian Sign Language
+etn I L Eton (Vanuatu)
+eto I L Eton (Cameroon)
+etr I L Edolo
+ets I L Yekhee
+ett I A Etruscan
+etu I L Ejagham
+etx I L Eten
+etz I L Semimi
+eur I L Europanto
+eus baq eus eu I L Basque
+eve I L Even
+evh I L Uvbie
+evn I L Evenki
+ewe ewe ewe ee I L Ewe
+ewo ewo ewo I L Ewondo
+ext I L Extremaduran
+eya I L Eyak
+eze I L Uzekwe
+faa I L Fasu
+fab I L Fa D'ambu
+fad I L Wagi
+faf I L Fagani
+fag I L Finongan
+fah I L Fali Of Baissa
+fai I L Faiwol
+faj I L Faita
+fak I L Fang (Cameroon)
+fal I L South Fali
+fam I L Fam
+fan fan fan I L Fang (Equatorial Guinea)
+fao fao fao fo I L Faroese
+fap I L Palor
+far I L Fataleka
+fas per fas fa M L Persian
+fat fat fat I L Fanti
+fau I L Fayu
+fax I L Fala
+fay I L Southwestern Fars
+faz I L Northwestern Fars
+fcs I L Quebec Sign Language
+fer I L Feroge
+ffm I L Maasina Fulfulde
+fgr I L Fongoro
+fia I L Nobiin
+fie I L Fyer
+fij fij fij fj I L Fijian
+fil fil fil I L Filipino
+fin fin fin fi I L Finnish
+fip I L Fipa
+fir I L Firan
+fit I L Tornedalen Finnish
+fiw I L Fiwaga
+fiz I L Izere
+fkv I L Kven Finnish
+fla I L Kalispel-Pend d'Oreille
+flh I L Foau
+fli I L Fali
+fll I L North Fali
+flm I L Falam Chin
+fln I L Flinders Island
+flr I L Fuliiru
+fly I L Tsotsitaal
+fmp I L Fe'fe'
+fmu I L Far Western Muria
+fng I L Fanagalo
+fni I L Fania
+fod I L Foodo
+foi I L Foi
+fom I L Foma
+fon fon fon I L Fon
+for I L Fore
+fos I E Siraya
+fpe I L Fernando Po Creole English
+fqs I L Fas
+fra fre fra fr I L French
+frc I L Cajun French
+frd I L Fordata
+frk I E Frankish
+frm frm frm I H Middle French (ca. 1400-1600)
+fro fro fro I H Old French (842-ca. 1400)
+frp I L Franco-Provençal
+frq I L Forak
+frr frr frr I L Northern Frisian
+frs frs frs I L Eastern Frisian
+frt I L Fortsenal
+fry fry fry fy I L Western Frisian
+fse I L Finnish Sign Language
+fsl I L French Sign Language
+fss I L Finnish-Swedish Sign Language
+fub I L Adamawa Fulfulde
+fuc I L Pulaar
+fud I L East Futuna
+fue I L Borgu Fulfulde
+fuf I L Pular
+fuh I L Western Niger Fulfulde
+fui I L Bagirmi Fulfulde
+fuj I L Ko
+ful ful ful ff M L Fulah
+fum I L Fum
+fun I L Fulniô
+fuq I L Central-Eastern Niger Fulfulde
+fur fur fur I L Friulian
+fut I L Futuna-Aniwa
+fuu I L Furu
+fuv I L Nigerian Fulfulde
+fuy I L Fuyug
+fvr I L Fur
+fwa I L Fwâi
+fwe I L Fwe
+gaa gaa gaa I L Ga
+gab I L Gabri
+gad I L Gaddang
+gae I L Guarequena
+gaf I L Gende
+gag I L Gagauz
+gah I L Alekano
+gai I L Borei
+gaj I L Gadsup
+gak I L Gamkonora
+gal I L Galoli
+gam I L Kandawo
+gan I L Gan Chinese
+gao I L Gants
+gap I L Gal
+gaq I L Gata'
+gar I L Galeya
+gas I L Adiwasi Garasia
+gat I L Kenati
+gau I L Mudhili Gadaba
+gav I L Gabutamon
+gaw I L Nobonob
+gax I L Borana-Arsi-Guji Oromo
+gay gay gay I L Gayo
+gaz I L West Central Oromo
+gba gba gba M L Gbaya (Central African Republic)
+gbb I L Kaytetye
+gbc I L Garawa
+gbd I L Karadjeri
+gbe I L Niksek
+gbf I L Gaikundi
+gbg I L Gbanziri
+gbh I L Defi Gbe
+gbi I L Galela
+gbj I L Bodo Gadaba
+gbk I L Gaddi
+gbl I L Gamit
+gbm I L Garhwali
+gbn I L Mo'da
+gbo I L Northern Grebo
+gbp I L Gbaya-Bossangoa
+gbq I L Gbaya-Bozoum
+gbr I L Gbagyi
+gbs I L Gbesi Gbe
+gbu I L Gagadu
+gbv I L Gbanu
+gbx I L Eastern Xwla Gbe
+gby I L Gbari
+gbz I L Zoroastrian Dari
+gcc I L Mali
+gcd I L Ganggalida
+gce I E Galice
+gcf I L Guadeloupean Creole French
+gcl I L Grenadian Creole English
+gcn I L Gaina
+gcr I L Guianese Creole French
+gct I L Colonia Tovar German
+gda I L Gade Lohar
+gdb I L Pottangi Ollar Gadaba
+gdc I L Gugu Badhun
+gdd I L Gedaged
+gde I L Gude
+gdf I L Guduf-Gava
+gdg I L Ga'dang
+gdh I L Gadjerawang
+gdi I L Gundi
+gdj I L Gurdjar
+gdk I L Gadang
+gdl I L Dirasha
+gdm I L Laal
+gdn I L Umanakaina
+gdo I L Ghodoberi
+gdq I L Mehri
+gdr I L Wipi
+gdu I L Gudu
+gdx I L Godwari
+gea I L Geruma
+geb I L Kire
+gec I L Gboloo Grebo
+ged I L Gade
+geg I L Gengle
+geh I L Hutterite German
+gei I L Gebe
+gej I L Gen
+gek I L Yiwom
+gel I L Kag-Fer-Jiir-Koor-Ror-Us-Zuksun
+gen I L Geman Deng
+geq I L Geme
+ges I L Geser-Gorom
+gew I L Gera
+gex I L Garre
+gey I L Enya
+gez gez gez I A Geez
+gfk I L Patpatar
+gft I E Gafat
+gga I L Gao
+ggb I L Gbii
+ggd I L Gugadj
+gge I L Guragone
+ggg I L Gurgula
+ggh I L Garreh-Ajuran
+ggk I E Kungarakany
+ggl I L Ganglau
+ggn I L Eastern Gurung
+ggo I L Southern Gondi
+ggr I E Aghu Tharnggalu
+ggt I L Gitua
+ggu I L Gagu
+ggw I L Gogodala
+gha I L Ghadamès
+ghc I E Hiberno-Scottish Gaelic
+ghe I L Southern Ghale
+ghh I L Northern Ghale
+ghk I L Geko Karen
+ghl I L Ghulfan
+ghn I L Ghanongga
+gho I E Ghomara
+ghr I L Ghera
+ghs I L Guhu-Samane
+ght I L Kutang Ghale
+gia I L Kitja
+gib I L Gibanawa
+gic I L Gail
+gid I L Gidar
+gig I L Goaria
+gil gil gil I L Gilbertese
+gim I L Gimi (Eastern Highlands)
+gin I L Hinukh
+gio I L Gelao
+gip I L Gimi (West New Britain)
+giq I L Green Gelao
+gir I L Red Gelao
+gis I L North Giziga
+git I L Gitxsan
+giw I L White Gelao
+gix I L Gilima
+giy I L Giyug
+giz I L South Giziga
+gji I L Geji
+gjk I L Kachi Koli
+gjn I L Gonja
+gju I L Gujari
+gka I L Guya
+gke I L Ndai
+gkn I L Gokana
+gkp I L Guinea Kpelle
+gla gla gla gd I L Scottish Gaelic
+glc I L Bon Gula
+gld I L Nanai
+gle gle gle ga I L Irish
+glg glg glg gl I L Galician
+glh I L Northwest Pashayi
+gli I E Guliguli
+glj I L Gula Iro
+glk I L Gilaki
+glo I L Galambu
+glr I L Glaro-Twabo
+glu I L Gula (Chad)
+glv glv glv gv I E Manx
+glw I L Glavda
+gly I E Gule
+gma I L Gambera
+gmb I L Gula'alaa
+gmd I L Mághdì
+gmh gmh gmh I H Middle High German (ca. 1050-1500)
+gmn I L Gimnime
+gmo I L Gamo-Gofa-Dawro
+gmu I L Gumalu
+gmx I L Magoma
+gmy I A Mycenaean Greek
+gna I L Kaansa
+gnb I L Gangte
+gnc I E Guanche
+gnd I L Zulgo-Gemzek
+gng I L Ngangam
+gnh I L Lere
+gni I L Gooniyandi
+gnk I L //Gana
+gnl I E Gangulu
+gnm I L Ginuman
+gnn I L Gumatj
+gno I L Northern Gondi
+gnq I L Gana
+gnr I E Gureng Gureng
+gnt I L Guntai
+gnu I L Gnau
+gnw I L Western Bolivian Guaraní
+gnz I L Ganzi
+goa I L Guro
+gob I L Playero
+goc I L Gorakor
+god I L Godié
+goe I L Gongduk
+gog I L Gogo
+goh goh goh I H Old High German (ca. 750-1050)
+goi I L Gobasi
+goj I L Gowlan
+gok I L Gowli
+gol I L Gola
+gom I L Goanese Konkani
+gon gon gon M L Gondi
+goo I L Gone Dau
+gop I L Yeretuar
+goq I L Gorap
+gor gor gor I L Gorontalo
+gos I L Gronings
+got got got I A Gothic
+gou I L Gavar
+gow I L Gorowa
+gox I L Gobu
+goy I L Goundo
+goz I L Gozarkhani
+gpa I L Gupa-Abawa
+gpn I L Taiap
+gqa I L Ga'anda
+gqi I L Guiqiong
+gqn I E Guana (Brazil)
+gqr I L Gor
+gra I L Rajput Garasia
+grb grb grb M L Grebo
+grc grc grc I H Ancient Greek (to 1453)
+grd I L Guruntum-Mbaaru
+grg I L Madi
+grh I L Gbiri-Niragu
+gri I L Ghari
+grj I L Southern Grebo
+grm I L Kota Marudu Talantang
+grn grn grn gn M L Guarani
+gro I L Groma
+grq I L Gorovu
+grr I L Taznatit
+grs I L Gresi
+grt I L Garo
+gru I L Kistane
+grv I L Central Grebo
+grw I L Gweda
+grx I L Guriaso
+gry I L Barclayville Grebo
+grz I L Guramalum
+gse I L Ghanaian Sign Language
+gsg I L German Sign Language
+gsl I L Gusilay
+gsm I L Guatemalan Sign Language
+gsn I L Gusan
+gsp I L Wasembo
+gss I L Greek Sign Language
+gsw gsw gsw I L Swiss German
+gta I L Guató
+gti I L Gbati-ri
+gua I L Shiki
+gub I L Guajajára
+guc I L Wayuu
+gud I L Yocoboué Dida
+gue I L Gurinji
+guf I L Gupapuyngu
+gug I L Paraguayan Guaraní
+guh I L Guahibo
+gui I L Eastern Bolivian Guaraní
+guj guj guj gu I L Gujarati
+guk I L Gumuz
+gul I L Sea Island Creole English
+gum I L Guambiano
+gun I L Mbyá Guaraní
+guo I L Guayabero
+gup I L Gunwinggu
+guq I L Aché
+gur I L Farefare
+gus I L Guinean Sign Language
+gut I L Maléku Jaíka
+guu I L Yanomamö
+guv I E Gey
+guw I L Gun
+gux I L Gourmanchéma
+guz I L Gusii
+gva I L Guana (Paraguay)
+gvc I L Guanano
+gve I L Duwet
+gvf I L Golin
+gvj I L Guajá
+gvl I L Gulay
+gvm I L Gurmana
+gvn I L Kuku-Yalanji
+gvo I L Gavião Do Jiparaná
+gvp I L Pará Gavião
+gvr I L Western Gurung
+gvs I L Gumawana
+gvy I E Guyani
+gwa I L Mbato
+gwb I L Gwa
+gwc I L Kalami
+gwd I L Gawwada
+gwe I L Gweno
+gwf I L Gowro
+gwg I L Moo
+gwi gwi gwi I L Gwichʼin
+gwj I L /Gwi
+gwn I L Gwandara
+gwr I L Gwere
+gwt I L Gawar-Bati
+gwu I L Guwamu
+gww I L Kwini
+gwx I L Gua
+gxx I L Wè Southern
+gya I L Northwest Gbaya
+gyb I L Garus
+gyd I L Kayardild
+gye I L Gyem
+gyf I L Gungabula
+gyg I L Gbayi
+gyi I L Gyele
+gym I L Ngäbere
+gyn I L Guyanese Creole English
+gyr I L Guarayu
+gyy I L Gunya
+gza I L Ganza
+gzi I L Gazi
+gzn I L Gane
+haa I L Han
+hab I L Hanoi Sign Language
+hac I L Gurani
+had I L Hatam
+hae I L Eastern Oromo
+haf I L Haiphong Sign Language
+hag I L Hanga
+hah I L Hahon
+hai hai hai M L Haida
+haj I L Hajong
+hak I L Hakka Chinese
+hal I L Halang
+ham I L Hewa
+han I L Hangaza
+hao I L Hakö
+hap I L Hupla
+haq I L Ha
+har I L Harari
+has I L Haisla
+hat hat hat ht I L Haitian
+hau hau hau ha I L Hausa
+hav I L Havu
+haw haw haw I L Hawaiian
+hax I L Southern Haida
+hay I L Haya
+haz I L Hazaragi
+hba I L Hamba
+hbb I L Huba
+hbn I L Heiban
+hbo I H Ancient Hebrew
+hbs sh M L Serbo-Croatian
+hbu I L Habu
+hca I L Andaman Creole Hindi
+hch I L Huichol
+hdn I L Northern Haida
+hds I L Honduras Sign Language
+hdy I L Hadiyya
+hea I L Northern Qiandong Hmong
+heb heb heb he I L Hebrew
+hed I L Herdé
+heg I L Helong
+heh I L Hehe
+hei I L Heiltsuk
+hem I L Hemba
+her her her hz I L Herero
+hgm I L Hai//om
+hgw I L Haigwai
+hhr I L Kerak
+hia I L Lamang
+hib I E Hibito
+hid I L Hidatsa
+hif I L Fijian Hindustani
+hig I L Kamwe
+hih I L Pamosu
+hii I L Hinduri
+hij I L Hijuk
+hik I L Seit-Kaitetu
+hil hil hil I L Hiligaynon
+hin hin hin hi I L Hindi
+hio I L Tsoa
+hir I L Himarimã
+hit hit hit I A Hittite
+hiw I L Hiw
+hix I L Hixkaryána
+hka I L Kahe
+hke I L Hunde
+hla I L Halia
+hlb I L Halbi
+hld I L Halang Doan
+hlt I L Nga La
+hlu I A Hieroglyphic Luwian
+hma I L Southern Mashan Hmong
+hmb I L Humburi Senni Songhay
+hmc I L Central Huishui Hmong
+hmd I L Northeastern Dian Hmong
+hme I L Eastern Huishui Hmong
+hmf I L Hmong Don
+hmg I L Southwestern Guiyang Hmong
+hmh I L Southwestern Huishui Hmong
+hmi I L Northern Huishui Hmong
+hmj I L Chonganjiang Hmong
+hmk I E Maek
+hml I L Luopohe Hmong
+hmm I L Central Mashan Hmong
+hmn hmn hmn M L Hmong
+hmo hmo hmo ho I L Hiri Motu
+hmp I L Northern Mashan Hmong
+hmq I L Eastern Qiandong Hmong
+hmr I L Hmar
+hms I L Southern Qiandong Hmong
+hmt I L Hamtai
+hmu I L Hamap
+hmv I L Hmong Dô
+hmw I L Western Mashan Hmong
+hmy I L Southern Guiyang Hmong
+hmz I L Hmong Shua
+hna I L Mina (Cameroon)
+hnd I L Southern Hindko
+hne I L Chhattisgarhi
+hnh I L //Ani
+hni I L Hani
+hnn I L Hanunoo
+hno I L Northern Hindko
+hns I L Caribbean Hindustani
+hnu I L Hung
+hoa I L Hoava
+hob I L Mari (Madang Province)
+hoc I L Ho
+hod I E Holma
+hoe I L Horom
+hoh I L Hobyót
+hoi I L Holikachuk
+hoj I L Harauti
+hol I L Holu
+hom I E Homa
+hoo I L Holoholo
+hop I L Hopi
+hor I E Horo
+hos I L Ho Chi Minh City Sign Language
+hot I L Hote
+hov I L Hovongan
+how I L Honi
+hoy I L Holiya
+hoz I L Hozo
+hpo I L Hpon
+hps I L Hawai'i Pidgin Sign Language
+hra I L Hrangkhol
+hre I L Hre
+hrk I L Haruku
+hro I L Haroi
+hrr I L Horuru
+hrt I L Hértevin
+hru I L Hruso
+hrv scr hrv hr I L Croatian
+hrz I L Harzani
+hsb hsb hsb I L Upper Sorbian
+hsf I L Southeastern Huastec
+hsh I L Hungarian Sign Language
+hsl I L Hausa Sign Language
+hsn I L Xiang Chinese
+hss I L Harsusi
+hti I L Hoti
+hto I L Minica Huitoto
+hts I L Hadza
+htu I L Hitu
+htx I A Middle Hittite
+hub I L Huambisa
+huc I L =/Hua
+hud I L Huaulu
+hue I L San Francisco Del Mar Huave
+huf I L Humene
+hug I L Huachipaeri
+huh I L Huilliche
+hui I L Huli
+huj I L Northern Guiyang Hmong
+huk I L Hulung
+hul I L Hula
+hum I L Hungana
+hun hun hun hu I L Hungarian
+huo I L Hu
+hup hup hup I L Hupa
+huq I L Tsat
+hur I L Halkomelem
+hus I L Veracruz Huastec
+hut I L Humla
+huu I L Murui Huitoto
+huv I L San Mateo Del Mar Huave
+huw I L Hukumina
+hux I L Nüpode Huitoto
+huy I L Hulaulá
+huz I L Hunzib
+hva I L San Luís Potosí Huastec
+hvc I L Haitian Vodoun Culture Language
+hve I L San Dionisio Del Mar Huave
+hvk I L Haveke
+hvn I L Sabu
+hvv I L Santa María Del Mar Huave
+hwa I L Wané
+hwc I L Hawai'i Creole English
+hwo I L Hwana
+hya I L Hya
+hye arm hye hy I L Armenian
+iai I L Iaai
+ian I L Iatmul
+iap I L Iapama
+iar I L Purari
+iba iba iba I L Iban
+ibb I L Ibibio
+ibd I L Iwaidja
+ibe I L Akpes
+ibg I L Ibanag
+ibi I L Ibilo
+ibl I L Ibaloi
+ibm I L Agoi
+ibn I L Ibino
+ibo ibo ibo ig I L Igbo
+ibr I L Ibuoro
+ibu I L Ibu
+iby I L Ibani
+ica I L Ede Ica
+ich I L Etkywan
+icl I L Icelandic Sign Language
+icr I L Islander Creole English
+ida I L Idakho-Isukha-Tiriki
+idb I L Indo-Portuguese
+idc I L Idon
+idd I L Ede Idaca
+ide I L Idere
+idi I L Idi
+ido ido ido io I C Ido
+idr I L Indri
+ids I L Idesa
+idt I L Idaté
+idu I L Idoma
+ifa I L Amganad Ifugao
+ifb I L Batad Ifugao
+ife I L Ifè
+iff I E Ifo
+ifk I L Tuwali Ifugao
+ifm I L Teke-Fuumu
+ifu I L Mayoyao Ifugao
+ify I L Keley-I Kallahan
+igb I L Ebira
+ige I L Igede
+igg I L Igana
+igl I L Igala
+igm I L Kanggape
+ign I L Ignaciano
+igo I L Isebe
+igs I C Interglossa
+igw I L Igwe
+ihb I L Iha Based Pidgin
+ihi I L Ihievbe
+ihp I L Iha
+iii iii iii ii I L Sichuan Yi
+ijc I L Izon
+ije I L Biseni
+ijj I L Ede Ije
+ijn I L Kalabari
+ijs I L Southeast Ijo
+ike I L Eastern Canadian Inuktitut
+iki I L Iko
+ikk I L Ika
+ikl I L Ikulu
+iko I L Olulumo-Ikom
+ikp I L Ikpeshi
+ikt I L Western Canadian Inuktitut
+iku iku iku iu M L Inuktitut
+ikv I L Iku-Gora-Ankwa
+ikw I L Ikwere
+ikx I L Ik
+ikz I L Ikizu
+ila I L Ile Ape
+ilb I L Ila
+ile ile ile ie I C Interlingue
+ilg I L Garig-Ilgar
+ili I L Ili Turki
+ilk I L Ilongot
+ill I L Iranun
+ilo ilo ilo I L Iloko
+ilu I L Ili'uun
+ilv I L Ilue
+ilw I L Talur
+ime I L Imeraguen
+imi I L Anamgura
+iml I E Miluk
+imn I L Imonda
+imo I L Imbongu
+imr I L Imroing
+ims I A Marsian
+imy I A Milyan
+ina ina ina ia I C Interlingua (International Auxiliary Language Association)
+inb I L Inga
+ind ind ind id I L Indonesian
+ing I L Degexit'an
+inh inh inh I L Ingush
+inj I L Jungle Inga
+inl I L Indonesian Sign Language
+inm I A Minaean
+inn I L Isinai
+ino I L Inoke-Yate
+inp I L Iñapari
+ins I L Indian Sign Language
+int I L Intha
+inz I E Ineseño
+ior I L Inor
+iou I L Tuma-Irumu
+iow I E Iowa-Oto
+ipi I L Ipili
+ipk ipk ipk ik M L Inupiaq
+ipo I L Ipiko
+iqu I L Iquito
+ire I L Iresim
+irh I L Irarutu
+iri I L Irigwe
+irk I L Iraqw
+irn I L Irántxe
+irr I L Ir
+iru I L Irula
+irx I L Kamberau
+iry I L Iraya
+isa I L Isabi
+isc I L Isconahua
+isd I L Isnag
+ise I L Italian Sign Language
+isg I L Irish Sign Language
+ish I L Esan
+isi I L Nkem-Nkum
+isl ice isl is I L Icelandic
+ism I L Masimasi
+isn I L Isanzu
+iso I L Isoko
+isr I L Israeli Sign Language
+ist I L Istriot
+isu I L Isu (Menchum Division)
+ita ita ita it I L Italian
+itb I L Binongan Itneg
+ite I E Itene
+iti I L Inlaod Itneg
+itk I L Judeo-Italian
+itl I L Itelmen
+itm I L Itu Mbon Uzo
+ito I L Itonama
+itr I L Iteri
+its I L Isekiri
+itt I L Maeng Itneg
+itu I L Itutang
+itv I L Itawit
+itw I L Ito
+itx I L Itik
+ity I L Moyadan Itneg
+itz I L Itzá
+ium I L Iu Mien
+ivb I L Ibatan
+ivv I L Ivatan
+iwk I L I-Wak
+iwm I L Iwam
+iwo I L Iwur
+iws I L Sepik Iwam
+ixc I L Ixcatec
+ixi I L Nebaj Ixil
+ixj I L Chajul Ixil
+ixl I L San Juan Cotzal Ixil
+iya I L Iyayu
+iyo I L Mesaka
+iyx I L Yaka (Congo)
+izh I L Ingrian
+izi I L Izi-Ezaa-Ikwo-Mgbo
+jaa I L Jamamadí
+jab I L Hyam
+jac I L Eastern Jacalteco
+jad I L Jahanka
+jae I L Yabem
+jaf I L Jara
+jah I L Jah Hut
+jai I L Western Jacalteco
+jaj I L Zazao
+jak I L Jakun
+jal I L Yalahatan
+jam I L Jamaican Creole English
+jao I L Yanyuwa
+jap I L Jaruára
+jaq I L Yaqay
+jar I L Jarawa (Nigeria)
+jas I L New Caledonian Javanese
+jat I L Jakati
+jau I L Yaur
+jav jav jav jv I L Javanese
+jax I L Jambi Malay
+jay I L Jarnango
+jaz I L Jawe
+jbe I L Judeo-Berber
+jbj I L Arandai
+jbn I L Nafusi
+jbo jbo jbo I C Lojban
+jbt I L Jabutí
+jbu I L Jukun Takum
+jcs I L Jamaican Country Sign Language
+jct I L Judeo-Crimean Tatar
+jda I L Jad
+jdg I L Jadgali
+jdt I L Judeo-Tat
+jeb I L Jebero
+jee I L Jerung
+jeg I L Jeng
+jeh I L Jeh
+jei I L Yei
+jek I L Jeri Kuo
+jel I L Yelmek
+jen I L Dza
+jer I L Jere
+jet I L Manem
+jeu I L Jonkor Bourmataguil
+jgb I E Ngbee
+jge I L Judeo-Georgian
+jgo I L Ngomba
+jhi I L Jehai
+jia I L Jina
+jib I L Jibu
+jic I L Tol
+jid I L Bu
+jie I L Jilbe
+jig I L Djingili
+jih I L Shangzhai
+jii I L Jiiddu
+jil I L Jilim
+jim I L Jimi (Cameroon)
+jio I L Jiamao
+jiq I L Guanyinqiao
+jit I L Jita
+jiu I L Youle Jinuo
+jiv I L Shuar
+jiy I L Buyuan Jinuo
+jko I L Kubo
+jku I L Labir
+jle I L Ngile
+jma I L Dima
+jmb I L Zumbun
+jmc I L Machame
+jmd I L Yamdena
+jmi I L Jimi (Nigeria)
+jml I L Jumli
+jmr I L Kamara
+jms I L Mashi (Nigeria)
+jmx I L Western Juxtlahuaca Mixtec
+jna I L Jangshung
+jnd I L Jandavra
+jng I E Yangman
+jni I L Janji
+jnj I L Yemsa
+jnl I L Rawat
+jns I L Jaunsari
+job I L Joba
+jod I L Wojenaka
+jor I E Jorá
+jos I L Jordanian Sign Language
+jow I L Jowulu
+jpn jpn jpn ja I L Japanese
+jpr jpr jpr I L Judeo-Persian
+jqr I L Jaqaru
+jra I L Jarai
+jrb jrb jrb M L Judeo-Arabic
+jrr I L Jiru
+jrt I L Jorto
+jru I L Japrería
+jsl I L Japanese Sign Language
+jua I L Júma
+jub I L Wannu
+juc I E Jurchen
+jud I L Worodougou
+juh I L Hõne
+juk I L Wapan
+jul I L Jirel
+jum I L Jumjum
+jun I L Juang
+juo I L Jiba
+jup I L Hupdë
+jur I L Jurúna
+jut I L Jutish
+juu I L Ju
+juw I L Wãpha
+juy I L Juray
+jvn I L Caribbean Javanese
+jwi I L Jwira-Pepesa
+jya I L Jiarong
+jye I L Judeo-Yemeni Arabic
+jyy I L Jaya
+kaa kaa kaa I L Kara-Kalpak
+kab kab kab I L Kabyle
+kac kac kac I L Kachin
+kad I L Kadara
+kae I E Ketangalan
+kag I L Kajaman
+kah I L Kara (Central African Republic)
+kai I L Karekare
+kaj I L Jju
+kak I L Kayapa Kallahan
+kal kal kal kl I L Kalaallisut
+kam kam kam I L Kamba (Kenya)
+kan kan kan kn I L Kannada
+kao I L Xaasongaxango
+kap I L Bezhta
+kaq I L Capanahua
+kas kas kas ks I L Kashmiri
+kat geo kat ka I L Georgian
+kau kau kau kr M L Kanuri
+kav I L Katukína
+kaw kaw kaw I A Kawi
+kax I L Kao
+kay I L Kamayurá
+kaz kaz kaz kk I L Kazakh
+kba I E Kalarko
+kbb I E Kaxuiâna
+kbc I L Kadiwéu
+kbd kbd kbd I L Kabardian
+kbe I L Kanju
+kbf I E Kakauhua
+kbg I L Khamba
+kbh I L Camsá
+kbj I L Kari
+kbk I L Grass Koiari
+kbl I L Kanembu
+kbm I L Iwal
+kbn I L Kare (Central African Republic)
+kbo I L Keliko
+kbp I L Kabiyé
+kbq I L Kamano
+kbr I L Kafa
+kbs I L Kande
+kbt I L Abadi
+kbu I L Kabutra
+kbv I L Dera (Indonesia)
+kbw I L Kaiep
+kbx I L Ap Ma
+kby I L Manga Kanuri
+kbz I L Duhwa
+kca I L Khanty
+kcb I L Kawacha
+kcc I L Lubila
+kcd I L Ngkâlmpw Kanum
+kce I L Kaivi
+kcf I L Ukaan
+kcg I L Tyap
+kch I L Vono
+kci I L Kamantan
+kcj I L Kobiana
+kck I L Kalanga
+kcl I L Kela (Papua New Guinea)
+kcm I L Gula (Central African Republic)
+kcn I L Nubi
+kco I L Kinalakna
+kcp I L Kanga
+kcq I L Kamo
+kcr I L Katla
+kcs I L Koenoem
+kct I L Kaian
+kcu I L Kami (Tanzania)
+kcv I L Kete
+kcw I L Kabwari
+kcx I L Kachama-Ganjule
+kcy I L Korandje
+kcz I L Konongo
+kda I E Worimi
+kdc I L Kutu
+kdd I L Yankunytjatjara
+kde I L Makonde
+kdf I L Mamusi
+kdg I L Seba
+kdh I L Tem
+kdi I L Kumam
+kdj I L Karamojong
+kdk I L Numee
+kdl I L Tsikimba
+kdm I L Kagoma
+kdn I L Kunda
+kdp I L Kaningdon-Nindem
+kdq I L Koch
+kdr I L Karaim
+kds I L Lahu Shi
+kdt I L Kuy
+kdu I L Kadaru
+kdv I L Kado
+kdw I L Koneraw
+kdx I L Kam
+kdy I L Keder
+kdz I L Kwaja
+kea I L Kabuverdianu
+keb I L Kélé
+kec I L Keiga
+ked I L Kerewe
+kee I L Eastern Keres
+kef I L Kpessi
+keg I L Tese
+kei I L Kei
+kej I L Kadar
+kek I L Kekchí
+kel I L Kela (Democratic Republic of Congo)
+kem I L Kemak
+ken I L Kenyang
+keo I L Kakwa
+kep I L Kaikadi
+keq I L Kamar
+ker I L Kera
+kes I L Kugbo
+ket I L Ket
+keu I L Akebu
+kev I L Kanikkaran
+kew I L West Kewa
+kex I L Kukna
+key I L Kupia
+kez I L Kukele
+kfa I L Kodagu
+kfb I L Northwestern Kolami
+kfc I L Konda-Dora
+kfd I L Korra Koraga
+kfe I L Kota (India)
+kff I L Koya
+kfg I L Kudiya
+kfh I L Kurichiya
+kfi I L Kurumba
+kfj I L Kemiehua
+kfk I L Kinnauri
+kfl I L Kung
+kfm I L Khunsari
+kfn I L Kuk
+kfo I L Koro (Côte d'Ivoire)
+kfp I L Korwa
+kfq I L Korku
+kfr I L Kachchi
+kfs I L Bilaspuri
+kft I L Kanjari
+kfu I L Katkari
+kfv I L Kurmukar
+kfw I L Kharam Naga
+kfx I L Kullu Pahari
+kfy I L Kumauni
+kfz I L Koromfé
+kga I L Koyaga
+kgb I L Kawe
+kgc I L Kasseng
+kgd I L Kataang
+kge I L Komering
+kgf I L Kube
+kgg I E Kusunda
+kgh I L Upper Tanudan Kalinga
+kgi I L Selangor Sign Language
+kgj I L Gamale Kham
+kgk I L Kaiwá
+kgl I L Kunggari
+kgm I E Karipúna
+kgn I L Karingani
+kgo I L Krongo
+kgp I L Kaingáng
+kgq I L Kamoro
+kgr I L Abun
+kgs I L Kumbainggar
+kgt I L Somyev
+kgu I L Kobol
+kgv I L Karas
+kgw I L Karon Dori
+kgx I L Kamaru
+kgy I L Kyerung
+kha kha kha I L Khasi
+khb I L Lü
+khc I L Tukang Besi North
+khd I L Bädi Kanum
+khe I L Korowai
+khf I L Khuen
+khg I L Khams Tibetan
+khh I L Kehu
+khj I L Kuturmi
+khk I L Halh Mongolian
+khl I L Lusi
+khm khm khm km I L Central Khmer
+khn I L Khandesi
+kho kho kho I A Khotanese
+khp I L Kapori
+khq I L Koyra Chiini Songhay
+khr I L Kharia
+khs I L Kasua
+kht I L Khamti
+khu I L Nkhumbi
+khv I L Khvarshi
+khw I L Khowar
+khx I L Kanu
+khy I L Kele (Democratic Republic of Congo)
+khz I L Keapara
+kia I L Kim
+kib I L Koalib
+kic I L Kickapoo
+kid I L Koshin
+kie I L Kibet
+kif I L Eastern Parbate
+kig I L Kimaama
+kih I L Kilmeri
+kii I E Kitsai
+kij I L Kilivila
+kik kik kik ki I L Kikuyu
+kil I L Kariya
+kim I L Karagas
+kin kin kin rw I L Kinyarwanda
+kio I L Kiowa
+kip I L Sheshi Kham
+kiq I L Kosadle
+kir kir kir ky I L Kirghiz
+kis I L Kis
+kit I L Agob
+kiu I L Kirmanjki
+kiv I L Kimbu
+kiw I L Northeast Kiwai
+kiy I L Kirikiri
+kiz I L Kisi
+kja I L Mlap
+kjb I L Eastern Kanjobal
+kjc I L Coastal Konjo
+kjd I L Southern Kiwai
+kje I L Kisar
+kjf I L Khalaj
+kjg I L Khmu
+kjh I L Khakas
+kji I L Zabana
+kjj I L Khinalugh
+kjk I L Highland Konjo
+kjl I L Western Parbate
+kjm I L Kháng
+kjn I L Kunjen
+kjo I L Harijan Kinnauri
+kjp I L Pwo Eastern Karen
+kjq I L Western Keres
+kjr I L Kurudu
+kjs I L East Kewa
+kjt I L Phrae Pwo Karen
+kju I L Kashaya
+kjx I L Ramopa
+kjy I L Erave
+kjz I L Bumthangkha
+kka I L Kakanda
+kkb I L Kwerisa
+kkc I L Odoodee
+kkd I L Kinuku
+kke I L Kakabe
+kkg I L Mabaka Valley Kalinga
+kkh I L Khün
+kki I L Kagulu
+kkj I L Kako
+kkk I L Kokota
+kkl I L Kosarek Yale
+kkm I L Kiong
+kkn I L Kon Keu
+kko I L Karko
+kkp I L Gugubera
+kkq I L Kaiku
+kkr I L Kir-Balar
+kks I L Giiwo
+kkt I L Koi
+kku I L Tumi
+kkv I L Kangean
+kkw I L Teke-Kukuya
+kkx I L Kohin
+kky I L Guguyimidjir
+kkz I L Kaska
+kla I L Klamath-Modoc
+klb I L Kiliwa
+klc I L Kolbila
+kld I L Gamilaraay
+kle I L Kulung (Nepal)
+klf I L Kendeje
+klg I L Tagakaulu Kalagan
+klh I L Weliki
+kli I L Kalumpang
+klj I L Turkic Khalaj
+klk I L Kono (Nigeria)
+kll I L Kagan Kalagan
+klm I L Kolom
+kln I L Kalenjin
+klo I L Kapya
+klp I L Kamasa
+klq I L Rumu
+klr I L Khaling
+kls I L Kalasha
+klt I L Nukna
+klu I L Klao
+klv I L Maskelynes
+klw I L Lindu
+klx I L Koluwawa
+kly I L Kalao
+klz I L Kabola
+kma I L Konni
+kmb kmb kmb I L Kimbundu
+kmc I L Southern Dong
+kmd I L Madukayang Kalinga
+kme I L Bakole
+kmf I L Kare (Papua New Guinea)
+kmg I L Kâte
+kmh I L Kalam
+kmi I L Kami (Nigeria)
+kmj I L Kumarbhag Paharia
+kmk I L Limos Kalinga
+kml I L Lower Tanudan Kalinga
+kmm I L Kom (India)
+kmn I L Awtuw
+kmo I L Kwoma
+kmp I L Gimme
+kmq I L Kwama
+kmr I L Northern Kurdish
+kms I L Kamasau
+kmt I L Kemtuik
+kmu I L Kanite
+kmv I L Karipúna Creole French
+kmw I L Komo (Democratic Republic of Congo)
+kmx I L Waboda
+kmy I L Koma
+kmz I L Khorasani Turkish
+kna I L Dera (Nigeria)
+knb I L Lubuagan Kalinga
+knc I L Central Kanuri
+knd I L Konda
+kne I L Kankanaey
+knf I L Mankanya
+kng I L Koongo
+knh I L Kayan River Kenyah
+kni I L Kanufi
+knj I L Western Kanjobal
+knk I L Kuranko
+knl I L Keninjal
+knm I L Kanamarí
+knn I L Konkani (individual language)
+kno I L Kono (Sierra Leone)
+knp I L Kwanja
+knq I L Kintaq
+knr I L Kaningra
+kns I L Kensiu
+knt I L Panoan Katukína
+knu I L Kono (Guinea)
+knv I L Tabo
+knw I L Kung-Ekoka
+knx I L Kendayan
+kny I L Kanyok
+knz I L Kalamsé
+koa I L Konomala
+kob I L Kohoroxitari
+koc I E Kpati
+kod I L Kodi
+koe I L Kacipo-Balesi
+kof I E Kubi
+kog I L Cogui
+koh I L Koyo
+koi I L Komi-Permyak
+koj I L Sara Dunjo
+kok kok kok M L Konkani (macrolanguage)
+kol I L Kol (Papua New Guinea)
+kom kom kom kv M L Komi
+kon kon kon kg M L Kongo
+koo I L Konjo
+kop I L Kwato
+koq I L Kota (Gabon)
+kor kor kor ko I L Korean
+kos kos kos I L Kosraean
+kot I L Lagwan
+kou I L Koke
+kov I L Kudu-Camo
+kow I L Kugama
+kox I E Coxima
+koy I L Koyukon
+koz I L Korak
+kpa I L Kutto
+kpb I L Mullu Kurumba
+kpc I L Curripaco
+kpd I L Koba
+kpe kpe kpe M L Kpelle
+kpf I L Komba
+kpg I L Kapingamarangi
+kph I L Kplang
+kpi I L Kofei
+kpj I L Karajá
+kpk I L Kpan
+kpl I L Kpala
+kpm I L Koho
+kpn I E Kepkiriwát
+kpo I L Ikposo
+kpp I L Paku Karen
+kpq I L Korupun-Sela
+kpr I L Korafe
+kps I L Tehit
+kpt I L Karata
+kpu I L Kafoa
+kpv I L Komi-Zyrian
+kpw I L Kobon
+kpx I L Mountain Koiali
+kpy I L Koryak
+kpz I L Kupsabiny
+kqa I L Mum
+kqb I L Kovai
+kqc I L Doromu
+kqd I L Koy Sanjaq Surat
+kqe I L Kalagan
+kqf I L Kakabai
+kqg I L Khe
+kqh I L Kisankasa
+kqi I L Koitabu
+kqj I L Koromira
+kqk I L Kotafon Gbe
+kql I L Kyenele
+kqm I L Khisa
+kqn I L Kaonde
+kqo I L Eastern Krahn
+kqp I L Kimré
+kqq I L Krenak
+kqr I L Kimaragang
+kqs I L Northern Kissi
+kqt I L Klias River Kadazan
+kqu I E Seroa
+kqv I L Okolod
+kqw I L Kandas
+kqx I L Mser
+kqy I L Koorete
+kqz I E Korana
+kra I L Kumhali
+krb I E Karkin
+krc krc krc I L Karachay-Balkar
+krd I L Kairui-Midiki
+kre I L Kreen-Akarore
+krf I L Koro (Vanuatu)
+krg I L North Korowai
+krh I L Kurama
+kri I L Krio
+krj I L Kinaray-A
+krk I L Kerek
+krl krl krl I L Karelian
+krm I L Krim
+krn I L Sapo
+krp I L Korop
+krq I L Krui
+krr I L Kru'ng 2
+krs I L Gbaya (Sudan)
+krt I L Tumari Kanuri
+kru kru kru I L Kurukh
+krv I L Kravet
+krw I L Western Krahn
+krx I L Karon
+kry I L Kryts
+krz I L Sota Kanum
+ksa I L Shuwa-Zamani
+ksb I L Shambala
+ksc I L Southern Kalinga
+ksd I L Kuanua
+kse I L Kuni
+ksf I L Bafia
+ksg I L Kusaghe
+ksh I L Kölsch
+ksi I L Krisa
+ksj I L Uare
+ksk I L Kansa
+ksl I L Kumalu
+ksm I L Kumba
+ksn I L Kasiguranin
+kso I L Kofa
+ksp I L Kaba
+ksq I L Kwaami
+ksr I L Borong
+kss I L Southern Kisi
+kst I L Winyé
+ksu I L Khamyang
+ksv I L Kusu
+ksw I L S'gaw Karen
+ksx I L Kedang
+ksy I L Kharia Thar
+ksz I L Koraku
+kta I L Katua
+ktb I L Kambaata
+ktc I L Kholok
+ktd I L Kokata
+kte I L Nubri
+ktf I L Kwami
+ktg I E Kalkutung
+kth I L Karanga
+kti I L North Muyu
+ktj I L Plapo Krumen
+ktk I E Kaniet
+ktl I L Koroshi
+ktm I L Kurti
+ktn I L Karitiâna
+kto I L Kuot
+ktp I L Kaduo
+ktq I E Katabaga
+ktr I L Kota Marudu Tinagas
+kts I L South Muyu
+ktt I L Ketum
+ktu I L Kituba (Democratic Republic of Congo)
+ktv I L Eastern Katu
+ktw I E Kato
+ktx I L Kaxararí
+kty I L Kango (Bas-Uélé District)
+ktz I L Ju/'hoan
+kua kua kua kj I L Kuanyama
+kub I L Kutep
+kud I L 'Auhelawa
+kue I L Kuman
+kuf I L Western Katu
+kug I L Kupa
+kuh I L Kushi
+kui I L Kuikúro-Kalapálo
+kuj I L Kuria
+kuk I L Kepo'
+kul I L Kulere
+kum kum kum I L Kumyk
+kun I L Kunama
+kuo I L Kumukio
+kup I L Kunimaipa
+kuq I L Karipuná
+kur kur kur ku M L Kurdish
+kus I L Kusaal
+kut kut kut I L Kutenai
+kuu I L Upper Kuskokwim
+kuv I L Kur
+kuw I L Kpagua
+kux I L Kukatja
+kuy I L Kuuku-Ya'u
+kuz I E Kunza
+kva I L Bagvalal
+kvb I L Kubu
+kvc I L Kove
+kvd I L Kui (Indonesia)
+kve I L Kalabakan
+kvf I L Kabalai
+kvg I L Kuni-Boazi
+kvh I L Komodo
+kvi I L Kwang
+kvj I L Psikye
+kvk I L Korean Sign Language
+kvl I L Brek Karen
+kvm I L Kendem
+kvn I L Border Kuna
+kvo I L Dobel
+kvp I L Kompane
+kvq I L Geba Karen
+kvr I L Kerinci
+kvs I L Kunggara
+kvt I L Lahta Karen
+kvu I L Yinbaw Karen
+kvv I L Kola
+kvw I L Wersing
+kvx I L Parkari Koli
+kvy I L Yintale Karen
+kvz I L Tsakwambo
+kwa I L Dâw
+kwb I L Kwa
+kwc I L Likwala
+kwd I L Kwaio
+kwe I L Kwerba
+kwf I L Kwara'ae
+kwg I L Kaba Deme
+kwh I L Kowiai
+kwi I L Awa-Cuaiquer
+kwj I L Kwanga
+kwk I L Kwakiutl
+kwl I L Kofyar
+kwm I L Kwambi
+kwn I L Kwangali
+kwo I L Kwomtari
+kwp I L Kodia
+kwq I L Kwak
+kwr I L Kwer
+kws I L Kwese
+kwt I L Kwesten
+kwu I L Kwakum
+kwv I L Kaba Na
+kww I L Kwinti
+kwx I L Khirwar
+kwy I L San Salvador Kongo
+kwz I E Kwadi
+kxa I L Kairiru
+kxb I L Krobu
+kxc I L Komso
+kxd I L Brunei
+kxe I L Kakihum
+kxf I L Manumanaw Karen
+kxg I L Katingan
+kxh I L Karo (Ethiopia)
+kxi I L Keningau Murut
+kxj I L Kulfa
+kxk I L Zayein Karen
+kxl I L Nepali Kurux
+kxm I L Northern Khmer
+kxn I L Kanowit
+kxo I E Kanoé
+kxp I L Wadiyara Koli
+kxq I L Smärky Kanum
+kxr I L Koro (Papua New Guinea)
+kxs I L Kangjia
+kxt I L Koiwat
+kxu I L Kui (India)
+kxv I L Kuvi
+kxw I L Konai
+kxx I L Likuba
+kxy I L Kayong
+kxz I L Kerewo
+kya I L Kwaya
+kyb I L Butbut Kalinga
+kyc I L Kyaka
+kyd I L Karey
+kye I L Krache
+kyf I L Kouya
+kyg I L Keyagana
+kyh I L Karok
+kyi I L Kiput
+kyj I L Karao
+kyk I L Kamayo
+kyl I L Kalapuya
+kym I L Kpatili
+kyn I L Karolanos
+kyo I L Kelon
+kyp I L Kang
+kyq I L Kenga
+kyr I L Kuruáya
+kys I L Baram Kayan
+kyt I L Kayagar
+kyu I L Western Kayah
+kyv I L Kayort
+kyw I L Kudmali
+kyx I L Rapoisi
+kyy I L Kambaira
+kyz I L Kayabí
+kza I L Western Karaboro
+kzb I L Kaibobo
+kzc I L Bondoukou Kulango
+kzd I L Kadai
+kze I L Kosena
+kzf I L Da'a Kaili
+kzg I L Kikai
+kzh I L Kenuzi-Dongola
+kzi I L Kelabit
+kzj I L Coastal Kadazan
+kzk I E Kazukuru
+kzl I L Kayeli
+kzm I L Kais
+kzn I L Kokola
+kzo I L Kaningi
+kzp I L Kaidipang
+kzq I L Kaike
+kzr I L Karang
+kzs I L Sugut Dusun
+kzt I L Tambunan Dusun
+kzu I L Kayupulau
+kzv I L Komyandaret
+kzw I E Karirí-Xocó
+kzx I L Kamarian
+kzy I L Kango (Tshopo District)
+kzz I L Kalabra
+laa I L Lapuyan Subanun
+lac I L Lacandon
+lad lad lad I L Ladino
+lae I L Pattani
+laf I L Lafofa
+lag I L Langi
+lah lah lah M L Lahnda
+lai I L Lambya
+laj I L Lango (Uganda)
+lak I L Laka (Nigeria)
+lal I L Lalia
+lam lam lam I L Lamba
+lan I L Laru
+lao lao lao lo I L Lao
+lap I L Laka (Chad)
+laq I L Qabiao
+lar I L Larteh
+las I L Lama (Togo)
+lat lat lat la I A Latin
+lau I L Laba
+lav lav lav lv I L Latvian
+law I L Lauje
+lax I L Tiwa
+lay I L Lama (Myanmar)
+laz I E Aribwatsa
+lba I L Lui
+lbb I L Label
+lbc I L Lakkia
+lbe I L Lak
+lbf I L Tinani
+lbg I L Laopang
+lbi I L La'bi
+lbj I L Ladakhi
+lbm I L Lodhi
+lbn I L Lamet
+lbo I L Laven
+lbq I L Wampar
+lbr I L Northern Lorung
+lbs I L Libyan Sign Language
+lbt I L Lachi
+lbu I L Labu
+lbv I L Lavatbura-Lamusong
+lbw I L Tolaki
+lbx I L Lawangan
+lby I L Lamu-Lamu
+lbz I L Lardil
+lcc I L Legenyem
+lcd I L Lola
+lce I L Loncong
+lcf I L Lubu
+lch I L Luchazi
+lcl I L Lisela
+lcm I L Tungag
+lcp I L Western Lawa
+lcq I L Luhu
+lcs I L Lisabata-Nuniali
+ldb I L Idun
+ldd I L Luri
+ldg I L Lenyima
+ldh I L Lamja-Dengsa-Tola
+ldi I L Laari
+ldj I L Lemoro
+ldk I L Leelau
+ldl I L Kaan
+ldm I L Landoma
+ldn I C Láadan
+ldo I L Loo
+ldp I L Tso
+ldq I L Lufu
+lea I L Lega-Shabunda
+leb I L Lala-Bisa
+lec I L Leco
+led I L Lendu
+lee I L Lyélé
+lef I L Lelemi
+leg I L Lengua
+leh I L Lenje
+lei I L Lemio
+lej I L Lengola
+lek I L Leipon
+lel I L Lele (Democratic Republic of Congo)
+lem I L Nomaande
+len I L Lenca
+leo I L Leti (Cameroon)
+lep I L Lepcha
+leq I L Lembena
+ler I L Lenkau
+les I L Lese
+let I L Lesing-Gelimi
+leu I L Kara (Papua New Guinea)
+lev I L Lamma
+lew I L Ledo Kaili
+lex I L Luang
+ley I L Lemolang
+lez lez lez I L Lezghian
+lfa I L Lefa
+lga I L Lungga
+lgb I L Laghu
+lgg I L Lugbara
+lgh I L Laghuu
+lgi I L Lengilu
+lgk I L Lingarak
+lgl I L Wala
+lgm I L Lega-Mwenga
+lgn I L Opuuo
+lgq I L Logba
+lgr I L Lengo
+lgt I L Pahi
+lgu I L Longgu
+lgz I L Ligenza
+lha I L Laha (Viet Nam)
+lhh I L Laha (Indonesia)
+lhl I L Lahul Lohar
+lhm I L Lhomi
+lhn I L Lahanan
+lhp I L Lhokpu
+lhs I E Mlahsö
+lht I L Toga
+lhu I L Lahu
+lia I L West-Central Limba
+lib I L Likum
+lic I L Hlai
+lid I L Nyindrou
+lie I L Likila
+lif I L Limbu
+lig I L Ligbi
+lih I L Lihir
+lii I L Lingkhim
+lij I L Ligurian
+lik I L Lika
+lil I L Lillooet
+lim lim lim li I L Limburgan
+lin lin lin ln I L Lingala
+lio I L Liki
+lip I L Sekpele
+liq I L Libido
+lir I L Liberian English
+lis I L Lisu
+lit lit lit lt I L Lithuanian
+liu I L Logorik
+liv I L Liv
+liw I L Lembak
+lix I L Liabuku
+liy I L Banda-Bambari
+liz I L Libinza
+lje I L Rampi
+lji I L Laiyolo
+ljl I L Li'o
+ljp I L Lampung
+lka I L Lakalei
+lke I L Kenyi
+lkh I L Lakha
+lki I L Laki
+lkj I L Remun
+lkl I L Laeko-Libuat
+lkn I L Lakona
+lkr I L Päri
+lkt I L Lakota
+lky I L Lokoya
+lla I L Lala-Roba
+llb I L Lolo
+llc I L Lele (Guinea)
+lld I L Ladin
+lle I L Lele (Papua New Guinea)
+llf I E Hermit
+llg I L Lole
+lli I L Teke-Laali
+llk I L Lelak
+lll I L Lilau
+llm I L Lasalimu
+lln I L Lele (Chad)
+llo I L Khlor
+llp I L North Efate
+llq I L Lolak
+lls I L Lithuanian Sign Language
+llu I L Lau
+llx I L Lauan
+lma I L East Limba
+lmb I L Merei
+lmc I L Limilngan
+lmd I L Lumun
+lme I L Pévé
+lmf I L South Lembata
+lmg I L Lamogai
+lmh I L Lambichhong
+lmi I L Lombi
+lmj I L West Lembata
+lmk I L Lamkang
+lml I L Hano
+lmm I L Lamam
+lmn I L Lambadi
+lmo I L Lombard
+lmp I L Limbum
+lmq I L Lamatuka
+lmr I L Lamalera
+lmt I L Lematang
+lmu I L Lamenu
+lmv I L Lomaiviti
+lmw I L Lake Miwok
+lmx I L Laimbue
+lmy I L Lamboya
+lmz I E Lumbee
+lna I L Langbashe
+lnb I L Mbalanhu
+lnd I L Lundayeh
+lng I A Langobardic
+lnh I L Lanoh
+lni I L Lantanai
+lnj I E Leningitij
+lnl I L South Central Banda
+lnm I L Langam
+lnn I L Lorediakarkar
+lno I L Lango (Sudan)
+lns I L Lamnso'
+lnt I L Lintang
+lnu I L Longuda
+lnz I L Lonzo
+loa I L Loloda
+lob I L Lobi
+loc I L Inonhan
+lod I L Berawan
+loe I L Coastal Saluan
+lof I L Logol
+log I L Logo
+loh I L Narim
+loi I L Loma (Côte d'Ivoire)
+loj I L Lou
+lok I L Loko
+lol lol lol I L Mongo
+lom I L Loma (Liberia)
+lon I L Malawi Lomwe
+loo I L Lombo
+lop I L Lopa
+loq I L Lobala
+lor I L Téén
+los I L Loniu
+lot I L Otuho
+lou I L Louisiana Creole French
+lov I L Lopi
+low I L Tampias Lobu
+lox I L Loun
+loy I L Lowa
+loz loz loz I L Lozi
+lpa I L Lelepa
+lpe I L Lepki
+lpo I L Lipo
+lpx I L Lopit
+lra I L Lara'
+lrc I L Northern Luri
+lre I E Laurentian
+lrg I L Laragia
+lrk I L Loarki
+lrl I L Lari
+lrn I L Lorang
+lro I L Laro
+lrr I L Southern Lorung
+lrv I L Larevat
+lsa I L Lasgerdi
+lsd I L Lishana Deni
+lse I L Lusengo
+lsg I L Lyons Sign Language
+lsi I L Lashi
+lsl I L Latvian Sign Language
+lso I L Laos Sign Language
+lsr I L Aruop
+lss I L Lasi
+ltc I H Late Middle Chinese
+lti I L Leti (Indonesia)
+ltu I L Latu
+ltz ltz ltz lb I L Luxembourgish
+lua lua lua I L Luba-Lulua
+lub lub lub lu I L Luba-Katanga
+luc I L Aringa
+lud I L Ludian
+lue I L Luvale
+luf I L Laua
+lug lug lug lg I L Ganda
+lui lui lui I L Luiseno
+luj I L Luna
+luk I L Lunanakha
+lul I L Olu'bo
+lum I L Luimbi
+lun lun lun I L Lunda
+luo luo luo I L Luo (Kenya and Tanzania)
+lup I L Lumbu
+luq I L Lucumi
+lur I L Laura
+lus lus lus I L Lushai
+lut I L Lushootseed
+luu I L Lumba-Yakkha
+luv I L Luwati
+luw I L Luo
+luy I L Luyia
+luz I L Southern Luri
+lva I L Maku'a
+lvk I L Lavukaleve
+lvu I L Levuka
+lwa I L Lwalu
+lwe I L Lewo Eleng
+lwh I L White Lachi
+lwl I L Eastern Lawa
+lwo I L Luwo
+lwt I L Lewotobi
+lww I L Lewo
+lya I L Layakha
+lyn I L Luyana
+lzl I L Litzlitz
+lzz I L Laz
+maa I L San Jerónimo Tecóatl Mazatec
+mab I L Yutanduchi Mixtec
+mad mad mad I L Madurese
+mae I L Bo-Rukul
+maf I L Mafa
+mag mag mag I L Magahi
+mah mah mah mh I L Marshallese
+mai mai mai I L Maithili
+maj I L Jalapa De Díaz Mazatec
+mak mak mak I L Makasar
+mal mal mal ml I L Malayalam
+mam I L Northern Mam
+man man man M L Mandingo
+maq I L Chiquihuitlán Mazatec
+mar mar mar mr I L Marathi
+mas mas mas I L Masai
+mat I L San Francisco Matlatzinca
+mau I L Huautla Mazatec
+mav I L Sateré-Mawé
+maw I L Mampruli
+max I L North Moluccan Malay
+maz I L Central Mazahua
+mba I L Higaonon
+mbb I L Western Bukidnon Manobo
+mbc I L Macushi
+mbd I L Dibabawon Manobo
+mbe I E Molale
+mbf I L Baba Malay
+mbg I L Northern Nambikuára
+mbh I L Mangseng
+mbi I L Ilianen Manobo
+mbj I L Nadëb
+mbk I L Malol
+mbl I L Maxakalí
+mbm I L Ombamba
+mbn I L Macaguán
+mbo I L Mbo (Cameroon)
+mbp I L Malayo
+mbq I L Maisin
+mbr I L Nukak Makú
+mbs I L Sarangani Manobo
+mbt I L Matigsalug Manobo
+mbu I L Mbula-Bwazza
+mbv I L Mbulungish
+mbw I L Maring
+mbx I L Mari (East Sepik Province)
+mby I L Memoni
+mbz I L Amoltepec Mixtec
+mca I L Maca
+mcb I L Machiguenga
+mcc I L Bitur
+mcd I L Sharanahua
+mce I L Itundujia Mixtec
+mcf I L Matsés
+mcg I L Mapoyo
+mch I L Maquiritari
+mci I L Mese
+mcj I L Mvanip
+mck I L Mbunda
+mcl I E Macaguaje
+mcm I L Malaccan Creole Portuguese
+mcn I L Masana
+mco I L Coatlán Mixe
+mcp I L Makaa
+mcq I L Ese
+mcr I L Menya
+mcs I L Mambai
+mct I L Mengisa
+mcu I L Cameroon Mambila
+mcv I L Minanibai
+mcw I L Mawa (Chad)
+mcx I L Mpiemo
+mcy I L South Watut
+mcz I L Mawan
+mda I L Mada (Nigeria)
+mdb I L Morigi
+mdc I L Male (Papua New Guinea)
+mdd I L Mbum
+mde I L Maba (Chad)
+mdf mdf mdf I L Moksha
+mdg I L Massalat
+mdh I L Maguindanao
+mdi I L Mamvu
+mdj I L Mangbetu
+mdk I L Mangbutu
+mdl I L Maltese Sign Language
+mdm I L Mayogo
+mdn I L Mbati
+mdo I L Southwest Gbaya
+mdp I L Mbala
+mdq I L Mbole
+mdr mdr mdr I L Mandar
+mds I L Maria (Papua New Guinea)
+mdt I L Mbere
+mdu I L Mboko
+mdv I L Santa Lucía Monteverde Mixtec
+mdw I L Mbosi
+mdx I L Dizi
+mdy I L Male (Ethiopia)
+mdz I L Suruí Do Pará
+mea I L Menka
+meb I L Ikobi-Mena
+mec I L Mara
+med I L Melpa
+mee I L Mengen
+mef I L Megam
+meg I L Mea
+meh I L Southwestern Tlaxiaco Mixtec
+mei I L Midob
+mej I L Meyah
+mek I L Mekeo
+mel I L Melanau
+mem I E Mangala
+men men men I L Mende (Sierra Leone)
+meo I L Kedah Malay
+mep I L Miriwung
+meq I L Merey
+mer I L Meru
+mes I L Masmaje
+met I L Mato
+meu I L Motu
+mev I L Mann
+mew I L Maaka
+mey I L Hassaniyya
+mez I L Menominee
+mfa I L Pattani Malay
+mfb I L Lom
+mfc I L Mba
+mfd I L Mendankwe-Nkwen
+mfe I L Morisyen
+mff I L Naki
+mfg I L Mixifore
+mfh I L Matal
+mfi I L Wandala
+mfj I L Mefele
+mfk I L North Mofu
+mfl I L Putai
+mfm I L Marghi South
+mfn I L Cross River Mbembe
+mfo I L Mbe
+mfp I L Makassar Malay
+mfq I L Moba
+mfr I L Marithiel
+mfs I L Mexican Sign Language
+mft I L Mokerang
+mfu I L Mbwela
+mfv I L Mandjak
+mfw I E Mulaha
+mfx I L Melo
+mfy I L Mayo
+mfz I L Mabaan
+mga mga mga I H Middle Irish (900-1200)
+mgb I L Mararit
+mgc I L Morokodo
+mgd I L Moru
+mge I L Mango
+mgf I L Maklew
+mgg I L Mpongmpong
+mgh I L Makhuwa-Meetto
+mgi I L Lijili
+mgj I L Abureni
+mgk I L Mawes
+mgl I L Maleu-Kilenge
+mgm I L Mambae
+mgn I L Mbangi
+mgo I L Meta'
+mgp I L Eastern Magar
+mgq I L Malila
+mgr I L Mambwe-Lungu
+mgs I L Manda (Tanzania)
+mgt I L Mongol
+mgu I L Mailu
+mgv I L Matengo
+mgw I L Matumbi
+mgx I L Omati
+mgy I L Mbunga
+mgz I L Mbugwe
+mha I L Manda (India)
+mhb I L Mahongwe
+mhc I L Mocho
+mhd I L Mbugu
+mhe I L Besisi
+mhf I L Mamaa
+mhg I L Margu
+mhh I L Maskoy Pidgin
+mhi I L Ma'di
+mhj I L Mogholi
+mhk I L Mungaka
+mhl I L Mauwake
+mhm I L Makhuwa-Moniga
+mhn I L Mócheno
+mho I L Mashi (Zambia)
+mhp I L Balinese Malay
+mhq I L Mandan
+mhr I L Eastern Mari
+mhs I L Buru (Indonesia)
+mht I L Mandahuaca
+mhu I L Digaro-Mishmi
+mhv I L Arakanese
+mhw I L Mbukushu
+mhx I L Maru
+mhy I L Ma'anyan
+mhz I L Mor (Mor Islands)
+mia I E Miami
+mib I L Atatláhuca Mixtec
+mic mic mic I L Mi'kmaq
+mid I L Mandaic
+mie I L Ocotepec Mixtec
+mif I L Mofu-Gudur
+mig I L San Miguel El Grande Mixtec
+mih I L Chayuco Mixtec
+mii I L Chigmecatitlán Mixtec
+mij I L Abar
+mik I L Mikasuki
+mil I L Peñoles Mixtec
+mim I L Alacatlatzala Mixtec
+min min min I L Minangkabau
+mio I L Pinotepa Nacional Mixtec
+mip I L Apasco-Apoala Mixtec
+miq I L Mískito
+mir I L Isthmus Mixe
+mit I L Southern Puebla Mixtec
+miu I L Cacaloxtepec Mixtec
+miv I L Mimi
+miw I L Akoye
+mix I L Mixtepec Mixtec
+miy I L Ayutla Mixtec
+miz I L Coatzospan Mixtec
+mja I L Mahei
+mjc I L San Juan Colorado Mixtec
+mjd I L Northwest Maidu
+mje I E Muskum
+mjg I L Tu
+mjh I L Mwera (Nyasa)
+mji I L Kim Mun
+mjj I L Mawak
+mjk I L Matukar
+mjl I L Mandeali
+mjm I L Medebur
+mjn I L Ma (Papua New Guinea)
+mjo I L Malankuravan
+mjp I L Malapandaram
+mjq I L Malaryan
+mjr I L Malavedan
+mjs I L Miship
+mjt I L Sauria Paharia
+mju I L Manna-Dora
+mjv I L Mannan
+mjw I L Karbi
+mjx I L Mahali
+mjy I E Mahican
+mjz I L Majhi
+mka I L Mbre
+mkb I L Mal Paharia
+mkc I L Siliput
+mkd mac mkd mk I L Macedonian
+mke I L Mawchi
+mkf I L Miya
+mkg I L Mak (China)
+mki I L Dhatki
+mkj I L Mokilese
+mkk I L Byep
+mkl I L Mokole
+mkm I L Moklen
+mkn I L Kupang Malay
+mko I L Mingang Doso
+mkp I L Moikodi
+mkq I E Bay Miwok
+mkr I L Malas
+mks I L Silacayoapan Mixtec
+mkt I L Vamale
+mku I L Konyanka Maninka
+mkv I L Mafea
+mkw I L Kituba (Congo)
+mkx I L Cinamiguin Manobo
+mky I L East Makian
+mkz I L Makasae
+mla I L Malo
+mlb I L Mbule
+mlc I L Cao Lan
+mld I L Malakhel
+mle I L Manambu
+mlf I L Mal
+mlg mlg mlg mg M L Malagasy
+mlh I L Mape
+mli I L Malimpung
+mlj I L Miltu
+mlk I L Malakote
+mll I L Malua Bay
+mlm I L Mulam
+mln I L Malango
+mlo I L Mlomp
+mlp I L Bargam
+mlq I L Western Maninkakan
+mlr I L Vame
+mls I L Masalit
+mlt mlt mlt mt I L Maltese
+mlu I L To'abaita
+mlv I L Motlav
+mlw I L Moloko
+mlx I L Malfaxal
+mly I L Malay (individual language)
+mlz I L Malaynon
+mma I L Mama
+mmb I L Momina
+mmc I L Michoacán Mazahua
+mmd I L Maonan
+mme I L Mae
+mmf I L Mundat
+mmg I L North Ambrym
+mmh I L Mehináku
+mmi I L Musar
+mmj I L Majhwar
+mmk I L Mukha-Dora
+mml I L Man Met
+mmm I L Maii
+mmn I L Mamanwa
+mmo I L Mangga Buang
+mmp I L Musan
+mmq I L Musak
+mmr I L Western Xiangxi Hmong
+mms I L Southern Mam
+mmt I L Malalamai
+mmu I L Mmaala
+mmv I E Miriti
+mmw I L Emae
+mmx I L Madak
+mmy I L Migaama
+mmz I L Mabaale
+mna I L Mbula
+mnb I L Muna
+mnc mnc mnc I L Manchu
+mnd I L Mondé
+mne I L Naba
+mnf I L Mundani
+mng I L Eastern Mnong
+mnh I L Mono (Democratic Republic of Congo)
+mni mni mni I L Manipuri
+mnj I L Munji
+mnk I L Mandinka
+mnl I L Tiale
+mnm I L Mapena
+mnn I L Southern Mnong
+mnp I L Min Bei Chinese
+mnq I L Minriq
+mnr I L Mono (USA)
+mns I L Mansi
+mnt I E Maykulan
+mnu I L Mer
+mnv I L Rennell-Belona
+mnw I L Mon
+mnx I L Manikion
+mny I L Manyawa
+mnz I L Moni
+moa I L Mwan
+mob I L Moinba
+moc I L Mocoví
+mod I E Mobilian
+moe I L Montagnais
+mof I E Mohegan-Montauk-Narragansett
+mog I L Mongondow
+moh moh moh I L Mohawk
+moi I L Mboi
+moj I L Monzombo
+mok I L Morori
+mol mol mol mo I L Moldavian
+mom I E Monimbo
+mon mon mon mn M L Mongolian
+moo I L Monom
+mop I L Mopán Maya
+moq I L Mor (Bomberai Peninsula)
+mor I L Moro
+mos mos mos I L Mossi
+mot I L Barí
+mou I L Mogum
+mov I L Mohave
+mow I L Moi (Congo)
+mox I L Molima
+moy I L Shekkacho
+moz I L Mukulu
+mpa I L Mpoto
+mpb I L Mullukmulluk
+mpc I L Mangarayi
+mpd I L Machinere
+mpe I L Majang
+mpf I L Tajumulco Mam
+mpg I L Marba
+mph I L Maung
+mpi I L Mpade
+mpj I L Martu Wangka
+mpk I L Mbara (Chad)
+mpl I L Middle Watut
+mpm I L Yosondúa Mixtec
+mpn I L Mindiri
+mpo I L Miu
+mpp I L Migabac
+mpq I L Matís
+mpr I L Vangunu
+mps I L Dadibi
+mpt I L Mian
+mpu I L Makuráp
+mpv I L Munkip
+mpw I L Mapidian
+mpx I L Misima-Paneati
+mpy I L Mapia
+mpz I L Mpi
+mqa I L Maba (Indonesia)
+mqb I L Mbuko
+mqc I L Mangole
+mqd I L Madang
+mqe I L Matepi
+mqf I L Momuna
+mqg I L Kota Bangun Kutai Malay
+mqh I L Tlazoyaltepec Mixtec
+mqi I L Mariri
+mqj I L Mamasa
+mqk I L Rajah Kabunsuwan Manobo
+mql I L Mbelime
+mqm I L South Marquesan
+mqn I L Moronene
+mqo I L Modole
+mqp I L Manipa
+mqq I L Minokok
+mqr I L Mander
+mqs I L West Makian
+mqt I L Mok
+mqu I L Mandari
+mqv I L Mosimo
+mqw I L Murupi
+mqx I L Mamuju
+mqy I L Manggarai
+mqz I L Malasanga
+mra I L Mlabri
+mrb I L Marino
+mrc I L Maricopa
+mrd I L Western Magar
+mre I E Martha's Vineyard Sign Language
+mrf I L Elseng
+mrg I L Miri
+mrh I L Mara Chin
+mri mao mri mi I L Maori
+mrj I L Western Mari
+mrk I L Hmwaveke
+mrl I L Mortlockese
+mrm I L Merlav
+mrn I L Cheke Holo
+mro I L Mru
+mrp I L Morouas
+mrq I L North Marquesan
+mrr I L Maria (India)
+mrs I L Maragus
+mrt I L Marghi Central
+mru I L Mono (Cameroon)
+mrv I L Mangareva
+mrw I L Maranao
+mrx I L Maremgi
+mry I L Karaga Mandaya
+mrz I L Marind
+msa may msa ms M L Malay (macrolanguage)
+msb I L Masbatenyo
+msc I L Sankaran Maninka
+msd I L Yucatec Maya Sign Language
+mse I L Musey
+msf I L Mekwei
+msg I L Moraid
+msh I L Masikoro Malagasy
+msi I L Sabah Malay
+msj I L Ma (Democratic Republic of Congo)
+msk I L Mansaka
+msl I L Molof
+msm I L Agusan Manobo
+msn I L Mosina
+mso I L Mombum
+msp I E Maritsauá
+msq I L Caac
+msr I L Mongolian Sign Language
+mss I L West Masela
+mst I L Cataelano Mandaya
+msu I L Musom
+msv I L Maslam
+msw I L Mansoanka
+msx I L Moresada
+msy I L Aruamu
+msz I L Momare
+mta I L Cotabato Manobo
+mtb I L Anyin Morofo
+mtc I L Munit
+mtd I L Mualang
+mte I L Mono (Solomon Islands)
+mtf I L Murik
+mtg I L Una
+mth I L Munggui
+mti I L Maiwa (Papua New Guinea)
+mtj I L Moskona
+mtk I L Mbe'
+mtl I L Montol
+mtm I E Mator
+mtn I E Matagalpa
+mto I L Totontepec Mixe
+mtp I L Wichí Lhamtés Nocten
+mtq I L Muong
+mtr I L Mewari
+mts I L Yora
+mtt I L Mota
+mtu I L Tututepec Mixtec
+mtv I L Asaro'o
+mtw I L Magahat
+mtx I L Tidaá Mixtec
+mty I L Nabi
+mtz I L Tacanec
+mua I L Mundang
+mub I L Mubi
+muc I L Mbu'
+mud I L Mednyj Aleut
+mue I L Media Lengua
+mug I L Musgu
+muh I L Mündü
+mui I L Musi
+muj I L Mabire
+muk I L Mugom
+mul mul mul S S Multiple languages
+mum I L Maiwala
+muo I L Nyong
+mup I L Malvi
+muq I L Eastern Xiangxi Hmong
+mur I L Murle
+mus mus mus I L Creek
+mut I L Western Muria
+muu I L Yaaku
+muv I L Muthuvan
+muw I L Mundari
+mux I L Mbo-Ung
+muy I L Muyang
+muz I L Mursi
+mva I L Manam
+mvb I E Mattole
+mvc I L Central Mam
+mvd I L Mamboru
+mve I L Marwari (Pakistan)
+mvf I L Peripheral Mongolian
+mvg I L Yucuañe Mixtec
+mvh I L Mire
+mvi I L Miyako
+mvj I L Todos Santos Cuchumatán Mam
+mvk I L Mekmek
+mvl I E Mbara (Australia)
+mvm I L Muya
+mvn I L Minaveha
+mvo I L Marovo
+mvp I L Duri
+mvq I L Moere
+mvr I L Marau
+mvs I L Massep
+mvt I L Mpotovoro
+mvu I L Marfa
+mvv I L Tagal Murut
+mvw I L Machinga
+mvx I L Meoswar
+mvy I L Indus Kohistani
+mvz I L Mesqan
+mwa I L Mwatebu
+mwb I L Juwal
+mwc I L Are
+mwd I L Mudbura
+mwe I L Mwera (Chimwera)
+mwf I L Murrinh-Patha
+mwg I L Aiklep
+mwh I L Mouk-Aria
+mwi I L Labo
+mwj I L Maligo
+mwk I L Kita Maninkakan
+mwl mwl mwl I L Mirandese
+mwm I L Sar
+mwn I L Nyamwanga
+mwo I L Central Maewo
+mwp I L Kala Lagaw Ya
+mwq I L Mün Chin
+mwr mwr mwr M L Marwari
+mws I L Mwimbi-Muthambi
+mwt I L Moken
+mwu I E Mittu
+mwv I L Mentawai
+mww I L Hmong Daw
+mwx I L Mediak
+mwy I L Mosiro
+mwz I L Moingi
+mxa I L Northwest Oaxaca Mixtec
+mxb I L Tezoatlán Mixtec
+mxc I L Manyika
+mxd I L Modang
+mxe I L Mele-Fila
+mxf I L Malgbe
+mxg I L Mbangala
+mxh I L Mvuba
+mxi I E Mozarabic
+mxj I L Miju-Mishmi
+mxk I L Monumbo
+mxl I L Maxi Gbe
+mxm I L Meramera
+mxn I L Moi (Indonesia)
+mxo I L Mbowe
+mxp I L Tlahuitoltepec Mixe
+mxq I L Juquila Mixe
+mxr I L Murik Kayan
+mxs I L Huitepec Mixtec
+mxt I L Jamiltepec Mixtec
+mxu I L Mada (Cameroon)
+mxv I L Metlatónoc Mixtec
+mxw I L Namo
+mxx I L Mahou
+mxy I L Southeastern Nochixtlán Mixtec
+mxz I L Central Masela
+mya bur mya my I L Burmese
+myb I L Mbay
+myc I L Mayeka
+myd I L Maramba
+mye I L Myene
+myf I L Bambassi
+myg I L Manta
+myh I E Makah
+myi I L Mina (India)
+myj I L Mangayat
+myk I L Mamara Senoufo
+myl I L Moma
+mym I L Me'en
+myo I L Anfillo
+myp I L Pirahã
+myq I L Forest Maninka
+myr I L Muniche
+mys I E Mesmes
+myt I L Sangab Mandaya
+myu I L Mundurukú
+myv myv myv I L Erzya
+myw I L Muyuw
+myx I L Masaba
+myy I L Macuna
+myz I H Classical Mandaic
+mza I L Santa María Zacatepec Mixtec
+mzb I L Tumzabt
+mzc I L Madagascar Sign Language
+mzd I L Malimba
+mze I L Morawa
+mzf I L Aiku
+mzg I L Monastic Sign Language
+mzh I L Wichí Lhamtés Güisnay
+mzi I L Ixcatlán Mazatec
+mzj I L Manya
+mzk I L Nigeria Mambila
+mzl I L Mazatlán Mixe
+mzm I L Mumuye
+mzn I L Mazanderani
+mzo I E Matipuhy
+mzp I L Movima
+mzq I L Mori Atas
+mzr I L Marúbo
+mzs I L Macanese
+mzt I L Mintil
+mzu I L Inapang
+mzv I L Manza
+mzw I L Deg
+mzx I L Mawayana
+mzy I L Mozambican Sign Language
+mzz I L Maiadomu
+nab I L Southern Nambikuára
+nac I L Narak
+nad I L Nijadali
+nae I L Naka'ela
+naf I L Nabak
+nag I L Naga Pidgin
+naj I L Nalu
+nak I L Nakanai
+nal I L Nalik
+nam I L Nangikurrunggurr
+nan I L Min Nan Chinese
+nao I L Naaba
+nap nap nap I L Neapolitan
+naq I L Nama (Namibia)
+nar I L Iguta
+nas I L Naasioi
+nat I L Hungworo
+nau nau nau na I L Nauru
+nav nav nav nv I L Navajo
+naw I L Nawuri
+nax I L Nakwi
+nay I E Narrinyeri
+naz I L Coatepec Nahuatl
+nba I L Nyemba
+nbb I L Ndoe
+nbc I L Chang Naga
+nbd I L Ngbinda
+nbe I L Konyak Naga
+nbf I L Naxi
+nbg I L Nagarchal
+nbh I L Ngamo
+nbi I L Mao Naga
+nbj I L Ngarinman
+nbk I L Nake
+nbl nbl nbl nr I L South Ndebele
+nbm I L Ngbaka Ma'bo
+nbn I L Kuri
+nbo I L Nkukoli
+nbp I L Nnam
+nbq I L Nggem
+nbr I L Numana-Nunku-Gbantu-Numbu
+nbs I L Namibian Sign Language
+nbt I L Na
+nbu I L Rongmei Naga
+nbv I L Ngamambo
+nbw I L Southern Ngbandi
+nbx I L Ngura
+nby I L Ningera
+nca I L Iyo
+ncb I L Central Nicobarese
+ncc I L Ponam
+ncd I L Nachering
+nce I L Yale
+ncf I L Notsi
+ncg I L Nisga'a
+nch I L Central Huasteca Nahuatl
+nci I H Classical Nahuatl
+ncj I L Northern Puebla Nahuatl
+nck I L Nakara
+ncl I L Michoacán Nahuatl
+ncm I L Nambo
+ncn I L Nauna
+nco I L Sibe
+ncp I L Ndaktup
+ncr I L Ncane
+ncs I L Nicaraguan Sign Language
+nct I L Chothe Naga
+ncu I L Chumburung
+ncx I L Central Puebla Nahuatl
+ncz I E Natchez
+nda I L Ndasa
+ndb I L Kenswei Nsei
+ndc I L Ndau
+ndd I L Nde-Nsele-Nta
+nde nde nde nd I L North Ndebele
+ndf I E Nadruvian
+ndg I L Ndengereko
+ndh I L Ndali
+ndi I L Samba Leko
+ndj I L Ndamba
+ndk I L Ndaka
+ndl I L Ndolo
+ndm I L Ndam
+ndn I L Ngundi
+ndo ndo ndo ng I L Ndonga
+ndp I L Ndo
+ndq I L Ndombe
+ndr I L Ndoola
+nds nds nds I L Low German
+ndt I L Ndunga
+ndu I L Dugun
+ndv I L Ndut
+ndw I L Ndobo
+ndx I L Nduga
+ndy I L Lutos
+ndz I L Ndogo
+nea I L Eastern Ngad'a
+neb I L Toura (Côte d'Ivoire)
+nec I L Nedebang
+ned I L Nde-Gbite
+nee I L Kumak
+nef I L Nefamese
+neg I L Negidal
+neh I L Nyenkha
+nei I A Neo-Hittite
+nej I L Neko
+nek I L Neku
+nem I L Nemi
+nen I L Nengone
+neo I L Ná-Meo
+nep nep nep ne I L Nepali
+neq I L North Central Mixe
+ner I L Yahadian
+nes I L Bhoti Kinnauri
+net I L Nete
+nev I L Nyaheun
+new new new I L Newari
+nex I L Neme
+ney I L Neyo
+nez I L Nez Perce
+nfa I L Dhao
+nfd I L Ndun
+nfg I L Nyeng
+nfk I L Shakara
+nfl I L Ayiwo
+nfr I L Nafaanra
+nfu I L Mfumte
+nga I L Ngbaka
+ngb I L Northern Ngbandi
+ngc I L Ngombe (Democratic Republic of Congo)
+ngd I L Ngando (Central African Republic)
+nge I L Ngemba
+ngg I L Ngbaka Manza
+ngh I L N/u
+ngi I L Ngizim
+ngj I L Ngie
+ngk I L Ngalkbun
+ngl I L Lomwe
+ngm I L Ngatik Men's Creole
+ngn I L Ngwo
+ngo I L Ngoni
+ngp I L Ngulu
+ngq I L Ngurimi
+ngr I L Nanggu
+ngs I L Gvoko
+ngt I L Ngeq
+ngu I L Guerrero Nahuatl
+ngv I E Nagumi
+ngw I L Ngwaba
+ngx I L Nggwahyi
+ngy I L Tibea
+ngz I L Ngungwel
+nhb I L Beng
+nhc I E Tabasco Nahuatl
+nhd I L Chiripá
+nhe I L Eastern Huasteca Nahuatl
+nhf I L Nhuwala
+nhg I L Tetelcingo Nahuatl
+nhh I L Nahari
+nhi I L Tenango Nahuatl
+nhj I L Tlalitzlipa Nahuatl
+nhk I L Isthmus-Cosoleacaque Nahuatl
+nhm I L Morelos Nahuatl
+nhn I L Central Nahuatl
+nho I L Takuu
+nhp I L Isthmus-Pajapan Nahuatl
+nhq I L Huaxcaleca Nahuatl
+nhr I L Naro
+nhs I L Southeastern Puebla Nahuatl
+nht I L Ometepec Nahuatl
+nhu I L Noone
+nhv I L Temascaltepec Nahuatl
+nhw I L Western Huasteca Nahuatl
+nhx I L Isthmus-Mecayapan Nahuatl
+nhy I L Northern Oaxaca Nahuatl
+nhz I L Santa María La Alta Nahuatl
+nia nia nia I L Nias
+nib I L Nakama
+nid I E Ngandi
+nie I L Niellim
+nif I L Nek
+nig I L Ngalakan
+nih I L Nyiha
+nii I L Nii
+nij I L Ngaju
+nik I L Southern Nicobarese
+nil I L Nila
+nim I L Nilamba
+nin I L Ninzo
+nio I L Nganasan
+nir I L Nimboran
+nis I L Nimi
+nit I L Southeastern Kolami
+niu niu niu I L Niuean
+niv I L Gilyak
+niw I L Nimo
+nix I L Hema
+niy I L Ngiti
+niz I L Ningil
+nja I L Nzanyi
+njb I L Nocte Naga
+njd I L Ndonde Hamba
+njh I L Lotha Naga
+nji I L Gudanji
+njj I L Njen
+njl I L Njalgulgule
+njm I L Angami Naga
+njn I L Liangmai Naga
+njo I L Ao Naga
+njr I L Njerep
+njs I L Nisa
+njt I L Ndyuka-Trio Pidgin
+nju I L Ngadjunmaya
+njx I L Kunyi
+njy I L Njyem
+nka I L Nkoya
+nkb I L Khoibu Naga
+nkc I L Nkongho
+nkd I L Koireng
+nke I L Duke
+nkf I L Inpui Naga
+nkg I L Nekgini
+nkh I L Khezha Naga
+nki I L Thangal Naga
+nkj I L Nakai
+nkk I L Nokuku
+nkm I L Namat
+nkn I L Nkangala
+nko I L Nkonya
+nkp I E Niuatoputapu
+nkr I L Nukuoro
+nks I L North Asmat
+nku I L Bouna Kulango
+nkw I L Nkutu
+nkx I L Nkoroo
+nky I L Khiamniungan Naga
+nkz I L Nkari
+nla I L Ngombale
+nlc I L Nalca
+nld dut nld nl I L Dutch
+nle I L East Nyala
+nlg I L Gela
+nli I L Grangali
+nlj I L Nyali
+nlk I L Ninia Yali
+nll I L Nihali
+nln I L Durango Nahuatl
+nlo I L Ngul
+nlr I L Ngarla
+nlu I L Nchumbulu
+nlv I L Orizaba Nahuatl
+nlx I L Nahali
+nly I L Nyamal
+nma I L Maram Naga
+nmb I L Big Nambas
+nmc I L Ngam
+nmd I L Ndumu
+nme I L Mzieme Naga
+nmf I L Tangkhul Naga
+nmg I L Ngumba
+nmh I L Monsang Naga
+nmi I L Nyam
+nmj I L Ngombe (Central African Republic)
+nmk I L Namakura
+nml I L Ndemli
+nmm I L Manangba
+nmn I L !Xóõ
+nmo I L Moyon Naga
+nmp I L Nimanbur
+nmq I L Nambya
+nmr I L Nimbari
+nms I L Letemboi
+nmt I L Namonuito
+nmu I L Northeast Maidu
+nmv I L Ngamini
+nmw I L Nimoa
+nmx I L Nama (Papua New Guinea)
+nmy I L Namuyi
+nmz I L Nawdm
+nna I L Nyangumarta
+nnb I L Nande
+nnc I L Nancere
+nnd I L West Ambae
+nne I L Ngandyera
+nnf I L Ngaing
+nng I L Maring Naga
+nnh I L Ngiemboon
+nni I L North Nuaulu
+nnj I L Nyangatom
+nnk I L Nankina
+nnl I L Northern Rengma Naga
+nnm I L Namia
+nnn I L Ngete
+nno nno nno nn I L Norwegian Nynorsk
+nnp I L Wancho Naga
+nnq I L Ngindo
+nnr I E Narungga
+nns I L Ningye
+nnt I E Nanticoke
+nnu I L Dwang
+nnv I E Nugunu (Australia)
+nnw I L Southern Nuni
+nnx I L Ngong
+nny I L Nyangga
+nnz I L Nda'nda'
+noa I L Woun Meu
+nob nob nob nb I L Norwegian Bokmål
+noc I L Nuk
+nod I L Northern Thai
+noe I L Nimadi
+nof I L Nomane
+nog nog nog I L Nogai
+noh I L Nomu
+noi I L Noiri
+nok I E Nooksack
+nom I E Nocamán
+non non non I H Old Norse
+noo I L Nootka
+nop I L Numanggang
+noq I L Ngongo
+nor nor nor no M L Norwegian
+nos I L Southern Yi
+not I L Nomatsiguenga
+nou I L Ewage-Notu
+nov I C Novial
+now I L Nyambo
+noy I L Noy
+noz I L Nayi
+npa I L Nar Phu
+npb I L Nupbikha
+nph I L Phom Naga
+npn I L Mondropolon
+npo I L Pochuri Naga
+nps I L Nipsan
+npu I L Puimei Naga
+npy I L Napu
+nqg I L Ede Nago
+nqk I L Kura Ede Nago
+nqm I L Ndom
+nqn I L Nen
+nqo nqo nqo I L N'Ko
+nra I L Ngom
+nrb I L Nara
+nrc I A Noric
+nre I L Southern Rengma Naga
+nrg I L Narango
+nri I L Chokri Naga
+nrl I L Ngarluma
+nrm I L Narom
+nrn I E Norn
+nrp I A North Picene
+nrr I L Norra
+nrt I E Northern Kalapuya
+nrx I L Ngurmbur
+nrz I L Lala
+nsa I L Sangtam Naga
+nsc I L Nshi
+nse I L Nsenga
+nsg I L Ngasa
+nsh I L Ngoshie
+nsi I L Nigerian Sign Language
+nsk I L Naskapi
+nsl I L Norwegian Sign Language
+nsm I L Sumi Naga
+nsn I L Nehan
+nso nso nso I L Pedi
+nsp I L Nepalese Sign Language
+nsq I L Northern Sierra Miwok
+nsr I L Maritime Sign Language
+nss I L Nali
+nst I L Tase Naga
+nsw I L Navut
+nsx I L Nsongo
+nsz I L Nisenan
+nte I L Nathembo
+nti I L Natioro
+ntj I L Ngaanyatjarra
+ntk I L Ikoma
+ntm I L Nateni
+nto I L Ntomba
+ntp I L Northern Tepehuan
+ntr I L Delo
+nts I E Natagaimas
+ntw I E Nottoway
+nty I L Mantsi
+ntz I L Natanzi
+nua I L Yuaga
+nuc I E Nukuini
+nud I L Ngala
+nue I L Ngundu
+nuf I L Nusu
+nug I L Nungali
+nuh I L Ndunda
+nui I L Ngumbi
+nuj I L Nyole
+nul I L Nusa Laut
+num I L Niuafo'ou
+nun I L Nung (Myanmar)
+nuo I L Nguôn
+nup I L Nupe-Nupe-Tako
+nuq I L Nukumanu
+nur I L Nukuria
+nus I L Nuer
+nut I L Nung (Viet Nam)
+nuu I L Ngbundu
+nuv I L Northern Nuni
+nuw I L Nguluwan
+nux I L Mehek
+nuy I L Nunggubuyu
+nuz I L Tlamacazapa Nahuatl
+nvh I L Nasarian
+nvm I L Namiae
+nwa I E Nawathinehena
+nwb I L Nyabwa
+nwc nwc nwc I H Classical Newari
+nwe I L Ngwe
+nwi I L Southwest Tanna
+nwm I L Nyamusa-Molo
+nwr I L Nawaru
+nwx I H Middle Newar
+nwy I E Nottoway-Meherrin
+nxa I L Nauete
+nxd I L Ngando (Democratic Republic of Congo)
+nxe I L Nage
+nxg I L Ngad'a
+nxi I L Nindi
+nxj I L Nyadu
+nxl I L South Nuaulu
+nxm I A Numidian
+nxn I L Ngawun
+nxr I L Ninggerum
+nxu I L Narau
+nxx I L Nafri
+nya nya nya ny I L Nyanja
+nyb I L Nyangbo
+nyc I L Nyanga-li
+nyd I L Nyore
+nye I L Nyengo
+nyf I L Giryama
+nyg I L Nyindu
+nyh I L Nyigina
+nyi I L Ama (Sudan)
+nyj I L Nyanga
+nyk I L Nyaneka
+nyl I L Nyeu
+nym nym nym I L Nyamwezi
+nyn nyn nyn I L Nyankole
+nyo nyo nyo I L Nyoro
+nyp I E Nyang'i
+nyq I L Nayini
+nys I E Nyunga
+nyt I L Nyawaygi
+nyu I L Nyungwe
+nyv I L Nyulnyul
+nyw I L Nyaw
+nyx I E Nganyaywana
+nyy I L Nyakyusa-Ngonde
+nza I L Tigon Mbembe
+nzb I L Njebi
+nzi nzi nzi I L Nzima
+nzk I L Nzakara
+nzm I L Zeme Naga
+nzs I L New Zealand Sign Language
+nzu I L Teke-Nzikou
+nzy I L Nzakambay
+oaa I L Orok
+oac I L Oroch
+oar I A Old Aramaic (up to 700 BCE)
+oav I H Old Avar
+obi I E Obispeño
+obl I L Oblo
+obm I A Moabite
+obo I L Obo Manobo
+obr I H Old Burmese
+obt I H Old Breton
+obu I L Obulom
+oca I L Ocaina
+occ I C Occidental
+och I A Old Chinese
+oci oci oci oc I L Occitan (post 1500)
+oco I H Old Cornish
+ocu I L Atzingo Matlatzinca
+oda I L Odut
+odk I L Od
+odt I H Old Dutch
+odu I L Odual
+ofo I E Ofo
+ofs I H Old Frisian
+ofu I L Efutop
+ogb I L Ogbia
+ogc I L Ogbah
+oge I H Old Georgian
+ogg I L Ogbogolo
+ogn I L Ogan
+ogo I L Khana
+ogu I L Ogbronuagum
+oht I A Old Hittite
+ohu I H Old Hungarian
+oia I L Oirata
+oin I L Inebu One
+ojb I L Northwestern Ojibwa
+ojc I L Central Ojibwa
+ojg I L Eastern Ojibwa
+oji oji oji oj M L Ojibwa
+ojp I H Old Japanese
+ojs I L Severn Ojibwa
+ojv I L Ontong Java
+ojw I L Western Ojibwa
+oka I L Okanagan
+okb I L Okobo
+okd I L Okodia
+oke I L Okpe (Southwestern Edo)
+okh I L Koresh-e Rostam
+oki I L Okiek
+okj I E Oko-Juwoi
+okk I L Kwamtim One
+okl I E Old Kentish Sign Language
+okm I H Middle Korean (10th - 16th cent.)
+okn I L Oki-No-Erabu
+oko I H Old Korean (3rd - 9th cent.)
+okr I L Kirike
+oks I L Oko-Eni-Osayen
+oku I L Oku
+okx I L Okpe (Northwestern Edo)
+ola I L Walungge
+old I L Mochi
+ole I L Olekha
+olm I L Oloma
+olo I L Livvi
+oma I L Omaha-Ponca
+omb I L East Ambae
+omc I E Mochica
+ome I E Omejes
+omg I L Omagua
+omi I L Omi
+omk I E Omok
+oml I L Ombo
+omn I A Minoan
+omo I L Utarmbung
+omp I H Old Manipuri
+omr I H Old Marathi
+omt I L Omotik
+omu I E Omurano
+omw I L South Tairora
+omx I H Old Mon
+ona I L Ona
+onb I L Lingao
+one I L Oneida
+ong I L Olo
+oni I L Onin
+onj I L Onjob
+onk I L Kabore One
+onn I L Onobasulu
+ono I L Onondaga
+onr I L Northern One
+ons I L Ono
+ont I L Ontenu
+onu I L Unua
+onw I H Old Nubian
+onx I L Onin Based Pidgin
+ood I L Tohono O'odham
+oog I L Ong
+oon I L Önge
+oor I L Oorlams
+oos I A Old Ossetic
+opa I L Okpamheri
+ope I A Old Persian
+opk I L Kopkaka
+opm I L Oksapmin
+opo I L Opao
+opt I L Opata
+opy I L Ofayé
+ora I L Oroha
+orc I L Orma
+ore I L Orejón
+org I L Oring
+orh I L Oroqen
+ori ori ori or I L Oriya
+ork I L Orokaiva
+orm orm orm om M L Oromo
+orn I L Orang Kanaq
+oro I L Orokolo
+orr I L Oruma
+ors I L Orang Seletar
+ort I L Adivasi Oriya
+oru I L Ormuri
+orv I H Old Russian
+orw I L Oro Win
+orx I L Oro
+orz I L Ormu
+osa osa osa I L Osage
+osc I A Oscan
+osi I L Osing
+oso I L Ososo
+osp I H Old Spanish
+oss oss oss os I L Ossetian
+ost I L Osatu
+osu I L Southern One
+osx I H Old Saxon
+ota ota ota I H Ottoman Turkish (1500-1928)
+otb I H Old Tibetan
+otd I L Dohoi
+ote I L Mezquital Otomi
+oti I E Oti
+otk I H Old Turkish
+otl I L Tilapa Otomi
+otm I L Eastern Highland Otomi
+otn I L Tenango Otomi
+otq I L Querétaro Otomi
+otr I L Otoro
+ots I L Estado de México Otomi
+ott I L Temoaya Otomi
+otu I E Otuke
+otw I L Ottawa
+otx I L Texcatepec Otomi
+oty I A Old Tamil
+otz I L Ixtenco Otomi
+oua I L Tagargrent
+oub I L Glio-Oubi
+oue I L Oune
+oui I H Old Uighur
+oum I E Ouma
+oun I L !O!ung
+owi I L Owiniga
+owl I H Old Welsh
+oyb I L Oy
+oyd I L Oyda
+oym I L Wayampi
+oyy I L Oya'oya
+ozm I L Koonzime
+pab I L Parecís
+pac I L Pacoh
+pad I L Paumarí
+pae I L Pagibete
+paf I E Paranawát
+pag pag pag I L Pangasinan
+pah I L Tenharim
+pai I L Pe
+paj I L Ipeka-Tapuia
+pak I L Parakanã
+pal pal pal I A Pahlavi
+pam pam pam I L Pampanga
+pan pan pan pa I L Panjabi
+pao I L Northern Paiute
+pap pap pap I L Papiamento
+paq I L Parya
+par I L Panamint
+pas I L Papasena
+pat I L Papitalai
+pau pau pau I L Palauan
+pav I L Pakaásnovos
+paw I L Pawnee
+pax I E Pankararé
+pay I L Pech
+paz I E Pankararú
+pbb I L Páez
+pbc I L Patamona
+pbe I L Mezontla Popoloca
+pbf I L Coyotepec Popoloca
+pbg I E Paraujano
+pbh I L Eñepa
+pbi I L Parkwa
+pbl I L Mak (Nigeria)
+pbn I L Kpasam
+pbo I L Papel
+pbp I L Badyara
+pbr I L Pangwa
+pbs I L Central Pame
+pbt I L Southern Pashto
+pbu I L Northern Pashto
+pbv I L Pnar
+pby I L Pyu
+pbz I L Palu
+pca I L Santa Inés Ahuatempan Popoloca
+pcb I L Pear
+pcc I L Bouyei
+pcd I L Picard
+pce I L Pale Palaung
+pcf I L Paliyan
+pcg I L Paniya
+pch I L Pardhan
+pci I L Duruwa
+pcj I L Parenga
+pck I L Paite Chin
+pcl I L Pardhi
+pcm I L Nigerian Pidgin
+pcn I L Piti
+pcp I L Pacahuara
+pcr I L Panang
+pcw I L Pyapun
+pda I L Anam
+pdc I L Pennsylvania German
+pdi I L Pa Di
+pdn I L Podena
+pdo I L Padoe
+pdt I L Plautdietsch
+pdu I L Kayan
+pea I L Peranakan Indonesian
+peb I E Eastern Pomo
+pec I L Southern Pesisir
+ped I L Mala (Papua New Guinea)
+pee I L Taje
+pef I E Northeastern Pomo
+peg I L Pengo
+peh I L Bonan
+pei I L Chichimeca-Jonaz
+pej I E Northern Pomo
+pek I L Penchal
+pel I L Pekal
+pem I L Phende
+pen I L Penesak
+peo peo peo I H Old Persian (ca. 600-400 B.C.)
+pep I L Kunja
+peq I L Southern Pomo
+pes I L Western Farsi
+pev I L Pémono
+pex I L Petats
+pey I L Petjo
+pez I L Eastern Penan
+pfa I L Pááfang
+pfe I L Peere
+pfl I L Pfaelzisch
+pga I L Sudanese Creole Arabic
+pgg I L Pangwali
+pgi I L Pagi
+pgk I L Rerep
+pgn I A Paelignian
+pgs I L Pangseng
+pgu I L Pagu
+pgy I L Pongyong
+pha I L Pa-Hng
+phd I L Phudagi
+phg I L Phuong
+phh I L Phula
+phk I L Phake
+phl I L Phalura
+phm I L Phimbi
+phn phn phn I A Phoenician
+pho I L Phunoi
+phq I L Phana'
+phr I L Pahari-Potwari
+pht I L Phu Thai
+phu I L Phuan
+phv I L Pahlavani
+phw I L Phangduwali
+pia I L Pima Bajo
+pib I L Yine
+pic I L Pinji
+pid I L Piaroa
+pie I E Piro
+pif I L Pingelapese
+pig I L Pisabo
+pih I L Pitcairn-Norfolk
+pii I L Pini
+pij I E Pijao
+pil I L Yom
+pim I E Powhatan
+pin I L Piame
+pio I L Piapoco
+pip I L Pero
+pir I L Piratapuyo
+pis I L Pijin
+pit I L Pitta Pitta
+piu I L Pintupi-Luritja
+piv I L Pileni
+piw I L Pimbwe
+pix I L Piu
+piy I L Piya-Kwonci
+piz I L Pije
+pjt I L Pitjantjatjara
+pkb I L Upper Pokomo
+pkc I E Paekche
+pkg I L Pak-Tong
+pkh I L Pankhu
+pkn I L Pakanha
+pko I L Pökoot
+pkp I L Pukapuka
+pks I L Pakistan Sign Language
+pkt I L Maleng
+pku I L Paku
+pla I L Miani
+plb I L Polonombauk
+plc I L Central Palawano
+pld I L Polari
+ple I L Palu'e
+plg I L Pilagá
+plh I L Paulohi
+pli pli pli pi I A Pali
+plj I L Polci
+plk I L Kohistani Shina
+pll I L Shwe Palaung
+plm I L Palembang
+pln I L Palenquero
+plo I L Oluta Popoluca
+plp I L Palpa
+plq I A Palaic
+plr I L Palaka Senoufo
+pls I L San Marcos Tlalcoyalco Popoloca
+plt I L Plateau Malagasy
+plu I L Palikúr
+plv I L Southwest Palawano
+plw I L Brooke's Point Palawano
+ply I L Bolyu
+plz I L Paluan
+pma I L Paama
+pmb I L Pambia
+pmc I E Palumata
+pme I L Pwaamei
+pmi I L Northern Pumi
+pmj I L Southern Pumi
+pmk I E Pamlico
+pml I E Lingua Franca
+pmm I L Pomo
+pmn I L Pam
+pmo I L Pom
+pmq I L Northern Pame
+pmr I L Paynamar
+pms I L Piemontese
+pmt I L Tuamotuan
+pmu I L Mirpur Panjabi
+pmw I L Plains Miwok
+pmx I L Poumei Naga
+pmz I E Southern Pame
+pna I L Punan Bah-Biau
+pnb I L Western Panjabi
+pnc I L Pannei
+pne I L Western Penan
+png I L Pongu
+pnh I L Penrhyn
+pni I L Aoheng
+pnm I L Punan Batu 1
+pnn I L Pinai-Hagahai
+pno I E Panobo
+pnp I L Pancana
+pnq I L Pana (Burkina Faso)
+pnr I L Panim
+pns I L Ponosakan
+pnt I L Pontic
+pnu I L Jiongnai Bunu
+pnv I L Pinigura
+pnw I L Panytyima
+pnx I L Phong-Kniang
+pny I L Pinyin
+pnz I L Pana (Central African Republic)
+poa I L Eastern Pokomam
+pob I L Western Pokomchí
+poc I L Central Pokomam
+pod I E Ponares
+poe I L San Juan Atzingo Popoloca
+pof I L Poke
+pog I E Potiguára
+poh I L Eastern Pokomchí
+poi I L Highland Popoluca
+poj I L Lower Pokomo
+pok I L Pokangá
+pol pol pol pl I L Polish
+pom I L Southeastern Pomo
+pon pon pon I L Pohnpeian
+poo I L Central Pomo
+pop I L Pwapwa
+poq I L Texistepec Popoluca
+por por por pt I L Portuguese
+pos I L Sayula Popoluca
+pot I L Potawatomi
+pou I L Southern Pokomam
+pov I L Upper Guinea Crioulo
+pow I L San Felipe Otlaltepec Popoloca
+pox I E Polabian
+poy I L Pogolo
+ppa I L Pao
+ppe I L Papi
+ppi I L Paipai
+ppk I L Uma
+ppl I L Pipil
+ppm I L Papuma
+ppn I L Papapana
+ppo I L Folopa
+ppp I L Pelende
+ppq I L Pei
+ppr I L Piru
+pps I L San Luís Temalacayuca Popoloca
+ppt I L Pare
+ppu I E Papora
+ppv I L Papavô
+pqa I L Pa'a
+pqm I L Malecite-Passamaquoddy
+prb I L Lua'
+prc I L Parachi
+prd I L Parsi-Dari
+pre I L Principense
+prg I E Prussian
+prh I L Porohanon
+pri I L Paicî
+prk I L Parauk
+prl I L Peruvian Sign Language
+prm I L Kibiri
+prn I L Prasuni
+pro pro pro I H Old Provençal (to 1500)
+prp I L Parsi
+prq I L Ashéninka Perené
+prr I E Puri
+prs I L Dari
+prt I L Phai
+pru I L Puragi
+prw I L Parawen
+prx I L Purik
+pry I L Pray 3
+prz I L Providencia Sign Language
+psa I L Asue Awyu
+psc I L Persian Sign Language
+psd I L Plains Indian Sign Language
+pse I L Pasemah
+psg I L Penang Sign Language
+psh I L Southwest Pashayi
+psi I L Southeast Pashayi
+psl I L Puerto Rican Sign Language
+psm I E Pauserna
+psn I L Panasuan
+pso I L Polish Sign Language
+psp I L Philippine Sign Language
+psq I L Pasi
+psr I L Portuguese Sign Language
+pss I L Kaulong
+pst I L Central Pashto
+psw I L Port Sandwich
+psy I E Piscataway
+pta I L Pai Tavytera
+pth I E Pataxó-Hãhaãi
+pti I L Pintiini
+ptn I L Patani
+pto I L Zo'é
+ptp I L Patep
+ptr I L Piamatsina
+ptt I L Enrekang
+ptu I L Bambam
+ptv I L Port Vato
+ptw I E Pentlatch
+pua I L Western Highland Purepecha
+pub I L Purum
+puc I L Punan Merap
+pud I L Punan Aput
+pue I L Puelche
+puf I L Punan Merah
+pug I L Phuie
+pui I L Puinave
+puj I L Punan Tubu
+puk I L Pu Ko
+pum I L Puma
+pun I L Pubian
+puo I L Puoc
+pup I L Pulabu
+puq I E Puquina
+pur I L Puruborá
+pus pus pus ps M L Pushto
+put I L Putoh
+puu I L Punu
+puw I L Puluwatese
+pux I L Puari
+puy I E Purisimeño
+puz I L Purum Naga
+pwa I L Pawaia
+pwg I L Gapapaiwa
+pwm I L Molbog
+pwn I L Paiwan
+pwo I L Pwo Western Karen
+pwr I L Powari
+pww I L Pwo Northern Karen
+pxm I L Quetzaltepec Mixe
+pye I L Pye Krumen
+pym I L Fyam
+pyn I L Poyanáwa
+pyu I L Puyuma
+pyx I A Pyu (Myanmar)
+pyy I L Pyen
+qua I L Quapaw
+qub I L Huallaga Huánuco Quechua
+quc I L Central Quiché
+qud I L Calderón Highland Quichua
+que que que qu M L Quechua
+quf I L Lambayeque Quechua
+qug I L Chimborazo Highland Quichua
+quh I L South Bolivian Quechua
+qui I L Quileute
+quj I L Joyabaj Quiché
+quk I L Chachapoyas Quechua
+qul I L North Bolivian Quechua
+qum I L Sipacapense
+qun I E Quinault
+qup I L Southern Pastaza Quechua
+quq I L Quinqui
+qur I L Yanahuanca Pasco Quechua
+qus I L Santiago del Estero Quichua
+qut I L West Central Quiché
+quu I L Eastern Quiché
+quv I L Sacapulteco
+quw I L Tena Lowland Quichua
+qux I L Yauyos Quechua
+quy I L Ayacucho Quechua
+quz I L Cusco Quechua
+qva I L Ambo-Pasco Quechua
+qvc I L Cajamarca Quechua
+qve I L Eastern Apurímac Quechua
+qvh I L Huamalíes-Dos de Mayo Huánuco Quechua
+qvi I L Imbabura Highland Quichua
+qvj I L Loja Highland Quichua
+qvl I L Cajatambo North Lima Quechua
+qvm I L Margos-Yarowilca-Lauricocha Quechua
+qvn I L North Junín Quechua
+qvo I L Napo Lowland Quechua
+qvp I L Pacaraos Quechua
+qvs I L San Martín Quechua
+qvw I L Huaylla Wanca Quechua
+qvy I L Queyu
+qvz I L Northern Pastaza Quichua
+qwa I L Corongo Ancash Quechua
+qwc I H Classical Quechua
+qwh I L Huaylas Ancash Quechua
+qwm I E Kuman (Russia)
+qws I L Sihuas Ancash Quechua
+qwt I E Kwalhioqua-Tlatskanai
+qxa I L Chiquián Ancash Quechua
+qxc I L Chincha Quechua
+qxh I L Panao Huánuco Quechua
+qxi I L San Andrés Quiché
+qxl I L Salasaca Highland Quichua
+qxn I L Northern Conchucos Ancash Quechua
+qxo I L Southern Conchucos Ancash Quechua
+qxp I L Puno Quechua
+qxq I L Qashqa'i
+qxr I L Cañar Highland Quichua
+qxs I L Southern Qiang
+qxt I L Santa Ana de Tusi Pasco Quechua
+qxu I L Arequipa-La Unión Quechua
+qxw I L Jauja Wanca Quechua
+qya I C Quenya
+raa I L Dungmali
+rab I L Camling
+rac I L Rasawa
+rad I L Rade
+rae I L Ranau
+raf I L Western Meohang
+rag I L Logooli
+rah I L Rabha
+rai I L Ramoaaina
+raj raj raj M L Rajasthani
+rak I L Tulu-Bohuai
+ral I L Ralte
+ram I L Canela
+ran I L Riantana
+rao I L Rao
+rap rap rap I L Rapanui
+raq I L Saam
+rar rar rar I L Rarotongan
+ras I L Tegali
+rat I L Razajerdi
+rau I L Raute
+rav I L Sampang
+raw I L Rawang
+rax I L Rang
+ray I L Rapa
+raz I L Rahambuu
+rbb I L Rumai Palaung
+rcf I L Réunion Creole French
+rdb I L Rudbari
+rea I L Rerau
+reb I L Rembong
+ree I L Rejang Kayan
+reg I L Kara (Tanzania)
+rei I L Reli
+rej I L Rejang
+rel I L Rendille
+rem I E Remo
+ren I L Rengao
+rer I E Rer Bare
+res I L Reshe
+ret I L Retta
+rey I L Reyesano
+rga I L Roria
+rge I L Romano-Greek
+rgk I E Rangkas
+rgr I L Resígaro
+rgs I L Southern Roglai
+rgu I L Ringgou
+rhp I L Yahang
+ria I L Riang (India)
+rie I L Rien
+rif I L Tarifit
+ril I L Riang (Myanmar)
+rim I L Nyaturu
+rin I L Nungu
+rir I L Ribun
+rit I L Ritarungo
+riu I L Riung
+rjb I L Rajbanshi
+rjg I L Rajong
+rji I L Raji
+rka I L Kraol
+rkb I L Rikbaktsa
+rkh I L Rakahanga-Manihiki
+rkm I L Marka
+rma I L Rama
+rmb I L Rembarunga
+rmc I L Carpathian Romani
+rmd I L Traveller Danish
+rme I L Angloromani
+rmf I L Kalo Finnish Romani
+rmg I L Traveller Norwegian
+rmh I L Murkim
+rmi I L Lomavren
+rmk I L Romkun
+rml I L Baltic Romani
+rmm I L Roma
+rmn I L Balkan Romani
+rmo I L Sinte Romani
+rmp I L Rempi
+rmr I L Caló
+rms I L Romanian Sign Language
+rmt I L Domari
+rmu I L Tavringer Romani
+rmv I C Romanova
+rmw I L Welsh Romani
+rmx I L Romam
+rmy I L Vlax Romani
+rna I E Runa
+rnd I L Ruund
+rng I L Ronga
+rnn I L Roon
+rnp I L Rongpo
+rnw I L Rungwa
+rob I L Tae'
+roc I L Cacgia Roglai
+rod I L Rogo
+roe I L Ronji
+rof I L Rombo
+rog I L Northern Roglai
+roh roh roh rm I L Romansh
+rol I L Romblomanon
+rom rom rom M L Romany
+ron rum ron ro I L Romanian
+roo I L Rotokas
+rop I L Kriol
+ror I L Rongga
+rou I L Runga
+row I L Dela-Oenale
+rpn I L Repanbitip
+rpt I L Rapting
+rri I L Ririo
+rro I L Waima
+rsb I L Romano-Serbian
+rsi I L Rennellese Sign Language
+rsl I L Russian Sign Language
+rth I L Ratahan
+rtm I L Rotuman
+rtw I L Rathawi
+rub I L Gungu
+ruc I L Ruli
+rue I L Rusyn
+ruf I L Luguru
+rug I L Roviana
+ruh I L Ruga
+rui I L Rufiji
+ruk I L Che
+run run run rn I L Rundi
+ruo I L Istro Romanian
+rup rup rup I L Macedo Romanian
+ruq I L Megleno Romanian
+rus rus rus ru I L Russian
+rut I L Rutul
+ruu I L Lanas Lobu
+ruy I L Mala (Nigeria)
+ruz I L Ruma
+rwa I L Rawo
+rwk I L Rwa
+rwm I L Amba (Uganda)
+rwo I L Rawa
+rwr I L Marwari (India)
+rws I L Rawas
+ryn I L Northern Amami-Oshima
+rys I L Yaeyama
+ryu I L Central Okinawan
+saa I L Saba
+sab I L Buglere
+sac I L Mesquakie
+sad sad sad I L Sandawe
+sae I L Sabanês
+saf I L Safaliba
+sag sag sag sg I L Sango
+sah sah sah I L Yakut
+saj I L Sahu
+sak I L Sake
+sam sam sam I E Samaritan Aramaic
+san san san sa I A Sanskrit
+sao I L Sause
+sap I L Sanapaná
+saq I L Samburu
+sar I E Saraveca
+sas sas sas I L Sasak
+sat sat sat I L Santali
+sau I L Saleman
+sav I L Saafi-Saafi
+saw I L Sawi
+sax I L Sa
+say I L Saya
+saz I L Saurashtra
+sba I L Ngambay
+sbb I L Simbo
+sbc I L Kele (Papua New Guinea)
+sbd I L Southern Samo
+sbe I L Saliba
+sbf I L Shabo
+sbg I L Seget
+sbh I L Sori-Harengan
+sbi I L Seti
+sbj I L Surbakhal
+sbk I L Safwa
+sbl I L Botolan Sambal
+sbm I L Sagala
+sbn I L Sindhi Bhil
+sbo I L Sabüm
+sbp I L Sangu (Tanzania)
+sbq I L Sileibi
+sbr I L Sembakung Murut
+sbs I L Subiya
+sbt I L Kimki
+sbu I L Stod Bhoti
+sbv I A Sabine
+sbw I L Simba
+sbx I L Seberuang
+sby I L Soli
+sbz I L Sara Kaba
+sca I L Sansu
+scb I L Chut
+sce I L Dongxiang
+scf I L San Miguel Creole French
+scg I L Sanggau
+sch I L Sakechep
+sci I L Sri Lankan Creole Malay
+sck I L Sadri
+scl I L Shina
+scn scn scn I L Sicilian
+sco sco sco I L Scots
+scp I L Helambu Sherpa
+scq I L Sa'och
+scs I L North Slavey
+scu I L Shumcho
+scv I L Sheni
+scw I L Sha
+scx I A Sicel
+sda I L Toraja-Sa'dan
+sdb I L Shabak
+sdc I L Sassarese Sardinian
+sdd I L Semendo
+sde I L Surubu
+sdf I L Sarli
+sdg I L Savi
+sdh I L Southern Kurdish
+sdi I L Sindang Kelingi
+sdj I L Suundi
+sdl I L Saudi Arabian Sign Language
+sdm I L Semandang
+sdn I L Gallurese Sardinian
+sdo I L Bukar Sadong
+sdp I L Sherdukpen
+sdr I L Oraon Sadri
+sds I E Sened
+sdt I E Shuadit
+sdu I L Sarudu
+sdx I L Sibu
+sdz I L Sallands
+sea I L Semai
+seb I L Shempire Senoufo
+sec I L Sechelt
+sed I L Sedang
+see I L Seneca
+sef I L Cebaara Senoufo
+seg I L Segeju
+seh I L Sena
+sei I L Seri
+sej I L Sene
+sek I L Sekani
+sel sel sel I L Selkup
+sen I L Nanerigé Sénoufo
+seo I L Suarmin
+sep I L Sìcìté Sénoufo
+seq I L Senara Sénoufo
+ser I L Serrano
+ses I L Koyraboro Senni Songhai
+set I L Sentani
+seu I L Serui-Laut
+sev I L Nyarafolo Senoufo
+sew I L Sewa Bay
+sey I L Secoya
+sez I L Senthang Chin
+sfs I L South African Sign Language
+sfw I L Sehwi
+sga sga sga I H Old Irish (to 900)
+sgb I L Mag-Anchi Ayta
+sge I L Segai
+sgg I L Swiss-German Sign Language
+sgh I L Shughni
+sgi I L Suga
+sgl I L Sanglechi-Ishkashimi
+sgm I E Singa
+sgo I L Songa
+sgp I L Singpho
+sgr I L Sangisari
+sgt I L Brokpake
+sgu I L Salas
+sgw I L Sebat Bet Gurage
+sgx I L Sierra Leone Sign Language
+sgz I L Sursurunga
+sha I L Shall-Zwall
+shb I L Ninam
+shc I L Sonde
+she I L Sheko
+shg I L Shua
+shh I L Shoshoni
+shi I L Tachelhit
+shj I L Shatt
+shk I L Shilluk
+shl I L Shendu
+shm I L Shahrudi
+shn shn shn I L Shan
+sho I L Shanga
+shp I L Shipibo-Conibo
+shq I L Sala
+shr I L Shi
+shs I L Shuswap
+sht I E Shasta
+shu I L Chadian Arabic
+shv I L Shehri
+shw I L Shwai
+shx I L She
+shy I L Tachawit
+shz I L Syenara Senoufo
+sia I L Akkala Sami
+sib I L Sebob Kenyah
+sic I L Malinguat
+sid sid sid I L Sidamo
+sie I L Simaa
+sif I L Siamou
+sig I L Paasaal
+sih I L Zire
+sii I L Shom Peng
+sij I L Numbami
+sik I L Sikiana
+sil I L Tumulung Sisaala
+sim I L Mende (Papua New Guinea)
+sin sin sin si I L Sinhala
+sip I L Sikkimese
+siq I L Sonia
+sir I L Siri
+sis I E Siuslaw
+siu I L Sinagen
+siv I L Sumariup
+siw I L Siwai
+six I L Sumau
+siy I L Sivandi
+siz I L Siwi
+sja I L Epena
+sjb I L Sajau Basap
+sjd I L Kildin Sami
+sje I L Pite Sami
+sjg I L Assangori
+sjk I E Kemi Sami
+sjl I L Sajalong
+sjm I L Mapun
+sjn I C Sindarin
+sjo I L Xibe
+sjp I L Surajpuri
+sjr I L Siar-Lak
+sjs I E Senhaja De Srair
+sjt I L Ter Sami
+sju I L Ume Sami
+sjw I L Shawnee
+ska I L Skagit
+skb I L Saek
+skc I L Sauk
+skd I L Southern Sierra Miwok
+ske I L Seke (Vanuatu)
+skf I L Sakirabiá
+skg I L Sakalava Malagasy
+skh I L Sikule
+ski I L Sika
+skj I L Seke (Nepal)
+skk I L Sok
+skl I L Selako
+skm I L Sakam
+skn I L Kolibugan Subanon
+sko I L Seko Tengah
+skp I L Sekapan
+skq I L Sininkere
+skr I L Seraiki
+sks I L Maia
+skt I L Sakata
+sku I L Sakao
+skv I L Skou
+skw I E Skepi Creole Dutch
+skx I L Seko Padang
+sky I L Sikaiana
+skz I L Sekar
+slb I L Kahumamahon Saluan
+slc I L Sáliba
+sld I L Sissala
+sle I L Sholaga
+slf I L Swiss-Italian Sign Language
+slg I L Selungai Murut
+slh I L Southern Puget Sound Salish
+sli I L Lower Silesian
+slj I L Salumá
+slk slo slk sk I L Slovak
+sll I L Salt-Yui
+slm I L Pangutaran Sama
+sln I E Salinan
+slp I L Lamaholot
+slq I L Salchuq
+slr I L Salar
+sls I L Singapore Sign Language
+slt I L Sila
+slu I L Selaru
+slv slv slv sl I L Slovenian
+slw I L Sialum
+slx I L Salampasu
+sly I L Selayar
+slz I L Ma'ya
+sma sma sma I L Southern Sami
+smb I L Simbari
+smc I L Som
+smd I L Sama
+sme sme sme se I L Northern Sami
+smf I L Auwe
+smg I L Simbali
+smh I L Samei
+smj smj smj I L Lule Sami
+smk I L Bolinao
+sml I L Central Sama
+smm I L Musasa
+smn smn smn I L Inari Sami
+smo smo smo sm I L Samoan
+smp I E Samaritan
+smq I L Samo
+smr I L Simeulue
+sms sms sms I L Skolt Sami
+smt I L Simte
+smu I L Somray
+smv I L Samvedi
+smw I L Sumbawa
+smx I L Samba
+smy I L Semnani
+smz I L Simeku
+sna sna sna sn I L Shona
+snb I L Sebuyau
+snc I L Sinaugoro
+snd snd snd sd I L Sindhi
+sne I L Jagoi
+snf I L Noon
+sng I L Sanga (Democratic Republic of Congo)
+snh I E Shinabo
+sni I E Sensi
+snj I L Riverain Sango
+snk snk snk I L Soninke
+snl I L Sangil
+snm I L Southern Ma'di
+snn I L Siona
+sno I L Snohomish
+snp I L Siane
+snq I L Sangu (Gabon)
+snr I L Sihan
+sns I L South West Bay
+snu I L Senggi
+snv I L Sa'ban
+snw I L Selee
+snx I L Sam
+sny I L Saniyo-Hiyewe
+snz I L Sinsauru
+soa I L Thai Song
+sob I L Sobei
+soc I L So (Democratic Republic of Congo)
+sod I L Songoora
+soe I L Songomeno
+sog sog sog I A Sogdian
+soh I L Aka
+soi I L Sonha
+soj I L Soi
+sok I L Sokoro
+sol I L Solos
+som som som so I L Somali
+soo I L Songo
+sop I L Songe
+soq I L Kanasi
+sor I L Somrai
+sos I L Seeku
+sot sot sot st I L Southern Sotho
+sou I L Southern Thai
+sov I L Sonsorol
+sow I L Sowanda
+sox I L So (Cameroon)
+soy I L Miyobe
+soz I L Temi
+spa spa spa es I L Spanish
+spb I L Sepa (Indonesia)
+spc I L Sapé
+spd I L Saep
+spe I L Sepa (Papua New Guinea)
+spg I L Sian
+spi I L Saponi
+spk I L Sengo
+spl I L Selepet
+spm I L Sepen
+spo I L Spokane
+spp I L Supyire Senoufo
+spq I L Loreto-Ucayali Spanish
+spr I L Saparua
+sps I L Saposa
+spt I L Spiti Bhoti
+spu I L Sapuan
+spx I A South Picene
+spy I L Sabaot
+sqa I L Shama-Sambuga
+sqh I L Shau
+sqi alb sqi sq M L Albanian
+sqm I L Suma
+sqn I E Susquehannock
+sqo I L Sorkhei
+sqq I L Sou
+sqs I L Sri Lankan Sign Language
+sqt I L Soqotri
+squ I L Squamish
+sra I L Saruga
+srb I L Sora
+src I L Logudorese Sardinian
+srd srd srd sc M L Sardinian
+sre I L Sara
+srf I L Nafi
+srg I L Sulod
+srh I L Sarikoli
+sri I L Siriano
+srj I L Serawai
+srk I L Serudung Murut
+srl I L Isirawa
+srm I L Saramaccan
+srn srn srn I L Sranan Tongo
+sro I L Campidanese Sardinian
+srp scc srp sr I L Serbian
+srq I L Sirionó
+srr srr srr I L Serer
+srs I L Sarsi
+srt I L Sauri
+sru I L Suruí
+srv I L Waray Sorsogon
+srw I L Serua
+srx I L Sirmauri
+sry I L Sera
+srz I L Shahmirzadi
+ssb I L Southern Sama
+ssd I L Siroi
+sse I L Balangingi
+ssf I L Thao
+ssg I L Seimat
+ssh I L Shihhi Arabic
+ssi I L Sansi
+ssj I L Sausi
+ssk I L Sunam
+ssl I L Western Sisaala
+ssm I L Semnam
+ssn I L Sanye
+sso I L Sissano
+ssp I L Spanish Sign Language
+ssq I L So'a
+ssr I L Swiss-French Sign Language
+sss I L Sô
+sst I L Sinasina
+ssu I L Susuami
+ssv I L Shark Bay
+ssw ssw ssw ss I L Swati
+ssx I L Samberigi
+ssy I L Saho
+ssz I L Sengseng
+sta I L Settla
+stb I L Northern Subanen
+stc I L Santa Cruz
+std I L Sentinel
+ste I L Liana-Seti
+stf I L Seta
+stg I L Trieng
+sth I L Shelta
+sti I L Bulo Stieng
+stj I L Matya Samo
+stk I L Arammba
+stl I L Stellingwerfs
+stm I L Setaman
+stn I L Owa
+sto I L Stoney
+stp I L Southeastern Tepehuan
+stq I L Saterfriesisch
+str I L Straits Salish
+sts I L Shumashti
+stt I L Budeh Stieng
+stu I L Samtao
+stw I L Satawalese
+sua I L Sulka
+sub I L Suku
+suc I L Western Subanon
+sue I L Suena
+suf I L Tarpia
+sug I L Suganga
+suh I L Suba
+sui I L Suki
+suj I L Shubi
+suk suk suk I L Sukuma
+sul I L Surigaonon
+sum I L Sumo-Mayangna
+sun sun sun su I L Sundanese
+suq I L Suri
+sur I L Mwaghavul
+sus sus sus I L Susu
+sut I E Subtiaba
+suu I L Sungkai
+suv I L Sulung
+suw I L Sumbwa
+sux sux sux I A Sumerian
+suy I L Suyá
+suz I L Sunwar
+sva I L Svan
+svb I L Ulau-Suain
+svc I L Vincentian Creole English
+sve I L Serili
+svk I L Slovakian Sign Language
+svr I L Savara
+svs I L Savosavo
+svx I E Skalvian
+swa swa swa sw M L Swahili (macrolanguage)
+swb I L Comorian
+swc I L Congo Swahili
+swe swe swe sv I L Swedish
+swf I L Sere
+swg I L Swabian
+swh I L Swahili (individual language)
+swi I L Sui
+swj I L Sira
+swk I L Malawi Sena
+swl I L Swedish Sign Language
+swm I L Samosa
+swn I L Sawknah
+swp I L Suau
+swq I L Sharwa
+swr I L Saweru
+sws I L Seluwasan
+swt I L Sawila
+swu I L Suwawa
+swv I L Shekhawati
+sww I L Sowa
+swx I L Suruahá
+swy I L Sarua
+sxc I A Sicanian
+sxe I L Sighu
+sxg I L Shixing
+sxk I E Southern Kalapuya
+sxl I E Selian
+sxm I L Samre
+sxn I L Sangir
+sxo I A Sorothaptic
+sxr I L Saaroa
+sxs I L Sasaru
+sxu I L Upper Saxon
+sxw I L Saxwe Gbe
+sya I L Siang
+syb I L Central Subanen
+syc syc syc I H Classical Syriac
+syi I L Seki
+syk I L Sukur
+syl I L Sylheti
+sym I L Maya Samo
+syn I L Senaya
+syo I L Suoy
+syr syr syr M L Syriac
+sys I L Sinyar
+syw I L Kagate
+sza I L Semelai
+szb I L Ngalum
+szc I L Semaq Beri
+szd I E Seru
+sze I L Seze
+szg I L Sengele
+szk I L Sizaki
+szn I L Sula
+szp I L Suabo
+szv I L Isu (Fako Division)
+szw I L Sawai
+taa I L Lower Tanana
+tab I L Tabassaran
+tac I L Lowland Tarahumara
+tad I L Tause
+tae I L Tariano
+taf I L Tapirapé
+tag I L Tagoi
+tah tah tah ty I L Tahitian
+taj I L Eastern Tamang
+tak I L Tala
+tal I L Tal
+tam tam tam ta I L Tamil
+tan I L Tangale
+tao I L Yami
+tap I L Taabwa
+taq I L Tamasheq
+tar I L Central Tarahumara
+tas I E Tay Boi
+tat tat tat tt I L Tatar
+tau I L Upper Tanana
+tav I L Tatuyo
+taw I L Tai
+tax I L Tamki
+tay I L Atayal
+taz I L Tocho
+tba I L Tubarão
+tbb I E Tapeba
+tbc I L Takia
+tbd I L Kaki Ae
+tbe I L Tanimbili
+tbf I L Mandara
+tbg I L North Tairora
+tbh I E Thurawal
+tbi I L Gaam
+tbj I L Tiang
+tbk I L Calamian Tagbanwa
+tbl I L Tboli
+tbm I L Tagbu
+tbn I L Barro Negro Tunebo
+tbo I L Tawala
+tbp I L Taworta
+tbr I L Tumtum
+tbs I L Tanguat
+tbt I L Tembo (Kitembo)
+tbu I E Tubar
+tbv I L Tobo
+tbw I L Tagbanwa
+tbx I L Kapin
+tby I L Tabaru
+tbz I L Ditammari
+tca I L Ticuna
+tcb I L Tanacross
+tcc I L Datooga
+tcd I L Tafi
+tce I L Southern Tutchone
+tcf I L Malinaltepec Tlapanec
+tcg I L Tamagario
+tch I L Turks And Caicos Creole English
+tci I L Wára
+tck I L Tchitchege
+tcl I L Taman (Myanmar)
+tcm I L Tanahmerah
+tcn I L Tichurong
+tco I L Taungyo
+tcp I L Tawr Chin
+tcq I L Kaiy
+tcs I L Torres Strait Creole
+tct I L T'en
+tcu I L Southeastern Tarahumara
+tcx I L Toda
+tcy I L Tulu
+tcz I L Thado Chin
+tda I L Tagdal
+tdb I L Panchpargania
+tdc I L Emberá-Tadó
+tdd I L Tai Nüa
+tdf I L Talieng
+tdg I L Western Tamang
+tdh I L Thulung
+tdi I L Tomadino
+tdj I L Tajio
+tdk I L Tambas
+tdl I L Sur
+tdn I L Tondano
+tdo I L Teme
+tdq I L Tita
+tdr I L Todrah
+tds I L Doutai
+tdt I L Tetun Dili
+tdu I L Tempasuk Dusun
+tdv I L Toro
+tdx I L Tandroy-Mahafaly Malagasy
+tdy I L Tadyawan
+tea I L Temiar
+teb I E Tetete
+ted I L Tepo Krumen
+tee I L Huehuetla Tepehua
+tef I L Teressa
+teg I L Teke-Tege
+teh I L Tehuelche
+tei I L Torricelli
+tek I L Ibali Teke
+tel tel tel te I L Telugu
+tem tem tem I L Timne
+ten I E Tama (Colombia)
+teo I L Teso
+tep I E Tepecano
+teq I L Temein
+ter ter ter I L Tereno
+tes I L Tengger
+tet tet tet I L Tetum
+teu I L Soo
+tev I L Teor
+tew I L Tewa (USA)
+tex I L Tennet
+tey I L Tulishi
+tfi I L Tofin Gbe
+tfn I L Tanaina
+tfo I L Tefaro
+tfr I L Teribe
+tft I L Ternate
+tga I L Sagalla
+tgb I L Tebilung
+tgc I L Tigak
+tgd I L Ciwogai
+tge I L Eastern Gorkha Tamang
+tgf I L Chalikha
+tgg I L Tangga
+tgh I L Tobagonian Creole English
+tgi I L Lawunuia
+tgk tgk tgk tg I L Tajik
+tgl tgl tgl tl I L Tagalog
+tgo I L Sudest
+tgp I L Tangoa
+tgq I L Tring
+tgr I L Tareng
+tgs I L Nume
+tgt I L Central Tagbanwa
+tgu I L Tanggu
+tgv I E Tingui-Boto
+tgw I L Tagwana Senoufo
+tgx I L Tagish
+tgy I E Togoyo
+tha tha tha th I L Thai
+thc I L Tai Hang Tong
+thd I L Thayore
+the I L Chitwania Tharu
+thf I L Thangmi
+thh I L Northern Tarahumara
+thi I L Tai Long
+thk I L Tharaka
+thl I L Dangaura Tharu
+thm I L Aheu
+thp I L Thompson
+thq I L Kochila Tharu
+thr I L Rana Tharu
+ths I L Thakali
+tht I L Tahltan
+thu I L Thuri
+thv I L Tahaggart Tamahaq
+thw I L Thudam
+thx I L The
+thy I L Tha
+thz I L Tayart Tamajeq
+tia I L Tidikelt Tamazight
+tic I L Tira
+tid I L Tidong
+tie I L Tingal
+tif I L Tifal
+tig tig tig I L Tigre
+tih I L Timugon Murut
+tii I L Tiene
+tij I L Tilung
+tik I L Tikar
+til I E Tillamook
+tim I L Timbe
+tin I L Tindi
+tio I L Teop
+tip I L Trimuris
+tiq I L Tiéfo
+tir tir tir ti I L Tigrinya
+tis I L Masadiit Itneg
+tit I L Tinigua
+tiu I L Adasen Itneg
+tiv tiv tiv I L Tiv
+tiw I L Tiwi
+tix I L Southern Tiwa
+tiy I L Tiruray
+tiz I L Tai Hongjin
+tja I L Tajuasohn
+tjg I L Tunjung
+tji I L Northern Tujia
+tjm I E Timucua
+tjn I E Tonjon
+tjo I L Temacine Tamazight
+tjs I L Southern Tujia
+tju I E Tjurruru
+tka I E Truká
+tkb I L Buksa
+tkd I L Tukudede
+tke I L Takwane
+tkf I E Tukumanféd
+tkk I L Takpa
+tkl tkl tkl I L Tokelau
+tkm I E Takelma
+tkn I L Toku-No-Shima
+tkp I L Tikopia
+tkq I L Tee
+tkr I L Tsakhur
+tks I L Takestani
+tkt I L Kathoriya Tharu
+tkw I L Teanu
+tkx I L Tangko
+tkz I L Takua
+tla I L Southwestern Tepehuan
+tlb I L Tobelo
+tlc I L Yecuatla Totonac
+tld I L Talaud
+tle I L Talai
+tlf I L Telefol
+tlg I L Tofanma
+tlh tlh tlh I C Klingon
+tli tli tli I L Tlingit
+tlj I L Talinga-Bwisi
+tlk I L Taloki
+tll I L Tetela
+tlm I L Tolomako
+tln I L Talondo'
+tlo I L Talodi
+tlp I L Filomena Mata-Coahuitlán Totonac
+tlq I L Tai Loi
+tlr I L Talise
+tls I L Tambotalo
+tlt I L Teluti
+tlu I L Tulehu
+tlv I L Taliabu
+tlw I L South Wemale
+tlx I L Khehek
+tly I L Talysh
+tlz I L Toala'
+tma I L Tama (Chad)
+tmb I L Katbol
+tmc I L Tumak
+tmd I L Haruai
+tme I L Tremembé
+tmf I L Toba-Maskoy
+tmg I E Ternateño
+tmh tmh tmh M L Tamashek
+tmi I L Tutuba
+tmj I L Samarokena
+tmk I L Northwestern Tamang
+tml I L Tamnim Citak
+tmm I L Tai Thanh
+tmn I L Taman (Indonesia)
+tmo I L Temoq
+tmp I L Tai Mène
+tmq I L Tumleo
+tmr I E Jewish Babylonian Aramaic (ca. 200-1200 CE)
+tms I L Tima
+tmt I L Tasmate
+tmu I L Iau
+tmv I L Tembo (Motembo)
+tmw I L Temuan
+tmx I L Tomyang
+tmy I L Tami
+tmz I E Tamanaku
+tna I L Tacana
+tnb I L Western Tunebo
+tnc I L Tanimuca-Retuarã
+tnd I L Angosturas Tunebo
+tne I L Tinoc Kallahan
+tnf I L Tangshewi
+tng I L Tobanga
+tnh I L Maiani
+tni I L Tandia
+tnj I L Tanjong
+tnk I L Kwamera
+tnl I L Lenakel
+tnm I L Tabla
+tnn I L North Tanna
+tno I L Toromono
+tnp I L Whitesands
+tnq I E Taino
+tnr I L Budik
+tns I L Tenis
+tnt I L Tontemboan
+tnu I L Tay Khang
+tnv I L Tangchangya
+tnw I L Tonsawang
+tnx I L Tanema
+tny I L Tongwe
+tnz I L Tonga (Thailand)
+tob I L Toba
+toc I L Coyutla Totonac
+tod I L Toma
+toe I E Tomedes
+tof I L Gizrra
+tog tog tog I L Tonga (Nyasa)
+toh I L Gitonga
+toi I L Tonga (Zambia)
+toj I L Tojolabal
+tol I L Tolowa
+tom I L Tombulu
+ton ton ton to I L Tonga (Tonga Islands)
+too I L Xicotepec De Juárez Totonac
+top I L Papantla Totonac
+toq I L Toposa
+tor I L Togbo-Vara Banda
+tos I L Highland Totonac
+tot I L Patla-Chicontla Totonac
+tou I L Tho
+tov I L Upper Taromi
+tow I L Jemez
+tox I L Tobian
+toy I L Topoiyo
+toz I L To
+tpa I L Taupota
+tpc I L Azoyú Tlapanec
+tpe I L Tippera
+tpg I L Kula
+tpi tpi tpi I L Tok Pisin
+tpj I L Tapieté
+tpk I E Tupinikin
+tpl I L Tlacoapa Tlapanec
+tpm I L Tampulma
+tpn I E Tupinambá
+tpo I L Tai Pao
+tpp I L Pisaflores Tepehua
+tpq I L Tukpa
+tpr I L Tuparí
+tpt I L Tlachichilco Tepehua
+tpu I L Tampuan
+tpv I L Tanapag
+tpw I E Tupí
+tpx I L Acatepec Tlapanec
+tpy I L Trumaí
+tpz I L Tinputz
+tqb I L Tembé
+tql I L Lehali
+tqm I L Turumsa
+tqn I L Tenino
+tqo I L Toaripi
+tqp I L Tomoip
+tqq I L Tunni
+tqr I E Torona
+tqt I L Ozumatlán Totonac
+tqu I L Touo
+tqw I E Tonkawa
+tra I L Tirahi
+trb I L Terebu
+trc I L Copala Triqui
+trd I L Turi
+tre I L East Tarangan
+trf I L Trinidadian Creole English
+trg I L Lishán Didán
+trh I L Turaka
+tri I L Trió
+trj I L Toram
+trl I L Traveller Scottish
+trm I L Tregami
+trn I L Trinitario
+tro I L Tarao Naga
+trp I L Kok Borok
+trq I L San Martín Itunyoso Triqui
+trr I L Taushiro
+trs I L Chicahuaxtla Triqui
+trt I L Tunggare
+tru I L Turoyo
+trv I L Taroko
+trw I L Torwali
+trx I L Tringgus
+try I E Turung
+trz I L Torá
+tsa I L Tsaangi
+tsb I L Tsamai
+tsc I L Tswa
+tsd I L Tsakonian
+tse I L Tunisian Sign Language
+tsf I L Southwestern Tamang
+tsg I L Tausug
+tsh I L Tsuvan
+tsi tsi tsi I L Tsimshian
+tsj I L Tshangla
+tsk I L Tseku
+tsl I L Ts'ün-Lao
+tsm I L Turkish Sign Language
+tsn tsn tsn tn I L Tswana
+tso tso tso ts I L Tsonga
+tsp I L Northern Toussian
+tsq I L Thai Sign Language
+tsr I L Akei
+tss I L Taiwan Sign Language
+tsu I L Tsou
+tsv I L Tsogo
+tsw I L Tsishingini
+tsx I L Mubami
+tsz I L Purepecha
+tta I E Tutelo
+ttb I L Gaa
+ttc I L Tektiteko
+ttd I L Tauade
+tte I L Bwanabwana
+ttf I L Tuotomb
+ttg I L Tutong 2
+tth I L Upper Ta'oih
+tti I L Tobati
+ttj I L Tooro
+ttk I L Totoro
+ttl I L Totela
+ttm I L Northern Tutchone
+ttn I L Towei
+tto I L Lower Ta'oih
+ttp I L Tombelala
+ttq I L Tawallammat Tamajaq
+ttr I L Tera
+tts I L Northeastern Thai
+ttt I L Muslim Tat
+ttu I L Torau
+ttv I L Titan
+ttw I L Tutoh Kenyah
+ttx I L Tutong 1
+tty I L Sikaritai
+ttz I L Tsum
+tua I L Wiarumus
+tub I L Tübatulabal
+tuc I L Mutu
+tud I E Tuxá
+tue I L Tuyuca
+tuf I L Central Tunebo
+tug I L Tunia
+tuh I L Taulil
+tui I L Tupuri
+tuj I L Tugutil
+tuk tuk tuk tk I L Turkmen
+tul I L Tula
+tum tum tum I L Tumbuka
+tun I E Tunica
+tuo I L Tucano
+tuq I L Tedaga
+tur tur tur tr I L Turkish
+tus I L Tuscarora
+tuu I L Tututni
+tuv I L Turkana
+tux I E Tuxináwa
+tuy I L North Tugen
+tuz I L Turka
+tva I L Vaghua
+tvd I L Tsuvadi
+tve I L Te'un
+tvk I L Southeast Ambrym
+tvl tvl tvl I L Tuvalu
+tvm I L Tela-Masbuar
+tvn I L Tavoyan
+tvo I L Tidore
+tvs I L Taveta
+tvt I L Tutsa Naga
+tvw I L Sedoa
+tvy I E Timor Pidgin
+twa I E Twana
+twb I L Western Tawbuid
+twc I E Teshenawa
+twd I L Twents
+twe I L Tewa (Indonesia)
+twf I L Northern Tiwa
+twg I L Tereweng
+twh I L Tai Dón
+twi twi twi tw I L Twi
+twl I L Tawara
+twn I L Twendi
+two I L Tswapong
+twp I L Ere
+twq I L Tasawaq
+twr I L Southwestern Tarahumara
+twt I E Turiwára
+twu I L Termanu
+tww I L Tuwari
+twx I L Tewe
+twy I L Tawoyan
+txa I L Tombonuwo
+txb I A Tokharian B
+txc I E Tsetsaut
+txe I L Totoli
+txg I A Tangut
+txh I A Thracian
+txi I L Ikpeng
+txm I L Tomini
+txn I L West Tarangan
+txo I L Toto
+txq I L Tii
+txr I A Tartessian
+txs I L Tonsea
+txt I L Citak
+txu I L Kayapó
+txx I L Tatana
+txy I L Tanosy Malagasy
+tya I L Tauya
+tye I L Kyenga
+tyh I L O'du
+tyi I L Teke-Tsaayi
+tyj I L Tai Do
+tyl I L Thu Lao
+tyn I L Kombai
+typ I L Thaypan
+tyr I L Tai Daeng
+tys I L Tày Sa Pa
+tyt I L Tày Tac
+tyu I L Kua
+tyv tyv tyv I L Tuvinian
+tyx I L Teke-Tyee
+tyz I L Tày
+tza I L Tanzanian Sign Language
+tzb I L Bachajón Tzeltal
+tzc I L Chamula Tzotzil
+tze I L Chenalhó Tzotzil
+tzh I L Oxchuc Tzeltal
+tzj I L Eastern Tzutujil
+tzm I L Central Atlas Tamazight
+tzn I L Tugun
+tzo I L Venustiano Carranza Tzotzil
+tzs I L San Andrés Larrainzar Tzotzil
+tzt I L Western Tzutujil
+tzu I L Huixtán Tzotzil
+tzx I L Tabriak
+tzz I L Zinacantán Tzotzil
+uam I E Uamué
+uan I L Kuan
+uar I L Tairuma
+uba I L Ubang
+ubi I L Ubi
+ubm I L Upper Baram Kenyah
+ubr I L Ubir
+ubu I L Umbu-Ungu
+uby I E Ubykh
+uda I L Uda
+ude I L Udihe
+udi I L Udi
+udj I L Ujir
+udl I L Wuzlam
+udm udm udm I L Udmurt
+udu I L Uduk
+ues I L Kioko
+ufi I L Ufim
+uga uga uga I A Ugaritic
+ugb I L Kuku-Ugbanh
+uge I L Ughele
+ugn I L Ugandan Sign Language
+ugo I L Ugong
+ugy I L Uruguayan Sign Language
+uha I L Uhami
+uhn I L Damal
+uig uig uig ug I L Uighur
+uis I L Uisai
+uiv I L Iyive
+uji I L Tanjijili
+uka I L Kaburi
+ukg I L Ukuriguma
+ukh I L Ukhwejo
+ukl I L Ukrainian Sign Language
+ukp I L Ukpe-Bayobiri
+ukq I L Ukwa
+ukr ukr ukr uk I L Ukrainian
+uks I L Urubú-Kaapor Sign Language
+uku I L Ukue
+ukw I L Ukwuani-Aboh-Ndoni
+ula I L Fungwa
+ulb I L Ulukwumi
+ulc I L Ulch
+ulf I L Usku
+uli I L Ulithian
+ulk I L Meriam
+ull I L Ullatan
+ulm I L Ulumanda'
+uln I L Unserdeutsch
+uma I L Umatilla
+umb umb umb I L Umbundu
+umc I A Marrucinian
+umd I L Umbindhamu
+umg I L Umbuygamu
+umi I L Ukit
+umm I L Umon
+umo I E Umotína
+ump I L Umpila
+umr I L Umbugarla
+ums I L Pendau
+umu I L Munsee
+una I L North Watut
+und und und S S Undetermined
+une I L Uneme
+ung I L Ngarinyin
+unk I L Enawené-Nawé
+unm I E Unami
+unp I L Worora
+unz I L Unde Kaili
+uok I L Uokha
+upi I L Umeda
+upv I L Uripiv-Wala-Rano-Atchin
+ura I L Urarina
+urb I L Urubú-Kaapor
+urc I L Urningangg
+urd urd urd ur I L Urdu
+ure I L Uru
+urf I L Uradhi
+urg I L Urigina
+urh I L Urhobo
+uri I L Urim
+urk I L Urak Lawoi'
+url I L Urali
+urm I L Urapmin
+urn I L Uruangnirin
+uro I L Ura (Papua New Guinea)
+urp I L Uru-Pa-In
+urr I L Lehalurup
+urt I L Urat
+uru I E Urumi
+urv I E Uruava
+urw I L Sop
+urx I L Urimo
+ury I L Orya
+urz I L Uru-Eu-Wau-Wau
+usa I L Usarufa
+ush I L Ushojo
+usi I L Usui
+usk I L Usaghade
+usp I L Uspanteco
+usu I L Uya
+uta I L Otank
+ute I L Ute-Southern Paiute
+utp I L Amba (Solomon Islands)
+utr I L Etulo
+utu I L Utu
+uum I L Urum
+uun I E Kulon-Pazeh
+uur I L Ura (Vanuatu)
+uuu I L U
+uve I L West Uvean
+uvh I L Uri
+uvl I L Lote
+uwa I L Kuku-Uwanh
+uya I L Doko-Uyanga
+uzb uzb uzb uz M L Uzbek
+uzn I L Northern Uzbek
+uzs I L Southern Uzbek
+vaa I L Vaagri Booli
+vae I L Vale
+vaf I L Vafsi
+vag I L Vagla
+vah I L Varhadi-Nagpuri
+vai vai vai I L Vai
+vaj I L Vasekela Bushman
+val I L Vehes
+vam I L Vanimo
+van I L Valman
+vao I L Vao
+vap I L Vaiphei
+var I L Huarijio
+vas I L Vasavi
+vau I L Vanuma
+vav I L Varli
+vay I L Wayu
+vbb I L Southeast Babar
+vec I L Venetian
+ved I L Veddah
+vel I L Veluws
+vem I L Vemgo-Mabas
+ven ven ven ve I L Venda
+veo I E Ventureño
+vep I L Veps
+ver I L Mom Jango
+vgr I L Vaghri
+vic I L Virgin Islands Creole English
+vid I L Vidunda
+vie vie vie vi I L Vietnamese
+vif I L Vili
+vig I L Viemo
+vil I L Vilela
+vin I L Vinza
+vis I L Vishavan
+vit I L Viti
+viv I L Iduna
+vka I E Kariyarra
+vki I L Ija-Zuba
+vkj I L Kujarge
+vkk I L Kaur
+vkl I L Kulisusu
+vkm I E Kamakan
+vko I L Kodeoha
+vkp I L Korlai Creole Portuguese
+vkt I L Tenggarong Kutai Malay
+vku I L Kurrama
+vky I L Kayu Agung
+vlp I L Valpei
+vlr I L Vatrata
+vls I L Vlaams
+vma I L Martuyhunira
+vmb I L Mbabaram
+vmc I L Juxtlahuaca Mixtec
+vmd I L Mudu Koraga
+vme I L East Masela
+vmf I L Mainfränkisch
+vmg I L Minigir
+vmh I L Maraghei
+vmi I L Miwa
+vmj I L Ixtayutla Mixtec
+vmk I L Makhuwa-Shirima
+vml I E Malgana
+vmm I L Mitlatongo Mixtec
+vmo I L Muko-Muko
+vmp I L Soyaltepec Mazatec
+vmq I L Soyaltepec Mixtec
+vmr I L Marenje
+vms I E Moksela
+vmu I L Muluridyi
+vmv I E Valley Maidu
+vmw I L Makhuwa
+vmx I L Tamazola Mixtec
+vmy I L Ayautla Mazatec
+vmz I L Mazatlán Mazatec
+vnk I E Vano
+vnm I L Vinmavis
+vnp I L Vunapu
+vol vol vol vo I C Volapük
+vor I L Voro
+vot vot vot I L Votic
+vrs I L Varisi
+vrt I L Burmbar
+vsi I L Moldova Sign Language
+vsl I L Venezuelan Sign Language
+vum I L Vumbu
+vun I L Vunjo
+vut I L Vute
+waa I L Walla Walla
+wab I L Wab
+wac I L Wasco-Wishram
+wad I L Wandamen
+wae I L Walser
+waf I E Wakoná
+wag I L Wa'ema
+wah I L Watubela
+wai I L Wares
+waj I L Waffa
+wal wal wal I L Walamo
+wam I E Wampanoag
+wan I L Wan
+wao I E Wappo
+wap I L Wapishana
+waq I L Wageman
+war war war I L Waray (Philippines)
+was was was I L Washo
+wat I L Kaninuwa
+wau I L Waurá
+wav I L Waka
+waw I L Waiwai
+wax I L Watam
+way I L Wayana
+waz I L Wampur
+wba I L Warao
+wbb I L Wabo
+wbe I L Waritai
+wbf I L Wara
+wbh I L Wanda
+wbi I L Wanji
+wbj I L Alagwa
+wbk I L Waigali
+wbl I L Wakhi
+wbm I L Wa
+wbp I L Warlpiri
+wbq I L Waddar
+wbr I L Wagdi
+wbt I L Wanman
+wbv I L Wajarri
+wbw I L Woi
+wca I L Yanomámi
+wci I L Waci Gbe
+wdd I L Wandji
+wdg I L Wadaginam
+wdj I L Wadjiginy
+wdu I L Wadjigu
+wea I L Wewaw
+wec I L Wè Western
+wed I L Wedau
+weh I L Weh
+wei I L Were
+wem I L Weme Gbe
+weo I L North Wemale
+wep I L Westphalien
+wer I L Weri
+wes I L Cameroon Pidgin
+wet I L Perai
+weu I L Welaung
+wew I L Wejewa
+wfg I L Yafi
+wga I L Wagaya
+wgg I L Wangganguru
+wgi I L Wahgi
+wgo I L Waigeo
+wgw I L Wagawaga
+wgy I L Warrgamay
+wha I L Manusela
+whg I L North Wahgi
+whk I L Wahau Kenyah
+whu I L Wahau Kayan
+wib I L Southern Toussian
+wic I L Wichita
+wie I L Wik-Epa
+wif I L Wik-Keyangan
+wig I L Wik-Ngathana
+wih I L Wik-Me'anha
+wii I L Wiaki
+wij I L Wik-Iiyanh
+wik I L Wikalkan
+wil I L Wilawila
+wim I L Wik-Mungkan
+win I L Ho-Chunk
+wir I E Wiraféd
+wit I L Wintu
+wiu I L Wiru
+wiv I L Muduapa
+wiw I L Wirangu
+wiy I E Wiyot
+wja I L Waja
+wji I L Warji
+wka I E Kw'adza
+wkd I L Wakde
+wkw I L Wakawaka
+wla I L Walio
+wlc I L Mwali Comorian
+wlg I L Kunbarlang
+wli I L Waioli
+wlk I E Wailaki
+wll I L Wali (Sudan)
+wlm I H Middle Welsh
+wln wln wln wa I L Walloon
+wlo I L Wolio
+wlr I L Wailapa
+wls I L Wallisian
+wlu I E Wuliwuli
+wlv I L Wichí Lhamtés Vejoz
+wlw I L Walak
+wlx I L Wali (Ghana)
+wly I E Waling
+wma I E Mawa (Nigeria)
+wmb I L Wambaya
+wmc I L Wamas
+wme I L Wambule
+wmh I L Waima'a
+wmi I L Wamin
+wmm I L Maiwa (Indonesia)
+wmn I E Waamwang
+wmo I L Wom (Papua New Guinea)
+wms I L Wambon
+wmt I L Walmajarri
+wmw I L Mwani
+wnb I L Wanambre
+wnc I L Wantoat
+wnd I E Wandarang
+wne I L Waneci
+wng I L Wanggom
+wni I L Ndzwani Comorian
+wnk I L Wanukaka
+wnm I L Wanggamala
+wno I L Wano
+wnp I L Wanap
+wnu I L Usan
+woa I L Tyaraity
+wob I L Wè Northern
+woc I L Wogeo
+wod I L Wolani
+woe I L Woleaian
+wof I L Gambian Wolof
+wog I L Wogamusin
+woi I L Kamang
+wok I L Longto
+wol wol wol wo I L Wolof
+wom I L Wom (Nigeria)
+won I L Wongo
+woo I L Manombai
+wor I L Woria
+wos I L Hanga Hundi
+wow I L Wawonii
+woy I E Weyto
+wpc I L Maco
+wra I L Warapu
+wrb I L Warluwara
+wrd I L Warduji
+wre I L Ware
+wrg I L Warungu
+wrh I L Wiradhuri
+wri I E Wariyangga
+wrl I L Warlmanpa
+wrm I L Warumungu
+wrn I L Warnang
+wrp I L Waropen
+wrr I L Wardaman
+wrs I L Waris
+wru I L Waru
+wrv I L Waruna
+wrw I E Gugu Warra
+wrx I L Wae Rana
+wry I L Merwari
+wrz I L Waray (Australia)
+wsa I L Warembori
+wsi I L Wusi
+wsk I L Waskia
+wsr I L Owenia
+wss I L Wasa
+wsu I E Wasu
+wsv I L Wotapuri-Katarqalai
+wtf I L Dumpu
+wti I L Berta
+wtk I L Watakataui
+wtm I L Mewati
+wtw I L Wotu
+wua I L Wikngenchera
+wub I L Wunambal
+wud I L Wudu
+wuh I L Wutunhua
+wul I L Silimo
+wum I L Wumbvu
+wun I L Bungu
+wur I E Wurrugu
+wut I L Wutung
+wuu I L Wu Chinese
+wuv I L Wuvulu-Aua
+wux I L Wulna
+wuy I L Wauyai
+wwa I L Waama
+wwo I L Wetamut
+wwr I L Warrwa
+www I L Wawa
+wxa I L Waxianghua
+wya I E Wyandot
+wyb I L Wangaaybuwan-Ngiyambaa
+wyr I L Wayoró
+wyy I L Western Fijian
+xac I L Kachari
+xad I E Adai
+xae I A Aequian
+xag I E Aghwan
+xah I L Kahayan
+xai I E Kaimbé
+xal xal xal I L Kalmyk
+xam I E /Xam
+xan I L Xamtanga
+xao I L Khao
+xap I E Apalachee
+xaq I A Aquitanian
+xar I E Karami
+xas I E Kamas
+xat I L Katawixi
+xau I L Kauwera
+xav I L Xavánte
+xaw I L Kawaiisu
+xay I L Kayan Mahakam
+xba I E Kamba (Brazil)
+xbc I A Bactrian
+xbi I L Kombio
+xbm I H Middle Breton
+xbo I E Bolgarian
+xbr I L Kambera
+xbw I E Kambiwá
+xbx I L Kabixí
+xcb I E Cumbric
+xcc I A Camunic
+xce I A Celtiberian
+xcg I A Cisalpine Gaulish
+xch I E Chemakum
+xcl I H Classical Armenian
+xcm I E Comecrudo
+xcn I E Cotoname
+xco I A Chorasmian
+xcr I A Carian
+xct I H Classical Tibetan
+xcu I E Curonian
+xcv I E Chuvantsy
+xcw I E Coahuilteco
+xcy I E Cayuse
+xdc I A Dacian
+xdm I A Edomite
+xdy I L Malayic Dayak
+xeb I A Eblan
+xed I L Hdi
+xeg I E //Xegwi
+xel I L Kelo
+xem I L Kembayan
+xep I A Epi-Olmec
+xer I L Xerénte
+xes I L Kesawai
+xet I L Xetá
+xeu I L Keuru
+xfa I A Faliscan
+xga I A Galatian
+xgf I E Gabrielino-Fernandeño
+xgl I E Galindan
+xgr I E Garza
+xha I A Harami
+xhc I E Hunnic
+xhd I A Hadrami
+xhe I L Khetrani
+xho xho xho xh I L Xhosa
+xhr I A Hernican
+xht I A Hattic
+xhu I A Hurrian
+xhv I L Khua
+xia I L Xiandao
+xib I A Iberian
+xii I L Xiri
+xil I A Illyrian
+xin I E Xinca
+xip I E Xipináwa
+xir I E Xiriâna
+xiv I A Indus Valley Language
+xiy I L Xipaya
+xka I L Kalkoti
+xkb I L Manigri-Kambolé Ede Nago
+xkc I L Kho'ini
+xkd I L Mendalam Kayan
+xke I L Kereho-Uheng
+xkf I L Khengkha
+xkg I L Kagoro
+xkh I L Karahawyana
+xki I L Kenyan Sign Language
+xkj I L Kajali
+xkk I L Kaco'
+xkl I L Kelinyau Kenyah
+xkm I L Mahakam Kenyah
+xkn I L Kayan River Kayan
+xko I L Kiorr
+xkp I L Kabatei
+xkq I L Koroni
+xkr I E Xakriabá
+xks I L Kumbewaha
+xkt I L Kantosi
+xku I L Kaamba
+xkv I L Kgalagadi
+xkw I L Kembra
+xkx I L Karore
+xky I L Western Kenyah
+xkz I L Kurtokha
+xla I L Kamula
+xlb I E Loup B
+xlc I A Lycian
+xld I A Lydian
+xle I A Lemnian
+xlg I A Ligurian (Ancient)
+xli I A Liburnian
+xln I A Alanic
+xlo I E Loup A
+xlp I A Lepontic
+xls I A Lusitanian
+xlu I A Cuneiform Luwian
+xly I A Elymian
+xma I L Mushungulu
+xmb I L Mbonga
+xmc I L Makhuwa-Marrevone
+xmd I L Mbedam
+xme I A Median
+xmf I L Mingrelian
+xmg I L Mengaka
+xmh I L Kuku-Muminh
+xmi I L Miarrã
+xmj I L Majera
+xmk I A Ancient Macedonian
+xml I L Malaysian Sign Language
+xmm I L Manado Malay
+xmo I L Morerebi
+xmp I L Kuku-Mu'inh
+xmq I L Kuku-Mangk
+xmr I A Meroitic
+xms I L Moroccan Sign Language
+xmt I L Matbat
+xmu I L Kamu
+xmv I L Antankarana Malagasy
+xmw I L Tsimihety Malagasy
+xmx I L Maden
+xmy I L Mayaguduna
+xmz I L Mori Bawah
+xna I A Ancient North Arabian
+xnb I L Kanakanabu
+xng I H Middle Mongolian
+xnh I L Kuanhua
+xnn I L Northern Kankanay
+xno I H Anglo-Norman
+xnr I L Kangri
+xns I L Kanashi
+xod I L Kokoda
+xog I L Soga
+xoi I L Kominimung
+xok I L Xokleng
+xom I L Komo (Sudan)
+xon I L Konkomba
+xoo I E Xukurú
+xop I L Kopar
+xor I L Korubo
+xow I L Kowaki
+xpc I E Pecheneg
+xpe I L Liberia Kpelle
+xpg I A Phrygian
+xpi I E Pictish
+xpm I E Pumpokol
+xpn I E Kapinawá
+xpo I E Pochutec
+xpp I E Puyo-Paekche
+xpr I A Parthian
+xps I E Pisidian
+xpu I A Punic
+xpy I E Puyo
+xqt I A Qatabanian
+xra I L Krahô
+xrb I L Eastern Karaboro
+xre I L Kreye
+xri I L Krikati-Timbira
+xrm I E Armazic
+xrn I E Arin
+xrr I A Raetic
+xrt I E Aranama-Tamique
+xrw I L Karawa
+xsa I A Sabaean
+xsb I L Tinà Sambal
+xsc I A Scythian
+xsd I A Sidetic
+xse I L Sempan
+xsh I L Shamang
+xsi I L Sio
+xsj I L Subi
+xsk I A Sakan
+xsl I L South Slavey
+xsm I L Kasem
+xsn I L Sanga (Nigeria)
+xso I E Solano
+xsp I L Silopi
+xsq I L Makhuwa-Saka
+xsr I L Sherpa
+xss I E Assan
+xst I L Silt'e
+xsu I L Sanumá
+xsv I E Sudovian
+xsy I L Saisiyat
+xta I L Alcozauca Mixtec
+xtb I L Chazumba Mixtec
+xtc I L Katcha-Kadugli-Miri
+xtd I L Diuxi-Tilantongo Mixtec
+xte I L Ketengban
+xtg I A Transalpine Gaulish
+xti I L Sinicahua Mixtec
+xtj I L San Juan Teita Mixtec
+xtl I L Tijaltepec Mixtec
+xtm I L Magdalena Peñasco Mixtec
+xtn I L Northern Tlaxiaco Mixtec
+xto I A Tokharian A
+xtp I L San Miguel Piedras Mixtec
+xtr I A Early Tripuri
+xts I L Sindihui Mixtec
+xtt I L Tacahua Mixtec
+xtu I L Cuyamecalco Mixtec
+xty I L Yoloxochitl Mixtec
+xtz I E Tasmanian
+xua I L Alu Kurumba
+xub I L Betta Kurumba
+xuf I L Kunfal
+xug I L Kunigami
+xuj I L Jennu Kurumba
+xum I A Umbrian
+xuo I L Kuo
+xup I E Upper Umpqua
+xur I A Urartian
+xut I L Kuthant
+xuu I L Kxoe
+xve I A Venetic
+xvi I L Kamviri
+xvn I A Vandalic
+xvo I A Volscian
+xvs I A Vestinian
+xwc I E Woccon
+xwe I L Xwela Gbe
+xwg I L Kwegu
+xwl I L Western Xwla Gbe
+xwo I E Written Oirat
+xwr I L Kwerba Mamberamo
+xxk I L Ke'o
+xzh I A Zhang-Zhung
+xzm I E Zemgalian
+yaa I L Yaminahua
+yab I L Yuhup
+yac I L Pass Valley Yali
+yad I L Yagua
+yae I L Pumé
+yaf I L Yaka (Democratic Republic of Congo)
+yag I L Yámana
+yah I L Yazgulyam
+yai I L Yagnobi
+yaj I L Banda-Yangere
+yak I L Yakima
+yal I L Yalunka
+yam I L Yamba
+yao yao yao I L Yao
+yap yap yap I L Yapese
+yaq I L Yaqui
+yar I L Yabarana
+yas I L Nugunu (Cameroon)
+yat I L Yambeta
+yau I L Yuwana
+yav I L Yangben
+yaw I E Yawalapití
+yax I L Yauma
+yay I L Agwagwune
+yaz I L Lokaa
+yba I L Yala
+ybb I L Yemba
+ybd I L Yangbye
+ybe I L West Yugur
+ybh I L Yakha
+ybi I L Yamphu
+ybj I L Hasha
+ybl I L Yukuben
+ybm I L Yaben
+ybn I E Yabaâna
+ybo I L Yabong
+ybx I L Yawiyo
+yby I L Yaweyuha
+ycl I L Central Yi
+ycn I L Yucuna
+ydd I L Eastern Yiddish
+ydg I L Yidgha
+ydk I L Yoidik
+yds I L Yiddish Sign Language
+yea I L Ravula
+yec I L Yeniche
+yee I L Yimas
+yei I E Yeni
+yej I L Yevanic
+yel I L Yela
+yen I L Yendang
+yer I L Tarok
+yes I L Yeskwa
+yet I L Yetfa
+yeu I L Yerukula
+yev I L Yapunda
+yey I L Yeyi
+ygm I L Yagomi
+ygr I L Yagaria
+ygw I L Yagwoia
+yhd I L Judeo-Iraqi Arabic
+yia I L Yinggarda
+yib I L Yinglish
+yid yid yid yi M L Yiddish
+yif I L Ache Yi
+yig I L Guizhou Yi
+yih I L Western Yiddish
+yii I L Yidiny
+yij I L Yindjibarndi
+yik I L Xishan Lalu Yi
+yil I L Yindjilandji
+yim I L Yimchungru Naga
+yin I L Yinchia
+yio I L Dayao Yi
+yip I L Poluo Yi
+yiq I L Miqie Yi
+yir I L North Awyu
+yis I L Yis
+yit I L Eastern Lalu Yi
+yiu I L Awu Yi
+yiv I L Eshan-Xinping Yi
+yix I L Axi Yi
+yiy I L Yir Yoront
+yiz I L Azhe Yi
+yka I L Yakan
+ykg I L Northern Yukaghir
+yki I L Yoke
+ykk I L Yakaikeke
+ykm I L Yakamul
+yko I L Yasa
+ykr I L Yekora
+yky I L Yakoma
+yla I L Yaul
+yle I L Yele
+ylg I L Yelogu
+yli I L Angguruk Yali
+yll I L Yil
+ylm I L Limi Yi
+ylo I L Naluo Yi
+ylr I E Yalarnnga
+ylu I L Aribwaung
+yly I L Nyâlayu
+yma I L Yamphe
+ymb I L Yambes
+yme I E Yameo
+ymg I L Yamongeri
+ymh I L Mili Yi
+ymj I L Muji Yi
+ymk I L Makwe
+yml I L Iamalele
+ymm I L Maay
+ymn I L Yamna
+ymp I L Yamap
+yms I A Mysian
+ymt I E Mator-Taygi-Karagas
+ynd I L Yandruwandha
+yng I L Yango
+ynh I L Yangho
+ynk I L Naukan Yupik
+ynl I L Yangulam
+ynn I E Yana
+yno I L Yong
+yns I L Yansi
+ynu I E Yahuna
+yob I E Yoba
+yog I L Yogad
+yoi I L Yonaguni
+yok I L Yokuts
+yom I L Yombe
+yon I L Yonggom
+yor yor yor yo I L Yoruba
+yos I L Yos
+yox I L Yoron
+yoy I L Yoy
+ypl I L Pula Yi
+ypw I L Puwa Yi
+yra I L Yerakai
+yrb I L Yareba
+yre I L Yaouré
+yri I L Yarí
+yrk I L Nenets
+yrl I L Nhengatu
+yrn I L Yerong
+yrs I L Yarsun
+yrw I L Yarawata
+ysc I E Yassic
+ysl I L Yugoslavian Sign Language
+ysn I L Sani Yi
+yso I L Southeastern Lolo Yi
+ysp I L Southern Lolopho Yi
+ysr I E Sirenik Yupik
+yss I L Yessan-Mayo
+yua I L Yucatán Maya
+yub I E Yugambal
+yuc I L Yuchi
+yud I L Judeo-Tripolitanian Arabic
+yue I L Yue Chinese
+yuf I L Havasupai-Walapai-Yavapai
+yug I E Yug
+yui I L Yurutí
+yuj I L Karkar-Yuri
+yuk I E Yuki
+yul I L Yulu
+yum I L Quechan
+yun I L Bena (Nigeria)
+yup I L Yukpa
+yuq I L Yuqui
+yur I L Yurok
+yus I L Chan Santa Cruz Maya
+yut I L Yopno
+yuu I L Yugh
+yuw I L Yau (Morobe Province)
+yux I L Southern Yukaghir
+yuy I L East Yugur
+yuz I L Yuracare
+yva I L Yawa
+yvt I E Yavitero
+ywa I L Kalou
+ywl I L Western Lalu Yi
+ywm I L Wumeng Yi
+ywn I L Yawanawa
+ywq I L Wuding-Luquan Yi
+ywr I L Yawuru
+ywt I L Western Yi
+ywu I L Wusa Yi
+yww I L Yawarawarga
+yym I L Yuanjiang-Mojiang Yi
+yyu I L Yau (Sandaun Province)
+zaa I L Sierra de Juárez Zapotec
+zab I L San Juan Guelavía Zapotec
+zac I L Ocotlán Zapotec
+zad I L Cajonos Zapotec
+zae I L Yareni Zapotec
+zaf I L Ayoquesco Zapotec
+zag I L Zaghawa
+zah I L Zangwal
+zai I L Isthmus Zapotec
+zaj I L Zaramo
+zak I L Zanaki
+zal I L Zauzou
+zam I L Miahuatlán Zapotec
+zao I L Ozolotepec Zapotec
+zap zap zap M L Zapotec
+zaq I L Aloápam Zapotec
+zar I L Rincón Zapotec
+zas I L Santo Domingo Albarradas Zapotec
+zat I L Tabaa Zapotec
+zau I L Zangskari
+zav I L Yatzachi Zapotec
+zaw I L Mitla Zapotec
+zax I L Xadani Zapotec
+zay I L Zayse-Zergulla
+zaz I L Zari
+zca I L Coatecas Altas Zapotec
+zdj I L Ngazidja Comorian
+zea I L Zeeuws
+zeg I L Zenag
+zen zen zen I L Zenaga
+zga I L Kinga
+zgr I L Magori
+zha zha zha za M L Zhuang
+zhb I L Zhaba
+zhi I L Zhire
+zho chi zho zh M L Chinese
+zhw I L Zhoa
+zia I L Zia
+zib I L Zimbabwe Sign Language
+zik I L Zimakani
+zim I L Mesme
+zin I L Zinza
+zir I L Ziriya
+ziw I L Zigula
+ziz I L Zizilivakan
+zka I L Kaimbulawa
+zkb I E Koibal
+zkg I E Koguryo
+zkh I E Khorezmian
+zkk I E Karankawa
+zko I E Kott
+zkp I E São Paulo Kaingáng
+zkr I L Zakhring
+zkt I E Kitan
+zku I E Kaurna
+zkv I E Krevinian
+zkz I E Khazar
+zma I L Manda (Australia)
+zmb I L Zimba
+zmc I L Margany
+zmd I L Maridan
+zme I L Mangerr
+zmf I L Mfinu
+zmg I L Marti Ke
+zmh I L Makolkol
+zmi I L Negeri Sembilan Malay
+zmj I L Maridjabin
+zmk I L Mandandanyi
+zml I L Madngele
+zmm I L Marimanindji
+zmn I L Mbangwe
+zmo I L Molo
+zmp I L Mpuono
+zmq I L Mituku
+zmr I L Maranunggu
+zms I L Mbesa
+zmt I L Maringarr
+zmu I L Muruwari
+zmv I L Mbariman-Gudhinma
+zmw I L Mbo (Democratic Republic of Congo)
+zmx I L Bomitaba
+zmy I L Mariyedi
+zmz I L Mbandja
+zna I L Zan Gula
+zne I L Zande (individual language)
+zng I L Mang
+znk I E Manangkari
+zns I L Mangas
+zoc I L Copainalá Zoque
+zoh I L Chimalapa Zoque
+zom I L Zome
+zoo I L Asunción Mixtepec Zapotec
+zoq I L Tabasco Zoque
+zor I L Rayón Zoque
+zos I L Francisco León Zoque
+zpa I L Lachiguiri Zapotec
+zpb I L Yautepec Zapotec
+zpc I L Choapan Zapotec
+zpd I L Southeastern Ixtlán Zapotec
+zpe I L Petapa Zapotec
+zpf I L San Pedro Quiatoni Zapotec
+zpg I L Guevea De Humboldt Zapotec
+zph I L Totomachapan Zapotec
+zpi I L Santa María Quiegolani Zapotec
+zpj I L Quiavicuzas Zapotec
+zpk I L Tlacolulita Zapotec
+zpl I L Lachixío Zapotec
+zpm I L Mixtepec Zapotec
+zpn I L Santa Inés Yatzechi Zapotec
+zpo I L Amatlán Zapotec
+zpp I L El Alto Zapotec
+zpq I L Zoogocho Zapotec
+zpr I L Santiago Xanica Zapotec
+zps I L Coatlán Zapotec
+zpt I L San Vicente Coatlán Zapotec
+zpu I L Yalálag Zapotec
+zpv I L Chichicapan Zapotec
+zpw I L Zaniza Zapotec
+zpx I L San Baltazar Loxicha Zapotec
+zpy I L Mazaltepec Zapotec
+zpz I L Texmelucan Zapotec
+zra I E Kara (Korea)
+zrg I L Mirgan
+zrn I L Zirenkel
+zro I L Záparo
+zrp I E Zarphatic
+zrs I L Mairasi
+zsk I A Kaskean
+zsl I L Zambian Sign Language
+zsr I L Southern Rincon Zapotec
+ztc I L Lachirioag Zapotec
+zte I L Elotepec Zapotec
+ztg I L Xanaguía Zapotec
+ztl I L Santiago Lapaguía Zapotec
+ztm I L San Agustín Mixtepec Zapotec
+ztn I L Santa Catarina Albarradas Zapotec
+ztp I L Loxicha Zapotec
+ztq I L Quioquitani-Quierí Zapotec
+zts I L Tilquiapan Zapotec
+ztt I L Tejalapan Zapotec
+ztu I L Güilá Zapotec
+ztx I L Zaachila Zapotec
+zty I L Yatee Zapotec
+zua I L Zeem
+zuh I L Tokano
+zul zul zul zu I L Zulu
+zum I L Kumzari
+zun zun zun I L Zuni
+zuy I L Zumaya
+zwa I L Zay
+zxx zxx zxx S S No linguistic content
+zyp I L Zyphe
+zza zza zza M L Zaza
\ No newline at end of file

Added: branches/mlmw/maintenance/language/tags/language-subtag-registry
===================================================================
--- branches/mlmw/maintenance/language/tags/language-subtag-registry (rev 0)
+++ branches/mlmw/maintenance/language/tags/language-subtag-registry 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,5309 @@
+File-Date: 2007-05-04
+%%
+Type: language
+Subtag: aa
+Description: Afar
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ab
+Description: Abkhazian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: ae
+Description: Avestan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: af
+Description: Afrikaans
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ak
+Description: Akan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: am
+Description: Amharic
+Added: 2005-10-16
+Suppress-Script: Ethi
+%%
+Type: language
+Subtag: an
+Description: Aragonese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: anp
+Description: Angika
+Added: 2006-03-08
+%%
+Type: language
+Subtag: ar
+Description: Arabic
+Added: 2005-10-16
+Suppress-Script: Arab
+%%
+Type: language
+Subtag: as
+Description: Assamese
+Added: 2005-10-16
+Suppress-Script: Beng
+%%
+Type: language
+Subtag: av
+Description: Avaric
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ay
+Description: Aymara
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: az
+Description: Azerbaijani
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ba
+Description: Bashkir
+Added: 2005-10-16
+%%
+Type: language
+Subtag: be
+Description: Belarusian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: bg
+Description: Bulgarian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: bh
+Description: Bihari
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bi
+Description: Bislama
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bm
+Description: Bambara
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bn
+Description: Bengali
+Added: 2005-10-16
+Suppress-Script: Beng
+%%
+Type: language
+Subtag: bo
+Description: Tibetan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: br
+Description: Breton
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bs
+Description: Bosnian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ca
+Description: Catalan
+Description: Valencian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ce
+Description: Chechen
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ch
+Description: Chamorro
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: co
+Description: Corsican
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cr
+Description: Cree
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cs
+Description: Czech
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: cu
+Description: Church Slavic
+Description: Old Slavonic
+Description: Church Slavonic
+Description: Old Bulgarian
+Description: Old Church Slavonic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cv
+Description: Chuvash
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cy
+Description: Welsh
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: da
+Description: Danish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: de
+Description: German
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: dv
+Description: Divehi
+Description: Dhivehi
+Description: Maldivian
+Added: 2005-10-16
+Suppress-Script: Thaa
+%%
+Type: language
+Subtag: dz
+Description: Dzongkha
+Added: 2005-10-16
+Suppress-Script: Tibt
+%%
+Type: language
+Subtag: ee
+Description: Ewe
+Added: 2005-10-16
+%%
+Type: language
+Subtag: el
+Description: Greek, Modern (1453-)
+Added: 2005-10-16
+Suppress-Script: Grek
+%%
+Type: language
+Subtag: en
+Description: English
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: eo
+Description: Esperanto
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: es
+Description: Spanish
+Description: Castilian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: et
+Description: Estonian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: eu
+Description: Basque
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: fa
+Description: Persian
+Added: 2005-10-16
+Suppress-Script: Arab
+%%
+Type: language
+Subtag: ff
+Description: Fulah
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fi
+Description: Finnish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: fj
+Description: Fijian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: fo
+Description: Faroese
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: fr
+Description: French
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: frr
+Description: Northern Frisian
+Added: 2006-03-08
+%%
+Type: language
+Subtag: fy
+Description: Western Frisian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ga
+Description: Irish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: gd
+Description: Gaelic
+Description: Scottish Gaelic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gl
+Description: Galician
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: gn
+Description: Guarani
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: gu
+Description: Gujarati
+Added: 2005-10-16
+Suppress-Script: Gujr
+%%
+Type: language
+Subtag: gv
+Description: Manx
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ha
+Description: Hausa
+Added: 2005-10-16
+%%
+Type: language
+Subtag: he
+Description: Hebrew
+Added: 2005-10-16
+Suppress-Script: Hebr
+%%
+Type: language
+Subtag: hi
+Description: Hindi
+Added: 2005-10-16
+Suppress-Script: Deva
+%%
+Type: language
+Subtag: ho
+Description: Hiri Motu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: hr
+Description: Croatian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ht
+Description: Haitian
+Description: Haitian Creole
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: hu
+Description: Hungarian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: hy
+Description: Armenian
+Added: 2005-10-16
+Suppress-Script: Armn
+%%
+Type: language
+Subtag: hz
+Description: Herero
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ia
+Description: Interlingua (International Auxiliary Language
+ Association)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: id
+Description: Indonesian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ie
+Description: Interlingue
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ig
+Description: Igbo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ii
+Description: Sichuan Yi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ik
+Description: Inupiaq
+Added: 2005-10-16
+%%
+Type: language
+Subtag: in
+Description: Indonesian
+Added: 2005-10-16
+Preferred-Value: id
+Deprecated: 1989-01-01
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: io
+Description: Ido
+Added: 2005-10-16
+%%
+Type: language
+Subtag: is
+Description: Icelandic
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: it
+Description: Italian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: iu
+Description: Inuktitut
+Added: 2005-10-16
+%%
+Type: language
+Subtag: iw
+Description: Hebrew
+Added: 2005-10-16
+Preferred-Value: he
+Deprecated: 1989-01-01
+Suppress-Script: Hebr
+%%
+Type: language
+Subtag: ja
+Description: Japanese
+Added: 2005-10-16
+Suppress-Script: Jpan
+%%
+Type: language
+Subtag: ji
+Description: Yiddish
+Added: 2005-10-16
+Preferred-Value: yi
+Deprecated: 1989-01-01
+%%
+Type: language
+Subtag: jv
+Description: Javanese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: jw
+Description: Javanese
+Added: 2005-10-16
+Preferred-Value: jv
+Deprecated: 2001-08-13
+Comments: published by error in Table 1 of ISO 639:1988
+%%
+Type: language
+Subtag: ka
+Description: Georgian
+Added: 2005-10-16
+Suppress-Script: Geor
+%%
+Type: language
+Subtag: kg
+Description: Kongo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ki
+Description: Kikuyu
+Description: Gikuyu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kj
+Description: Kuanyama
+Description: Kwanyama
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kk
+Description: Kazakh
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: kl
+Description: Kalaallisut
+Description: Greenlandic
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: km
+Description: Central Khmer
+Added: 2005-10-16
+Suppress-Script: Khmr
+%%
+Type: language
+Subtag: kn
+Description: Kannada
+Added: 2005-10-16
+Suppress-Script: Knda
+%%
+Type: language
+Subtag: ko
+Description: Korean
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kr
+Description: Kanuri
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ks
+Description: Kashmiri
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ku
+Description: Kurdish
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kv
+Description: Komi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kw
+Description: Cornish
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ky
+Description: Kyrgyz
+Description: Kirghiz
+Added: 2005-10-16
+%%
+Type: language
+Subtag: la
+Description: Latin
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: lb
+Description: Luxembourgish
+Description: Letzeburgesch
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: lg
+Description: Ganda
+Added: 2005-10-16
+%%
+Type: language
+Subtag: li
+Description: Limburgan
+Description: Limburger
+Description: Limburgish
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ln
+Description: Lingala
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: lo
+Description: Lao
+Added: 2005-10-16
+Suppress-Script: Laoo
+%%
+Type: language
+Subtag: lt
+Description: Lithuanian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: lu
+Description: Luba-Katanga
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lv
+Description: Latvian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: mg
+Description: Malagasy
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: mh
+Description: Marshallese
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: mi
+Description: Maori
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mk
+Description: Macedonian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: ml
+Description: Malayalam
+Added: 2005-10-16
+Suppress-Script: Mlym
+%%
+Type: language
+Subtag: mn
+Description: Mongolian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mo
+Description: Moldavian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: mr
+Description: Marathi
+Added: 2005-10-16
+Suppress-Script: Deva
+%%
+Type: language
+Subtag: ms
+Description: Malay
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: mt
+Description: Maltese
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: my
+Description: Burmese
+Added: 2005-10-16
+Suppress-Script: Mymr
+%%
+Type: language
+Subtag: na
+Description: Nauru
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nb
+Description: Norwegian Bokm&#xE5;l
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nd
+Description: Ndebele, North
+Description: North Ndebele
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ne
+Description: Nepali
+Added: 2005-10-16
+Suppress-Script: Deva
+%%
+Type: language
+Subtag: ng
+Description: Ndonga
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nl
+Description: Dutch
+Description: Flemish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nn
+Description: Norwegian Nynorsk
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: no
+Description: Norwegian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nr
+Description: Ndebele, South
+Description: South Ndebele
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nv
+Description: Navajo
+Description: Navaho
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ny
+Description: Chichewa
+Description: Chewa
+Description: Nyanja
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: oc
+Description: Occitan (post 1500)
+Description: Proven&#xE7;al
+Added: 2005-10-16
+%%
+Type: language
+Subtag: oj
+Description: Ojibwa
+Added: 2005-10-16
+%%
+Type: language
+Subtag: om
+Description: Oromo
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: or
+Description: Oriya
+Added: 2005-10-16
+Suppress-Script: Orya
+%%
+Type: language
+Subtag: os
+Description: Ossetian
+Description: Ossetic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pa
+Description: Panjabi
+Description: Punjabi
+Added: 2005-10-16
+Suppress-Script: Guru
+%%
+Type: language
+Subtag: pi
+Description: Pali
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pl
+Description: Polish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ps
+Description: Pushto
+Added: 2005-10-16
+Suppress-Script: Arab
+%%
+Type: language
+Subtag: pt
+Description: Portuguese
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: qu
+Description: Quechua
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: rm
+Description: Romansh
+Added: 2005-10-16
+%%
+Type: language
+Subtag: rn
+Description: Rundi
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ro
+Description: Romanian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ru
+Description: Russian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: rw
+Description: Kinyarwanda
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sa
+Description: Sanskrit
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sc
+Description: Sardinian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sd
+Description: Sindhi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: se
+Description: Northern Sami
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sg
+Description: Sango
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sh
+Description: Serbo-Croatian
+Added: 2005-10-16
+Deprecated: 2000-02-18
+%%
+Type: language
+Subtag: si
+Description: Sinhala
+Description: Sinhalese
+Added: 2005-10-16
+Suppress-Script: Sinh
+%%
+Type: language
+Subtag: sk
+Description: Slovak
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sl
+Description: Slovenian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sm
+Description: Samoan
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sn
+Description: Shona
+Added: 2005-10-16
+%%
+Type: language
+Subtag: so
+Description: Somali
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sq
+Description: Albanian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sr
+Description: Serbian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ss
+Description: Swati
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: st
+Description: Sotho, Southern
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: su
+Description: Sundanese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sv
+Description: Swedish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sw
+Description: Swahili
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ta
+Description: Tamil
+Added: 2005-10-16
+Suppress-Script: Taml
+%%
+Type: language
+Subtag: te
+Description: Telugu
+Added: 2005-10-16
+Suppress-Script: Telu
+%%
+Type: language
+Subtag: tg
+Description: Tajik
+Added: 2005-10-16
+%%
+Type: language
+Subtag: th
+Description: Thai
+Added: 2005-10-16
+Suppress-Script: Thai
+%%
+Type: language
+Subtag: ti
+Description: Tigrinya
+Added: 2005-10-16
+Suppress-Script: Ethi
+%%
+Type: language
+Subtag: tk
+Description: Turkmen
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tl
+Description: Tagalog
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tn
+Description: Tswana
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: to
+Description: Tonga (Tonga Islands)
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tr
+Description: Turkish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ts
+Description: Tsonga
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tt
+Description: Tatar
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tw
+Description: Twi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ty
+Description: Tahitian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ug
+Description: Uighur
+Description: Uyghur
+Added: 2005-10-16
+%%
+Type: language
+Subtag: uk
+Description: Ukrainian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: ur
+Description: Urdu
+Added: 2005-10-16
+Suppress-Script: Arab
+%%
+Type: language
+Subtag: uz
+Description: Uzbek
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ve
+Description: Venda
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: vi
+Description: Vietnamese
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: vo
+Description: Volap&#xFC;k
+Added: 2005-10-16
+%%
+Type: language
+Subtag: wa
+Description: Walloon
+Added: 2005-10-16
+%%
+Type: language
+Subtag: wo
+Description: Wolof
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: xh
+Description: Xhosa
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: yi
+Description: Yiddish
+Added: 2005-10-16
+Suppress-Script: Hebr
+%%
+Type: language
+Subtag: yo
+Description: Yoruba
+Added: 2005-10-16
+%%
+Type: language
+Subtag: za
+Description: Zhuang
+Description: Chuang
+Added: 2005-10-16
+%%
+Type: language
+Subtag: zh
+Description: Chinese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: zu
+Description: Zulu
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ace
+Description: Achinese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ach
+Description: Acoli
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ada
+Description: Adangme
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ady
+Description: Adyghe
+Description: Adygei
+Added: 2005-10-16
+%%
+Type: language
+Subtag: afa
+Description: Afro-Asiatic (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: afh
+Description: Afrihili
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ain
+Description: Ainu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: akk
+Description: Akkadian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ale
+Description: Aleut
+Added: 2005-10-16
+%%
+Type: language
+Subtag: alg
+Description: Algonquian languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: alt
+Description: Southern Altai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ang
+Description: English, Old (ca. 450-1100)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: apa
+Description: Apache languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: arc
+Description: Aramaic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: arn
+Description: Mapudungun
+Description: Mapuche
+Added: 2005-10-16
+%%
+Type: language
+Subtag: arp
+Description: Arapaho
+Added: 2005-10-16
+%%
+Type: language
+Subtag: art
+Description: Artificial (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: arw
+Description: Arawak
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ast
+Description: Asturian
+Description: Bable
+Description: Leonese
+Description: Asturleonese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ath
+Description: Athapascan languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: aus
+Description: Australian languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: awa
+Description: Awadhi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bad
+Description: Banda languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bai
+Description: Bamileke languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bal
+Description: Baluchi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ban
+Description: Balinese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bas
+Description: Basa
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bat
+Description: Baltic (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bej
+Description: Beja
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bem
+Description: Bemba
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ber
+Description: Berber (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bho
+Description: Bhojpuri
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bik
+Description: Bikol
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bin
+Description: Bini
+Description: Edo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bla
+Description: Siksika
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bnt
+Description: Bantu (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bra
+Description: Braj
+Added: 2005-10-16
+%%
+Type: language
+Subtag: btk
+Description: Batak languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bua
+Description: Buriat
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bug
+Description: Buginese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: byn
+Description: Blin
+Description: Bilin
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cad
+Description: Caddo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cai
+Description: Central American Indian (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: car
+Description: Galibi Carib
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cau
+Description: Caucasian (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ceb
+Description: Cebuano
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cel
+Description: Celtic (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chb
+Description: Chibcha
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chg
+Description: Chagatai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chk
+Description: Chuukese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chm
+Description: Mari
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chn
+Description: Chinook jargon
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cho
+Description: Choctaw
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chp
+Description: Chipewyan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chr
+Description: Cherokee
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chy
+Description: Cheyenne
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cmc
+Description: Chamic languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cop
+Description: Coptic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cpe
+Description: Creoles and pidgins, English-based (Other)
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: cpf
+Description: Creoles and pidgins, French-based (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cpp
+Description: Creoles and pidgins, Portuguese-based (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: crh
+Description: Crimean Tatar
+Description: Crimean Turkish
+Added: 2005-10-16
+%%
+Type: language
+Subtag: crp
+Description: Creoles and pidgins (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: csb
+Description: Kashubian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cus
+Description: Cushitic (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dak
+Description: Dakota
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dar
+Description: Dargwa
+Added: 2005-10-16
+%%
+Type: language
+Subtag: day
+Description: Land Dayak languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: del
+Description: Delaware
+Added: 2005-10-16
+%%
+Type: language
+Subtag: den
+Description: Slave (Athapascan)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dgr
+Description: Dogrib
+Added: 2005-10-16
+%%
+Type: language
+Subtag: din
+Description: Dinka
+Added: 2005-10-16
+%%
+Type: language
+Subtag: doi
+Description: Dogri
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dra
+Description: Dravidian (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dsb
+Description: Lower Sorbian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dua
+Description: Duala
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dum
+Description: Dutch, Middle (ca. 1050-1350)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dyu
+Description: Dyula
+Added: 2005-10-16
+%%
+Type: language
+Subtag: efi
+Description: Efik
+Added: 2005-10-16
+%%
+Type: language
+Subtag: egy
+Description: Egyptian (Ancient)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: eka
+Description: Ekajuk
+Added: 2005-10-16
+%%
+Type: language
+Subtag: elx
+Description: Elamite
+Added: 2005-10-16
+%%
+Type: language
+Subtag: enm
+Description: English, Middle (1100-1500)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ewo
+Description: Ewondo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fan
+Description: Fang
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fat
+Description: Fanti
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fil
+Description: Filipino
+Description: Pilipino
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fiu
+Description: Finno-Ugrian (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fon
+Description: Fon
+Added: 2005-10-16
+%%
+Type: language
+Subtag: frm
+Description: French, Middle (ca. 1400-1600)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fro
+Description: French, Old (842-ca. 1400)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: frs
+Description: Eastern Frisian
+Added: 2006-03-08
+%%
+Type: language
+Subtag: fur
+Description: Friulian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gaa
+Description: Ga
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gay
+Description: Gayo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gba
+Description: Gbaya
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gem
+Description: Germanic (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gez
+Description: Geez
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gil
+Description: Gilbertese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gmh
+Description: German, Middle High (ca. 1050-1500)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: goh
+Description: German, Old High (ca. 750-1050)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gon
+Description: Gondi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gor
+Description: Gorontalo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: got
+Description: Gothic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: grb
+Description: Grebo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: grc
+Description: Greek, Ancient (to 1453)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gsw
+Description: Swiss German
+Description: Alemannic
+Added: 2006-03-08
+%%
+Type: language
+Subtag: gwi
+Description: Gwich&#xB4;in
+Added: 2005-10-16
+%%
+Type: language
+Subtag: hai
+Description: Haida
+Added: 2005-10-16
+%%
+Type: language
+Subtag: haw
+Description: Hawaiian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: hil
+Description: Hiligaynon
+Added: 2005-10-16
+%%
+Type: language
+Subtag: him
+Description: Himachali
+Added: 2005-10-16
+%%
+Type: language
+Subtag: hit
+Description: Hittite
+Added: 2005-10-16
+%%
+Type: language
+Subtag: hmn
+Description: Hmong
+Added: 2005-10-16
+%%
+Type: language
+Subtag: hsb
+Description: Upper Sorbian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: hup
+Description: Hupa
+Added: 2005-10-16
+%%
+Type: language
+Subtag: iba
+Description: Iban
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ijo
+Description: Ijo languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ilo
+Description: Iloko
+Added: 2005-10-16
+%%
+Type: language
+Subtag: inc
+Description: Indic (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ine
+Description: Indo-European (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: inh
+Description: Ingush
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ira
+Description: Iranian (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: iro
+Description: Iroquoian languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: jbo
+Description: Lojban
+Added: 2005-10-16
+%%
+Type: language
+Subtag: jpr
+Description: Judeo-Persian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: jrb
+Description: Judeo-Arabic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kaa
+Description: Kara-Kalpak
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kab
+Description: Kabyle
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kac
+Description: Kachin
+Description: Jingpho
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kam
+Description: Kamba
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kar
+Description: Karen languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kaw
+Description: Kawi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kbd
+Description: Kabardian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kha
+Description: Khasi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: khi
+Description: Khoisan (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kho
+Description: Khotanese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kmb
+Description: Kimbundu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kok
+Description: Konkani
+Added: 2005-10-16
+Suppress-Script: Deva
+%%
+Type: language
+Subtag: kos
+Description: Kosraean
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kpe
+Description: Kpelle
+Added: 2005-10-16
+%%
+Type: language
+Subtag: krc
+Description: Karachay-Balkar
+Added: 2005-10-16
+%%
+Type: language
+Subtag: krl
+Description: Karelian
+Added: 2006-03-08
+%%
+Type: language
+Subtag: kro
+Description: Kru languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kru
+Description: Kurukh
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kum
+Description: Kumyk
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kut
+Description: Kutenai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lad
+Description: Ladino
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lah
+Description: Lahnda
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lam
+Description: Lamba
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lez
+Description: Lezghian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lol
+Description: Mongo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: loz
+Description: Lozi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lua
+Description: Luba-Lulua
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lui
+Description: Luiseno
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lun
+Description: Lunda
+Added: 2005-10-16
+%%
+Type: language
+Subtag: luo
+Description: Luo (Kenya and Tanzania)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lus
+Description: Lushai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mad
+Description: Madurese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mag
+Description: Magahi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mai
+Description: Maithili
+Added: 2005-10-16
+Suppress-Script: Deva
+%%
+Type: language
+Subtag: mak
+Description: Makasar
+Added: 2005-10-16
+%%
+Type: language
+Subtag: man
+Description: Mandingo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: map
+Description: Austronesian (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mas
+Description: Masai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mdf
+Description: Moksha
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mdr
+Description: Mandar
+Added: 2005-10-16
+%%
+Type: language
+Subtag: men
+Description: Mende
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: mga
+Description: Irish, Middle (900-1200)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mic
+Description: Mi'kmaq
+Description: Micmac
+Added: 2005-10-16
+%%
+Type: language
+Subtag: min
+Description: Minangkabau
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mis
+Description: Miscellaneous languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mkh
+Description: Mon-Khmer (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mnc
+Description: Manchu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mni
+Description: Manipuri
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mno
+Description: Manobo languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: moh
+Description: Mohawk
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mos
+Description: Mossi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mul
+Description: Multiple languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mun
+Description: Munda languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mus
+Description: Creek
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mwl
+Description: Mirandese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mwr
+Description: Marwari
+Added: 2005-10-16
+%%
+Type: language
+Subtag: myn
+Description: Mayan languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: myv
+Description: Erzya
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nah
+Description: Nahuatl languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nai
+Description: North American Indian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nap
+Description: Neapolitan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nds
+Description: Low German
+Description: Low Saxon
+Description: German, Low
+Description: Saxon, Low
+Added: 2005-10-16
+%%
+Type: language
+Subtag: new
+Description: Nepal Bhasa
+Description: Newari
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nia
+Description: Nias
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nic
+Description: Niger-Kordofanian (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: niu
+Description: Niuean
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nog
+Description: Nogai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: non
+Description: Norse, Old
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nqo
+Description: N&#x2019;Ko
+Added: 2006-06-05
+Suppress-Script: Nkoo
+%%
+Type: language
+Subtag: nso
+Description: Northern Sotho
+Description: Pedi
+Description: Sepedi
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nub
+Description: Nubian languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nwc
+Description: Classical Newari
+Description: Old Newari
+Description: Classical Nepal Bhasa
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nym
+Description: Nyamwezi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nyn
+Description: Nyankole
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nyo
+Description: Nyoro
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nzi
+Description: Nzima
+Added: 2005-10-16
+%%
+Type: language
+Subtag: osa
+Description: Osage
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ota
+Description: Turkish, Ottoman (1500-1928)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: oto
+Description: Otomian languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: paa
+Description: Papuan (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pag
+Description: Pangasinan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pal
+Description: Pahlavi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pam
+Description: Pampanga
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pap
+Description: Papiamento
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pau
+Description: Palauan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: peo
+Description: Persian, Old (ca. 600-400 B.C.)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: phi
+Description: Philippine (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: phn
+Description: Phoenician
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pon
+Description: Pohnpeian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pra
+Description: Prakrit languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pro
+Description: Proven&#xE7;al, Old (to 1500)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: qaa..qtz
+Description: PRIVATE USE
+Added: 2005-10-16
+%%
+Type: language
+Subtag: raj
+Description: Rajasthani
+Added: 2005-10-16
+%%
+Type: language
+Subtag: rap
+Description: Rapanui
+Added: 2005-10-16
+%%
+Type: language
+Subtag: rar
+Description: Rarotongan
+Description: Cook Islands Maori
+Added: 2005-10-16
+%%
+Type: language
+Subtag: roa
+Description: Romance (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: rom
+Description: Romany
+Added: 2005-10-16
+%%
+Type: language
+Subtag: rup
+Description: Aromanian
+Description: Arumanian
+Description: Macedo-Romanian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sad
+Description: Sandawe
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sah
+Description: Yakut
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sai
+Description: South American Indian (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sal
+Description: Salishan languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sam
+Description: Samaritan Aramaic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sas
+Description: Sasak
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sat
+Description: Santali
+Added: 2005-10-16
+%%
+Type: language
+Subtag: scn
+Description: Sicilian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sco
+Description: Scots
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sel
+Description: Selkup
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sem
+Description: Semitic (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sga
+Description: Irish, Old (to 900)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sgn
+Description: Sign Languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: shn
+Description: Shan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sid
+Description: Sidamo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sio
+Description: Siouan languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sit
+Description: Sino-Tibetan (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sla
+Description: Slavic (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sma
+Description: Southern Sami
+Added: 2005-10-16
+%%
+Type: language
+Subtag: smi
+Description: Sami languages (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: smj
+Description: Lule Sami
+Added: 2005-10-16
+%%
+Type: language
+Subtag: smn
+Description: Inari Sami
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sms
+Description: Skolt Sami
+Added: 2005-10-16
+%%
+Type: language
+Subtag: snk
+Description: Soninke
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sog
+Description: Sogdian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: son
+Description: Songhai languages
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: srn
+Description: Sranan Tongo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: srr
+Description: Serer
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ssa
+Description: Nilo-Saharan (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: suk
+Description: Sukuma
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sus
+Description: Susu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sux
+Description: Sumerian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: syc
+Description: Classical Syriac
+Added: 2007-04-03
+%%
+Type: language
+Subtag: syr
+Description: Syriac
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tai
+Description: Tai (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tem
+Description: Timne
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ter
+Description: Tereno
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tet
+Description: Tetum
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tig
+Description: Tigre
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tiv
+Description: Tiv
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tkl
+Description: Tokelau
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tlh
+Description: Klingon
+Description: tlhIngan-Hol
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tli
+Description: Tlingit
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tmh
+Description: Tamashek
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tog
+Description: Tonga (Nyasa)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tpi
+Description: Tok Pisin
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tsi
+Description: Tsimshian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tum
+Description: Tumbuka
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tup
+Description: Tupi languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tut
+Description: Altaic (Other)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tvl
+Description: Tuvalu
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tyv
+Description: Tuvinian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: udm
+Description: Udmurt
+Added: 2005-10-16
+%%
+Type: language
+Subtag: uga
+Description: Ugaritic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: umb
+Description: Umbundu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: und
+Description: Undetermined
+Added: 2005-10-16
+%%
+Type: language
+Subtag: vai
+Description: Vai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: vot
+Description: Votic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: wak
+Description: Wakashan languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: wal
+Description: Walamo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: war
+Description: Waray
+Added: 2005-10-16
+%%
+Type: language
+Subtag: was
+Description: Washo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: wen
+Description: Sorbian languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: xal
+Description: Kalmyk
+Description: Oirat
+Added: 2005-10-16
+%%
+Type: language
+Subtag: yao
+Description: Yao
+Added: 2005-10-16
+%%
+Type: language
+Subtag: yap
+Description: Yapese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ypk
+Description: Yupik languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: zap
+Description: Zapotec
+Added: 2005-10-16
+%%
+Type: language
+Subtag: zen
+Description: Zenaga
+Added: 2005-10-16
+%%
+Type: language
+Subtag: znd
+Description: Zande languages
+Added: 2005-10-16
+%%
+Type: language
+Subtag: zun
+Description: Zuni
+Added: 2005-10-16
+%%
+Type: language
+Subtag: zxx
+Description: No linguistic content
+Added: 2006-03-08
+%%
+Type: language
+Subtag: zza
+Description: Zaza
+Description: Dimili
+Description: Dimli
+Description: Kirdki
+Description: Kirmanjki
+Description: Zazaki
+Added: 2006-08-24
+%%
+Type: script
+Subtag: Arab
+Description: Arabic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Armn
+Description: Armenian
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Bali
+Description: Balinese
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Batk
+Description: Batak
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Beng
+Description: Bengali
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Blis
+Description: Blissymbols
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Bopo
+Description: Bopomofo
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Brah
+Description: Brahmi
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Brai
+Description: Braille
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Bugi
+Description: Buginese
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Buhd
+Description: Buhid
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cans
+Description: Unified Canadian Aboriginal Syllabics
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cari
+Description: Carian
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Cham
+Description: Cham
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cher
+Description: Cherokee
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cirt
+Description: Cirth
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Copt
+Description: Coptic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cprt
+Description: Cypriot
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cyrl
+Description: Cyrillic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cyrs
+Description: Cyrillic (Old Church Slavonic variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Deva
+Description: Devanagari (Nagari)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Dsrt
+Description: Deseret (Mormon)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Egyd
+Description: Egyptian demotic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Egyh
+Description: Egyptian hieratic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Egyp
+Description: Egyptian hieroglyphs
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Ethi
+Description: Ethiopic (Ge&#x2BB;ez)
+Description: Ethiopic (Ge'ez)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Geok
+Description: Khutsuri (Asomtavruli and Nuskhuri)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Geor
+Description: Georgian (Mkhedruli)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Glag
+Description: Glagolitic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Goth
+Description: Gothic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Grek
+Description: Greek
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Gujr
+Description: Gujarati
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Guru
+Description: Gurmukhi
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hang
+Description: Hangul (Hang&#x16D;l, Hangeul)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hani
+Description: Han (Hanzi, Kanji, Hanja)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hano
+Description: Hanunoo (Hanun&#xF3;o)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hans
+Description: Han (Simplified variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hant
+Description: Han (Traditional variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hebr
+Description: Hebrew
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hira
+Description: Hiragana
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hmng
+Description: Pahawh Hmong
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hrkt
+Description: (alias for Hiragana + Katakana)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hung
+Description: Old Hungarian
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Inds
+Description: Indus (Harappan)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Ital
+Description: Old Italic (Etruscan, Oscan, etc.)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Java
+Description: Javanese
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Jpan
+Description: Japanese (alias for Han + Hiragana + Katakana)
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Kali
+Description: Kayah Li
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Kana
+Description: Katakana
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Khar
+Description: Kharoshthi
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Khmr
+Description: Khmer
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Knda
+Description: Kannada
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Lana
+Description: Lanna
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Laoo
+Description: Lao
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Latf
+Description: Latin (Fraktur variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Latg
+Description: Latin (Gaelic variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Latn
+Description: Latin
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Lepc
+Description: Lepcha (R&#xF3;ng)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Limb
+Description: Limbu
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Lina
+Description: Linear A
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Linb
+Description: Linear B
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Lyci
+Description: Lycian
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Lydi
+Description: Lydian
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Mand
+Description: Mandaean
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Maya
+Description: Mayan hieroglyphs
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Mero
+Description: Meroitic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Mlym
+Description: Malayalam
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Mong
+Description: Mongolian
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Moon
+Description: Moon
+Description: Moon code
+Description: Moon script
+Description: Moon type
+Added: 2007-01-26
+%%
+Type: script
+Subtag: Mtei
+Description: Meitei Mayek
+Description: Meithei
+Description: Meetei
+Added: 2007-01-26
+%%
+Type: script
+Subtag: Mymr
+Description: Myanmar (Burmese)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Nkoo
+Description: N&#x2019;Ko
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Ogam
+Description: Ogham
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Olck
+Description: Ol Chiki (Ol Cemet', Ol, Santali)
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Orkh
+Description: Orkhon
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Orya
+Description: Oriya
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Osma
+Description: Osmanya
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Perm
+Description: Old Permic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Phag
+Description: Phags-pa
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Phnx
+Description: Phoenician
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Plrd
+Description: Pollard Phonetic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Qaaa..Qabx
+Description: PRIVATE USE
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Rjng
+Description: Rejang
+Description: Redjang
+Description: Kaganga
+Added: 2006-10-17
+%%
+Type: script
+Subtag: Roro
+Description: Rongorongo
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Runr
+Description: Runic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Sara
+Description: Sarati
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Saur
+Description: Saurashtra
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Sgnw
+Description: SignWriting
+Added: 2006-10-17
+%%
+Type: script
+Subtag: Shaw
+Description: Shavian (Shaw)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Sinh
+Description: Sinhala
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Sund
+Description: Sundanese
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Sylo
+Description: Syloti Nagri
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Syrc
+Description: Syriac
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Syre
+Description: Syriac (Estrangelo variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Syrj
+Description: Syriac (Western variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Syrn
+Description: Syriac (Eastern variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tagb
+Description: Tagbanwa
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tale
+Description: Tai Le
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Talu
+Description: New Tai Lue
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Taml
+Description: Tamil
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Telu
+Description: Telugu
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Teng
+Description: Tengwar
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tfng
+Description: Tifinagh (Berber)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tglg
+Description: Tagalog
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Thaa
+Description: Thaana
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Thai
+Description: Thai
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tibt
+Description: Tibetan
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Ugar
+Description: Ugaritic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Vaii
+Description: Vai
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Visp
+Description: Visible Speech
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Xpeo
+Description: Old Persian
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Xsux
+Description: Cuneiform, Sumero-Akkadian
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Yiii
+Description: Yi
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Zxxx
+Description: Code for unwritten languages
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Zyyy
+Description: Code for undetermined script
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Zzzz
+Description: Code for uncoded script
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AA
+Description: PRIVATE USE
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AD
+Description: Andorra
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AE
+Description: United Arab Emirates
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AF
+Description: Afghanistan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AG
+Description: Antigua and Barbuda
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AI
+Description: Anguilla
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AL
+Description: Albania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AM
+Description: Armenia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AN
+Description: Netherlands Antilles
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AO
+Description: Angola
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AQ
+Description: Antarctica
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AR
+Description: Argentina
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AS
+Description: American Samoa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AT
+Description: Austria
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AU
+Description: Australia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AW
+Description: Aruba
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AX
+Description: &#xC5;land Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AZ
+Description: Azerbaijan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BA
+Description: Bosnia and Herzegovina
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BB
+Description: Barbados
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BD
+Description: Bangladesh
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BE
+Description: Belgium
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BF
+Description: Burkina Faso
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BG
+Description: Bulgaria
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BH
+Description: Bahrain
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BI
+Description: Burundi
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BJ
+Description: Benin
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BM
+Description: Bermuda
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BN
+Description: Brunei Darussalam
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BO
+Description: Bolivia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BR
+Description: Brazil
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BS
+Description: Bahamas
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BT
+Description: Bhutan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BU
+Description: Burma
+Added: 2005-10-16
+Preferred-Value: MM
+Deprecated: 1989-12-05
+%%
+Type: region
+Subtag: BV
+Description: Bouvet Island
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BW
+Description: Botswana
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BY
+Description: Belarus
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BZ
+Description: Belize
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CA
+Description: Canada
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CC
+Description: Cocos (Keeling) Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CD
+Description: Congo, The Democratic Republic of the
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CF
+Description: Central African Republic
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CG
+Description: Congo
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CH
+Description: Switzerland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CI
+Description: C&#xF4;te d'Ivoire
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CK
+Description: Cook Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CL
+Description: Chile
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CM
+Description: Cameroon
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CN
+Description: China
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CO
+Description: Colombia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CR
+Description: Costa Rica
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CS
+Description: Serbia and Montenegro
+Added: 2005-10-16
+Deprecated: 2006-10-05
+Comments: see RS for Serbia or ME for Montenegro
+%%
+Type: region
+Subtag: CU
+Description: Cuba
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CV
+Description: Cape Verde
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CX
+Description: Christmas Island
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CY
+Description: Cyprus
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CZ
+Description: Czech Republic
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DD
+Description: German Democratic Republic
+Added: 2005-10-16
+Preferred-Value: DE
+Deprecated: 1990-10-30
+%%
+Type: region
+Subtag: DE
+Description: Germany
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DJ
+Description: Djibouti
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DK
+Description: Denmark
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DM
+Description: Dominica
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DO
+Description: Dominican Republic
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DZ
+Description: Algeria
+Added: 2005-10-16
+%%
+Type: region
+Subtag: EC
+Description: Ecuador
+Added: 2005-10-16
+%%
+Type: region
+Subtag: EE
+Description: Estonia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: EG
+Description: Egypt
+Added: 2005-10-16
+%%
+Type: region
+Subtag: EH
+Description: Western Sahara
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ER
+Description: Eritrea
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ES
+Description: Spain
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ET
+Description: Ethiopia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FI
+Description: Finland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FJ
+Description: Fiji
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FK
+Description: Falkland Islands (Malvinas)
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FM
+Description: Micronesia, Federated States of
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FO
+Description: Faroe Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FR
+Description: France
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FX
+Description: Metropolitan France
+Added: 2005-10-16
+Preferred-Value: FR
+Deprecated: 1997-07-14
+%%
+Type: region
+Subtag: GA
+Description: Gabon
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GB
+Description: United Kingdom
+Comments: as of 2006-03-29 GB no longer includes the Channel Islands and
+ Isle of Man; see GG, JE, IM
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GD
+Description: Grenada
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GE
+Description: Georgia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GF
+Description: French Guiana
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GG
+Description: Guernsey
+Added: 2006-03-29
+%%
+Type: region
+Subtag: GH
+Description: Ghana
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GI
+Description: Gibraltar
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GL
+Description: Greenland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GM
+Description: Gambia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GN
+Description: Guinea
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GP
+Description: Guadeloupe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GQ
+Description: Equatorial Guinea
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GR
+Description: Greece
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GS
+Description: South Georgia and the South Sandwich Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GT
+Description: Guatemala
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GU
+Description: Guam
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GW
+Description: Guinea-Bissau
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GY
+Description: Guyana
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HK
+Description: Hong Kong
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HM
+Description: Heard Island and McDonald Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HN
+Description: Honduras
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HR
+Description: Croatia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HT
+Description: Haiti
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HU
+Description: Hungary
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ID
+Description: Indonesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IE
+Description: Ireland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IL
+Description: Israel
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IM
+Description: Isle of Man
+Added: 2006-03-29
+%%
+Type: region
+Subtag: IN
+Description: India
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IO
+Description: British Indian Ocean Territory
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IQ
+Description: Iraq
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IR
+Description: Iran, Islamic Republic of
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IS
+Description: Iceland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IT
+Description: Italy
+Added: 2005-10-16
+%%
+Type: region
+Subtag: JE
+Description: Jersey
+Added: 2006-03-29
+%%
+Type: region
+Subtag: JM
+Description: Jamaica
+Added: 2005-10-16
+%%
+Type: region
+Subtag: JO
+Description: Jordan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: JP
+Description: Japan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KE
+Description: Kenya
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KG
+Description: Kyrgyzstan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KH
+Description: Cambodia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KI
+Description: Kiribati
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KM
+Description: Comoros
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KN
+Description: Saint Kitts and Nevis
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KP
+Description: Korea, Democratic People's Republic of
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KR
+Description: Korea, Republic of
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KW
+Description: Kuwait
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KY
+Description: Cayman Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KZ
+Description: Kazakhstan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LA
+Description: Lao People's Democratic Republic
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LB
+Description: Lebanon
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LC
+Description: Saint Lucia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LI
+Description: Liechtenstein
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LK
+Description: Sri Lanka
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LR
+Description: Liberia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LS
+Description: Lesotho
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LT
+Description: Lithuania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LU
+Description: Luxembourg
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LV
+Description: Latvia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LY
+Description: Libyan Arab Jamahiriya
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MA
+Description: Morocco
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MC
+Description: Monaco
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MD
+Description: Moldova, Republic of
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ME
+Description: Montenegro
+Added: 2006-10-05
+%%
+Type: region
+Subtag: MG
+Description: Madagascar
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MH
+Description: Marshall Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MK
+Description: Macedonia, The Former Yugoslav Republic of
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ML
+Description: Mali
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MM
+Description: Myanmar
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MN
+Description: Mongolia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MO
+Description: Macao
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MP
+Description: Northern Mariana Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MQ
+Description: Martinique
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MR
+Description: Mauritania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MS
+Description: Montserrat
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MT
+Description: Malta
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MU
+Description: Mauritius
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MV
+Description: Maldives
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MW
+Description: Malawi
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MX
+Description: Mexico
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MY
+Description: Malaysia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MZ
+Description: Mozambique
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NA
+Description: Namibia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NC
+Description: New Caledonia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NE
+Description: Niger
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NF
+Description: Norfolk Island
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NG
+Description: Nigeria
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NI
+Description: Nicaragua
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NL
+Description: Netherlands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NO
+Description: Norway
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NP
+Description: Nepal
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NR
+Description: Nauru
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NT
+Description: Neutral Zone
+Added: 2005-10-16
+Deprecated: 1993-07-12
+%%
+Type: region
+Subtag: NU
+Description: Niue
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NZ
+Description: New Zealand
+Added: 2005-10-16
+%%
+Type: region
+Subtag: OM
+Description: Oman
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PA
+Description: Panama
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PE
+Description: Peru
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PF
+Description: French Polynesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PG
+Description: Papua New Guinea
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PH
+Description: Philippines
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PK
+Description: Pakistan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PL
+Description: Poland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PM
+Description: Saint Pierre and Miquelon
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PN
+Description: Pitcairn
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PR
+Description: Puerto Rico
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PS
+Description: Palestinian Territory, Occupied
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PT
+Description: Portugal
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PW
+Description: Palau
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PY
+Description: Paraguay
+Added: 2005-10-16
+%%
+Type: region
+Subtag: QA
+Description: Qatar
+Added: 2005-10-16
+%%
+Type: region
+Subtag: QM..QZ
+Description: PRIVATE USE
+Added: 2005-10-16
+%%
+Type: region
+Subtag: RE
+Description: R&#xE9;union
+Added: 2005-10-16
+%%
+Type: region
+Subtag: RO
+Description: Romania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: RS
+Description: Serbia
+Added: 2006-10-05
+%%
+Type: region
+Subtag: RU
+Description: Russian Federation
+Added: 2005-10-16
+%%
+Type: region
+Subtag: RW
+Description: Rwanda
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SA
+Description: Saudi Arabia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SB
+Description: Solomon Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SC
+Description: Seychelles
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SD
+Description: Sudan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SE
+Description: Sweden
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SG
+Description: Singapore
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SH
+Description: Saint Helena
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SI
+Description: Slovenia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SJ
+Description: Svalbard and Jan Mayen
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SK
+Description: Slovakia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SL
+Description: Sierra Leone
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SM
+Description: San Marino
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SN
+Description: Senegal
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SO
+Description: Somalia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SR
+Description: Suriname
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ST
+Description: Sao Tome and Principe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SU
+Description: Union of Soviet Socialist Republics
+Added: 2005-10-16
+Deprecated: 1992-08-30
+%%
+Type: region
+Subtag: SV
+Description: El Salvador
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SY
+Description: Syrian Arab Republic
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SZ
+Description: Swaziland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TC
+Description: Turks and Caicos Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TD
+Description: Chad
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TF
+Description: French Southern Territories
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TG
+Description: Togo
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TH
+Description: Thailand
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TJ
+Description: Tajikistan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TK
+Description: Tokelau
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TL
+Description: Timor-Leste
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TM
+Description: Turkmenistan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TN
+Description: Tunisia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TO
+Description: Tonga
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TP
+Description: East Timor
+Added: 2005-10-16
+Preferred-Value: TL
+Deprecated: 2002-11-15
+%%
+Type: region
+Subtag: TR
+Description: Turkey
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TT
+Description: Trinidad and Tobago
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TV
+Description: Tuvalu
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TW
+Description: Taiwan, Province of China
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TZ
+Description: Tanzania, United Republic of
+Added: 2005-10-16
+%%
+Type: region
+Subtag: UA
+Description: Ukraine
+Added: 2005-10-16
+%%
+Type: region
+Subtag: UG
+Description: Uganda
+Added: 2005-10-16
+%%
+Type: region
+Subtag: UM
+Description: United States Minor Outlying Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: US
+Description: United States
+Added: 2005-10-16
+%%
+Type: region
+Subtag: UY
+Description: Uruguay
+Added: 2005-10-16
+%%
+Type: region
+Subtag: UZ
+Description: Uzbekistan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VA
+Description: Holy See (Vatican City State)
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VC
+Description: Saint Vincent and the Grenadines
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VE
+Description: Venezuela
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VG
+Description: Virgin Islands, British
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VI
+Description: Virgin Islands, U.S.
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VN
+Description: Viet Nam
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VU
+Description: Vanuatu
+Added: 2005-10-16
+%%
+Type: region
+Subtag: WF
+Description: Wallis and Futuna
+Added: 2005-10-16
+%%
+Type: region
+Subtag: WS
+Description: Samoa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: XA..XZ
+Description: PRIVATE USE
+Added: 2005-10-16
+%%
+Type: region
+Subtag: YD
+Description: Yemen, Democratic
+Added: 2005-10-16
+Preferred-Value: YE
+Deprecated: 1990-08-14
+%%
+Type: region
+Subtag: YE
+Description: Yemen
+Added: 2005-10-16
+%%
+Type: region
+Subtag: YT
+Description: Mayotte
+Added: 2005-10-16
+%%
+Type: region
+Subtag: YU
+Description: Yugoslavia
+Added: 2005-10-16
+Preferred-Value: CS
+Deprecated: 2003-07-23
+%%
+Type: region
+Subtag: ZA
+Description: South Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ZM
+Description: Zambia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ZR
+Description: Zaire
+Added: 2005-10-16
+Preferred-Value: CD
+Deprecated: 1997-07-14
+%%
+Type: region
+Subtag: ZW
+Description: Zimbabwe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ZZ
+Description: PRIVATE USE
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 001
+Description: World
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 002
+Description: Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 005
+Description: South America
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 009
+Description: Oceania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 011
+Description: Western Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 013
+Description: Central America
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 014
+Description: Eastern Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 015
+Description: Northern Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 017
+Description: Middle Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 018
+Description: Southern Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 019
+Description: Americas
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 021
+Description: Northern America
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 029
+Description: Caribbean
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 030
+Description: Eastern Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 034
+Description: Southern Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 035
+Description: South-Eastern Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 039
+Description: Southern Europe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 053
+Description: Australia and New Zealand
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 054
+Description: Melanesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 057
+Description: Micronesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 061
+Description: Polynesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 142
+Description: Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 143
+Description: Central Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 145
+Description: Western Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 150
+Description: Europe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 151
+Description: Eastern Europe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 154
+Description: Northern Europe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 155
+Description: Western Europe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 419
+Description: Latin America and the Caribbean
+Added: 2005-10-16
+%%
+Type: variant
+Subtag: 1606nict
+Description: Late Middle French (to 1606)
+Added: 2007-03-20
+Prefix: frm
+Comments: 16th century French as in Jean Nicot, "Thresor de la langue
+ francoyse", 1606, but also including some French similar to that of
+ Rabelais
+%%
+Type: variant
+Subtag: 1694acad
+Description: Early Modern French
+Added: 2007-03-20
+Prefix: fr
+Comments: 17th century French, as catalogued in the "Dictionnaire de
+ l'acad&#xE9;mie fran&#xE7;oise", 4eme ed. 1694; frequently includes
+ elements of Middle French, as this is a transitional period
+%%
+Type: variant
+Subtag: 1901
+Description: Traditional German orthography
+Added: 2005-10-16
+Prefix: de
+%%
+Type: variant
+Subtag: 1996
+Description: German orthography of 1996
+Added: 2005-10-16
+Prefix: de
+%%
+Type: variant
+Subtag: arevela
+Description: Eastern Armenian
+Added: 2006-09-18
+Prefix: hy
+%%
+Type: variant
+Subtag: arevmda
+Description: Western Armenian
+Added: 2006-09-18
+Prefix: hy
+%%
+Type: variant
+Subtag: baku1926
+Description: Unified Turkic Latin Alphabet (Historical)
+Added: 2007-04-18
+Prefix: az
+Prefix: ba
+Prefix: crh
+Prefix: kk
+Prefix: krc
+Prefix: ky
+Prefix: sah
+Prefix: tk
+Prefix: tt
+Prefix: uz
+Comments: Latin orthography used in the Soviet Union in the 1930s
+ for writing Turkic languages. Also called New Turkic Alphabet;
+ Birl&#x4D9;&#x15F;dirilmi&#x15F; Jeni; T&#xFC;rk
+ &#x4D8;lifbas&#x44C;; or Ja&#x14B;alif.
+%%
+Type: variant
+Subtag: boont
+Description: Boontling
+Added: 2006-09-18
+Prefix: en
+Comments: Jargon embedded in American English
+%%
+Type: variant
+Subtag: fonipa
+Description: International Phonetic Alphabet
+Added: 2006-12-11
+%%
+Type: variant
+Subtag: fonupa
+Description: Uralic Phonetic Alphabet
+Added: 2006-12-11
+%%
+Type: variant
+Subtag: monoton
+Description: Monotonic Greek
+Added: 2006-12-11
+Prefix: el
+%%
+Type: variant
+Subtag: nedis
+Description: Natisone dialect
+Description: Nadiza dialect
+Added: 2005-10-16
+Prefix: sl
+%%
+Type: variant
+Subtag: polyton
+Description: Polytonic Greek
+Added: 2006-12-11
+Prefix: el
+%%
+Type: variant
+Subtag: rozaj
+Description: Resian
+Description: Resianic
+Description: Rezijan
+Added: 2005-10-16
+Prefix: sl
+%%
+Type: variant
+Subtag: scouse
+Description: Scouse
+Added: 2006-09-18
+Prefix: en
+Comments: English Liverpudlian dialect known as 'Scouse'
+%%
+Type: variant
+Subtag: tarask
+Description: Belarusian in Taraskievica orthography
+Added: 2007-04-27
+Prefix: be
+Comments: The subtag represents Branislau Taraskievic's Belarusian
+ orthography as published in "Bielaruski klasycny pravapis" by Juras
+ Buslakou, Vincuk Viacorka, Zmicier Sanko, and Zmicier Sauka (Vilnia-
+ Miensk 2005).
+%%
+Type: variant
+Subtag: valencia
+Description: Valencian
+Added: 2007-03-06
+Prefix: ca
+Comments: Variety spoken in the "Comunidad Valenciana" region of Spain,
+ where it is co-official with Spanish.
+%%
+Type: grandfathered
+Tag: art-lojban
+Description: Lojban
+Added: 2001-11-11
+Preferred-Value: jbo
+Deprecated: 2003-09-02
+Comments: replaced by ISO code jbo
+%%
+Type: grandfathered
+Tag: cel-gaulish
+Description: Gaulish
+Added: 2001-05-25
+%%
+Type: grandfathered
+Tag: en-GB-oed
+Description: English, Oxford English Dictionary spelling
+Added: 2003-07-09
+%%
+Type: grandfathered
+Tag: i-ami
+Description: Amis
+Added: 1999-05-25
+%%
+Type: grandfathered
+Tag: i-bnn
+Description: Bunun
+Added: 1999-05-25
+%%
+Type: grandfathered
+Tag: i-default
+Description: Default Language
+Added: 1998-03-10
+%%
+Type: grandfathered
+Tag: i-enochian
+Description: Enochian
+Added: 2002-07-03
+%%
+Type: grandfathered
+Tag: i-hak
+Description: Hakka
+Added: 1999-01-31
+Preferred-Value: zh-hakka
+Deprecated: 2000-01-10
+%%
+Type: grandfathered
+Tag: i-klingon
+Description: Klingon
+Added: 1999-05-26
+Preferred-Value: tlh
+Deprecated: 2004-02-24
+Comments: replaced by ISO code tlh
+%%
+Type: grandfathered
+Tag: i-lux
+Description: Luxembourgish
+Added: 1997-09-19
+Preferred-Value: lb
+Deprecated: 1998-09-09
+Comments: replaced by ISO code lb
+%%
+Type: grandfathered
+Tag: i-mingo
+Description: Mingo
+Added: 1997-09-19
+%%
+Type: grandfathered
+Tag: i-navajo
+Description: Navajo
+Added: 1997-09-19
+Preferred-Value: nv
+Deprecated: 2000-02-18
+Comments: replaced by ISO code nv
+%%
+Type: grandfathered
+Tag: i-pwn
+Description: Paiwan
+Added: 1999-05-25
+%%
+Type: grandfathered
+Tag: i-tao
+Description: Tao
+Added: 1999-05-25
+%%
+Type: grandfathered
+Tag: i-tay
+Description: Tayal
+Added: 1999-05-25
+%%
+Type: grandfathered
+Tag: i-tsu
+Description: Tsou
+Added: 1999-05-25
+%%
+Type: grandfathered
+Tag: no-bok
+Description: Norwegian Bokmal
+Added: 1995-08-23
+Preferred-Value: nb
+Deprecated: 2000-02-18
+Comments: replaced by ISO code nb
+%%
+Type: grandfathered
+Tag: no-nyn
+Description: Norwegian Nynorsk
+Added: 1995-08-23
+Preferred-Value: nn
+Deprecated: 2000-02-18
+Comments: replaced by ISO code nn
+%%
+Type: grandfathered
+Tag: sgn-BE-fr
+Description: Belgian-French Sign Language
+Added: 2001-11-11
+%%
+Type: grandfathered
+Tag: sgn-BE-nl
+Description: Belgian-Flemish Sign Language
+Added: 2001-11-11
+%%
+Type: grandfathered
+Tag: sgn-CH-de
+Description: Swiss German Sign Language
+Added: 2001-11-11
+%%
+Type: grandfathered
+Tag: zh-cmn
+Description: Mandarin Chinese
+Added: 2005-07-15
+%%
+Type: grandfathered
+Tag: zh-cmn-Hans
+Description: Mandarin Chinese (Simplified)
+Added: 2005-07-15
+%%
+Type: grandfathered
+Tag: zh-cmn-Hant
+Description: Mandarin Chinese (Traditional)
+Added: 2005-07-15
+%%
+Type: grandfathered
+Tag: zh-gan
+Description: Kan or Gan
+Added: 1999-12-18
+%%
+Type: grandfathered
+Tag: zh-guoyu
+Description: Mandarin or Standard Chinese
+Added: 1999-12-18
+Preferred-Value: zh-cmn
+Deprecated: 2005-07-15
+%%
+Type: grandfathered
+Tag: zh-hakka
+Description: Hakka
+Added: 1999-12-18
+%%
+Type: grandfathered
+Tag: zh-min
+Description: Min, Fuzhou, Hokkien, Amoy, or Taiwanese
+Added: 1999-12-18
+%%
+Type: grandfathered
+Tag: zh-min-nan
+Description: Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern
+ Fujian, Hoklo, Southern Fukien, Ho-lo
+Added: 2001-03-26
+%%
+Type: grandfathered
+Tag: zh-wuu
+Description: Shanghaiese or Wu
+Added: 1999-12-18
+%%
+Type: grandfathered
+Tag: zh-xiang
+Description: Xiang or Hunanese
+Added: 1999-12-18
+%%
+Type: grandfathered
+Tag: zh-yue
+Description: Cantonese
+Added: 1999-12-18
+%%
+Type: redundant
+Tag: az-Arab
+Description: Azerbaijani in Arabic script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: az-Cyrl
+Description: Azerbaijani in Cyrillic script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: az-Latn
+Description: Azerbaijani in Latin script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: be-Latn
+Description: Belarusian in Latin script
+Added: 2005-01-06
+%%
+Type: redundant
+Tag: bs-Cyrl
+Description: Bosnian in Cyrillic script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: bs-Latn
+Description: Bosnian in Latin script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: de-1901
+Description: German, traditional orthography
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-1996
+Description: German, orthography of 1996
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-AT-1901
+Description: German, Austrian variant, traditional orthography
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-AT-1996
+Description: German, Austrian variant, orthography of 1996
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-CH-1901
+Description: German, Swiss variant, traditional orthography
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-CH-1996
+Description: German, Swiss variant, orthography of 1996
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-DE-1901
+Description: German, German variant, traditional orthography
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-DE-1996
+Description: German, German variant, orthography of 1996
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: en-boont
+Description: Boontling
+Added: 2003-02-14
+%%
+Type: redundant
+Tag: en-scouse
+Description: Scouse
+Added: 2000-05-25
+%%
+Type: redundant
+Tag: es-419
+Description: Latin American Spanish
+Added: 2005-07-15
+%%
+Type: redundant
+Tag: iu-Cans
+Description: Inuktitut in Canadian Aboriginal Syllabic script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: iu-Latn
+Description: Inuktitut in Latin script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: mn-Cyrl
+Description: Mongolian in Cyrillic script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: mn-Mong
+Description: Mongolian in Mongolian script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: sgn-BR
+Description: Brazilian Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-CO
+Description: Colombian Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-DE
+Description: German Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-DK
+Description: Danish Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-ES
+Description: Spanish Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-FR
+Description: French Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-GB
+Description: British Sign Language
+Added: 2001-03-02
+%%
+Type: redundant
+Tag: sgn-GR
+Description: Greek Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-IE
+Description: Irish Sign Language
+Added: 2001-03-02
+%%
+Type: redundant
+Tag: sgn-IT
+Description: Italian Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-JP
+Description: Japanese Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-MX
+Description: Mexican Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-NI
+Description: Nicaraguan Sign Language
+Added: 2001-03-02
+%%
+Type: redundant
+Tag: sgn-NL
+Description: Dutch Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-NO
+Description: Norwegian Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-PT
+Description: Portuguese Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-SE
+Description: Swedish Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sgn-US
+Description: American Sign Language
+Added: 2001-03-02
+%%
+Type: redundant
+Tag: sgn-ZA
+Description: South African Sign Language
+Added: 2001-11-11
+%%
+Type: redundant
+Tag: sl-nedis
+Description: Natisone dialect, Nadiza dialect
+Added: 2004-06-01
+%%
+Type: redundant
+Tag: sl-rozaj
+Description: Resian, Resianic, Rezijan
+Added: 2003-10-09
+%%
+Type: redundant
+Tag: sr-Cyrl
+Description: Serbian in Cyrillic script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: sr-Latn
+Description: Serbian in Latin script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: tg-Arab
+Description: Tajik in Arabic script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: tg-Cyrl
+Description: Tajik in Cyrillic script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: uz-Cyrl
+Description: Uzbek in Cyrillic script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: uz-Latn
+Description: Uzbek in Latin script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: yi-latn
+Description: Yiddish, in Latin script
+Added: 2003-01-07
+%%
+Type: redundant
+Tag: zh-Hans
+Description: simplified Chinese
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: zh-Hans-CN
+Description: PRC Mainland Chinese in simplified script
+Added: 2005-04-13
+%%
+Type: redundant
+Tag: zh-Hans-HK
+Description: Hong Kong Chinese in simplified script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hans-MO
+Description: Macao Chinese in simplified script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hans-SG
+Description: Singapore Chinese in simplified script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hans-TW
+Description: Taiwan Chinese in simplified script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hant
+Description: traditional Chinese
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: zh-Hant-CN
+Description: PRC Mainland Chinese in traditional script
+Added: 2005-04-13
+%%
+Type: redundant
+Tag: zh-Hant-HK
+Description: Hong Kong Chinese in traditional script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hant-MO
+Description: Macao Chinese in traditional script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hant-SG
+Description: Singapore Chinese in traditional script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hant-TW
+Description: Taiwan Chinese in traditional script
+Added: 2005-04-11

Added: branches/mlmw/maintenance/postgres/archives/patch-langtags.sql
===================================================================
--- branches/mlmw/maintenance/postgres/archives/patch-langtags.sql (rev 0)
+++ branches/mlmw/maintenance/postgres/archives/patch-langtags.sql 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,101 @@
+--
+-- patch-langtags.sql
+-- Language tag support
+-- 2007-06-02
+--
+
+CREATE TABLE /*$wgDBprefix*/langtags (
+ language_id integer,
+ prefix_id integer,
+ preferred_id integer,
+
+ tag_name varchar(255),
+ display_name varchar(255),
+
+ native_name varchar(255),
+ english_name varchar(255),
+
+ rfc4646 varchar(42),
+ rfc4646_suppress varchar(4),
+ rfc4646_added date,
+ rfc4646_deprecated date,
+
+ iso639 char(3),
+ iso639_3 char(3),
+ iso639_3_revision date,
+
+ wikimedia_key varchar(15),
+
+ is_rtl smallint,
+ is_collection smallint,
+ is_enabled smallint,
+ is_private smallint,
+ is_searchable smallint,
+ tag_touched timestamptz
+);
+
+CREATE UNIQUE INDEX langtags_tag_enabled
+ ON /*$wgDBprefix*/langtags (is_enabled,tag_name);
+CREATE UNIQUE INDEX langtags_tag_name
+ ON /*$wgDBprefix*/langtags (tag_name);
+CREATE INDEX langtags_iso639_idx
+ ON /*$wgDBprefix*/langtags (iso639);
+CREATE INDEX langtags_rfc4646_idx
+ ON /*$wgDBprefix*/langtags (rfc4646);
+
+CREATE TABLE /*$wgDBprefix*/langsets (
+ language_id integer,
+ group_name varchar(255)
+);
+CREATE UNIQUE INDEX langsets_language_id
+ ON /*$wgDBprefix*/langsets (language_id,group_name);
+CREATE INDEX group_name
+ ON /*$wgDBprefix*/langsets (group_name);
+
+ALTER TABLE /*$wgDBprefix*/archive
+ ADD COLUMN /*$wgDBprefix*/ar_language integer;
+DROP INDEX archive_name_title_timestamp;
+CREATE INDEX archive_name_title_timestamp
+ ON /*$wgDBprefix*/archive (ar_language, ar_namespace, ar_title, ar_timestamp)
+
+ALTER TABLE /*$wgDBprefix*/page
+ ADD COLUMN /*$wgDBprefix*/page_language integer;
+DROP INDEX page_unique_name;
+CREATE UNIQUE INDEX page_unique_name
+ ON /*$wgDBprefix*/page (page_language, page_namespace, page_title);
+
+ALTER TABLE /*$wgDBprefix*/pagelinks
+ ADD COLUMN pl_language integer;
+DROP INDEX pagelink_unique;
+CREATE UNIQUE INDEX pagelink_unique
+ ON /*$wgDBprefix*/pagelinks (pl_from, pl_namespace, pl_language, pl_title);
+
+ALTER TABLE /*$wgDBprefix*/recentchanges
+ ADD COLUMN rc_language integer;
+DROP INDEX rc_namespace_title;
+CREATE INDEX rc_namespace_title
+ ON /*$wgDBprefix*/recentchanges (rc_namespace, rc_language, rc_title);
+
+ALTER TABLE /*$wgDBprefix*/watchlist
+ ADD COLUMN wl_language integer;
+DROP INDEX wl_user_namespace_title;
+CREATE UNIQUE INDEX wl_user_namespace_title
+ ON /*$wgDBprefix*/watchlist (wl_namespace, wl_language, wl_title, wl_user);
+
+ALTER TABLE /*$wgDBprefix*/categorylinks
+ ADD COLUMN cl_language integer;
+DROP INDEX cl_from;
+DROP INDEX cl_sortkey;
+CREATE UNIQUE INDEX cl_from
+ ON /*$wgDBprefix*/categorylinks (cl_from, cl_language, cl_to);
+CREATE INDEX cl_sortkey
+ ON /*$wgDBprefix*/categorylinks (cl_language, cl_to, cl_sortkey, cl_from);
+
+ALTER TABLE /*$wgDBprefix*/templatelinks
+ ADD COLUMN tl_language integer;
+DROP INDEX templatelinks_unique;
+CREATE UNIQUE INDEX templatelinks_unique
+ ON /*$wgDBprefix*/templatelinks (tl_namespace, tl_language, tl_title, tl_from);
+
+ALTER TABLE /*$wgDBprefix*/querycache
+ ADD COLUMN qc_language integer;

Added: branches/mlmw/maintenance/postgres/archives/patch-pagesets.sql
===================================================================
--- branches/mlmw/maintenance/postgres/archives/patch-pagesets.sql (rev 0)
+++ branches/mlmw/maintenance/postgres/archives/patch-pagesets.sql 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,15 @@
+--
+-- patch-pagesets.sql
+--
+-- Support new Set: namespace
+-- Intended for user with the langtags table
+--
+
+CREATE TABLE /*$wgDBprefix*/pagesets (
+ set_id integer NOT NULL,
+ page_id integer NOT NULL
+);
+CREATE UNIQUE INDEX set_id
+ ON /*$wgDBprefix*/pagesets (set_id,page_id);
+CREATE INDEX page_id
+ ON /*$wgDBprefix*/pagesets (page_id);

Added: branches/mlmw/maintenance/postgres/archives/patch-user_langs.sql
===================================================================
--- branches/mlmw/maintenance/postgres/archives/patch-user_langs.sql (rev 0)
+++ branches/mlmw/maintenance/postgres/archives/patch-user_langs.sql 2007-10-20 22:07:28 UTC (rev 26860)
@@ -0,0 +1,17 @@
+--
+-- User language preferences
+--
+-- This requires the langtags table
+--
+
+CREATE TABLE /*$wgDBprefix*/user_langs (
+ user_id integer NOT NULL,
+ language_id integer NOT NULL,
+ attribute varchar(15),
+ attribute_level integer
+);
+CREATE UNIQUE INDEX user_id
+ ON /*$wgDBprefix*/user_langs (user_id,language_id);
+CREATE INDEX language_id
+ ON /*$wgDBprefix*/user_langs (language_id,attribute,attribute_level);
+

Modified: branches/mlmw/maintenance/rebuildrecentchanges.inc
===================================================================
--- branches/mlmw/maintenance/rebuildrecentchanges.inc 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/maintenance/rebuildrecentchanges.inc 2007-10-20 22:07:28 UTC (rev 26860)
@@ -87,7 +87,7 @@
$size = $size ? $size : 'NULL';

$sql3 = "UPDATE $recentchanges SET rc_last_oldid=$lastOldId,rc_new=$new,rc_type=$new," .
- "rc_old_len='$lastSize',rc_new_len='$size' " .
+ "rc_old_len=$lastSize,rc_new_len='$size' " .
"WHERE rc_cur_id={$lastCurId} AND rc_this_oldid={$obj->rc_this_oldid}";
$dbw->query( $sql3 );


Modified: branches/mlmw/maintenance/updaters.inc
===================================================================
--- branches/mlmw/maintenance/updaters.inc 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/maintenance/updaters.inc 2007-10-20 22:07:28 UTC (rev 26860)
@@ -1031,6 +1031,10 @@

do_oldimage_user_index(); flush ();

+ do_pagesets_update(); flush();
+
+ do_langtags_update(); flush();
+
echo "Deleting old default messages (this may take a long time!)..."; flush();
deleteDefaultMessages();
echo "Done\n"; flush();
@@ -1129,6 +1133,38 @@

}

+function do_pagesets_update() {
+ add_table( 'pagesets', 'patch-pagesets.sql' ); flush();
+}
+
+function do_langtags_update() {
+ # Adding langtags table
+ # Importing ISO 639-3 Codes and IANA Language Subtags
+
+ global $wgDatabase,$wgLanguageTag;
+ if(!$wgLanguageTag) return;
+
+ $name = 'langtags';
+ $patch = 'patch-langtags.sql';
+
+ if ( $wgDatabase->tableExists( $name ) ) {
+ echo "...$name table already exists.\n";
+ } else {
+ add_table( 'user_langs','patch-user_langs.sql' ); flush();
+ add_table( $name, $patch ); flush();
+
+ require_once('language/importLanguageTags.php');
+ echo "Importing language tags..."; flush();
+ if(importLanguageTags()) {
+ echo "ok\n";
+ }
+ else {
+ echo "failed\n";
+ }
+ }
+}
+
+
function
pg_describe_table($table)
{
@@ -1325,6 +1361,7 @@
array("page_restrictions", "patch-page_restrictions.sql"),
array("profiling", "patch-profiling.sql"),
array("redirect", "patch-redirect.sql"),
+ array("pagesets", "patch-pagesets.sql")
);

$newcols = array(
@@ -1535,7 +1572,7 @@
$wgDatabase->query("CREATE UNIQUE INDEX pagelink_unique ON pagelinks (pl_from,pl_namespace,pl_title)");
}
else
- echo "... index \"pagelink_unique_index\" aready exists\n";
+ echo "... index \"pagelink_unique_index\" already exists\n";

if (pg_fkey_deltype("revision_rev_user_fkey") == 'r') {
echo "... constraint \"revision_rev_user_fkey\" is ON DELETE RESTRICT\n";
@@ -1579,5 +1616,8 @@
# This is create or replace, so harmless to call if not needed
dbsource(archive("patch-ts2pagetitle.sql"));

+ # Language tags
+ do_langtags_update();
+
return;
}

Modified: branches/mlmw/skins/MonoBook.php
===================================================================
--- branches/mlmw/skins/MonoBook.php 2007-10-20 21:47:08 UTC (rev 26859)
+++ branches/mlmw/skins/MonoBook.php 2007-10-20 22:07:28 UTC (rev 26860)
@@ -95,7 +95,7 @@
class="mediawiki <?php $this->text('nsclass') ?> <?php $this->text('dir') ?> <?php $this->text('pageclass') ?>">
<div id="globalWrapper">
<div id="column-content">
- <div id="content">
+ <div id="content" dir="<?php $this->text('contentdir')?$this->text('contentdir'):'ltr' ?>">
<a name="top" id="top"></a>
<?php if($this->data['sitenotice']) { ?><div id="siteNotice"><?php $this->html('sitenotice') ?></div><?php } ?>
<h1 class="firstHeading"><?php $this->data['displaytitle']!=""?$this->html('title'):$this->text('title') ?></h1>



_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS [at] lists
http://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Wikipedia mediawiki-cvs RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.