r49615 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r49614‎ | r49615 | r49616 >
Date:06:01, 18 April 2009
Author:sergeychernyshev
Status:deferred
Tags:
Comment:
Releasing 0.8.4 - OpenID Provider UI
Modified paths:
  • /tags/extensions/OpenID/REL_0_8_4 (added) (history)
  • /tags/extensions/OpenID/REL_0_8_4/OpenID.hooks.php (modified) (history)
  • /tags/extensions/OpenID/REL_0_8_4/OpenID.setup.php (replaced) (history)
  • /tags/extensions/OpenID/REL_0_8_4/README (replaced) (history)

Diff [purge]

Index: tags/extensions/OpenID/REL_0_8_4/OpenID.i18n.php
@@ -0,0 +1,3810 @@
 2+<?php
 3+/**
 4+ * OpenID.i18n.php -- Interface messages for OpenID for MediaWiki
 5+ * Copyright 2006,2007 Internet Brands (http://www.internetbrands.com/)
 6+ * Copyright 2007,2008 Evan Prodromou <evan@prodromou.name>
 7+ *
 8+ * This program is free software; you can redistribute it and/or modify
 9+ * it under the terms of the GNU General Public License as published by
 10+ * the Free Software Foundation; either version 2 of the License, or
 11+ * (at your option) any later version.
 12+ *
 13+ * This program is distributed in the hope that it will be useful,
 14+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 16+ * GNU General Public License for more details.
 17+ *
 18+ * You should have received a copy of the GNU General Public License
 19+ * along with this program; if not, write to the Free Software
 20+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 21+ *
 22+ * @author Evan Prodromou <evan@prodromou.name>
 23+ * @addtogroup Extensions
 24+ */
 25+
 26+$messages = array();
 27+
 28+/** English
 29+ * @author Evan Prodromou <evan@prodromou.name>
 30+ */
 31+$messages['en'] = array(
 32+ 'openid-desc' => 'Login to the wiki with an [http://openid.net/ OpenID], and login to other OpenID-aware web sites with a wiki user account',
 33+ 'openidlogin' => 'Login with OpenID',
 34+ 'openidfinish' => 'Finish OpenID login',
 35+ 'openidserver' => 'OpenID server',
 36+ 'openidxrds' => 'Yadis file',
 37+ 'openidconvert' => 'OpenID converter',
 38+ 'openiderror' => 'Verification error',
 39+ 'openiderrortext' => 'An error occured during verification of the OpenID URL.',
 40+ 'openidconfigerror' => 'OpenID configuration error',
 41+ 'openidconfigerrortext' => 'The OpenID storage configuration for this wiki is invalid.
 42+Please consult an [[Special:ListUsers/sysop|administrator]].',
 43+ 'openidpermission' => 'OpenID permissions error',
 44+ 'openidpermissiontext' => 'The OpenID you provided is not allowed to login to this server.',
 45+ 'openidcancel' => 'Verification cancelled',
 46+ 'openidcanceltext' => 'Verification of the OpenID URL was cancelled.',
 47+ 'openidfailure' => 'Verification failed',
 48+ 'openidfailuretext' => 'Verification of the OpenID URL failed. Error message: "$1"',
 49+ 'openidsuccess' => 'Verification succeeded',
 50+ 'openidsuccesstext' => 'Verification of the OpenID URL succeeded.',
 51+ 'openidusernameprefix' => 'OpenIDUser',
 52+ 'openidserverlogininstructions' => 'Enter your password below to log in to $3 as user $2 (user page $1).',
 53+ 'openidtrustinstructions' => 'Check if you want to share data with $1.',
 54+ 'openidallowtrust' => 'Allow $1 to trust this user account.',
 55+ 'openidnopolicy' => 'Site has not specified a privacy policy.',
 56+ 'openidpolicy' => 'Check the <a target="_new" href="$1">privacy policy</a> for more information.',
 57+ 'openidoptional' => 'Optional',
 58+ 'openidrequired' => 'Required',
 59+ 'openidnickname' => 'Nickname',
 60+ 'openidfullname' => 'Fullname',
 61+ 'openidemail' => 'E-mail address',
 62+ 'openidlanguage' => 'Language',
 63+ 'openidnotavailable' => 'Your preferred nickname ($1) is already in use by another user.',
 64+ 'openidnotprovided' => 'Your OpenID server did not provide a nickname (either because it cannot, or because you told it not to).',
 65+ 'openidchooseinstructions' => 'All users need a nickname;
 66+you can choose one from the options below.',
 67+ 'openidchoosefull' => 'Your full name ($1)',
 68+ 'openidchooseurl' => 'A name picked from your OpenID ($1)',
 69+ 'openidchooseauto' => 'An auto-generated name ($1)',
 70+ 'openidchoosemanual' => 'A name of your choice:',
 71+ 'openidchooseexisting' => 'An existing account on this wiki:',
 72+ 'openidchoosepassword' => 'password:',
 73+ 'openidconvertinstructions' => 'This form lets you change your user account to use an OpenID URL.',
 74+ 'openidconvertsuccess' => 'Successfully converted to OpenID',
 75+ 'openidconvertsuccesstext' => 'You have successfully converted your OpenID to $1.',
 76+ 'openidconvertyourstext' => 'That is already your OpenID.',
 77+ 'openidconvertothertext' => 'That is someone else\'s OpenID.',
 78+ 'openidalreadyloggedin' => "'''You are already logged in, $1!'''
 79+
 80+If you want to use OpenID to log in in the future, you can [[Special:OpenIDConvert|convert your account to use OpenID]].",
 81+ 'openidnousername' => 'No username specified.',
 82+ 'openidbadusername' => 'Bad username specified.',
 83+ 'openidautosubmit' => 'This page includes a form that should be automatically submitted if you have JavaScript enabled.
 84+If not, try the \"Continue\" button.',
 85+ 'openidclientonlytext' => 'You cannot use accounts from this wiki as OpenIDs on another site.',
 86+ 'openidloginlabel' => 'OpenID URL',
 87+ 'openidlogininstructions' => '{{SITENAME}} supports the [http://openid.net/ OpenID] standard for single signon between Web sites.
 88+OpenID lets you log into many different Web sites without using a different password for each.
 89+(See [http://en.wikipedia.org/wiki/OpenID Wikipedia\'s OpenID article] for more information.)
 90+
 91+If you already have an account on {{SITENAME}}, you can [[Special:UserLogin|log in]] with your username and password as usual.
 92+To use OpenID in the future, you can [[Special:OpenIDConvert|convert your account to OpenID]] after you have logged in normally.
 93+
 94+There are many [http://openid.net/get/ OpenID providers], and you may already have an OpenID-enabled account on another service.',
 95+ 'openidupdateuserinfo' => 'Update my personal information',
 96+ 'openid-prefs' => 'OpenID',
 97+ 'openid-prefstext' => '[http://openid.net/ OpenID] preferences',
 98+ 'openid-pref-hide' => 'Hide your OpenID URL on your user page, if you log in with OpenID.',
 99+ 'openid-pref-update-userinfo-on-login' => 'Update my information from OpenID persona every time I login',
 100+ 'openidsigninorcreateaccount' => 'Sign-in or Create New Account',
 101+ 'openid-provider-label-openid' => 'Enter your OpenID URL',
 102+ 'openid-provider-label-google' => 'Login using your Google account',
 103+ 'openid-provider-label-yahoo' => 'Login using your Yahoo account',
 104+ 'openid-provider-label-aol' => 'Enter your AOL screenname',
 105+ 'openid-provider-label-other-username' => 'Enter your $1 username',
 106+);
 107+
 108+/** Message documentation (Message documentation)
 109+ * @author Fryed-peach
 110+ * @author Jon Harald Søby
 111+ * @author Purodha
 112+ * @author Raymond
 113+ * @author Siebrand
 114+ */
 115+$messages['qqq'] = array(
 116+ 'openid-desc' => 'Short description of the Openid extension, shown in [[Special:Version]]. Do not translate or change links.',
 117+ 'openidtrustinstructions' => '* $1 is a trust root. A trust root looks much like a normal URL, but is used to describe a set of URLs. Trust roots are used by OpenID to verify that a user has approved the OpenID enabled website.',
 118+ 'openidoptional' => '{{Identical|Optional}}',
 119+ 'openidemail' => '{{Identical|E-mail address}}',
 120+ 'openidlanguage' => '{{Identical|Language}}',
 121+ 'openidchoosepassword' => '{{Identical|Password}}',
 122+ 'openidalreadyloggedin' => '$1 is a user name.',
 123+ 'openid-prefs' => '{{optional}}
 124+OpenID preferences tab title',
 125+ 'openid-prefstext' => 'OpenID preferences tab text above the list of preferences',
 126+ 'openid-pref-hide' => 'OpenID preference label (Hide your OpenID URL on your user page, if you log in with OpenID)',
 127+ 'openid-pref-update-userinfo-on-login' => 'OpenID preference label for updating fron OpenID persona upon login',
 128+);
 129+
 130+/** Faeag Rotuma (Faeag Rotuma)
 131+ * @author Jose77
 132+ */
 133+$messages['rtm'] = array(
 134+ 'openidchoosepassword' => 'ou password:',
 135+);
 136+
 137+/** Niuean (ko e vagahau Niuē)
 138+ * @author Jose77
 139+ */
 140+$messages['niu'] = array(
 141+ 'openidchoosepassword' => 'kupu fufu:',
 142+);
 143+
 144+/** Afrikaans (Afrikaans)
 145+ * @author Arnobarnard
 146+ * @author Naudefj
 147+ */
 148+$messages['af'] = array(
 149+ 'openidoptional' => 'Opsioneel',
 150+ 'openidrequired' => 'Verpligtend',
 151+ 'openidemail' => 'E-pos adres',
 152+ 'openidlanguage' => 'Taal',
 153+ 'openidchoosepassword' => 'wagwoord:',
 154+);
 155+
 156+/** Amharic (አማርኛ)
 157+ * @author Codex Sinaiticus
 158+ */
 159+$messages['am'] = array(
 160+ 'openidemail' => 'የኢ-ሜል አድራሻ',
 161+ 'openidlanguage' => 'ቋንቋ',
 162+);
 163+
 164+/** Arabic (العربية)
 165+ * @author Meno25
 166+ * @author OsamaK
 167+ */
 168+$messages['ar'] = array(
 169+ 'openid-desc' => 'سجل الدخول للويكي [http://openid.net/ بهوية مفتوحة]، وسجل الدخول لمواقع ويب أخرى تعرف الهوية المفتوحة بحساب مستخدم ويكي',
 170+ 'openidlogin' => 'تسجيل الدخول بالهوية المفتوحة',
 171+ 'openidfinish' => 'إنهاء دخول الهوية المفتوحة',
 172+ 'openidserver' => 'خادم الهوية المفتوحة',
 173+ 'openidxrds' => 'ملف ياديس',
 174+ 'openidconvert' => 'محول الهوية المفتوحة',
 175+ 'openiderror' => 'خطأ تأكيد',
 176+ 'openiderrortext' => 'حدث خطأ أثناء التأكد من مسار الهوية المفتوحة.',
 177+ 'openidconfigerror' => 'خطأ ضبط الهوية المفتوحة',
 178+ 'openidconfigerrortext' => 'ضبط تخزين الهوية المفتوحة لهذا الويكي غير صحيح.
 179+من فضلك استشر [[Special:ListUsers/sysop|إداريا]].',
 180+ 'openidpermission' => 'خطأ سماحات الهوية المفتوحة',
 181+ 'openidpermissiontext' => 'الهوية المفتوحة التي وفرتها غير مسموح لها بتسجيل الدخول إلى هذا الخادم.',
 182+ 'openidcancel' => 'التأكيد تم إلغاؤه',
 183+ 'openidcanceltext' => 'التحقق من مسار الهوية المفتوحة تم إلغاؤه.',
 184+ 'openidfailure' => 'التأكيد فشل',
 185+ 'openidfailuretext' => 'التحقق من مسار الهوية المفتوحة فشل. رسالة خطأ: "$1"',
 186+ 'openidsuccess' => 'التأكيد نجح',
 187+ 'openidsuccesstext' => 'التحقق من مسار الهوية المفتوحة نجح.',
 188+ 'openidusernameprefix' => 'مستخدم الهوية المفتوحة',
 189+ 'openidserverlogininstructions' => 'أدخل كلمة سرك بالأسفل لتسجيل الدخول إلى $3 كمستخدم $2 (صفحة مستخدم $1).',
 190+ 'openidtrustinstructions' => 'تأكد مما إذا كنت ترغب في مشاركة البيانات مع $1.',
 191+ 'openidallowtrust' => 'السماح ل$1 بالوثوق بحساب هذا المستخدم.',
 192+ 'openidnopolicy' => 'الموقع لا يمتلك سياسة محددة للخصوصية.',
 193+ 'openidpolicy' => 'تحقق من <a target="_new" href="$1">سياسة الخصوصية</a> لمزيد من المعلومات.',
 194+ 'openidoptional' => 'اختياري',
 195+ 'openidrequired' => 'مطلوب',
 196+ 'openidnickname' => 'اللقب',
 197+ 'openidfullname' => 'الاسم الكامل',
 198+ 'openidemail' => 'عنوان البريد الإلكتروني',
 199+ 'openidlanguage' => 'اللغة',
 200+ 'openidnotavailable' => 'لقبك المفضل ($1) قيد الاستخدام بالفعل بواسطة مستخدم آخر.',
 201+ 'openidnotprovided' => 'خادم هويتك المفتوحة لم يوفر لقبا (إما لأنه لا يستطيع، أو لأنك أخبرته ألا يفعل).',
 202+ 'openidchooseinstructions' => 'كل المستخدمين يحتاجون إلى لقب؛
 203+يمكنك أن تختار واحدا من الخيارات بالأسفل.',
 204+ 'openidchoosefull' => 'اسمك الكامل ($1)',
 205+ 'openidchooseurl' => 'اسم مختار من هويتك المفتوحة ($1)',
 206+ 'openidchooseauto' => 'اسم مولد تلقائيا ($1)',
 207+ 'openidchoosemanual' => 'اسم من اختيارك:',
 208+ 'openidchooseexisting' => 'حساب موجود في هذه الويكي:',
 209+ 'openidchoosepassword' => 'كلمة السر:',
 210+ 'openidconvertinstructions' => 'هذه الاستمارة تسمح لك بتغيير حساب مستخدمك ليستعمل مسار هوية مفتوحة.',
 211+ 'openidconvertsuccess' => 'تم التحول بنجاح إلى الهوية المفتوحة',
 212+ 'openidconvertsuccesstext' => 'أنت حولت بنجاح هويتك المفتوحة إلى $1.',
 213+ 'openidconvertyourstext' => 'هذه بالفعل هويتك المفتوحة.',
 214+ 'openidconvertothertext' => 'هذه هي الهوية المفتوحة لشخص آخر.',
 215+ 'openidalreadyloggedin' => "'''أنت مسجل الدخول بالفعل، $1!'''
 216+
 217+لو كنت تريد استخدام الهوية المفتوحة لتسجيل الدخول في المستقبل، يمكنك [[Special:OpenIDConvert|تحويل حسابك لاستخدام الهوية المفتوحة]].",
 218+ 'openidnousername' => 'لا اسم مستخدم تم تحديده.',
 219+ 'openidbadusername' => 'اسم المستخدم المحدد سيء.',
 220+ 'openidautosubmit' => 'هذه الصفحة تحتوي على استمارة ينبغي أن يتم إرسالها تلقائيا لو أنك لديك الجافاسكريبت مفعلة.
 221+لو لا، جرب زر \\"Continue\\".',
 222+ 'openidclientonlytext' => 'أنت لا يمكنك استخدام الحسابات من هذا الويكي كهوية مفتوحة على موقع آخر.',
 223+ 'openidloginlabel' => 'مسار الهوية المفتوحة',
 224+ 'openidlogininstructions' => '{{SITENAME}} تدعم معيار [http://openid.net/ الهوية المفتوحة] للدخول الفردي بين مواقع الويب.
 225+الهوية المفتوحة تسمح لك بتسجيل الدخول إلى مواقع ويب عديدة مختلفة بدون استخدام كلمة سر مختلفة لكل موقع.
 226+(انظر [http://en.wikipedia.org/wiki/OpenID مقالة الهوية المفتوحة في يويكيبيديا] لمزيد من المعلومات.)
 227+
 228+لو أنك لديك بالفعل حساب في {{SITENAME}}، يمكنك [[Special:UserLogin|تسجيل الدخول]] باسم مستخدمك وكلمة السر الخاصة بك كالمعتاد.
 229+لاستخدام الهوية المفتوحة في المستقبل، يمكنك [[Special:OpenIDConvert|تحويل حسابك إلى الهوية المفتوحة]] بعد تسجيل دخولك بشكل عادي.
 230+
 231+يوجد العديد من [http://wiki.openid.net/Public_OpenID_providers موفري الهوية المفتوحة العلنيين]، وربما يكون لديك حسابك بهوية مفتوحة على خدمة أخرى.',
 232+ 'openidupdateuserinfo' => 'تحديث معلوماتي الشخصية',
 233+ 'openid-prefs' => 'هوية مفتوحة',
 234+ 'openid-prefstext' => 'تفضيلات [http://openid.net/ OpenID]',
 235+ 'openid-pref-hide' => 'أخف هويتك <a href="http://openid.net/">هويتك المفتوحة</a> على صفحتك الشخصية، لو سجلت الدخول بالهوية المفتوحة.',
 236+ 'openid-pref-update-userinfo-on-login' => 'حدث معلوماتي من شخصية الهوية المفتوحة كل مرة أسجل الدخول',
 237+);
 238+
 239+/** Egyptian Spoken Arabic (مصرى)
 240+ * @author Ghaly
 241+ * @author Meno25
 242+ */
 243+$messages['arz'] = array(
 244+ 'openid-desc' => 'سجل الدخول للويكى [http://openid.net/ بهوية مفتوحة]، وسجل الدخول لمواقع ويب أخرى تعرف الهوية المفتوحة بحساب مستخدم ويكي',
 245+ 'openidlogin' => 'تسجيل الدخول بالهوية المفتوحة',
 246+ 'openidfinish' => 'إنهاء دخول الهوية المفتوحة',
 247+ 'openidserver' => 'خادم الهوية المفتوحة',
 248+ 'openidxrds' => 'ملف ياديس',
 249+ 'openidconvert' => 'محول الهوية المفتوحة',
 250+ 'openiderror' => 'خطأ تأكيد',
 251+ 'openiderrortext' => 'حدث خطأ أثناء التأكد من مسار الهوية المفتوحة.',
 252+ 'openidconfigerror' => 'خطأ ضبط الهوية المفتوحة',
 253+ 'openidconfigerrortext' => 'ضبط تخزين الهوية المفتوحة لهذا الويكى غير صحيح.
 254+من فضلك استشر [[Special:ListUsers/sysop|إداريا]].',
 255+ 'openidpermission' => 'خطأ سماحات الهوية المفتوحة',
 256+ 'openidpermissiontext' => 'الهوية المفتوحة التى وفرتها غير مسموح لها بتسجيل الدخول إلى هذا الخادم.',
 257+ 'openidcancel' => 'التأكيد تم إلغاؤه',
 258+ 'openidcanceltext' => 'التحقق من مسار الهوية المفتوحة تم إلغاؤه.',
 259+ 'openidfailure' => 'التأكيد فشل',
 260+ 'openidfailuretext' => 'التحقق من مسار الهوية المفتوحة فشل. رسالة خطأ: "$1"',
 261+ 'openidsuccess' => 'التأكيد نجح',
 262+ 'openidsuccesstext' => 'التحقق من مسار الهوية المفتوحة نجح.',
 263+ 'openidusernameprefix' => 'مستخدم الهوية المفتوحة',
 264+ 'openidserverlogininstructions' => 'أدخل كلمة سرك بالأسفل لتسجيل الدخول إلى $3 كمستخدم $2 (صفحة مستخدم $1).',
 265+ 'openidtrustinstructions' => 'تأكد مما إذا كنت ترغب فى مشاركة البيانات مع $1.',
 266+ 'openidallowtrust' => 'السماح ل$1 بالوثوق بحساب هذا المستخدم.',
 267+ 'openidnopolicy' => 'الموقع لا يمتلك سياسة محددة للخصوصية.',
 268+ 'openidpolicy' => 'تحقق من <a target="_new" href="$1">سياسة الخصوصية</a> لمزيد من المعلومات.',
 269+ 'openidoptional' => 'اختياري',
 270+ 'openidrequired' => 'مطلوب',
 271+ 'openidnickname' => 'اللقب',
 272+ 'openidfullname' => 'الاسم الكامل',
 273+ 'openidemail' => 'عنوان البريد الإلكتروني',
 274+ 'openidlanguage' => 'اللغة',
 275+ 'openidnotavailable' => 'لقبك المفضل ($1) قيد الاستخدام بالفعل بواسطة مستخدم آخر.',
 276+ 'openidnotprovided' => 'خادم هويتك المفتوحة لم يوفر لقبا (إما لأنه لا يستطيع، أو لأنك أخبرته ألا يفعل).',
 277+ 'openidchooseinstructions' => 'كل المستخدمين يحتاجون إلى لقب؛
 278+يمكنك أن تختار واحدا من الخيارات بالأسفل.',
 279+ 'openidchoosefull' => 'اسمك الكامل ($1)',
 280+ 'openidchooseurl' => 'اسم مختار من هويتك المفتوحة ($1)',
 281+ 'openidchooseauto' => 'اسم مولد تلقائيا ($1)',
 282+ 'openidchoosemanual' => 'اسم من اختيارك:',
 283+ 'openidchooseexisting' => 'حساب موجود فى هذه الويكي:',
 284+ 'openidchoosepassword' => 'كلمة السر:',
 285+ 'openidconvertinstructions' => 'هذه الإستمارة تسمح لك بتغيير حساب مستخدمك ليستعمل مسار هوية مفتوحة.',
 286+ 'openidconvertsuccess' => 'تم التحول بنجاح إلى الهوية المفتوحة',
 287+ 'openidconvertsuccesstext' => 'أنت حولت بنجاح هويتك المفتوحة إلى $1.',
 288+ 'openidconvertyourstext' => 'هذه بالفعل هويتك المفتوحة.',
 289+ 'openidconvertothertext' => 'هذه هى الهوية المفتوحة لشخص آخر.',
 290+ 'openidalreadyloggedin' => "'''أنت مسجل الدخول بالفعل، $1!'''
 291+
 292+لو كنت تريد استخدام الهوية المفتوحة لتسجيل الدخول فى المستقبل، يمكنك [[Special:OpenIDConvert|تحويل حسابك لاستخدام الهوية المفتوحة]].",
 293+ 'openidnousername' => 'مافيش اسم يوزر تم تحديده.',
 294+ 'openidbadusername' => 'اسم المستخدم المحدد سيء.',
 295+ 'openidautosubmit' => 'هذه الصفحة تحتوى على إستمارة ينبغى أن يتم إرسالها تلقائيا لو أنك لديك الجافاسكريبت مفعلة.
 296+لو لا، جرب زر \\"Continue\\".',
 297+ 'openidclientonlytext' => 'أنت لا يمكنك استخدام الحسابات من هذا الويكى كهوية مفتوحة على موقع آخر.',
 298+ 'openidloginlabel' => 'مسار الهوية المفتوحة',
 299+ 'openidlogininstructions' => "{{SITENAME}} تدعم معيار [http://openid.net/ الهوية المفتوحة] للدخول الفردى بين مواقع الويب.
 300+الهوية المفتوحة تسمح لك بتسجيل الدخول إلى مواقع ويب عديدة مختلفة بدون استخدام كلمة سر مختلفة لكل موقع.
 301+(انظر [http://en.wikipedia.org/wiki/OpenID مقالة الهوية المفتوحة فى يويكيبيديا] لمزيد من المعلومات.)
 302+
 303+لو أنك لديك بالفعل حساب فى {{SITENAME}}، يمكنك [[Special:UserLogin|تسجيل الدخول]] باسم مستخدمك وكلمة السر الخاصة بك كالمعتاد.
 304+لاستخدام الهوية المفتوحة فى المستقبل، يمكنك [[Special:OpenIDConvert|تحويل حسابك إلى الهوية المفتوحة]] بعد تسجيل دخولك بشكل عادي.
 305+
 306+يوجد العديد من [http://wiki.openid.net/Public_OpenID_providers موفرى الهوية المفتوحة العلنيين]، وربما يكون لديك حسابك بهوية مفتوحة على خدمة أخرى.
 307+
 308+; الويكيات الأخرى : لو أنك لديك حساب على ويكى مفعل الهوية المفتوحة، مثل [http://wikitravel.org/ ويكى ترافيل]، [http://www.wikihow.com/ ويكى هاو]، [http://vinismo.com/ فينيزمو]، [http://aboutus.org/ أبوت أس] أو [http://kei.ki/ كيكي]، يمكنك تسجيل الدخول إلى {{SITENAME}} بواسطة إدخال '''المسار الكامل''' لصفحة مستخدمك على هذا الويكى الآخر فى الصندوق بالأعلى. على سبيل المثال، ''<nowiki>http://kei.ki/en/User:Evan</nowiki>''.
 309+; [http://openid.yahoo.com/ ياهو!] : إذا لديك حساب مع ياهو!، يمكنك تسجيل الدخول إلى هذا الموقع بواسطة إدخال هويتك المفتوحة الموفرة بواسطة ياهو! فى الصندوق بالأعلى. مسارات هوية ياهو! المفتوحة تأخذ الصيغة ''<nowiki>https://me.yahoo.com/yourusername</nowiki>''.
 310+; [http://dev.aol.com/aol-and-63-million-openids إيه أو إل] : لو لديك حساب مع [http://www.aol.com/ إيه أو إل]، مثل حساب [http://www.aim.com/ إيه أى إم]، يمكنك تسجيل الدخول إلى {{SITENAME}} بواسطة إدخال هويتك المفتوحة الموفرة بواسطة AOL فى الصندوق بالأعلى. مسارات هوية AOL المفتوحة تأخذ الصيغة ''<nowiki>http://openid.aol.com/yourusername</nowiki>''. اسم مستخدمك ينبغى أن يكون كله حروفا صغيرة، لا مسافات.
 311+; [http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html بلوجر], [http://faq.wordpress.com/2007/03/06/what-is-openid/ وورد بريس دوت كوم]، [http://www.livejournal.com/openid/about.bml ليف جورنال]، [http://bradfitz.vox.com/library/post/openid-for-vox.html فوكس] : لو لديك مدونة على أى من هذه الخدمات، أدخل مسار مدونتك فى الصندوق بالأعلى. على سبيل المثال، ''<nowiki>http://yourusername.blogspot.com/</nowiki>''، ''<nowiki>http://yourusername.wordpress.com/</nowiki>''، ''<nowiki>http://yourusername.livejournal.com/</nowiki>''، أو ''<nowiki>http://yourusername.vox.com/</nowiki>''.",
 312+ 'openid-pref-hide' => 'أخف هويتك <a href="http://openid.net/">هويتك المفتوحة</a> على صفحتك الشخصية، لو سجلت الدخول بالهوية المفتوحة.',
 313+);
 314+
 315+/** Asturian (Asturianu)
 316+ * @author Esbardu
 317+ */
 318+$messages['ast'] = array(
 319+ 'openidlanguage' => 'Llingua',
 320+);
 321+
 322+/** Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
 323+ * @author EugeneZelenko
 324+ * @author Jim-by
 325+ */
 326+$messages['be-tarask'] = array(
 327+ 'openid-desc' => 'Уваход ў {{GRAMMAR:вінавальны|{{SITENAME}}}} з дапамогай [http://openid.net/ OpenID], а так сама ў іншыя сайты, якія падтрымліваюць OpenID з вікі-рахунка',
 328+ 'openidlogin' => 'Уваход у сыстэму з дапамогай OpenID',
 329+ 'openidfinish' => 'Скончыць уваход у сыстэму з дапамогай OpenID',
 330+ 'openidserver' => 'Сэрвэр OpenID',
 331+ 'openidxrds' => 'Файл Yadis',
 332+ 'openidconvert' => 'Канвэртар OpenID',
 333+ 'openiderror' => 'Памылка праверкі',
 334+ 'openiderrortext' => 'Пад час праверкі адрасу OpenID узьнікла памылка.',
 335+ 'openidconfigerror' => 'Памылка ў канфігурацыі OpenID',
 336+ 'openidconfigerrortext' => 'Канфігурацыя сховішча OpenID у {{GRAMMAR:месны|{{SITENAME}}}} — няслушная.
 337+Калі ласка, зьвярніцеся да [[Special:ListUsers/sysop|адміністратараў]].',
 338+ 'openidpermission' => 'Памылка правоў доступу OpenID',
 339+ 'openidpermissiontext' => 'Пазначаны Вамі OpenID не дазваляе ўвайсьці на гэты сэрвэр.',
 340+ 'openidcancel' => 'Праверка адменена',
 341+ 'openidcanceltext' => 'Праверка адрасу OpenID была скасавана.',
 342+ 'openidfailure' => 'Праверка не атрымалася',
 343+ 'openidfailuretext' => 'Праверка адрасу OpenID не атрымалася. Паведамленьне пра памылку: «$1»',
 344+ 'openidsuccess' => 'Праверка прайшла пасьпяхова',
 345+ 'openidsuccesstext' => 'Праверка адрасу OpenID прайшла пасьпяхова.',
 346+ 'openidusernameprefix' => 'КарыстальнікOpenID',
 347+ 'openidserverlogininstructions' => 'Увядзіце Ваш пароль ніжэй, каб увайсьці на $3 як {{GENDER:$2|удзельнік|удзельніца}} $2 (старонка {{GENDER:$2|ўдзельніка|удзельніцы}} $1).',
 348+ 'openidtrustinstructions' => 'Пазначце, калі Вы жадаеце даць доступ да зьвестак для $1.',
 349+ 'openidallowtrust' => 'Дазволіць $1 давераць гэтаму рахунку.',
 350+ 'openidnopolicy' => 'Сайт ня мае правілаў адносна прыватнасьці.',
 351+ 'openidpolicy' => 'Глядзіце дадатковую інфармацыю ў <a target="_new" href="$1">правілах адносна прыватнасьці</a>.',
 352+ 'openidoptional' => 'Неабавязковае',
 353+ 'openidrequired' => 'Абавязковае',
 354+ 'openidnickname' => 'Мянушка',
 355+ 'openidfullname' => 'Поўнае імя',
 356+ 'openidemail' => 'Адрас электроннай пошты',
 357+ 'openidlanguage' => 'Мова',
 358+ 'openidnotavailable' => 'Пазначаная Вамі мянушка ($1) ужо выкарыстоўваецца.',
 359+ 'openidnotprovided' => 'Ваш сэрвэр OpenID не даслаў мянушку (магчыма, таму што ня можа, альбо Вы загадалі гэтага не рабіць).',
 360+ 'openidchooseinstructions' => 'Кожны ўдзельнік павінен мець мянушку;
 361+Вы можаце выбраць адну з пададзеных ніжэй.',
 362+ 'openidchoosefull' => 'Ваша поўнае імя ($1)',
 363+ 'openidchooseurl' => 'Імя атрыманае ад Вашага сэрвэра OpenID ($1)',
 364+ 'openidchooseauto' => 'Аўтаматычна створанае імя ($1)',
 365+ 'openidchoosemanual' => 'Імя на Ваш выбар:',
 366+ 'openidchooseexisting' => 'Існуючы рахунак у {{GRAMMAR:месны|{{SITENAME}}}}:',
 367+ 'openidchoosepassword' => 'пароль:',
 368+ 'openidconvertinstructions' => 'Гэта форма дазваляе зьмяніць Ваш рахунак на выкарыстаньне адрасу OpenID.',
 369+ 'openidconvertsuccess' => 'Пасьпяховае пераўтварэньне ў OpenID',
 370+ 'openidconvertsuccesstext' => 'Вы пасьпяхова пераўтварылі Ваш OpenID у $1.',
 371+ 'openidconvertyourstext' => 'Гэта ўжо Ваш OpenID.',
 372+ 'openidconvertothertext' => 'Гэта ня Ваш OpenID.',
 373+ 'openidalreadyloggedin' => "'''Вы ўжо ўвайшлі, $1!'''
 374+
 375+Калі Вы жадаеце выкарыстоўваць OpenID для ўваходаў у будучыні, Вы можаце [[Special:OpenIDConvert|пераўтварыць Ваш рахунак на выкарыстаньне OpenID]].",
 376+ 'openidnousername' => 'Не пазначана імя ўдзельніка.',
 377+ 'openidbadusername' => 'Пазначана няслушнае імя ўдзельніка.',
 378+ 'openidautosubmit' => 'Гэта старонка ўтрымлівае форму, якая павінна быць аўтаматычна адпраўлена, калі ў Вас уключаны JavaScript.
 379+Калі гэтага не адбылася, паспрабуйце націснуць кнопку «Працягнуць».',
 380+ 'openidclientonlytext' => 'Вы ня можаце выкарыстоўваць рахункі {{GRAMMAR:родны|{{SITENAME}}}} як OpenID на іншых сайтах.',
 381+ 'openidloginlabel' => 'Адрас OpenID',
 382+ 'openidlogininstructions' => "{{SITENAME}} падтрымлівае стандарт [http://openid.net/ OpenID], які дазваляе выкарыстоўваць адзіны уліковы запіс для ўваходу ў розныя сайты без выкарыстаньня розных пароляў для кожнага зь іх.
 383+(Глядзіце падрабязнасьці на [http://en.wikipedia.org/wiki/OpenID Wikipedia's OpenID article].)
 384+
 385+Калі Вы ўжо маеце рахунак у {{GRAMMAR:месны|{{SITENAME}}}}, Вы можаце [[Special:UserLogin|ўвайсьці]] з Вашым імем і паролем як звычайна.
 386+Каб выкарыстоўваць OpenID у будучыні, Вы можаце [[Special:OpenIDConvert|пераўтварыць Ваш рахунак у OpenID]] пасьля таго, як увайшлі звычайным чынам.
 387+
 388+Існуе шмат [http://openid.net/get/ OpenID сэрвісаў], у Вы, магчыма, ужо маеце OpenID рахунак у іншым сэрвісе.",
 389+ 'openidupdateuserinfo' => 'Абнавіць маю асабістую інфармацыю',
 390+ 'openid-prefstext' => 'Устаноўкі [http://openid.net/ OpenID]',
 391+ 'openid-pref-hide' => 'Хаваць Ваш адрас OpenID на Вашай старонцы ўдзельніка, калі Вы ўвайшлі з дапамогай OpenID.',
 392+ 'openid-pref-update-userinfo-on-login' => 'Абнаўляць маю інфармацыю з OpenID кожны раз калі я уваходжу ў сыстэму',
 393+);
 394+
 395+/** Bulgarian (Български)
 396+ * @author DCLXVI
 397+ */
 398+$messages['bg'] = array(
 399+ 'openidlogin' => 'Влизане с OpenID',
 400+ 'openidfinish' => 'Приключване на OpenID влизането',
 401+ 'openidserver' => 'OpenID сървър',
 402+ 'openidxrds' => 'Yadis файл',
 403+ 'openidconvert' => 'Конвертор за OpenID',
 404+ 'openiderror' => 'Грешка при потвърждението',
 405+ 'openidconfigerror' => 'OpenID грешка при конфигурирането',
 406+ 'openidpermissiontext' => 'На предоставеното OpenID не е позволено да влиза на този сървър.',
 407+ 'openidcancel' => 'Потвърждението беше прекратено',
 408+ 'openidcanceltext' => 'Потвърждението на OpenID URL беше прекратено.',
 409+ 'openidfailure' => 'Потвърждението беше неуспешно',
 410+ 'openidfailuretext' => 'Потвърждението на OpenID URL беше неуспешно. Грешка: „$1“',
 411+ 'openidsuccess' => 'Потвърждението беше успешно',
 412+ 'openidsuccesstext' => 'Потвърждението на OpenID URL беше успешно.',
 413+ 'openidserverlogininstructions' => 'Въведете паролата си по-долу за да влезете в $3 като потребител $2 (потребителска страница $1).',
 414+ 'openidnopolicy' => 'Сайтът няма уточнена политика за защита на личните данни.',
 415+ 'openidpolicy' => 'За повече информация вижте политиката за <a target="_new" href="$1">защита на личните данни</a>.',
 416+ 'openidoptional' => 'Незадължително',
 417+ 'openidrequired' => 'Изисква се',
 418+ 'openidnickname' => 'Псевдоним',
 419+ 'openidfullname' => 'Име',
 420+ 'openidemail' => 'Електронна поща',
 421+ 'openidlanguage' => 'Език',
 422+ 'openidnotavailable' => 'Избраното потребителско име ($1) вече се използва от друг потребител.',
 423+ 'openidchooseinstructions' => 'Всички потребители трябва да имат потребителско име;
 424+можете да изберете своето от предложенията по-долу.',
 425+ 'openidchoosefull' => 'Вашето пълно име ($1)',
 426+ 'openidchooseauto' => 'Автоматично генерирано име ($1)',
 427+ 'openidchoosemanual' => 'Име по избор:',
 428+ 'openidchooseexisting' => 'Съществуваща сметка в това уики:',
 429+ 'openidchoosepassword' => 'парола:',
 430+ 'openidconvertinstructions' => 'Този формуляр позволява да се промени потребителската сметка да използва OpenID URL.',
 431+ 'openidconvertsuccess' => 'Преобразуването в OpenID беше успешно',
 432+ 'openidconvertsuccesstext' => 'Успешно преобразувахте вашият OpenID в $1.',
 433+ 'openidconvertyourstext' => 'Това вече е вашият OpenID.',
 434+ 'openidconvertothertext' => 'Това е OpenID на някой друг.',
 435+ 'openidalreadyloggedin' => "'''Вече сте влезли в системата, $1!'''
 436+
 437+Ако желаете да използвате OpenID за бъдещи влизания, можете да [[Special:OpenIDConvert|преобразувате сметката си да използва OpenID]].",
 438+ 'openidnousername' => 'Не е посочено потребителско име.',
 439+ 'openidbadusername' => 'Беше посочено невалидно име.',
 440+ 'openidautosubmit' => 'Тази страница включва формуляр, който би трябвало да се изпрати автоматично ако Джаваскриптът е разрешен.
 441+Ако не е, можете да използвате бутона \\"Продължаване\\".',
 442+ 'openidclientonlytext' => 'Не можете да използвате сметки от това уики като OpenID за друг сайт.',
 443+ 'openidloginlabel' => 'OpenID Адрес',
 444+ 'openidlogininstructions' => "{{SITENAME}} поддържа [http://openid.net/ OpenID] стандарта за single signon between Web sites.
 445+OpenID позволява влизането в много различни сайтове без да е необходимо да се регистрирате за всеки поотделно.
 446+(Вижте [http://en.wikipedia.org/wiki/OpenID статията за OpenID в Уикипедия] за повече информация.)
 447+
 448+Ако вече имате сметка в {{SITENAME}}, можете [[Special:UserLogin|да влезете]] с потребителското си име и парола, както обикновено.
 449+Ако желаете да използвате OpenID, можете [[Special:OpenIDConvert|да преобразувате сметката си в OpenID]] след като влезете в системата.
 450+
 451+Налични са много [http://wiki.openid.net/Public_OpenID_providers обществени доставчици на OpenID] и е възможно вече да имате сметка, която поддържа OpenID в друг сайт.
 452+
 453+; Други уикита: Ако имате сметка в уики, което поддържа OpenID като [http://wikitravel.org/ Wikitravel], [http://www.wikihow.com/ wikiHow], [http://vinismo.com/ Vinismo], [http://aboutus.org/ AboutUs] или [http://kei.ki/ Keiki], можете да влезете в {{SITENAME}} като въведете в кутията по-горе '''пълния адрес''' към потребителската си страница в другото уикиo, напр. ''<nowiki>http://kei.ki/en/User:Evan</nowiki>''.
 454+; [http://openid.yahoo.com/ Yahoo!]: Ако имате сметка в Yahoo!, можете да влезете в този сайт като в кутията по-горе въведете вашето Yahoo! OpenID. Yahoo! OpenID адресите са от вида ''<nowiki>https://me.yahoo.com/yourusername</nowiki>''.
 455+; [http://dev.aol.com/aol-and-63-million-openids AOL]: Ако притежавате сметка в [http://www.aol.com/ AOL], напр. в [http://www.aim.com/ AIM], можете да влезете в {{SITENAME}} като въведете в кутията по-горе вашето AOL OpenID. AOL OpenID адресите са от вида ''<nowiki>http://openid.aol.com/yourusername</nowiki>''. Потребителското име се изписва само с малки букви и без интервали.
 456+; [http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html Blogger], [http://faq.wordpress.com/2007/03/06/what-is-openid/ Wordpress.com], [http://www.livejournal.com/openid/about.bml LiveJournal], [http://bradfitz.vox.com/library/post/openid-for-vox.html Vox] : Ако имате блог в някоя от тези услуги, въведете адреса на блога си в кутията по-горе, напр. ''<nowiki>http://yourusername.blogspot.com/</nowiki>'', ''<nowiki>http://yourusername.wordpress.com/</nowiki>'', ''<nowiki>http://yourusername.livejournal.com/</nowiki>'' или ''<nowiki>http://yourusername.vox.com/</nowiki>''.",
 457+ 'openid-pref-hide' => 'Скриване на <a href="http://openid.net/">OpenID</a> от потребителската страница ако влезете чрез OpenID.',
 458+);
 459+
 460+/** Bosnian (Bosanski)
 461+ * @author CERminator
 462+ */
 463+$messages['bs'] = array(
 464+ 'openid-desc' => 'Prijava na wiki sa [http://openid.net/ OpenID] i prijava na druge stranice koje podržavaju OpenID sa wiki korisničkim računom',
 465+ 'openidlogin' => 'Prijava sa OpenID',
 466+ 'openidfinish' => 'Završi OpenID prijavu',
 467+ 'openidserver' => 'OpenID server',
 468+ 'openidxrds' => 'Yadis datoteka',
 469+ 'openidconvert' => 'OpenID pretvarač',
 470+ 'openiderror' => 'Greška pri provjeri',
 471+ 'openiderrortext' => 'Desila se greška pri provjeri OpenID URL adrese.',
 472+ 'openidconfigerror' => 'Greška OpenID postavki',
 473+ 'openidconfigerrortext' => 'OpenID konfiguracija spremanja za ovaj wiki je nevaljana.
 474+Molimo konsultujte se sa [[Special:ListUsers/sysop|administratorom]].',
 475+ 'openidpermission' => 'Greška kod OpenID dopuštenja',
 476+ 'openidpermissiontext' => 'OpenID koji ste naveli nije dopušteno da se prijavi na ovaj server.',
 477+ 'openidcancel' => 'Provjera poništena',
 478+ 'openidcanceltext' => 'Provjera OpenID URL-a je otkazana.',
 479+ 'openidfailure' => 'Potvrda nije uspjela',
 480+ 'openidfailuretext' => 'Provjera URL-a za OpenID nije uspjela. Poruka greške: "$1"',
 481+ 'openidsuccess' => 'Provjera uspješna',
 482+ 'openidsuccesstext' => 'Provjera URL-a za OpenID je uspjela.',
 483+ 'openidusernameprefix' => 'OpenIDKorisnik',
 484+ 'openidserverlogininstructions' => 'Unesite ispod Vašu šifru da biste se prijavili na $3 kao korisnik $2 (korisnička stranica $1).',
 485+ 'openidtrustinstructions' => 'Provjerite da li želite dijeliti podatke sa $1.',
 486+ 'openidallowtrust' => 'Omogući $1 da vjeruje ovom korisničkom računu.',
 487+ 'openidnopolicy' => 'Sajt nema napisana pravila privatnosti.',
 488+ 'openidpolicy' => 'Provjerite <a target="_new" href="$1">politiku privatnosti</a> za više informacija.',
 489+ 'openidoptional' => 'opcionalno',
 490+ 'openidrequired' => 'obavezno',
 491+ 'openidnickname' => 'Nadimak',
 492+ 'openidfullname' => 'Puno ime',
 493+ 'openidemail' => 'E-mail adresa',
 494+ 'openidlanguage' => 'Jezik',
 495+ 'openidnotavailable' => 'Vaš odabrani nadimak ($1) je već upotrijebio drugi korisnik.',
 496+ 'openidnotprovided' => 'Vaš OpenID server nije poslao nadimak (bilo da ne može ili da ste ga Vi spriječili).',
 497+ 'openidchooseinstructions' => 'Svi korisnici trebaju imati nadimak;
 498+možete odabrati jedan sa opcijama ispod.',
 499+ 'openidchoosefull' => 'Vaše puno ime ($1)',
 500+ 'openidchooseurl' => 'Ime uzeto sa Vašeg OpenID ($1)',
 501+ 'openidchooseauto' => 'Automatski generisano ime ($1)',
 502+ 'openidchoosemanual' => 'Naziv po Vašem izboru:',
 503+ 'openidchooseexisting' => 'Postojeći račun na ovoj wiki:',
 504+ 'openidchoosepassword' => 'šifra:',
 505+ 'openidconvertinstructions' => 'Ovaj obrazac Vam omogućuje da promijeniti Vaš korisnički račun za upotrebu URL OpenID.',
 506+ 'openidconvertsuccess' => 'Uspješno prevedeno u OpenID',
 507+ 'openidconvertsuccesstext' => 'Uspješno ste pretvorili Vaš OpenID u $1.',
 508+ 'openidconvertyourstext' => 'To je već Vaš OpenID.',
 509+ 'openidconvertothertext' => 'To je OpenID koji pripada nekom drugom.',
 510+ 'openidalreadyloggedin' => "'''Vi ste već prijavljeni, $1!'''
 511+
 512+Ako želite da koristite OpenID za buduće prijave, možete [[Special:OpenIDConvert|promijeniti Vaš račun za upotrebu OpenID]].",
 513+ 'openidnousername' => 'Nije navedeno korisničko ime.',
 514+ 'openidbadusername' => 'Navedeno loše korisničko ime.',
 515+ 'openidautosubmit' => 'Ova stranica uključuje obrazac koji bi se trebao automatski poslati ako je kod Vas omogućena JavaScript. Ako nije, pokušajte nastaviti dalje putem dugmeta \\"Continue\\".',
 516+ 'openidclientonlytext' => 'Ne možete koristiti račune sa ove wiki kao OpenID na drugom sajtu.',
 517+ 'openidloginlabel' => 'OpenID URL adresa',
 518+ 'openidlogininstructions' => '{{SITENAME}} podržava [http://openid.net/ OpenID] standard za jedinstvenu prijavu između web sajtova.
 519+OpenID omogućuje da se prijavite na mnoge različite web stranice bez korištenja različitih šifri za svaku od njih.
 520+(Pogledajte [http://en.wikipedia.org/wiki/OpenID članak na Wikipediji o OpenID-u] za više informacija.)
 521+
 522+Ako već imate račun na {{SITENAME}}, možete se [[Special:UserLogin|prijaviti]] sa vašim korisničkim imenom i šifrom kao i uvijek.
 523+Da bi koristili OpenID u buduće, možete [[Special:OpenIDConvert|pretvoriti vaš račun u OpenID]] nakon što se normalno prijavite.
 524+
 525+Postoji mnogo [http://wiki.openid.net/Public_OpenID_providers javnih provajdera za OpenID], i možda već imate neki račun na drugom servisu koji podržava OpenID.',
 526+ 'openidupdateuserinfo' => 'Ažuriraj moje lične informacije',
 527+ 'openid-prefstext' => '[http://openid.net/ OpenID] postavke',
 528+ 'openid-pref-hide' => 'Sakrij Vaš <a href="http://openid.net/">OpenID</a> na Vašoj korisničkoj stranici, ako ste prijavljeni sa OpenID.',
 529+ 'openid-pref-update-userinfo-on-login' => 'Ažuriraj moje informacije sa OpenID identiteta svaki put kad se prijavim',
 530+);
 531+
 532+/** Czech (Česky)
 533+ * @author Matěj Grabovský
 534+ */
 535+$messages['cs'] = array(
 536+ 'openid-desc' => 'Přihlaste se na wiki pomocí [http://openid.net OpenID] a přihlaste se na jiné stránky podporující OpenID pomocí uživatelského účtu wiki',
 537+ 'openidlogin' => 'Přihlásit se pomocí OpenID',
 538+ 'openidfinish' => 'Dokončit přihlášení pomocí OpenID',
 539+ 'openidserver' => 'OpenID server',
 540+ 'openidxrds' => 'Soubor Yadis',
 541+ 'openidconvert' => 'OpenID konvertor',
 542+ 'openiderror' => 'Chyba při ověřování',
 543+ 'openiderrortext' => 'Při ověřování URL OpenID se vyskytla chyba.',
 544+ 'openidconfigerror' => 'Chyba konfigurace OpenID',
 545+ 'openidconfigerrortext' => 'Konfigurace OpenID této wiki je neplatná.
 546+Prosím, poraďte se se [[Special:ListUsers/sysop|správcem]].',
 547+ 'openidpermission' => 'Chyba oprávnění OpenID',
 548+ 'openidpermissiontext' => 'OpenID, který jste poskytli, nemá oprávnění příhlásit se k tomuto serveru.',
 549+ 'openidcancel' => 'Ověřování bylo zrušeno',
 550+ 'openidcanceltext' => 'Ověřování URL OpenID bylo zrušeno.',
 551+ 'openidfailure' => 'Ověřování zrušeno',
 552+ 'openidfailuretext' => 'Ověřování URL OpenID selhalo. Chybová zpráva: „$1“',
 553+ 'openidsuccess' => 'Ověřování bylo úspěšné',
 554+ 'openidsuccesstext' => 'Ověření URL OpenID bylo úspěšné.',
 555+ 'openidusernameprefix' => 'Uživatel OpenID',
 556+ 'openidserverlogininstructions' => 'Do formuláře níže zadejte heslo pro přihlášení na $3 jako uživatel $2 (uživatelská stránka $1).',
 557+ 'openidtrustinstructions' => 'Zkontrolujte, jestli chcete sdílet data s uživatelem $1.',
 558+ 'openidallowtrust' => 'Povolit $1 důvěřovat tomuto uživatelskému účtu.',
 559+ 'openidnopolicy' => 'Lokalita nespecifikovala pravidla ochrany osobních údajů.',
 560+ 'openidpolicy' => 'Více informací na stránce <a target="_new" href="$1">Ochrana osobních údajoů</a>.',
 561+ 'openidoptional' => 'Volitelné',
 562+ 'openidrequired' => 'Požadované',
 563+ 'openidnickname' => 'Přezdívka',
 564+ 'openidfullname' => 'Celé jméno',
 565+ 'openidemail' => 'E-mailová adresa:',
 566+ 'openidlanguage' => 'Jazyk',
 567+ 'openidnotavailable' => 'Vaši preferovanou přezdívku ($1) už používá jiný uživatel.',
 568+ 'openidnotprovided' => 'Váš OpenID server neposkytnul přezdívku (buď protože nemůže, nebo protože jste mu určili aby ji neposkytoval).',
 569+ 'openidchooseinstructions' => 'Kyždý uživatel musí mít přezdívku; můžete si vybrat z níže uvedených možností.',
 570+ 'openidchoosefull' => 'Vaše celé jméno ($1)',
 571+ 'openidchooseurl' => 'Jméno na základě vašeho OpenID ($1)',
 572+ 'openidchooseauto' => 'Automaticky vytvořené jméno ($1)',
 573+ 'openidchoosemanual' => 'Jméno, které si vyberete:',
 574+ 'openidchooseexisting' => 'Existující účet na této wiki:',
 575+ 'openidchoosepassword' => 'heslo:',
 576+ 'openidconvertinstructions' => 'Tento formulář vám umožňuje změnit váš učet, aby používal OpenID URL.',
 577+ 'openidconvertsuccess' => 'Úspěšně převedeno na OpenID',
 578+ 'openidconvertsuccesstext' => 'Úspěšně jste převedli váš OpenID na $1.',
 579+ 'openidconvertyourstext' => 'To už je váš OpenID.',
 580+ 'openidconvertothertext' => 'To je OpenID někoho jiného.',
 581+ 'openidalreadyloggedin' => "'''Už jste přihlášený, $1!'''
 582+
 583+Pokud chcete pro přihlašování v budoucnu používat OpenID, můžete [[Special:OpenIDConvert|převést váš účet na OpenID]].",
 584+ 'openidnousername' => 'Nebylo zadáno uživatelské jméno.',
 585+ 'openidbadusername' => 'Bylo zadáno chybné uživatelské jméno.',
 586+ 'openidautosubmit' => 'Tato stránka obsahuje formulář, který by měl být automaticky odeslán pokud máte zapnutý JavaScript.
 587+Pokud ne, zkuste tlačátko „Pokračovat“.',
 588+ 'openidclientonlytext' => 'Nemůžete používat účty z této wiki jako OpenID na jinýh webech.',
 589+ 'openidloginlabel' => 'OpenID URL',
 590+ 'openidlogininstructions' => "{{SITENAME}} podporuje standard [http://openid.net/ OpenID] pro sjednocené přihlašování na webové stránky.
 591+OpenID vám umožňuje přihlašovat se na množství různých webových stránek bez nutnosti používat pro každou jiné heslo. (Přečtěte si [http://en.wikipedia.org/wiki/OpenID článek o OpenID na Wikipedii])
 592+
 593+Pokud už máte na {{GRAMMAR:6sg|{{SITENAME}}}} učet, můžete se [[Special:UserLogin|přihlásit]] pomocí uživatelského jména a heslo jako obvykle. Pokud chcete v budoucnosti pouívat OpenID, můžete po normálním přihlášení [[Special:OpenIDConvert|převést svůj účet na OpenID]].
 594+
 595+Existuje množství [http://wiki.openid.net/Public_OpenID_providers veřejných poskytovatelů OpenID] a možná už máte učet s podporou OpenID u jiného poskytovatele.
 596+
 597+; Jiné wiki: Pokud máte účet na wiki s podporou OpenID, jako např. [http://wikitravel.org/ Wikitravel], [http://www.wikihow.com/ wikiHow], [http://vinismo.com/ Vinismo], [http://aboutus.org/ AboutUs] nebo [http://kei.ki/ Keiki], můžete se přihlásit na {{GRAMMAR:4sg|{{SITENAME}}}}
 598+; [http://openid.yahoo.com/ Yahoo!]: Pokud máte učet Yahoo!, můžete se na tuto wiki přihlásit zadáním vašeho OpenID, které poskytuje Yahoo!, do pole výše. Yahoo! OpenID URL bývají ve tvaru ''<nowiki>https://me.yahoo.com/uzivatelskejmeno</nowiki>''.
 599+; [http://dev.aol.com/aol-and-63-million-openids AOL]: Pokud máte účet [http://www.aol.com/ AOL], jako například účet [http://www.aim.com/ AIM], můžete se přihlásit na {{GRAMMAR:4sg|{{SITENAME}}}} zadáním vaeho OpenID, které poskytuje AOL, do pole výše. AOL OpenID URL bývají ve tvaru ''<nowiki>http://openid.aol.com/uzivatelskejmeno</nowiki>''. Vaše uživatelské jméno by mělo mít jen malá písmena a žádné mezery.
 600+; [http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html Blogger], [http://faq.wordpress.com/2007/03/06/what-is-openid/ Wordpress.com], [http://www.livejournal.com/openid/about.bml LiveJournal], [http://bradfitz.vox.com/library/post/openid-for-vox.html Vox]: Pokud máte blog na některé z této služeb, zadejte do pole výše URL svého blogu. Například ''<nowiki>http://uzivatelskejmeno.blogspot.com/</nowiki>'', ''<nowiki>http://uzivatelskejmeno.wordpress.com/</nowiki>'', ''<nowiki>http://uzivatelskejmeno.livejournal.com/</nowiki>'' nebo ''<nowiki>http://uzivatelskejmeno.vox.com/</nowiki>''.",
 601+ 'openid-pref-hide' => 'Nezobrazovat váš <a href="http://openid.net/">OpenID</a> na vaší uživatelské stránce pokud se přihlašujete pomocí OpenID.',
 602+);
 603+
 604+/** Church Slavic (Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ)
 605+ * @author ОйЛ
 606+ */
 607+$messages['cu'] = array(
 608+ 'openidlanguage' => 'ѩꙁꙑ́къ',
 609+);
 610+
 611+/** Danish (Dansk)
 612+ * @author Jon Harald Søby
 613+ */
 614+$messages['da'] = array(
 615+ 'openidnickname' => 'Kaldenavn',
 616+ 'openidlanguage' => 'Sprog',
 617+ 'openidchoosepassword' => 'adgangskode:',
 618+);
 619+
 620+/** German (Deutsch)
 621+ * @author ChrisiPK
 622+ * @author Church of emacs
 623+ * @author Leithian
 624+ * @author Umherirrender
 625+ */
 626+$messages['de'] = array(
 627+ 'openid-desc' => 'Anmeldung an dieses Wiki mit einer [http://openid.net/ OpenID] und anmelden an anderen Websites, die OpenID unterstützen, mit einem Wiki-Benutzerkonto.',
 628+ 'openidlogin' => 'Anmelden mit OpenID',
 629+ 'openidfinish' => 'OpenID-Anmeldung abschließen',
 630+ 'openidserver' => 'OpenID-Server',
 631+ 'openidxrds' => 'Yadis-Datei',
 632+ 'openidconvert' => 'OpenID-Konverter',
 633+ 'openiderror' => 'Überprüfungsfehler',
 634+ 'openiderrortext' => 'Ein Fehler ist während der Überprüfung der OpenID-URL aufgetreten.',
 635+ 'openidconfigerror' => 'OpenID-Konfigurationsfehler',
 636+ 'openidconfigerrortext' => 'Die OpenID-Speicherkonfiguarion für dieses Wiki ist fehlerhaft.
 637+Bitte benachrichtige einen [[Special:ListUsers/sysop|Administrator]].',
 638+ 'openidpermission' => 'OpenID-Berechtigungsfehler',
 639+ 'openidpermissiontext' => 'Die angegebene OpenID berechtigt nicht zur Anmeldung an diesem Server.',
 640+ 'openidcancel' => 'Überprüfung abgebrochen',
 641+ 'openidcanceltext' => 'Die Überprüfung der OpenID-URL wurde abgebrochen.',
 642+ 'openidfailure' => 'Überprüfungsfehler',
 643+ 'openidfailuretext' => 'Die Überprüfung der OpenID-URL ist fehlgeschlagen. Fehlermeldung: „$1“',
 644+ 'openidsuccess' => 'Überprüfung erfolgreich beendet',
 645+ 'openidsuccesstext' => 'Die Überprüfung der OpenID-URL war erfolgreich.',
 646+ 'openidusernameprefix' => 'OpenID-Benutzer',
 647+ 'openidserverlogininstructions' => 'Gib dein Passwort unten ein, um dich als Benutzer $2 an $3 anzumelden (Benutzerseite $1).',
 648+ 'openidtrustinstructions' => 'Prüfe, ob du Daten mit $1 teilen möchtest.',
 649+ 'openidallowtrust' => 'Erlaube $1, diesem Benutzerkonto zu vertrauen.',
 650+ 'openidnopolicy' => 'Die Seite hat keine Datenschutzrichtlinie angegeben.',
 651+ 'openidpolicy' => 'Prüfe die <a target="_new" href="$1">Datenschutzrichtlinie</a> für weitere Informationen.',
 652+ 'openidoptional' => 'Optional',
 653+ 'openidrequired' => 'Pflicht',
 654+ 'openidnickname' => 'Benutzername',
 655+ 'openidfullname' => 'Vollständiger Name',
 656+ 'openidemail' => 'E-Mail-Adresse:',
 657+ 'openidlanguage' => 'Sprache',
 658+ 'openidnotavailable' => 'Dein bevorzugter Benutzername ($1) wird bereits von einem anderen Benutzer verwendet.',
 659+ 'openidnotprovided' => 'Dein OpenID-Server unterstützt keine Nicknamen (entweder, weil er es nicht kann, oder weil du es ihm nicht erlaubt hast).',
 660+ 'openidchooseinstructions' => 'Alle Benutzer benötigen einen Benutzernamen;
 661+du kannst einen aus der untenstehenden Liste auswählen.',
 662+ 'openidchoosefull' => 'Dein vollständiger Name ($1)',
 663+ 'openidchooseurl' => 'Ein Name aus deiner OpenID ($1)',
 664+ 'openidchooseauto' => 'Ein automatisch erzeugter Name ($1)',
 665+ 'openidchoosemanual' => 'Ein Name deiner Wahl:',
 666+ 'openidchooseexisting' => 'Ein existierendes Benutzerkonto in diesem Wiki:',
 667+ 'openidchoosepassword' => 'Passwort:',
 668+ 'openidconvertinstructions' => 'Mit diesem Formular kannst du dein Benutzerkonto zur Benutzung einer OpenID-URL freigeben.',
 669+ 'openidconvertsuccess' => 'Erfolgreich nach OpenID konvertiert',
 670+ 'openidconvertsuccesstext' => 'Du hast die Konvertierung deiner OpenID nach $1 erfolgreich durchgeführt.',
 671+ 'openidconvertyourstext' => 'Dies ist bereits deine OpenID.',
 672+ 'openidconvertothertext' => 'Dies ist die OpenID von jemand anderem.',
 673+ 'openidalreadyloggedin' => "'''Du bist bereits angemeldet, $1!'''
 674+
 675+Wenn du OpenID für künftige Anmeldevorgänge nutzen möchtest, kannst du [[Special:OpenIDConvert|dein Benutzerkonto nach OpenID konvertieren]].",
 676+ 'openidnousername' => 'Kein Benutzername angegeben.',
 677+ 'openidbadusername' => 'Falscher Benutzername angegeben.',
 678+ 'openidautosubmit' => 'Diese Seite enthält ein Formular, das automatisch übertragen wird, wenn JavaSkript aktiviert ist. Falls nicht, klicke bitte auf „Weiter“.',
 679+ 'openidclientonlytext' => 'Du kannst keine Benutzerkonten aus diesem Wiki als OpenID für andere Seiten verwenden.',
 680+ 'openidloginlabel' => 'OpenID-URL',
 681+ 'openidlogininstructions' => '{{SITENAME}} unterstützt den [http://openid.net/ OpenID]-Standard für eine einheitliche Anmeldung für mehrere Websites.
 682+OpenID meldet dich bei vielen unterschiedlichen Webseiten an, ohne dass du für jede ein anderes Passwort verwenden musst.
 683+(Mehr Informationen bietet der [http://de.wikipedia.org/wiki/OpenID Wikipedia-Artikel zu OpenID].)
 684+
 685+Falls du bereits ein Benutzerkonto bei {{SITENAME}} hast, kannst du dich ganz normal mit Benutzername und Passwort [[Special:UserLogin|anmelden]].
 686+Wenn du in Zukunft OpenID verwenden möchtest, kannst du [[Special:OpenIDConvert|deinen Account zu OpenID konvertieren]], nachdem du dich normal eingeloggt hast.
 687+
 688+Es gibt viele [http://openid.net/get/ OpenID-Provider] und möglicherweise hast du bereits ein Benutzerkonto mit aktiviertem OpenID bei einem anderen Anbieter.',
 689+ 'openidupdateuserinfo' => 'Persönliche Daten aktualisieren',
 690+ 'openid-prefstext' => '[http://openid.net/ OpenID]-Einstellungen',
 691+ 'openid-pref-hide' => 'Verstecke deine <a href="http://openid.net/">OpenID</a> auf deiner Benutzerseite, wenn du dich mit OpenID anmeldest.',
 692+ 'openid-pref-update-userinfo-on-login' => 'Meine Daten anhand des OpenID-Kontos bei jeder Anmeldung aktualisieren',
 693+);
 694+
 695+/** Lower Sorbian (Dolnoserbski)
 696+ * @author Michawiki
 697+ */
 698+$messages['dsb'] = array(
 699+ 'openid-desc' => 'Pśizjawjenje pla wikija z [http://openid.net/ OpenID] a pśizjawjenje pla drugich websedłow, kótarež pódpěraju OpenID z wikijowym wužywarskim kontom',
 700+ 'openidlogin' => 'Pśizjawjenje z OpenID',
 701+ 'openidfinish' => 'Pśizjawjenje OpenID dokóńcyś',
 702+ 'openidserver' => 'Serwer OpenID',
 703+ 'openidxrds' => 'Yadis-dataja',
 704+ 'openidconvert' => 'Konwerter OpenID',
 705+ 'openiderror' => 'Pśeglědańska zmólka',
 706+ 'openiderrortext' => 'Zmólka jo nastała pśi pśeglědowanju URL OpenID.',
 707+ 'openidconfigerror' => 'Konfiguraciska zmólka OpenID',
 708+ 'openidconfigerrortext' => 'Konfiguracija składowaka OpenID za toś ten wiki jo njepłaśiwy.
 709+Pšosym staj se z [[Special:ListUsers/sysop|administratorom]] do zwiska.',
 710+ 'openidpermission' => 'Zmólka pšawow OpenID',
 711+ 'openidpermissiontext' => 'OpenID, kótaryž sy pódał, njedowólujo pśizjawjenje pla toś togo serwera.',
 712+ 'openidcancel' => 'Pśeglědanje pśetergnjone',
 713+ 'openidcanceltext' => 'Pśeglědanje URL OpenID jo se pśetergnuło.',
 714+ 'openidfailure' => 'Pséglědanje jo se njeraźiło',
 715+ 'openidfailuretext' => 'Pśeglědanje URL OpenID je so njeraźiło. Zmólkowa powěźeńka: "$1"',
 716+ 'openidsuccess' => 'Pśeglědanje wuspěšne',
 717+ 'openidsuccesstext' => 'Pśeglědanje URL OpenID jo wuspěšnje było.',
 718+ 'openidusernameprefix' => 'Wužywaŕ OpenID',
 719+ 'openidserverlogininstructions' => 'Zapódaj swójo gronidło dołojce, aby se ako wužywaŕ $2 pla $3 pśizjawił (wužywarski bok $1).',
 720+ 'openidtrustinstructions' => 'Kontrolěruj, lěc coš daty z $1 źěliś.',
 721+ 'openidallowtrust' => '$1 dowóliś, toś tomu wužywarskemu kontoju dowěriś.',
 722+ 'openidnopolicy' => 'Sedło njejo pódało zasady priwatnosći.',
 723+ 'openidpolicy' => 'Kontrolěruj <a target="_new" href="$1">zasady priwatnosći</a> za dalšne informacije.',
 724+ 'openidoptional' => 'Opcionalny',
 725+ 'openidrequired' => 'Trěbny',
 726+ 'openidnickname' => 'Pśimě',
 727+ 'openidfullname' => 'Dopołne mě',
 728+ 'openidemail' => 'E-mailowa adresa:',
 729+ 'openidlanguage' => 'Rěc',
 730+ 'openidnotavailable' => 'Twójo preferěrowane pśimě ($1) se južo wužywa wót drugego wužywarja.',
 731+ 'openidnotprovided' => 'Twój server OpenID njejo dodał pśimě (pak, dokulaž njamóžo, pak, dokulaž njejsy jo jomu k wěsći dał).',
 732+ 'openidchooseinstructions' => 'Wše wužywarje trjebaju pśimě;
 733+móžoš jadno ze slědujucych opcijow wubraś.',
 734+ 'openidchoosefull' => 'Twójo dopołne mě ($1)',
 735+ 'openidchooseurl' => 'Mě z twójogo OpenID ($1)',
 736+ 'openidchooseauto' => 'Awtomatiski napórane mě ($1)',
 737+ 'openidchoosemanual' => 'Mě twójogo wuzwólenja:',
 738+ 'openidchooseexisting' => 'Eksistěrujuce konto w toś tom wikiju:',
 739+ 'openidchoosepassword' => 'gronidło:',
 740+ 'openidconvertinstructions' => 'Z toś tym formularom móžoš swójo wužywarske konto změniś, aby wužywało URL OpenID.',
 741+ 'openidconvertsuccess' => 'Wuspěšnje do OpenID konwertěrowany',
 742+ 'openidconvertsuccesstext' => 'Sy wuspěšnje konwertěrował twój OpenID do $1.',
 743+ 'openidconvertyourstext' => 'To jo južo twój OpenID.',
 744+ 'openidconvertothertext' => 'Toś ten OpenID słuša někomu drugemu.',
 745+ 'openidalreadyloggedin' => "'''Sy južo pśizjawjony, $1!'''
 746+
 747+Jolic pśichodnje coš OpenID wužywaś, aby se pśizjawił, móžoš [[Special:OpenIDConvert|swójo konto za wužiwanje OpenID konwertěrowaś]].",
 748+ 'openidnousername' => 'Žedne wužywarske mě pódane.',
 749+ 'openidbadusername' => 'Wopacne wužywarske mě pódane.',
 750+ 'openidautosubmit' => 'Toś ten bok wopśimujo formular, kótaryž se awtmatiski wótpósćeła, jolic JavaScript jo zmóžnjony. Jolic nic, klikni na tłocašk "Dalej".',
 751+ 'openidclientonlytext' => 'Njamóžoš konta z toś togo wikija ako OpneID na drugem sedle wužywaś.',
 752+ 'openidloginlabel' => 'URL OpenID',
 753+ 'openidlogininstructions' => '{{SITENAME}} pódpěra standard [http://openid.net/ OpenID] za jadnotliwe pśizjawjenja mjazy websedłami.
 754+OpenID śi zmóžnja se pla rozdźělnych websedłow pśizjawiś, bźez togo až musyš rozdźělne gronidła wužywaś.
 755+(Glědaj [http://en.wikipedia.org/wiki/OpenID nastawk OpenID we Wikipediji] za dalšne informacije.)
 756+
 757+Jolic maš južo konto na {{GRAMMAR:lokatiw|{{SITENAME}}}}, móžoš se ze swójim wužywarskim mjenim a gronidłom ako pśecej [[Special:UserLogin|pśizjawiś]].
 758+Aby wužywał OpenID w pśichoźe, móžoš [[Special:OpenIDConvert|swójo konto do OpenID konwertěrowaś]], za tym až sy se normalnje pśizjawił.
 759+
 760+Jo wjele [http://openid.net/get/ póbitowarjow OpenID] a snaź maš južo konto z OpenID pla drugeje słužby.',
 761+ 'openidupdateuserinfo' => 'Móje wósobinske informacije aktualizěrowaś',
 762+ 'openid-prefstext' => 'Nastajenja [http://openid.net/ OpenID]',
 763+ 'openid-pref-hide' => 'Schowaj swój <a href="http://openid.net/">OpenID</a> na swójom wužywarskem boku, jolic se pśizjawjaś z OpenID.',
 764+ 'openid-pref-update-userinfo-on-login' => 'Kuždy raz, gaž se pízjawjam, móje informacije z identity OpenID aktualizěrowaś',
 765+);
 766+
 767+/** Greek (Ελληνικά)
 768+ * @author Consta
 769+ */
 770+$messages['el'] = array(
 771+ 'openidlanguage' => 'Γλώσσα',
 772+ 'openidchoosemanual' => 'Ένα όνομα της επιλογής σας:',
 773+ 'openidchoosepassword' => 'κωδικός:',
 774+);
 775+
 776+/** Esperanto (Esperanto)
 777+ * @author Yekrats
 778+ */
 779+$messages['eo'] = array(
 780+ 'openid-desc' => 'Ensaluti la vikion kun [http://openid.net/ identigo OpenID], kaj ensaluti aliajn retejon uzantajn OpenID kun vikia uzula konto',
 781+ 'openidlogin' => 'Ensaluti kun OpenID',
 782+ 'openidfinish' => 'Elsaluti kun OpenID',
 783+ 'openidserver' => 'Servilo OpenID',
 784+ 'openidxrds' => 'dosiero Yadis',
 785+ 'openidconvert' => 'OpenID konvertilo',
 786+ 'openiderror' => 'Atestada eraro',
 787+ 'openiderrortext' => 'Eraro okazis dum atestado de la OpenID URL-o.',
 788+ 'openidconfigerror' => 'Konfigurada eraro de OpenID',
 789+ 'openidconfigerrortext' => 'La konfiguro de la OpenID-identigujo por ĉi tiu vikio estas nevalida.
 790+Bonvolu konsulti [[Special:ListUsers/sysop|administranton]].',
 791+ 'openidpermission' => 'OpenID rajt-eraro',
 792+ 'openidpermissiontext' => 'La OpenID kiun vi provizis ne estas permesita ensaluti ĉi tiun servilon.',
 793+ 'openidcancel' => 'Atestado nuliĝis',
 794+ 'openidcanceltext' => 'Atestado de la URL-o OpenID estis nuligita.',
 795+ 'openidfailure' => 'Atestado malsukcesis',
 796+ 'openidfailuretext' => 'Atestado de la URL-o OpenID malsukcesis. Erara mesaĝo: "$1"',
 797+ 'openidsuccess' => 'Atestado sukcesis.',
 798+ 'openidsuccesstext' => 'Atestado de la OpenID URL-o sukcesis.',
 799+ 'openidusernameprefix' => 'OpenID-Uzanto',
 800+ 'openidserverlogininstructions' => 'Enigu vian pasvorton suben por ensaluti al $3 kiel uzanto $2 (uzulpaĝo $1).',
 801+ 'openidtrustinstructions' => 'Kontroli se vi volas kunpermesigi datenojn kun $1.',
 802+ 'openidallowtrust' => 'Rajtigi $1 fidi ĉi tiun uzulan konton.',
 803+ 'openidnopolicy' => 'Retejo ne specifigis regularon pri privateco.',
 804+ 'openidpolicy' => 'Kontroli la <a target="_new" href="$1">regularon pri privateco</a> pri plua informo.',
 805+ 'openidoptional' => 'Nedeviga',
 806+ 'openidrequired' => 'Deviga',
 807+ 'openidnickname' => 'Kaŝnomo',
 808+ 'openidfullname' => 'Plena nomo',
 809+ 'openidemail' => 'Retadreso',
 810+ 'openidlanguage' => 'Lingvo',
 811+ 'openidnotavailable' => 'Via preferata kromnomo ($1) jam estas uzata de alia uzanto.',
 812+ 'openidnotprovided' => 'Via OpenID-a servilo ne provizis kromnomo (ĉar aŭ ĝi ne eblis, aŭ tial vi malpermesigis ĝin).',
 813+ 'openidchooseinstructions' => 'Ĉiuj uzantoj bezonas kromnomo;
 814+vi povas selekti el unu la jenaj opcioj.',
 815+ 'openidchoosefull' => 'Via plena nomo ($1)',
 816+ 'openidchooseurl' => 'Nomo eltenita de via OpenID ($1)',
 817+ 'openidchooseauto' => 'Automate generita nomo ($1)',
 818+ 'openidchoosemanual' => 'Nomo de via elekto:',
 819+ 'openidchooseexisting' => 'Ekzistanta konto en ĉi tiu vikio:',
 820+ 'openidchoosepassword' => 'pasvorto:',
 821+ 'openidconvertinstructions' => 'Ĉi tiu paĝo permesas al vi ŝanĝi vian uzulan konton por uzi URL-on OpenID.',
 822+ 'openidconvertsuccess' => 'Sukcese konvertis al OpenID',
 823+ 'openidconvertsuccesstext' => 'Vi sukcese konvertis vian identigon OpenID al $1.',
 824+ 'openidconvertyourstext' => 'Tio jam estas via OpenID.',
 825+ 'openidconvertothertext' => 'Tio estas OpenID de alia persono.',
 826+ 'openidalreadyloggedin' => "'''Vi jam ensalutis, $1!'''
 827+
 828+Se vi volas utiligi OpenID por ensaluti estontece, vi povas [[Special:OpenIDConvert|konverti vian konton por uzi OpenID]].",
 829+ 'openidnousername' => 'Neniu salutnomo estis donita.',
 830+ 'openidbadusername' => 'Fuŝa salutnomo donita.',
 831+ 'openidautosubmit' => 'Ĉi tiu paĝo inkluzivas kamparo kiu estos aŭtomate enigita se vi havas JavaScript-on ŝaltan.
 832+Se ne, klaku la butonon \\"Daŭri\\".',
 833+ 'openidclientonlytext' => 'Vi ne povas uzi kontojn de ĉi tiu vikio kiel OpenID-ojn en alia retejo.',
 834+ 'openidloginlabel' => 'URL-o OpenID',
 835+ 'openidupdateuserinfo' => 'Ĝisdatigi mian personan informon',
 836+ 'openid-prefstext' => '[http://openid.net/ OpenID]-agordoj',
 837+ 'openid-pref-hide' => 'Kaŝi viajn identigon <a href="http://openid.net/">OpenID</a> en via uzula paĝo, se vi ensalutas kun OpenID.',
 838+ 'openid-pref-update-userinfo-on-login' => 'Ĝisdatigi mian informon de OpenID-konto ĉiam mi ensalutos',
 839+);
 840+
 841+/** Spanish (Español)
 842+ * @author Crazymadlover
 843+ * @author Drini
 844+ * @author Imre
 845+ * @author Sanbec
 846+ */
 847+$messages['es'] = array(
 848+ 'openid-desc' => 'Ingresa a la wiki con un [http://openid.net OpenID] e ingresa a los otros sitios que aceptan OpenID con una cuenta de usuario wiki.',
 849+ 'openidlogin' => 'Conectarse con OpenID',
 850+ 'openidfinish' => 'Termina el ingreso OpenID',
 851+ 'openidserver' => 'servidor OpenID',
 852+ 'openidxrds' => 'Archivo Yadis',
 853+ 'openidconvert' => 'Convertidor OpenID',
 854+ 'openiderror' => 'Error de verificación',
 855+ 'openiderrortext' => 'Un error ocurrió durante la verificación del URL OpenID.',
 856+ 'openidconfigerror' => 'Error de configuración OpenID',
 857+ 'openidconfigerrortext' => 'La configuración de almacenamiento OpenID de esta wiki es inválido.
 858+Por favor consulte a un [[Special:ListUsers/sysop|administrador]].',
 859+ 'openidpermission' => 'Error de permiso OpenID',
 860+ 'openidpermissiontext' => 'El OpenID que indicaste no tiene permiso de ingresar a este servidor.',
 861+ 'openidcancel' => 'Verificación cancelada',
 862+ 'openidcanceltext' => 'Verificación del URL OpenID fue cancelada.',
 863+ 'openidfailure' => 'Verificación fracasada',
 864+ 'openidfailuretext' => 'Verificación del OpenID fracasó. Mensaje de error: "$1".',
 865+ 'openidsuccess' => 'Verificación fue un éxito',
 866+ 'openidsuccesstext' => 'Verificación del URL OpenID fue un éxito.',
 867+ 'openidusernameprefix' => 'OpenIDUser',
 868+ 'openidserverlogininstructions' => 'Ingresa tu password debajo para ingresar a $3 como el usuario $2 (página de usuario $1)',
 869+ 'openidtrustinstructions' => 'Verifique si usted desea compartir información con $1.',
 870+ 'openidallowtrust' => 'Permitir a $1 confiar en esta cuenta de usuario.',
 871+ 'openidnopolicy' => 'El sitio no ha especificado una política de privacidad.',
 872+ 'openidpolicy' => 'Verifique la <a target="_new" href="$1">política de privacidad</a> para mayor información.',
 873+ 'openidoptional' => 'Opcional',
 874+ 'openidrequired' => 'Necesario',
 875+ 'openidnickname' => 'Sobrenombre',
 876+ 'openidfullname' => 'Nombre completo',
 877+ 'openidemail' => 'Dirección de correo electrónico',
 878+ 'openidlanguage' => 'Idioma',
 879+ 'openidnotavailable' => 'Tu sobrenombre preferido ($1) se encuentra ocupado por otro usuario.',
 880+ 'openidnotprovided' => 'Tu servidor de OpenID no proporcionó un sobrenombre (porque no puede o porque indicaste que no lo hiciera).',
 881+ 'openidchooseinstructions' => 'Todos los usuarios necesitan un sobrenombre;
 882+puedes escoger uno de las opciones debajo.',
 883+ 'openidchoosefull' => 'Su nombre completo ($1)',
 884+ 'openidchooseurl' => 'Un nombre escogido a partir de tu OpenID ($1)',
 885+ 'openidchooseauto' => 'Un nombre autogenerado ($1)',
 886+ 'openidchoosemanual' => 'Un nombre de su preferencia:',
 887+ 'openidchooseexisting' => 'Una cuenta existente en este wiki:',
 888+ 'openidchoosepassword' => 'contraseña:',
 889+ 'openidconvertinstructions' => 'Este formulario permite cambiar tu cuenta de usuario para que use una URL de OpenID.',
 890+ 'openidconvertsuccess' => 'Convertido exitosamente a OpenID',
 891+ 'openidconvertsuccesstext' => 'Usted ha convertido exitosamente su OpenID a $1.',
 892+ 'openidconvertyourstext' => 'Esto ya es su OpenID.',
 893+ 'openidconvertothertext' => 'Esto es el OpenID de alguien más.',
 894+ 'openidalreadyloggedin' => "'''¡Ya has ingresado al sistema, $1!'''
 895+
 896+Si quieres usar OpenID para ingresar en el futuro, puedes [[Special:OpenIDConvert|convertir tu cuenta a OpenID]].",
 897+ 'openidnousername' => 'Ningún nombre de usuario especificado.',
 898+ 'openidbadusername' => 'Nombre de usuario mal especificado.',
 899+ 'openidautosubmit' => 'Esta página incluye un formulario que será automáticamnte enviado si dispones de JavaScript.
 900+De lo contrario, usa el botón \\"Continuar\\".',
 901+ 'openidclientonlytext' => 'No puede usar cuentas de este wiki como OpenID en otro sitio.',
 902+ 'openidloginlabel' => 'URL OpenID',
 903+ 'openidlogininstructions' => '{{SITENAME}} acepta el estándar [http://openid.net/ OpenID] para ingreso único entre múltiples sitios web.
 904+OpenID te permite ingresar en varios sitios web sin necesidad de usar un password diferente para cada uno.
 905+(Ver [http://es.wikipedia.org/wiki/OpenID el artículo en Wikipedia] para más información)
 906+
 907+Si ya dispones de una cuenta en {{SITENAME}} puedes [[Special:UserLogin|ingresar]] con tu usuario y password usuales. Para usar OpenID en el futuro, puedes [[Special:OpenIDConvert|convertir tu cuenta a OpenID]] después de haber ingresado.
 908+
 909+Hay muchos [[http://openid.net/get proveedores de OpenID]] y quizás ya dispongas de una cuenta OpenID en otro servicio.',
 910+ 'openidupdateuserinfo' => 'Actualizar mi información personal',
 911+ 'openid-prefstext' => 'Preferencias de [http://openid.net/ OpenID]',
 912+ 'openid-pref-hide' => 'Ocultar su <a href="http://openid.net/">OpenID</a> en su página de usuario, si usted ingresa con OpenID.',
 913+ 'openid-pref-update-userinfo-on-login' => 'Actualizar mi información desde mi perfil OpenID cada vez que ingreso.',
 914+);
 915+
 916+/** Estonian (Eesti)
 917+ * @author Avjoska
 918+ */
 919+$messages['et'] = array(
 920+ 'openidoptional' => 'Valikuline',
 921+ 'openidrequired' => 'Nõutav',
 922+ 'openidnickname' => 'Hüüdnimi',
 923+ 'openidfullname' => 'Täisnimi',
 924+ 'openidemail' => 'E-posti aadress',
 925+ 'openidlanguage' => 'Keel',
 926+ 'openidnotavailable' => 'Sinu eelistatud hüüdnimi ($1) on juba kasutuses.',
 927+ 'openidchoosefull' => 'Sinu täisnimi ($1)',
 928+ 'openidchoosemanual' => 'Sinu valitud nimi:',
 929+ 'openidchooseexisting' => 'Olemasolev konto siin vikis:',
 930+ 'openidchoosepassword' => 'parool:',
 931+ 'openidconvertyourstext' => 'See on juba Sinu avatud ID.',
 932+ 'openidconvertothertext' => 'See on kellegi teise avatud ID.',
 933+ 'openidalreadyloggedin' => "'''Sa oled juba sisse logitud, $1!'''
 934+
 935+Kui soovid kasutada avatud ID-d tulevikus sisselogimiseks, võid [[Special:OpenIDConvert|konvertida oma konto, kasutamaks avatud ID-d]].",
 936+);
 937+
 938+/** Basque (Euskara)
 939+ * @author Theklan
 940+ */
 941+$messages['eu'] = array(
 942+ 'openidoptional' => 'Aukerazkoa',
 943+ 'openidrequired' => 'Nahitaezkoa',
 944+ 'openidnickname' => 'Ezizena',
 945+ 'openidfullname' => 'Izen osoa',
 946+ 'openidemail' => 'E-posta helbidea',
 947+ 'openidlanguage' => 'Hizkuntza',
 948+ 'openidnotavailable' => 'Nahi duzun ezizena ($1) beste lankide batek erabiltzen du jada.',
 949+);
 950+
 951+/** Finnish (Suomi)
 952+ * @author Crt
 953+ * @author Mobe
 954+ * @author Nike
 955+ * @author Silvonen
 956+ * @author Str4nd
 957+ * @author Vililikku
 958+ */
 959+$messages['fi'] = array(
 960+ 'openid-desc' => 'Kirjaudu wikiin [http://openid.net/ OpenID:llä] ja muille OpenID-tuetuille sivustoille wiki-käyttäjätilillä',
 961+ 'openidlogin' => 'Kirjaudu OpenID:llä',
 962+ 'openidfinish' => 'Lopeta OpenID-kirjautuminen',
 963+ 'openidserver' => 'OpenID-palvelin',
 964+ 'openidxrds' => 'Yadis-tiedosto',
 965+ 'openidconvert' => 'OpenID-muunnin',
 966+ 'openiderror' => 'Todennusvirhe',
 967+ 'openiderrortext' => 'Tapahtui virhe OpenID-osoitteen todentamisen aikana.',
 968+ 'openidconfigerror' => 'OpenID-asetusvirhe',
 969+ 'openidconfigerrortext' => 'OpenID-varaston määritykset ovat epäkelvolliset tässä wikissä.
 970+Ota yhteyttä [[Special:ListUsers/sysop|ylläpitäjään]].',
 971+ 'openidpermission' => 'OpenID-oikeusvirhe',
 972+ 'openidpermissiontext' => 'Tarjoamallasi OpenID:llä ei ole luvallista kirjautua tälle palvelimelle.',
 973+ 'openidcancel' => 'Todennus peruutettiin',
 974+ 'openidcanceltext' => 'OpenID-osoitteen todentaminen peruutettiin.',
 975+ 'openidfailure' => 'Todennus epäonnistui',
 976+ 'openidfailuretext' => 'OpenID-osoitteen todentaminen epäonnistui. Virheilmoitus: ”$1”',
 977+ 'openidsuccess' => 'Todennus onnistui',
 978+ 'openidsuccesstext' => 'OpenID-osoitteen todennus onnistui.',
 979+ 'openidusernameprefix' => 'OpenID-käyttäjä',
 980+ 'openidserverlogininstructions' => 'Kirjaudu sisään sivustolle $3 käyttäjänä $2 (käyttäjäsivu $1) syöttämällä salasana alle.',
 981+ 'openidtrustinstructions' => 'Tarkista, haluatko jakaa tietoja kohteen $1 kanssa.',
 982+ 'openidnopolicy' => 'Sivusto ei ole määritellyt yksityisyyskäytäntöä.',
 983+ 'openidpolicy' => 'Lisää tietoa on <a target="_new" href="$1">yksityisyyskäytännöissä</a>.',
 984+ 'openidoptional' => 'Valinnainen',
 985+ 'openidrequired' => 'Vaadittu',
 986+ 'openidnickname' => 'Nimimerkki',
 987+ 'openidfullname' => 'Koko nimi',
 988+ 'openidemail' => 'Sähköpostiosoite',
 989+ 'openidlanguage' => 'Kieli',
 990+ 'openidnotavailable' => 'Toinen käyttäjä käyttää jo haluamaasi nimimerkkiä ($1).',
 991+ 'openidnotprovided' => 'OpenID-palvelimesi ei tarjoa nimimerkkiä (joko se ei osaa, tai olet kieltänyt sen).',
 992+ 'openidchooseinstructions' => 'Kaikki käyttäjät tarvitsevat nimimerkin.
 993+Voit valita omasi alla olevista vaihtoehdoista.',
 994+ 'openidchoosefull' => 'Koko nimesi ($1)',
 995+ 'openidchooseurl' => 'OpenID:stäsi poimittu nimi ($1)',
 996+ 'openidchooseauto' => 'Automaattisesti luotu nimi ($1)',
 997+ 'openidchoosemanual' => 'Omavalintainen nimi',
 998+ 'openidchooseexisting' => 'Olemassa oleva tunnus tässä wikissä',
 999+ 'openidchoosepassword' => 'salasana:',
 1000+ 'openidconvertinstructions' => 'Tällä lomakkeella voit muuttaa käyttäjätilisi käyttämään OpenID-osoitetta.',
 1001+ 'openidconvertsuccess' => 'Muutettiin onnistuneesti OpenID:hen.',
 1002+ 'openidconvertyourstext' => 'Tämä on jo OpenID:si.',
 1003+ 'openidconvertothertext' => 'Tämä on jonkun muun OpenID.',
 1004+ 'openidalreadyloggedin' => "'''Olet jo kirjautuneena sisään, $1!'''
 1005+
 1006+Jos haluat käyttää OpenID:tä kirjautumiseen jatkossa, voit [[Special:OpenIDConvert|muuntaa tunnuksesi käyttämään OpenID:tä]].",
 1007+ 'openidnousername' => 'Käyttäjätunnus puuttuu.',
 1008+ 'openidbadusername' => 'Käyttäjätunnus on virheellinen.',
 1009+ 'openidautosubmit' => 'Tämä sivu sisältää lomakkeen, joka lähettää itse itsensä, jos JavaScript käytössä.
 1010+Muussa tapauksessa valitse <code>Jatka</code>.',
 1011+ 'openidclientonlytext' => 'Et voi käyttää tämän wikin käyttäjätunnuksia OpenID-tunnuksina muilla sivustoilla.',
 1012+ 'openidloginlabel' => 'OpenID-URL',
 1013+ 'openid-pref-hide' => 'Piilota <a href="http://openid.net/">OpenID:si</a> käyttäjäsivultani, jos kirjaudun sisään OpenID-tunnuksilla.',
 1014+);
 1015+
 1016+/** French (Français)
 1017+ * @author Crochet.david
 1018+ * @author Grondin
 1019+ * @author IAlex
 1020+ * @author McDutchie
 1021+ * @author Zetud
 1022+ */
 1023+$messages['fr'] = array(
 1024+ 'openid-desc' => "Se connecter au wiki avec [http://openid.net/ OpenID] et se connecter à d'autres sites internet OpenID avec un compte utilisateur du wiki.",
 1025+ 'openidlogin' => 'Se connecter avec OpenID',
 1026+ 'openidfinish' => 'Finir la connection OpenID',
 1027+ 'openidserver' => 'Serveur OpenID',
 1028+ 'openidxrds' => 'Fichier Yadis',
 1029+ 'openidconvert' => 'Convertisseur OpenID',
 1030+ 'openiderror' => 'Erreur de vérification',
 1031+ 'openiderrortext' => "Une erreur est intervenue pendant la vérification de l'adresse OpenID.",
 1032+ 'openidconfigerror' => 'Erreur de configuration de OpenID',
 1033+ 'openidconfigerrortext' => 'Le stockage de la configuration OpenID pour ce wiki est incorrecte.
 1034+Veuillez vous mettre en rapport avec un [[Special:ListUsers/sysop|administrateur]] de ce site.',
 1035+ 'openidpermission' => 'Erreur de permission OpenID',
 1036+ 'openidpermissiontext' => 'L’OpenID que vous avez fournie n’est pas autorisée à se connecter sur ce serveur.',
 1037+ 'openidcancel' => 'Vérification annulée',
 1038+ 'openidcanceltext' => 'La vérification de l’adresse OpenID a été annulée.',
 1039+ 'openidfailure' => 'Échec de la vérification',
 1040+ 'openidfailuretext' => 'La vérification de l’adresse OpenID a échouée. Message d’erreur : « $1 »',
 1041+ 'openidsuccess' => 'Vérification réussie',
 1042+ 'openidsuccesstext' => 'Vérification de l’adresse OpenID réussie.',
 1043+ 'openidusernameprefix' => 'Utilisateur OpenID',
 1044+ 'openidserverlogininstructions' => "Entrez votre mot de passe ci-dessous pour vous connecter sur $3 comme utilisateur '''$2''' (page utilisateur $1).",
 1045+ 'openidtrustinstructions' => 'Cochez si vous désirez partager les données avec $1.',
 1046+ 'openidallowtrust' => 'Autorise $1 à faire confiance à ce compte utilisateur.',
 1047+ 'openidnopolicy' => 'Le site n’a pas indiqué une politique des données personnelles.',
 1048+ 'openidpolicy' => 'Vérifier la <a target="_new" href="$1">Politique des données personnelles</a> pour plus d’information.',
 1049+ 'openidoptional' => 'Facultatif',
 1050+ 'openidrequired' => 'Exigé',
 1051+ 'openidnickname' => 'Surnom',
 1052+ 'openidfullname' => 'Nom en entier',
 1053+ 'openidemail' => 'Adresse courriel',
 1054+ 'openidlanguage' => 'Langue',
 1055+ 'openidnotavailable' => 'Votre surnom préféré ($1) est déjà utilisé par un autre utilisateur.',
 1056+ 'openidnotprovided' => "Votre serveur OpenID n'a pas pu fournir un surnom (soit il ne le peut pas, soit vous lui avez demandé de ne pas le faire).",
 1057+ 'openidchooseinstructions' => "Tous les utilisateurs ont besoin d'un surnom ; vous pouvez en choisir un à partir du choix ci-dessous.",
 1058+ 'openidchoosefull' => 'Votre nom entier ($1)',
 1059+ 'openidchooseurl' => 'Un nom a été choisi depuis votre OpenID ($1)',
 1060+ 'openidchooseauto' => 'Un nom créé automatiquement ($1)',
 1061+ 'openidchoosemanual' => 'Un nom de votre choix :',
 1062+ 'openidchooseexisting' => 'Un compte existant sur ce wiki :',
 1063+ 'openidchoosepassword' => 'Mot de passe :',
 1064+ 'openidconvertinstructions' => 'Ce formulaire vous laisse changer votre compte utilisateur pour utiliser une adresse OpenID.',
 1065+ 'openidconvertsuccess' => 'Converti avec succès vers OpenID',
 1066+ 'openidconvertsuccesstext' => 'Vous avez converti avec succès votre OpenID vers $1.',
 1067+ 'openidconvertyourstext' => 'C’est déjà votre OpenID.',
 1068+ 'openidconvertothertext' => "Ceci est l'OpenID de quelqu'un d'autre.",
 1069+ 'openidalreadyloggedin' => "'''Vous êtes déjà connecté{{GENDER:||e|(e)}}, $1 !'''
 1070+
 1071+Vous vous désirez utiliser votre OpenID pour vous connecter ultérieurement, vous pouvez [[Special:OpenIDConvert|convertir votre compte pour utiliser OpenID]].",
 1072+ 'openidnousername' => 'Aucun nom d’utilisateur n’a été indiqué.',
 1073+ 'openidbadusername' => 'Un mauvais nom d’utilisatteur a été indiqué.',
 1074+ 'openidautosubmit' => 'Cette page comprend un formulaire qui pourrait être envoyé automatiquement si vous avez activé JavaScript.
 1075+Si tel n’était pas le cas, essayez le bouton « Continuer ».',
 1076+ 'openidclientonlytext' => 'Vous ne pouvez utiliser des comptes depuis ce wiki en tant qu’OpenID sur d’autres sites.',
 1077+ 'openidloginlabel' => 'Adresse OpenID',
 1078+ 'openidlogininstructions' => "{{SITENAME}} supporte le standard [http://openid.net/ OpenID] pour une seule signature entre des sites Internet.
 1079+OpenID vous permet de vous connecter sur plusieurs sites différents sans à avoir à utiliser un mot de passe différent pour chacun d’entre eux.
 1080+(Voyez [http://fr.wikipedia.org/wiki/OpenID l'article de Wikipédia] pour plus d'informations.)
 1081+
 1082+Si vous avez déjà un compte sur {{SITENAME}}, vous pouvez vous [[Special:UserLogin|connecter]] avec votre nom d'utilisateur et son mot de pas comme d’habitude. Pour utiliser OpenID, à l’avenir, vous pouvez [[Special:OpenIDConvert|convertir votre compte en OpenID]] après que vous vous soyez connecté normallement.
 1083+
 1084+Il existe plusieurs [http://openid.net/get/ fournisseur d'OpenID], et vous pouvez déjà obtenir un compte OpenID activé sur un autre service.",
 1085+ 'openidupdateuserinfo' => 'Mettre à jour mes données personnelles',
 1086+ 'openid-prefstext' => 'Préférences de [http://openid.net/ OpenID]',
 1087+ 'openid-pref-hide' => 'Cache votre <a href="http://openid.net/">OpenID</a> sur votre page utilisateur, si vous vous connectez avec OpenID.',
 1088+ 'openid-pref-update-userinfo-on-login' => 'Mettre à jour mes données personnelles depuis OpenID à chaque fois que je me connecte',
 1089+);
 1090+
 1091+/** Irish (Gaeilge)
 1092+ * @author Alison
 1093+ */
 1094+$messages['ga'] = array(
 1095+ 'openidpermission' => 'Earráid ceadúnais OpenID',
 1096+);
 1097+
 1098+/** Galician (Galego)
 1099+ * @author Toliño
 1100+ */
 1101+$messages['gl'] = array(
 1102+ 'openid-desc' => 'Acceder ao sistema do wiki cun [http://openid.net/ OpenID] e acceder a outras páxinas web OpenID cunha conta de usuario dun wiki',
 1103+ 'openidlogin' => 'Acceder ao sistema co OpenID',
 1104+ 'openidfinish' => 'Saír do sistema OpenID',
 1105+ 'openidserver' => 'Servidor do OpenID',
 1106+ 'openidxrds' => 'Ficheiro Yadis',
 1107+ 'openidconvert' => 'Transformador OpenID',
 1108+ 'openiderror' => 'Erro de verificación',
 1109+ 'openiderrortext' => 'Ocorreu un erro durante a verificación do URL do OpenID.',
 1110+ 'openidconfigerror' => 'Erro na configuración do OpenID',
 1111+ 'openidconfigerrortext' => 'A configuración do almacenamento no OpenID deste wiki é inválido.
 1112+Por favor, consúlteo cun [[Special:ListUsers/sysop|administrador]] do sitio.',
 1113+ 'openidpermission' => 'Erro de permisos OpenID',
 1114+ 'openidpermissiontext' => 'O OpenID que proporcionou non ten permitido o acceso a este servidor.',
 1115+ 'openidcancel' => 'A verificación foi cancelada',
 1116+ 'openidcanceltext' => 'A verificación do enderezo URL do OpenID foi cancelada.',
 1117+ 'openidfailure' => 'Fallou a verificación',
 1118+ 'openidfailuretext' => 'Fallou a verificación da dirección URL do OpenID. Mensaxe de erro: "$1"',
 1119+ 'openidsuccess' => 'A verificación foi un éxito',
 1120+ 'openidsuccesstext' => 'A verificación da dirección URL do OpenID foi un éxito.',
 1121+ 'openidusernameprefix' => 'Usuario do OpenID',
 1122+ 'openidserverlogininstructions' => 'Insira o seu contrasinal embaixo para acceder a $3 como o usuario $2 (páxina de usuario $1).',
 1123+ 'openidtrustinstructions' => 'Comprobe se quere compartir datos con $1.',
 1124+ 'openidallowtrust' => 'Permitir que $1 revise esta conta de usuario.',
 1125+ 'openidnopolicy' => 'O sitio non especificou unha política de privacidade.',
 1126+ 'openidpolicy' => 'Comprobe a <a target="_new" href="$1">política de privacidade</a> para máis información.',
 1127+ 'openidoptional' => 'Opcional',
 1128+ 'openidrequired' => 'Necesario',
 1129+ 'openidnickname' => 'Alcume',
 1130+ 'openidfullname' => 'Nome completo',
 1131+ 'openidemail' => 'Enderezo de correo electrónico',
 1132+ 'openidlanguage' => 'Lingua',
 1133+ 'openidnotavailable' => 'O seu alcume preferido ($1) xa está sendo usado por outro usuario.',
 1134+ 'openidnotprovided' => 'O servidor do seu OpenID non proporcionou un alcume (porque non pode ou porque vostede lle dixo que non o fixera).',
 1135+ 'openidchooseinstructions' => 'Todos os usuarios precisan un alcume; pode escoller un de entre as opcións de embaixo.',
 1136+ 'openidchoosefull' => 'O seu nome completo ($1)',
 1137+ 'openidchooseurl' => 'Un nome tomado do seu OpenID ($1)',
 1138+ 'openidchooseauto' => 'Un nome autoxerado ($1)',
 1139+ 'openidchoosemanual' => 'Un nome da súa escolla:',
 1140+ 'openidchooseexisting' => 'Unha conta existente neste wiki:',
 1141+ 'openidchoosepassword' => 'contrasinal:',
 1142+ 'openidconvertinstructions' => 'Este formulario permítelle cambiar a súa conta de usuario para usar un enderezo URL de OpenID.',
 1143+ 'openidconvertsuccess' => 'Convertiuse con éxito a OpenID',
 1144+ 'openidconvertsuccesstext' => 'Converteu con éxito o seu OpenID a $1.',
 1145+ 'openidconvertyourstext' => 'Ese xa é o seu OpenID.',
 1146+ 'openidconvertothertext' => 'Ese é o OpenID de alguén.',
 1147+ 'openidalreadyloggedin' => "'''Está dentro do sistema, $1!'''
 1148+
 1149+Se quere usar OpenID para acceder ao sistema no futuro, pode [[Special:OpenIDConvert|converter a súa conta para usar OpenID]].",
 1150+ 'openidnousername' => 'Non foi especificado ningún nome de usuario.',
 1151+ 'openidbadusername' => 'O nome de usuario especificado é incorrecto.',
 1152+ 'openidautosubmit' => 'Esta páxina inclúe un formulario que debería ser enviado automaticamente se ten o JavaScript permitido.
 1153+Se non é así, probe a premer no botón \\"Continuar\\".',
 1154+ 'openidclientonlytext' => 'Non pode usar contas deste wiki como OpenIDs noutro sitio.',
 1155+ 'openidloginlabel' => 'Dirección URL do OpenID',
 1156+ 'openidlogininstructions' => '{{SITENAME}} soporta o [http://openid.net/ OpenID] estándar para unha soa sinatura entre os sitios web.
 1157+OpenID permítelle rexistrarse en diferentes sitios web sen usar un contrasinal diferente para cada un.
 1158+(Consulte o [http://en.wikipedia.org/wiki/OpenID artigo sobre o OpenID na Wikipedia en inglés] para obter máis información.)
 1159+
 1160+Se xa ten unha conta en {{SITENAME}}, pode [[Special:UserLogin|acceder ao sistema]] co seu nome de usuario e contrasinal como o fai habitualmente.
 1161+Para usar o OpenID no futuro, pode [[Special:OpenIDConvert|converter a súa conta en OpenID]] tras ter accedido ao sistema como fai normalmente.
 1162+
 1163+Hai moitos [http://openid.net/get/ proveedores públicos de OpenID] e xa pode ter unha conta co OpenID activado noutro servizo.',
 1164+ 'openidupdateuserinfo' => 'Actualizar a miña información persoal',
 1165+ 'openid-prefstext' => 'Preferencias do [http://openid.net/ OpenID]',
 1166+ 'openid-pref-hide' => 'Agoche o enderezo URL do seu OpenID na súa páxina de usuario, se accede ao sistema con OpenID.',
 1167+ 'openid-pref-update-userinfo-on-login' => 'Actualizar a miña información persoal do OpenID cada vez que acceda ao sistema',
 1168+);
 1169+
 1170+/** Ancient Greek (Ἀρχαία ἑλληνικὴ)
 1171+ * @author Crazymadlover
 1172+ * @author Omnipaedista
 1173+ */
 1174+$messages['grc'] = array(
 1175+ 'openidoptional' => 'Προαιρετικόν',
 1176+ 'openidnickname' => 'Ψευδώνυμον',
 1177+ 'openidemail' => 'Ἡλεκτρονικὴ διεύθυνσις',
 1178+ 'openidlanguage' => 'Γλῶττα',
 1179+ 'openidchoosepassword' => 'σύνθημα:',
 1180+);
 1181+
 1182+/** Swiss German (Alemannisch)
 1183+ * @author Als-Holder
 1184+ */
 1185+$messages['gsw'] = array(
 1186+ 'openid-desc' => 'Mit eme Wiki-Benutzerkonto in däm Wiki mit ere [http://openid.net/ OpenID] aamälde un bi andere Netzsyte aamälde, wu OpenID unterstitze',
 1187+ 'openidlogin' => 'Aamälde mit OpenID',
 1188+ 'openidfinish' => 'OpenID-Aamäldig abschliesse',
 1189+ 'openidserver' => 'OpenID-Server',
 1190+ 'openidxrds' => 'Yadis-Datei',
 1191+ 'openidconvert' => 'OpenID-Konverter',
 1192+ 'openiderror' => 'Iberpriefigsfähler',
 1193+ 'openiderrortext' => 'S het e Fähle gee derwyylscht d OpenID-URL iberprieft woren isch.',
 1194+ 'openidconfigerror' => 'OpenID-Konfigurationsfähler',
 1195+ 'openidconfigerrortext' => 'D OpenID-Spycherkonfiguarion fir des Wiki isch fählerhaft.
 1196+Bitte gib eme [[Special:ListUsers/sysop|Ammann]] e Nochricht.',
 1197+ 'openidpermission' => 'OpenID-Berächtigungsfähler',
 1198+ 'openidpermissiontext' => 'D OpenID, wu Du aagee hesch, berächtigt nit zue dr Aamäldig bi däm Server.',
 1199+ 'openidcancel' => 'Iberpriefig abbroche',
 1200+ 'openidcanceltext' => 'D Iberpriefig vu dr OpenID-URL isch abbroche wore.',
 1201+ 'openidfailure' => 'Iberpriefigsfähler',
 1202+ 'openidfailuretext' => 'D Iberpriefig vu dr OpenID-URL isch fählgschlaa. Fählermäldig: „$1“',
 1203+ 'openidsuccess' => 'Erfolgryych iberprieft',
 1204+ 'openidsuccesstext' => 'D Iberpriefig vu dr OpenID-URL isch erfolgryych gsi.',
 1205+ 'openidusernameprefix' => 'OpenID-Benutzer',
 1206+ 'openidserverlogininstructions' => 'Gib Dyy Passwort unten yy go Di as Benutzer $2 an $3 aazmälde (Benutzersyte $1).',
 1207+ 'openidtrustinstructions' => 'Prief, eb Du Date mit $1 wit teile.',
 1208+ 'openidallowtrust' => 'Erlaub $1, däm Benutzerkonto z vertröue.',
 1209+ 'openidnopolicy' => 'D Syte het kei Dateschutzrichtlinie aagee.',
 1210+ 'openidpolicy' => 'Prief d <a target="_new" href="$1">Dateschutzrichtlinie</a> fir wyteri Informatione.',
 1211+ 'openidoptional' => 'Optional',
 1212+ 'openidrequired' => 'Pflicht',
 1213+ 'openidnickname' => 'Benutzername',
 1214+ 'openidfullname' => 'Vollständiger Name',
 1215+ 'openidemail' => 'E-Mail-Adräss:',
 1216+ 'openidlanguage' => 'Sproch',
 1217+ 'openidnotavailable' => 'Dyy bevorzugte Benutzername ($1) wird scho vun eme andere Benutzer verwändet.',
 1218+ 'openidnotprovided' => 'Dyy OpenID-Server unterstitzt kei Nicknäme (wel er s nit cha oder wel Du s ihm nit erlaubt hesch).',
 1219+ 'openidchooseinstructions' => 'Alli Benutzer bruuche ne Benutzername;
 1220+Du chasch us däre Lischt ein uussueche.',
 1221+ 'openidchoosefull' => 'Dyy vollständige Name ($1)',
 1222+ 'openidchooseurl' => 'E Name us Dyynere OpenID ($1)',
 1223+ 'openidchooseauto' => 'E automatisch aagleite Name ($1)',
 1224+ 'openidchoosemanual' => 'E vu Dir gwehlte Name:',
 1225+ 'openidchooseexisting' => 'E Benutzerkonto, wu s in däm Wiki git:',
 1226+ 'openidchoosepassword' => 'Passwort:',
 1227+ 'openidconvertinstructions' => 'Mit däm Formular chasch Dyy Benutzerkonto frejgee fir d Benutzig vun ere OpenID-URL.',
 1228+ 'openidconvertsuccess' => 'Erfolgryych no OpenID konvertiert',
 1229+ 'openidconvertsuccesstext' => 'Du hesch d Konvertierig vu Dyynere OpenID no $1 erfolgryych durgfiert.',
 1230+ 'openidconvertyourstext' => 'Des isch scho Dyyni OpenID.',
 1231+ 'openidconvertothertext' => 'Des isch d OpenID vu eber anderem.',
 1232+ 'openidalreadyloggedin' => "'''Du bisch scho aagmäldet, $1!'''
 1233+
 1234+Wänn Du OpenID fir s Aamälde in Zuechumft wit nutze, no chasch [[Special:OpenIDConvert|Dyy Benutzerkonto no OpenID konvertiere]].",
 1235+ 'openidnousername' => 'Kei Benutzername aagee.',
 1236+ 'openidbadusername' => 'Falsche Benutzername aagee.',
 1237+ 'openidautosubmit' => 'Uf däre Syte het s e Formular, wu automatisch ibertrait wird, wänn JavaSkript aktiviert isch. Wänn nit, no druck bitte uf „Wyter“.',
 1238+ 'openidclientonlytext' => 'Du chasch kei Benutzerkonte us däm Wiki as OpenID fir anderi Syte verwände.',
 1239+ 'openidloginlabel' => 'OpenID-URL',
 1240+ 'openidlogininstructions' => '{{SITENAME}} unterstitzt dr [http://openid.net/ OpenID]-Standard zum sich fir mehreri Websites aazmälde.
 1241+OpenID mäldet Di bi vyyle unterschidlige Netzsyte aa, ohni ass Du fir jedi e ander Passwort muesch verwände.
 1242+(Meh Informatione bietet dr [http://de.wikipedia.org/wiki/OpenID dytsch Wikipedia-Artikel zue dr OpenID].)
 1243+
 1244+Wänn Du imfall scho ne Benutzerkonto bi {{SITENAME}} hesch, no chasch Di ganz normal mit em Benutzername un em Passwort [[Special:UserLogin|aamälde]].
 1245+Wänn Du in Zuechumft OpenID mechtsch verwände, chasch [[Special:OpenIDConvert|Dyy Account zue OpenID konvertiere]], wänn Di normal aagmäldet hesch.
 1246+
 1247+S git vyyl [http://wiki.openid.net/Public_OpenID_providers effentligi OpenID-Provider] un villicht hesch scho ne Benutzerkonto mit aktiviertem OpenID bin eme andere Aabieter.',
 1248+ 'openidupdateuserinfo' => 'Myni persenlige Date aktualisiere',
 1249+ 'openid-prefstext' => '[http://openid.net/ OpenID] Yystellige',
 1250+ 'openid-pref-hide' => 'Versteck Dyyni <a href="http://openid.net/">OpenID</a> uf Dyynere Benutzersyte, wänn Di mit OpenID aamäldsch.',
 1251+ 'openid-pref-update-userinfo-on-login' => 'Myyni Date mit em OpenID-Konto bi jedere Aamäldig aktualisiere',
 1252+);
 1253+
 1254+/** Manx (Gaelg)
 1255+ * @author MacTire02
 1256+ */
 1257+$messages['gv'] = array(
 1258+ 'openidemail' => 'Enmys post-L',
 1259+ 'openidlanguage' => 'Çhengey',
 1260+ 'openidchoosepassword' => 'fockle yn arrey:',
 1261+);
 1262+
 1263+/** Hawaiian (Hawai`i)
 1264+ * @author Kalani
 1265+ */
 1266+$messages['haw'] = array(
 1267+ 'openidlanguage' => 'ʻŌlelo',
 1268+ 'openidchoosepassword' => 'ʻōlelo hūnā:',
 1269+);
 1270+
 1271+/** Hebrew (עברית)
 1272+ * @author Rotemliss
 1273+ * @author YaronSh
 1274+ */
 1275+$messages['he'] = array(
 1276+ 'openid-desc' => 'כניסה לחשבון בוויקי באמצעות [http://openid.net/ OpenID], והתחברות לאתרים נוספים הפועלים עם OpenID באמצעות חשבון משתמש בוויקי',
 1277+ 'openidlogin' => 'כניסה לחשבון עם OpenID',
 1278+ 'openidfinish' => 'יציאה מהחשבון עם OpenID',
 1279+ 'openidserver' => 'שרת OpenID',
 1280+ 'openidxrds' => 'קובץ Yadis',
 1281+ 'openidconvert' => 'ממיר OpenID',
 1282+ 'openiderror' => 'שגיאת אימות',
 1283+ 'openiderrortext' => 'אירעה שגיאה במהלך אימות כתובת ה־OpenID.',
 1284+ 'openidconfigerror' => 'שגיאה בתצורת OpenID',
 1285+ 'openidconfigerrortext' => 'תצורת איחסון ה־OpenID עבור ויקי זה אינה תקינה.
 1286+אנא התייעצו עם אחד מ[[Special:ListUsers/sysop|מפעילי המערכת]].',
 1287+ 'openidpermission' => 'שגיאת הרשאות OpenID',
 1288+ 'openidpermissiontext' => 'ה־OpenID שסיפקתם אינו מורשה להתחבר לשרת זה.',
 1289+ 'openidcancel' => 'האימות בוטל',
 1290+ 'openidcanceltext' => 'אימות כתובת ה־OpenID בוטל.',
 1291+ 'openidfailure' => 'האימות נכשל',
 1292+ 'openidfailuretext' => 'אימות כתובת ה־OpenID נכשל. הודעת השגיאה: "$1"',
 1293+ 'openidsuccess' => 'האימות הושלם בהצלחה',
 1294+ 'openidsuccesstext' => 'אימות כתובת ה־OpenID הושלם בהצלחה.',
 1295+ 'openidusernameprefix' => 'משתמשOpenID',
 1296+ 'openidserverlogininstructions' => 'כתבו את סיסמתכם להלן כדי להיכנס לחשבון באתר $3 בתור המשתמש $2 (דף המשתמש: $1).',
 1297+ 'openidtrustinstructions' => 'סמנו אם ברצונכם לשתף מידע עם $1.',
 1298+ 'openidallowtrust' => 'מתן האפשרות ל־$1 לבטוח בחשבון משתמש זה.',
 1299+ 'openidnopolicy' => 'האתר לא ציין מדיניות פרטיות.',
 1300+ 'openidpolicy' => 'בדקו את <a target="_new" href="$1">מדיניות הפרטיות</a> למידע נוסף.',
 1301+ 'openidoptional' => 'אופציונאלי',
 1302+ 'openidrequired' => 'נדרש',
 1303+ 'openidnickname' => 'כינוי',
 1304+ 'openidfullname' => 'שם מלא',
 1305+ 'openidemail' => 'כתובת דוא"ל',
 1306+ 'openidlanguage' => 'שפה',
 1307+ 'openidnotavailable' => 'הכינוי המועדף עליכם ($1) כבר נמצא בשימוש של משתמש אחר.',
 1308+ 'openidnotprovided' => 'שרת ה־OpenID לא סיפק כינוי (או בגלל שאינו יכול, או בגלל שכך הוריתם לו).',
 1309+ 'openidchooseinstructions' => 'כל המשתמשים זקוקים לכינוי;
 1310+תוכלו לבחור אחת מהאפשרויות שלהלן.',
 1311+ 'openidchoosefull' => 'שמכם המלא ($1)',
 1312+ 'openidchooseurl' => 'שם שנבחר מה־OpenID שלכם ($1)',
 1313+ 'openidchooseauto' => 'שם שנוצר אוטומטית ($1)',
 1314+ 'openidchoosemanual' => 'השם הנבחר:',
 1315+ 'openidchooseexisting' => 'חשבון קיים בוויקי זה:',
 1316+ 'openidchoosepassword' => 'סיסמה:',
 1317+ 'openidconvertinstructions' => 'טופס זה מאפשר לכם לשנות את חשבון המשתמשים שלכם לשימוש בכתובת OpenID.',
 1318+ 'openidconvertsuccess' => 'הומר בהצלחה ל־OpenID',
 1319+ 'openidconvertsuccesstext' => 'המרתם בהצלחה את ה־OpenID שלכם ל־$1.',
 1320+ 'openidconvertyourstext' => 'זהו כבר ה־OpenID שלכם.',
 1321+ 'openidconvertothertext' => 'זהו ה־OpenID של מישהו אחר.',
 1322+ 'openidalreadyloggedin' => "'''הינכם כבר מחוברים לחשבון, $1!'''
 1323+
 1324+אם ברצונכם להשתמש ב־OpenID כדי להתחבר בעתיד, תוכלו [[Special:OpenIDConvert|להמיר את חשבונכם לשימוש ב־OpenID]].",
 1325+ 'openidnousername' => 'לא צוין שם משתמש.',
 1326+ 'openidbadusername' => 'שם המשתמש שצוין אינו תקין.',
 1327+ 'openidautosubmit' => 'דף זה מכיל טופס שאמור להשלח אוטומטית אם יש לכם JavaScript פעיל.
 1328+אם זה לא פועל, נסו את הכפתור \\"המשך\\".',
 1329+ 'openidclientonlytext' => 'אינכם יכולים להשתמש בחשבונות משתמש מוויקי זה כזהויות OpenID באתר אחר.',
 1330+ 'openidloginlabel' => 'כתובת OpenID',
 1331+ 'openidlogininstructions' => 'ב{{grammar:תחילית|{{SITENAME}}}} מותקנת תמיכה בתקן ה־[http://openid.net/ OpenID] לחשבון משתמש מאוחד בין אתרי אינטרנט.
 1332+OpenID מאפשר לכם להיכנס לחשבון במגוון אתרים מבלי להשתמש בסיסמה שונה עבור כל אחד מהם.
 1333+(עיינו ב[http://he.wikipedia.org/wiki/OpenID ערך על OpenID בוויקיפדיה העברית] למידע נוסף.)
 1334+
 1335+אם כבר יש ברשותכם חשבון במערכת {{SITENAME}}, תוכלו [[Special:UserLogin|להיכנס לחשבון]] עם שם המשתמש והסיסמה שלכם כרגיל.
 1336+על מנת להשתמש ב־OpenID בעתיד, תוכלו [[Special:OpenIDConvert|להמיר את חשבונכם ל־OpenID]] לאחר שנכנסתם לחשבון באופן הרגיל.
 1337+
 1338+ישנם [http://wiki.openid.net/Public_OpenID_providers ספקי OpenID ציבוריים] רבים, ויתכן שכבר יש לכם חשבון התומך ב־OpenID בשירות אחר.',
 1339+ 'openidupdateuserinfo' => 'עדכון המידע האישי שלי',
 1340+ 'openid-prefstext' => 'העדפות [http://openid.net/ OpenID]',
 1341+ 'openid-pref-hide' => 'הסתרת ה־<a href="http://openid.net/">OpenID</a> מדף המשתמש, במקרה של כניסה לחשבון עם OpenID.',
 1342+ 'openid-pref-update-userinfo-on-login' => 'עדכון המידע שלי מכרטיס ה־OpenID עם כל כניסה לחשבון',
 1343+);
 1344+
 1345+/** Hindi (हिन्दी)
 1346+ * @author Kaustubh
 1347+ */
 1348+$messages['hi'] = array(
 1349+ 'openidlogin' => 'OpenID से लॉग इन करें',
 1350+ 'openidfinish' => 'OpenID लॉग इन पूरा करें',
 1351+ 'openidserver' => 'OpenID सर्वर',
 1352+ 'openidxrds' => 'Yadis फ़ाइल',
 1353+ 'openidconvert' => 'OpenID कन्वर्टर',
 1354+ 'openiderror' => 'प्रमाणिकरण गलती',
 1355+ 'openiderrortext' => 'OpenID URL के प्रमाणिकरण में समस्या आई हैं।',
 1356+ 'openidconfigerror' => 'OpenID व्यवस्थापन समस्या',
 1357+ 'openidpermission' => 'OpenID अनुमति समस्या',
 1358+ 'openidpermissiontext' => 'आपने दिये ओपनID से इस सर्वरपर लॉग इन नहीं किया जा सकता हैं।',
 1359+ 'openidcancel' => 'प्रमाणिकरण रद्द कर दिया',
 1360+ 'openidcanceltext' => 'ओपनID URL प्रमाणिकरण रद्द कर दिया गया हैं।',
 1361+ 'openidfailure' => 'प्रमाणिकरण पूरा नहीं हुआ',
 1362+ 'openidfailuretext' => 'ओपनID URL प्रमाणिकरण पूरा नहीं हो पाया। समस्या: "$1"',
 1363+ 'openidsuccess' => 'प्रमाणिकरण पूर्ण',
 1364+ 'openidsuccesstext' => 'ओपनID URL प्रमाणिकरण पूरा हो गया।',
 1365+ 'openidusernameprefix' => 'OpenIDसदस्य',
 1366+ 'openidserverlogininstructions' => '$3 पर $2 नामसे (सदस्य पृष्ठ $1) लॉग इन करनेके लिये अपना कूटशब्द नीचे दें।',
 1367+ 'openidtrustinstructions' => 'आप $1 के साथ डाटा शेअर करना चाहते हैं इसकी जाँच करें।',
 1368+ 'openidallowtrust' => '$1 को इस सदस्य खातेपर भरोसा रखने की अनुमति दें।',
 1369+ 'openidnopolicy' => 'साइटने गोपनियता नीति नहीं बनाई हैं।',
 1370+ 'openidoptional' => 'वैकल्पिक',
 1371+ 'openidrequired' => 'आवश्यक',
 1372+ 'openidnickname' => 'उपनाम',
 1373+ 'openidfullname' => 'पूरानाम',
 1374+ 'openidemail' => 'इ-मेल एड्रेस',
 1375+ 'openidlanguage' => 'भाषा',
 1376+ 'openidchoosefull' => 'आपका पूरा नाम ($1)',
 1377+ 'openidchooseurl' => 'आपके OpenID से लिया एक नाम ($1)',
 1378+ 'openidchooseauto' => 'एक अपनेआप बनाया नाम ($1)',
 1379+ 'openidchoosemanual' => 'आपके पसंद का नाम:',
 1380+ 'openidchooseexisting' => 'इस विकिपर पहले से होने वाला खाता:',
 1381+ 'openidchoosepassword' => 'कूटशब्द:',
 1382+ 'openidconvertsuccess' => 'ओपनID में बदल दिया गया हैं',
 1383+ 'openidconvertsuccesstext' => 'आपने आपका ओपनID $1 में बदल दिया हैं।',
 1384+ 'openidconvertyourstext' => 'यह आपका ही ओपनID हैं।',
 1385+ 'openidconvertothertext' => 'यह किसी औरका ओपनID हैं।',
 1386+ 'openidnousername' => 'सदस्यनाम दिया नहीं हैं।',
 1387+ 'openidbadusername' => 'गलत सदस्यनाम दिया हैं।',
 1388+ 'openidclientonlytext' => 'इस विकिपर खोले गये खाते आप अन्य साइटपर ओपनID के तौर पर इस्तेमाल नहीं कर सकतें हैं।',
 1389+ 'openidloginlabel' => 'ओपनID URL',
 1390+ 'openid-pref-hide' => 'अगर आपने ओपनID का इस्तेमाल करके लॉग इन किया हैं, तो आपके सदस्यपन्नेपर आपका <a href="http://openid.net/">ओपनID</a> छुपायें।',
 1391+);
 1392+
 1393+/** Hiligaynon (Ilonggo)
 1394+ * @author Jose77
 1395+ */
 1396+$messages['hil'] = array(
 1397+ 'openidchoosepassword' => 'kontra-senyas:',
 1398+);
 1399+
 1400+/** Croatian (Hrvatski)
 1401+ * @author Dalibor Bosits
 1402+ */
 1403+$messages['hr'] = array(
 1404+ 'openidchoosepassword' => 'lozinka:',
 1405+);
 1406+
 1407+/** Upper Sorbian (Hornjoserbsce)
 1408+ * @author Michawiki
 1409+ */
 1410+$messages['hsb'] = array(
 1411+ 'openid-desc' => 'Přizjewjenje pola wikija z [http://openid.net/ OpenID], a přizjewjenje pola druhich websydłow, kotrež OpenID podpěruja, z wikijowym wužiwarskim kontom',
 1412+ 'openidlogin' => 'Přizjewjenje z OpenID',
 1413+ 'openidfinish' => 'Přizjewjenje OpenID skónčić',
 1414+ 'openidserver' => 'Serwer OpenID',
 1415+ 'openidxrds' => 'Yadis-dataja',
 1416+ 'openidconvert' => 'Konwerter OpenID',
 1417+ 'openiderror' => 'Pruwowanski zmylk',
 1418+ 'openiderrortext' => 'Zmylk je při pruwowanju URL OpenID wustupił.',
 1419+ 'openidconfigerror' => 'OpenID konfiguraciski zmylk',
 1420+ 'openidconfigerrortext' => 'Składowanska konfiguracija OpenID zu tutón wiki je njepłaćiwy. Prošu skonsultuj administratora tutoho sydła.',
 1421+ 'openidpermission' => 'Zmylk w prawach OpenID',
 1422+ 'openidpermissiontext' => 'OpenID, kotryž sy podał, njesmě so za přizjewjenje pola tutoho serwera wužiwać.',
 1423+ 'openidcancel' => 'Přepruwowanje přetorhnjene',
 1424+ 'openidcanceltext' => 'Přepruwowanje URL OpenID bu přetorhnjene.',
 1425+ 'openidfailure' => 'Přepruwowanje njeporadźiło',
 1426+ 'openidfailuretext' => 'Přepruwowanje URL OpenID je so njeporadźiło. Zmylkowa zdźělenka: "$1"',
 1427+ 'openidsuccess' => 'Přepruwowanje poradźiło',
 1428+ 'openidsuccesstext' => 'Přepruwowanje URL OpenID je so poradźiło.',
 1429+ 'openidusernameprefix' => 'Wužiwar OpenID',
 1430+ 'openidserverlogininstructions' => 'Zapodaj deleka swoje hesło, zo by so pola $3 jako wužiwar $2 přizjewił (wužiwarska strona $1).',
 1431+ 'openidtrustinstructions' => 'Pruwuj, hač chceš z $1 daty dźělić.',
 1432+ 'openidallowtrust' => '$1 dowolić, zo by so tutomu wužiwarskemu konće dowěriło.',
 1433+ 'openidnopolicy' => 'Sydło njeje zasady za priwatnosć podało.',
 1434+ 'openidpolicy' => 'Pohladaj do <a target="_new" href="$1">zasadow priwatnosće</a> za dalše informacije.',
 1435+ 'openidoptional' => 'Opcionalny',
 1436+ 'openidrequired' => 'Trěbny',
 1437+ 'openidnickname' => 'Přimjeno',
 1438+ 'openidfullname' => 'Dospołne mjeno',
 1439+ 'openidemail' => 'E-mejlowa adresa',
 1440+ 'openidlanguage' => 'Rěč',
 1441+ 'openidnotavailable' => 'Twoje preferowane přimjeno ($1) so hižo wot druheho wužiwarja wužiwa.',
 1442+ 'openidnotprovided' => 'Twój serwer OpenID njedoda přimjeno (pak dokelž njemóže pak dokelž njejsy je jemu zdźělił).',
 1443+ 'openidchooseinstructions' => 'Wšitcy wužiwarjo trjebaja přimjeno; móžěs jedne z opcijow deleka wuzwolić.',
 1444+ 'openidchoosefull' => 'Twoje dospołne mjeno ($1)',
 1445+ 'openidchooseurl' => 'Mjeno wzate z twojeho OpenID ($1)',
 1446+ 'openidchooseauto' => 'Awtomatisce wutworjene mjeno ($1)',
 1447+ 'openidchoosemanual' => 'Mjeno twojeje wólby:',
 1448+ 'openidchooseexisting' => 'Eksistowace konto na tutym wikiju:',
 1449+ 'openidchoosepassword' => 'hesło:',
 1450+ 'openidconvertinstructions' => 'Tutón formular ći dowola swoje wužiwarske konto zmňić, zo by URL OpenID wužiwał.',
 1451+ 'openidconvertsuccess' => 'Wuspěšnje do OpenID konwertowany.',
 1452+ 'openidconvertsuccesstext' => 'Sy swój OpenID wuspěšnje do $1 konwertował.',
 1453+ 'openidconvertyourstext' => 'To je hižo twój OpenID.',
 1454+ 'openidconvertothertext' => 'To je OpenID někoho druheho.',
 1455+ 'openidalreadyloggedin' => "'''Sy hižo přizjewjeny, $1!'''
 1456+
 1457+Jeli chceš OpenID wužiwać, hdyž přichodnje přizjewiš, móžeš [[Special:OpenIDConvert|swoje konto za wužiwanje OpenID konwertować]].",
 1458+ 'openidnousername' => 'Žane wužiwarske mjeno podate.',
 1459+ 'openidbadusername' => 'Wopačne wužiwarske mjeno podate.',
 1460+ 'openidautosubmit' => 'Tuta strona wobsahuje formular, kotryž měł so awtomatisce wotpósłać, jeli sy JavaScript zmóžnił. Jeli nic, spytaj tłóčatko "Dale".',
 1461+ 'openidclientonlytext' => 'Njemóžeš konta z tutoho wikija jako OpenID na druhim sydle wužiwać.',
 1462+ 'openidloginlabel' => 'URL OpenID',
 1463+ 'openidlogininstructions' => '{{SITENAME}} podpěruje standard [http://openid.net/ OpenID] za jednotliwe přizjewjenje mjez websydłami. OpenID ći zmóžnja so pola wjele rozdźělnych websydłow prizjewić, bjeztoho zo dyrbiš rozdźělne hesła wužiwać. (Hlej [http://en.wikipedia.org/wiki/OpenID nastawk OpenID wikipedije] za dalše informacije.)
 1464+
 1465+Jeli maš hižo konto na {{GRAMMAR:lokatiw|{{SITENAME}}}}, móžeš so ze swojim wužiwarskim mjenjom a hesłom kaž přeco [[Special:UserLogin|přizjewić]].
 1466+Zo by OpenID w přichodźe wužiwał, móžeš [[Special:OpenIDConvert|swóje konto do OpenID konwertować]], po tym zo sy so normalnje přizjewił.
 1467+
 1468+Je wjele [http://openid.net/get/ poskićowarjow OpenID], snano maš hižo konto z OpenID pola druheje słužby.',
 1469+ 'openidupdateuserinfo' => 'Moje wosobinske informacije aktualizować',
 1470+ 'openid-prefstext' => 'Nastajenja [http://openid.net/ OpenID]',
 1471+ 'openid-pref-hide' => 'Twój <a href="http://openid.net/">OpenID</a> na twojej wužiwarskej stronje schować, jeli so z OpenID přizjewješ.',
 1472+ 'openid-pref-update-userinfo-on-login' => 'Kóždy raz, hdyž so přizjawjam, moje informacije z identity OpenID aktualizować',
 1473+);
 1474+
 1475+/** Hungarian (Magyar)
 1476+ * @author Dani
 1477+ * @author Tgr
 1478+ */
 1479+$messages['hu'] = array(
 1480+ 'openid-desc' => 'Bejelentkezés [http://openid.net/ OpenID] azonosítóval, és más OpenID-kompatibilis weboldalak használata a wikis azonosítóval',
 1481+ 'openidlogin' => 'Bejelentkezés OpenID-vel',
 1482+ 'openidfinish' => 'OpenID bejelentkezés befejezése',
 1483+ 'openidserver' => 'OpenID szerver',
 1484+ 'openidxrds' => 'Yadis fájl',
 1485+ 'openidconvert' => 'OpenID konverter',
 1486+ 'openiderror' => 'Hiba az ellenőrzés során',
 1487+ 'openiderrortext' => 'Az OpenID URL elenőrzése nem sikerült.',
 1488+ 'openidconfigerror' => 'OpenID konfigurációs hiba',
 1489+ 'openidconfigerrortext' => 'A wiki OpenID tárhelyének beállítása érvénytelen.
 1490+Lépj kapcsolatba egy [[Special:ListUsers/sysop|adminisztrátorral]].',
 1491+ 'openidpermission' => 'OpenID jogosultság hiba',
 1492+ 'openidpermissiontext' => 'Ezzel az OpenID-vel nem vagy jogosult belépni erre a wikire.',
 1493+ 'openidcancel' => 'Ellenőrzés visszavonva',
 1494+ 'openidcanceltext' => 'Az OpenID URL ellenőrzése vissza lett vonva.',
 1495+ 'openidfailure' => 'Ellenőrzés sikertelen',
 1496+ 'openidfailuretext' => 'Az OpenID URL ellenőrzése nem sikerült. A kapott hibaüzenet: „$1”',
 1497+ 'openidsuccess' => 'Sikeres ellenőrzés',
 1498+ 'openidsuccesstext' => 'Az OpenID URL ellenőrzése sikerült.',
 1499+ 'openidusernameprefix' => 'OpenID-s szerkesztő',
 1500+ 'openidserverlogininstructions' => 'Add meg a jelszót a(z) $3 oldalra való bejelentkezéshez $2 néven (userlap: $1).',
 1501+ 'openidtrustinstructions' => 'Adatok megosztása a(z) $1 oldallal.',
 1502+ 'openidallowtrust' => '$1 megbízhat ebben a felhasználóban.',
 1503+ 'openidnopolicy' => 'Az oldalnak nincsen adatvédelmi szabályzata.',
 1504+ 'openidpolicy' => 'További információkért lásd az <a target="_new" href="$1">adatvédelmi szabályzatot</a>.',
 1505+ 'openidoptional' => 'Opcionális',
 1506+ 'openidrequired' => 'Kötelező',
 1507+ 'openidnickname' => 'Felhasználónév',
 1508+ 'openidfullname' => 'Teljes név',
 1509+ 'openidemail' => 'Email-cím',
 1510+ 'openidlanguage' => 'Nyelv',
 1511+ 'openidnotavailable' => 'Az alapértelmezett felhasználónevedet ($1) már használja valaki.',
 1512+ 'openidnotprovided' => 'Az OpenID szervered nem adta meg a felhasználónevedet (vagy azért, mert nem tudja, vagy mert nem engedted neki).',
 1513+ 'openidchooseinstructions' => 'Mindenkinek választania kell egy felhasználónevet; választhatsz egyet az alábbi opciókból.',
 1514+ 'openidchoosefull' => 'A teljes neved ($1)',
 1515+ 'openidchooseurl' => 'Az OpenID-dből vett név ($1)',
 1516+ 'openidchooseauto' => 'Egy automatikusan generált név ($1)',
 1517+ 'openidchoosemanual' => 'Egy általad megadott név:',
 1518+ 'openidchooseexisting' => 'Egy létező felhasználónév erről a wikiről:',
 1519+ 'openidchoosepassword' => 'jelszó:',
 1520+ 'openidconvertinstructions' => 'Ezzel az űrlappal átállíthatod a felhasználói fiókodat, hogy egy OpenId URL-t használjon.',
 1521+ 'openidconvertsuccess' => 'Sikeres átállás OpenID-re',
 1522+ 'openidconvertsuccesstext' => 'Sikeresen átállítottad az OpenID-det erre: $1.',
 1523+ 'openidconvertyourstext' => 'Ez az OpenID már a tiéd.',
 1524+ 'openidconvertothertext' => 'Ez az OpenID másvalakié.',
 1525+ 'openidalreadyloggedin' => "'''Már be vagy jelentkezve, $1!'''
 1526+
 1527+Ha ezentúl az OpenID-del akarsz bejelentkezni, [[Special:OpenIDConvert|konvertálhatod a felhasználói fiókodat OpenID-re]].",
 1528+ 'openidnousername' => 'Nem adtál meg felhasználónevet.',
 1529+ 'openidbadusername' => 'Rossz felhasználónevet adtál meg.',
 1530+ 'openidautosubmit' => 'Az ezen az oldalon lévő űrlap automatikusan elküldi az adatokat, ha a JavaScript engedélyezve van. Ha nem, használd a \\"Tovább\\" gombot.',
 1531+ 'openidclientonlytext' => 'Az itteni felhasználónevedet nem használhatod OpenID-ként más weboldalon.',
 1532+ 'openidloginlabel' => 'OpenID URL',
 1533+ 'openidlogininstructions' => "A(z) {{SITENAME}} támogatja az [http://openid.net/ OpenID]-alapú bejelentkezést.
 1534+A OpenID lehetővé teszi, hogy számos különböző weboldalra jelentkezz be úgy, hogy csak egyszer kell megadnod a jelszavadat. (Lásd [http://hu.wikipedia.org/wiki/OpenID a Wikipédia OpenID cikkét] további információkért.)
 1535+
 1536+Ha már regisztráltál korábban, [[Special:UserLogin|bejelentkezhetsz]] a felhasználóneveddel és a jelszavaddal, ahogy eddig is. Ha a továbbiakban OpenID-t akarsz használni, [[Special:OpenIDConvert|állítsd át a felhasználói fiókodat OpenID-re]], miután bejelentkeztél.
 1537+
 1538+Számos [http://wiki.openid.net/Public_OpenID_providers nyilvános OpenID szolgáltató] van, lehetséges, hogy van már OpenID-fiókod egy másik weboldalon.
 1539+
 1540+; Más wikik: ha regisztráltál egy OpenID-kompatibilis wikin, mint a [http://wikitravel.org/ Wikitravel], a [http://www.wikihow.com/ wikiHow], a [http://vinismo.com/ Vinismo], az [http://aboutus.org/ AboutUs] vagy a [http://kei.ki/ Keiki], bejelentkezhetsz ide az ottani felhasználói lapod '''teljes címének''' megadásával. (Például ''<nowiki>http://kei.ki/en/User:Evan</nowiki>''.)
 1541+; [http://openid.yahoo.com/ Yahoo!] : ha van Yahoo! azonosítód, bejelentkezhetsz a Yahoo! OpenID-d megadásával. A Yahoo! OpenID-k ''<nowiki>https://me.yahoo.com/felhasználónév</nowiki>'' alakúak.
 1542+; [http://dev.aol.com/aol-and-63-million-openids AOL] : Ha van valamilyen [http://www.aol.com/ AOL] azonosítód, például egy [http://www.aim.com/ AIM] felhasználónév, bejelentkezhetsz az AOL OpenID-del. Az AOL OpenID-k ''<nowiki>http://openid.aol.com/felhasználónév</nowiki>'' alakúak (a felhasználónév csupa kisbetűvel, szóköz nélkül).
 1543+; [http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html Blogger], [http://faq.wordpress.com/2007/03/06/what-is-openid/ Wordpress.com], [http://www.livejournal.com/openid/about.bml LiveJournal], [http://bradfitz.vox.com/library/post/openid-for-vox.html Vox] : ezek a blogszolgáltatók mind biztosítanak OpenID-t, a következő formákban: ''<nowiki>http://felhasználónév.blogspot.com/</nowiki>'', ''<nowiki>http://felhasználónév.wordpress.com/</nowiki>'', ''<nowiki>http://felhasználónév.livejournal.com/</nowiki>'', or ''<nowiki>http://felhasználónév.vox.com/</nowiki>''.",
 1544+ 'openid-pref-hide' => 'Az <a href="http://openid.net/">OpenID</a>-d elrejtése a felhasználói lapodon, amikor OpenID-vel jelentkezel be.',
 1545+);
 1546+
 1547+/** Interlingua (Interlingua)
 1548+ * @author Malafaya
 1549+ * @author McDutchie
 1550+ */
 1551+$messages['ia'] = array(
 1552+ 'openid-desc' => 'Aperir un session in le wiki con [http://openid.net/ OpenID], e aperir un session in altere sitos web usante OpenID con un conto de usator del wiki',
 1553+ 'openidlogin' => 'Aperir un session con OpenID',
 1554+ 'openidfinish' => 'Completar le session OpenID',
 1555+ 'openidserver' => 'Servitor OpenID',
 1556+ 'openidxrds' => 'File Yadis',
 1557+ 'openidconvert' => 'Convertitor de OpenID',
 1558+ 'openiderror' => 'Error de verification',
 1559+ 'openiderrortext' => 'Un error occurreva durante le verification del adresse URL de OpenID.',
 1560+ 'openidconfigerror' => 'Error de configuration de OpenID',
 1561+ 'openidconfigerrortext' => 'Le configuration de immagazinage OpenID pro iste wiki es invalide.
 1562+Per favor contacta un [[Special:ListUsers/sysop|administrator]].',
 1563+ 'openidpermission' => 'Error de permissiones OpenID',
 1564+ 'openidpermissiontext' => 'Le OpenID que tu forniva non ha le permission de aperir sessiones in iste servitor.',
 1565+ 'openidcancel' => 'Verification cancellate',
 1566+ 'openidcanceltext' => 'Le verification del adresse URL OpenID ha essite cancellate.',
 1567+ 'openidfailure' => 'Verification fallite',
 1568+ 'openidfailuretext' => 'Le verification del adresse URL de OpenID ha fallite. Message de error: "$1"',
 1569+ 'openidsuccess' => 'Verification succedite',
 1570+ 'openidsuccesstext' => 'Le verification del adresse URL de OpenID ha succedite.',
 1571+ 'openidusernameprefix' => 'Usator OpenID',
 1572+ 'openidserverlogininstructions' => 'Entra tu contrasigno in basso pro aperir un session in $3 como le usator $2 (pagina de usator: $1).',
 1573+ 'openidtrustinstructions' => 'Controla si tu vole repartir datos con $1.',
 1574+ 'openidallowtrust' => 'Permitte que $1 se fide a iste conto de usator.',
 1575+ 'openidnopolicy' => 'Le sito non ha specificate un politica de confidentialitate.',
 1576+ 'openidpolicy' => 'Consulta le <a target="_new" href="$1">politica de confidentialitate</a> pro plus informationes.',
 1577+ 'openidoptional' => 'Optional',
 1578+ 'openidrequired' => 'Requirite',
 1579+ 'openidnickname' => 'Pseudonymo',
 1580+ 'openidfullname' => 'Nomine integre',
 1581+ 'openidemail' => 'Adresse de e-mail',
 1582+ 'openidlanguage' => 'Lingua',
 1583+ 'openidnotavailable' => 'Tu pseudonymo preferite ($1) ja es in uso per un altere usator.',
 1584+ 'openidnotprovided' => 'Tu servitor OpenID non forniva un pseudonymo (o proque illo non lo pote, o proque tu lo diceva de non facer lo).',
 1585+ 'openidchooseinstructions' => 'Tote le usatores require un pseudonymo;
 1586+tu pote seliger un del optiones in basso.',
 1587+ 'openidchoosefull' => 'Tu nomine integre ($1)',
 1588+ 'openidchooseurl' => 'Un nomine seligite de tu OpenID ($1)',
 1589+ 'openidchooseauto' => 'Un nomine automaticamente generate ($1)',
 1590+ 'openidchoosemanual' => 'Un nomine de tu preferentia:',
 1591+ 'openidchooseexisting' => 'Un conto existente in iste wiki:',
 1592+ 'openidchoosepassword' => 'contrasigno:',
 1593+ 'openidconvertinstructions' => 'Iste formulario te permitte cambiar tu conto de usator pro usar un adresse URL de OpenID.',
 1594+ 'openidconvertsuccess' => 'Conversion a OpenID succedite',
 1595+ 'openidconvertsuccesstext' => 'Tu ha convertite con successo tu OpenID a $1.',
 1596+ 'openidconvertyourstext' => 'Isto es ja tu OpenID.',
 1597+ 'openidconvertothertext' => 'Isto es le OpenID de alcuno altere.',
 1598+ 'openidalreadyloggedin' => "'''Tu es ja identificate, $1!'''
 1599+
 1600+Si tu vole usar OpenID pro aperir un session in le futuro, tu pote [[Special:OpenIDConvert|converter tu conto pro usar OpenID]].",
 1601+ 'openidnousername' => 'Nulle nomine de usator specificate.',
 1602+ 'openidbadusername' => 'Mal nomine de usator specificate.',
 1603+ 'openidautosubmit' => 'Iste pagina include un formulario que debe esser submittite automaticamente si tu ha JavaScript activate.
 1604+Si non, prova le button \\"Continuar\\".',
 1605+ 'openidclientonlytext' => 'Tu non pote usar contos ab iste wiki como contos OpenID in un altere sito.',
 1606+ 'openidloginlabel' => 'Adresse URL de OpenID',
 1607+ 'openidlogininstructions' => '{{SITENAME}} supporta le standard [http://openid.net/ OpenID] pro contos unificate inter sitos web.
 1608+OpenID te permitte aperir un session in multe diverse sitos web sin usar un differente contrasigno pro cata un.
 1609+(Vide [http://ia.wikipedia.org/wiki/OpenID le articulo super OpenID in Wikipedia] pro plus informationes.)
 1610+
 1611+Si tu possede ja un conto in {{SITENAME}}, tu pote [[Special:UserLogin|aperir un session]] con tu nomine de usator e contrasigno como normal.
 1612+Pro usar OpenID in le futuro, tu pote [[Special:OpenIDConvert|converter tu conto a OpenID]] post que tu ha aperite un session normal.
 1613+
 1614+Il ha multe [http://openid.net/get/ providitores de OpenID], e tu pote ja disponer de un conto con capacitate OpenID in un altere servicio.',
 1615+ 'openidupdateuserinfo' => 'Actualisar mi informationes personal',
 1616+ 'openid-prefstext' => 'Prreferentias de [http://openid.net/ OpenID]',
 1617+ 'openid-pref-hide' => 'Celar tu <a href="http://openid.net/">OpenID</a> in tu pagina de usator, si tu aperi un session con OpenID.',
 1618+ 'openid-pref-update-userinfo-on-login' => 'Actualisar mi informationes ab mi personage OpenID cata vice que io aperi un session',
 1619+);
 1620+
 1621+/** Indonesian (Bahasa Indonesia)
 1622+ * @author Rex
 1623+ */
 1624+$messages['id'] = array(
 1625+ 'openid-desc' => 'Masuk log ke wiki dengan sebuah [http://openid.net/ OpenID], dan masuk log ke situs web lain yang berbasis OpenID dengan sebuah akun pengguna wiki',
 1626+ 'openidlogin' => 'Masuk log dengan OpenID',
 1627+ 'openidfinish' => 'Selesai masuk log dengan OpenID',
 1628+ 'openidserver' => 'Server OpenID',
 1629+ 'openidxrds' => 'berkas Yadis',
 1630+ 'openidconvert' => 'Konverter OpenID',
 1631+ 'openiderror' => 'Verifikasi gagal',
 1632+ 'openiderrortext' => 'Sebuah kesalahan terjadi ketika melakukan verifikasi atas URL OpenID.',
 1633+ 'openidconfigerror' => 'Kesalahan konfigurasi OpenID',
 1634+ 'openidconfigerrortext' => 'Konfigurasi penyimpanan OpenID di wiki ini tidak sah.
 1635+Silakan hubungi salah satu [[Special:ListUsers/sysop|administrator]].',
 1636+ 'openidpermission' => 'Izin OpenID tidak sah',
 1637+ 'openidpermissiontext' => 'OpenID yang Anda berikan tidak diperbolehkan untuk mengakses server ini.',
 1638+ 'openidcancel' => 'Verifikasi dibatalkan',
 1639+ 'openidcanceltext' => 'Verifikasi URL OpenID tersebut dibatalkan.',
 1640+ 'openidfailure' => 'Verifikasi gagal',
 1641+ 'openidfailuretext' => 'Verifikasi dari URL OpenID tersebut gagal.
 1642+Pesan kesalahan: "$1"',
 1643+ 'openidsuccess' => 'Verifikasi berhasil',
 1644+ 'openidsuccesstext' => 'Verifikasi dari URL OpenID tersebut berhasil.',
 1645+ 'openidusernameprefix' => 'PenggunaOpenID',
 1646+ 'openidserverlogininstructions' => 'Masukkan kata sandi Anda di bawah ini untuk masuk log ke $3 sebagai pengguna $2 (halaman pengguna $1).',
 1647+ 'openidtrustinstructions' => 'Berikan tanda cek jika Anda ingin berbagi data dengan $1.',
 1648+ 'openidallowtrust' => 'Izinkan $1 untuk mempercayai akun pengguna ini.',
 1649+ 'openidnopolicy' => 'Situs ini tidak memiliki kebijakan privasi.',
 1650+ 'openidpolicy' => 'Lihat <a target="_new" href="$1">kebijakan privasi</a> untuk informasi lebih lanjut.',
 1651+ 'openidoptional' => 'Opsional',
 1652+ 'openidrequired' => 'Diperlukan',
 1653+ 'openidnickname' => 'Nama panggilan',
 1654+ 'openidfullname' => 'Nama lengkap',
 1655+ 'openidemail' => 'Alamat surat-e',
 1656+ 'openidlanguage' => 'Bahasa',
 1657+ 'openidnotavailable' => 'Nama panggilan yang Anda masukkan ($1) sudah digunakan oleh pengguna lain.',
 1658+ 'openidnotprovided' => 'Server OpenID Anda tidak menyediakan nama panggilan (entah karena server tersebut tidak bisa, atau Anda telah menspesifikasikan untuk tidak menyediakannya).',
 1659+ 'openidchooseinstructions' => 'Semua pengguna memerlukan sebuah nama panggilan;
 1660+Anda dapat memilih dari salah satu opsi berikut.',
 1661+ 'openidchoosefull' => 'Nama lengkap Anda ($1)',
 1662+ 'openidchooseurl' => 'Sebuah nama diambil dari OpenID Anda ($1)',
 1663+ 'openidchooseauto' => 'Nama yang dibuat secara otomatis ($1)',
 1664+ 'openidchoosemanual' => 'Nama pilihan Anda:',
 1665+ 'openidchooseexisting' => 'Akun telah ada di wiki ini:',
 1666+ 'openidchoosepassword' => 'kata sandi:',
 1667+ 'openidconvertinstructions' => 'Form ini mengizinkan Anda untuk mengubah akun pengguna Anda menjadi menggunakan sebuah URL OpenID.',
 1668+ 'openidconvertsuccess' => 'Berhasil dikonversi menjadi OpenID',
 1669+ 'openidconvertsuccesstext' => 'Anda telah berhasil mengkonversi OpenID Anda menjadi $1.',
 1670+ 'openidconvertyourstext' => 'Sudah merupakan OpenID Anda.',
 1671+ 'openidconvertothertext' => 'Itu adalah OpenID orang lain.',
 1672+ 'openidalreadyloggedin' => "'''Anda telah masuk log, $1!'''
 1673+
 1674+Jika Anda ingin menggunakan OpenID untuk masuk log di masa yang akan datang, Anda dapat [[Special:OpenIDConvert|mengkonversi akun Anda menjadi OpenID]].",
 1675+ 'openidnousername' => 'Tidak ada nama pengguna diberikan.',
 1676+ 'openidbadusername' => 'Nama pengguna salah.',
 1677+ 'openidautosubmit' => 'Dalam halaman ini terdapat formulir yang akan dikirimkan secara otomatis jika Anda mengaktifkan JavaScript.
 1678+Jika tidak, coba tombol \\"Lanjutkan\\".',
 1679+ 'openidclientonlytext' => 'Anda tidak dapat menggunakan akun dari wiki ini sebagai OpenID di situs lain.',
 1680+ 'openidloginlabel' => 'URL OpenID',
 1681+ 'openidlogininstructions' => "{{SITENAME}} ini mendukung standar [http://openid.net/ OpenID] untuk masuk log lintas situs web.
 1682+OpenID mengizinkan Anda untuk masuk log di lintas situs web dengan menggunakan kata sandi yang sama.
 1683+(Lihat [http://id.wikipedia.org/wiki/OpenID artikel Wikipedia mengenai OpenID] untuk informasi lebih lanjut.)
 1684+
 1685+Jika Anda telah memiliki akun di {{SITENAME}}, Anda dapat [[Special:UserLogin|masuk log]] dengan nama pengguna dan kata sandi Anda seperti biasa.
 1686+Untuk menggunakan OpenID di masa yang akan datang, Anda dapat [[Special:OpenIDConvert|mengkonversi akun Anda menjadi OpenID]] setelah Anda masuk log seperti biasa.
 1687+
 1688+Ada banyak [http://wiki.openid.net/Public_OpenID_providers penyedia OpenID Publik], dan Anda mungkin telah memiliki akun OpenID di salah satu layanan situs lain.
 1689+
 1690+; Wiki lain : Jika Anda memiliki akun di wiki lain dengan OpenID, seperti [http://wikitravel.org/ Wikitravel], [http://www.wikihow.com/ wikiHow], [http://vinismo.com/ Vinismo], [http://aboutus.org/ AboutUs], atau [http://kei.ki/ Keiki], Anda dapat masuk log ke {{SITENAME}} menggunakan '''URL lengkap''' dari halaman pengguna Anda di wiki lain tersebut di kotak di atas. Sebagai contoh, ''<nowiki>http://kei.ki/en/User:Evan</nowiki>''.
 1691+; [http://openid.yahoo.com/ Yahoo!] : Jika Anda memiliki akun di Yahoo!, Anda dapat masuk log di situs ini dengan menggunakan OpenID Yahoo! Anda di kotak di atas. URL OpenID Yahoo! memiliki format ''<nowiki>https://me.yahoo.com/yourusername</nowiki>''.
 1692+; [http://dev.aol.com/aol-and-63-million-openids AOL] : Jika Anda memiliki akun di [http://www.aol.com/ AOL], seperti akun [http://www.aim.com/ AIM], Anda dapat masuk log di {{SITENAME}} dengan menggunakan OpenID AOL Anda di kotak di atas. URL OpenID AOL memiliki format ''<nowiki>http://openid.aol.com/yourusername</nowiki>''. Nama pengguna Anda haruslah dalam huruf kecil semua dan tanpa spasi.
 1693+; [http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html Blogger], [http://faq.wordpress.com/2007/03/06/what-is-openid/ Wordpress.com], [http://www.livejournal.com/openid/about.bml LiveJournal], [http://bradfitz.vox.com/library/post/openid-for-vox.html Vox] : Jika Anda memiliki blog di situs-situs layanan ini, masukkan URL blog Anda di kotak di atas. Sebagai contoh, ''<nowiki>http://yourusername.blogspot.com/</nowiki>'', ''<nowiki>http://yourusername.wordpress.com/</nowiki>'', ''<nowiki>http://yourusername.livejournal.com/</nowiki>'', atau ''<nowiki>http://yourusername.vox.com/</nowiki>''.",
 1694+ 'openid-pref-hide' => 'Sembunyikan <a href="http://openid.net/">OpenID</a> Anda di halaman pengguna Anda, jika Anda masuk log dengan OpenID.',
 1695+);
 1696+
 1697+/** Icelandic (Íslenska)
 1698+ * @author S.Örvarr.S
 1699+ */
 1700+$messages['is'] = array(
 1701+ 'openidchoosepassword' => 'lykilorð:',
 1702+);
 1703+
 1704+/** Italian (Italiano)
 1705+ * @author BrokenArrow
 1706+ * @author Darth Kule
 1707+ * @author McDutchie
 1708+ * @author Nemo bis
 1709+ * @author Pietrodn
 1710+ */
 1711+$messages['it'] = array(
 1712+ 'openid-desc' => 'Effettua il login alla wiki con [http://openid.net/ OpenID] e agli altri siti web che utilizzano OpenID con un account wiki',
 1713+ 'openidlogin' => 'Login con OpenID',
 1714+ 'openidfinish' => 'Completa il login OpenID',
 1715+ 'openidserver' => 'server OpenID',
 1716+ 'openidxrds' => 'file Yadis',
 1717+ 'openidconvert' => 'convertitore OpenID',
 1718+ 'openiderror' => 'Errore di verifica',
 1719+ 'openiderrortext' => "Si è verificato un errore durante la verifica dell'URL OpenID.",
 1720+ 'openidconfigerror' => 'Errore nella configurazione OpenID',
 1721+ 'openidconfigerrortext' => 'La configurazione della memorizzazione di OpenID per questa wiki non è valida.
 1722+Per favore consulta un [[Special:ListUsers/sysop|amministratore]].',
 1723+ 'openidpermission' => 'Errore nei permessi OpenID',
 1724+ 'openidpermissiontext' => "L'accesso a questo server non è consentito all'OpenID indicato.",
 1725+ 'openidcancel' => 'Verifica annullata',
 1726+ 'openidcanceltext' => "La verifica dell'URL OpenID è stata annullata.",
 1727+ 'openidfailure' => 'Verifica fallita',
 1728+ 'openidfailuretext' => 'La verifica dell\'URL OpenID è fallita. Messaggio di errore: "$1"',
 1729+ 'openidsuccess' => 'Verifica effettuata',
 1730+ 'openidsuccesstext' => "La verifica dell'URL OpenID è stata effettuata con successo.",
 1731+ 'openidusernameprefix' => 'Utente OpenID',
 1732+ 'openidserverlogininstructions' => 'Inserisci di seguito la tua password per effettuare il login a $3 come utente $2 (pagina utente $1).',
 1733+ 'openidtrustinstructions' => 'Controlla se desideri condividere i dati con $1.',
 1734+ 'openidallowtrust' => 'Permetti a $1 di fidarsi di questo account utente.',
 1735+ 'openidnopolicy' => 'Il sito non ha specificato una politica relativa alla privacy.',
 1736+ 'openidpolicy' => 'Controlla la <a target="_new" href="$1">politica relativa alla privacy</a> per maggiori informazioni.',
 1737+ 'openidoptional' => 'Opzionale',
 1738+ 'openidrequired' => 'Richiesto',
 1739+ 'openidnickname' => 'Nickname',
 1740+ 'openidfullname' => 'Nome completo',
 1741+ 'openidemail' => 'Indirizzo e-mail',
 1742+ 'openidlanguage' => 'Lingua',
 1743+ 'openidnotavailable' => 'Il tuo nickname preferito ($1) è già utilizzato da un altro utente.',
 1744+ 'openidnotprovided' => 'Il tuo server OpenID non ha fornito un nickname (o perché non ha potuto o perché hai detto di non farlo).',
 1745+ 'openidchooseinstructions' => 'Tutti gli utenti hanno bisogno di un nickname;
 1746+puoi sceglierne uno dalle opzioni seguenti.',
 1747+ 'openidchoosefull' => 'Il tuo nome completo ($1)',
 1748+ 'openidchooseurl' => 'Un nome scelto dal tuo OpenID ($1)',
 1749+ 'openidchooseauto' => 'Un nome auto-generato ($1)',
 1750+ 'openidchoosemanual' => 'Un nome di tua scelta:',
 1751+ 'openidchooseexisting' => 'Un account esistente su questa wiki:',
 1752+ 'openidchoosepassword' => 'password:',
 1753+ 'openidconvertinstructions' => 'Questo modulo ti permette di cambiare il tuo account per usare un URL OpenID.',
 1754+ 'openidconvertsuccess' => 'Convertito con successo a OpenID',
 1755+ 'openidconvertsuccesstext' => 'Il tuo OpenID è stato convertito con successo a $1.',
 1756+ 'openidconvertyourstext' => 'Questo è già il tuo OpenID.',
 1757+ 'openidconvertothertext' => "Questo è l'OpenID di qualcun altro.",
 1758+ 'openidalreadyloggedin' => "'''Hai già effettuato il login, $1!'''
 1759+
 1760+Se desideri usare OpenID per effettuare il login in futuro, puoi [[Special:OpenIDConvert|convertire il tuo account per utilizzare OpenID]].",
 1761+ 'openidnousername' => 'Nessun nome utente specificato.',
 1762+ 'openidbadusername' => 'Nome utente specificato errato.',
 1763+ 'openidautosubmit' => 'Questa pagina include un modulo che dovrebbe essere inviato automaticamente se hai JavaScript attivato. Se non lo è, prova a premere il pulsante \\"Continue\\".',
 1764+ 'openidclientonlytext' => 'Non puoi usare gli account di questa wiki come OpenID su un altro sito.',
 1765+ 'openidloginlabel' => 'URL OpenID',
 1766+ 'openidlogininstructions' => '{{SITENAME}} supporta lo standard [http://openid.net/ OpenID] per il login unico sui siti web.
 1767+OpenID consente di effettuare la registrazione su molti siti web senza dover utilizzare una password diversa per ciascuno.
 1768+(Leggi la [http://it.wikipedia.org/wiki/OpenID voce di Wikipedia su OpenID] per maggiori informazioni.)
 1769+
 1770+Chi possiede già un account su {{SITENAME}} può effettuare il [[Special:UserLogin|login]] con il proprio nome utente e la propria password come al solito. Per utilizzare OpenID in futuro, si può [[Special:OpenIDConvert|convertire il proprio account a OpenID]] dopo aver effettuato normalmente il login.
 1771+
 1772+Esistono molti [http://openid.net/get/ Provider OpenID]; è possibile che tu abbia già un account abilitato a OpenID su un altro servizio.',
 1773+ 'openidupdateuserinfo' => 'Aggiorna le mie informazioni personali',
 1774+ 'openid-prefstext' => 'Preferenze [http://openid.net/ OpenID]',
 1775+ 'openid-pref-hide' => 'Nascondi il tuo <a href="http://openid.net/">OpenID</a> sulla tua pagina utente, se effettui il login con OpenID.',
 1776+ 'openid-pref-update-userinfo-on-login' => 'Aggiorna le mie informazioni dalla persona OpenID a ogni accesso',
 1777+);
 1778+
 1779+/** Japanese (日本語)
 1780+ * @author Fievarsty
 1781+ * @author Fryed-peach
 1782+ * @author Hosiryuhosi
 1783+ */
 1784+$messages['ja'] = array(
 1785+ 'openid-desc' => '[http://openid.net/ OpenID]によるウィキへのログインを可能にし、ウィキユーザーアカウントを他のOpenID対応サイトにログインすることを可能にする。',
 1786+ 'openidlogin' => 'OpenIDでログイン',
 1787+ 'openidfinish' => 'OpenIDでのログインが完了しました。',
 1788+ 'openidserver' => 'OpenID サーバー',
 1789+ 'openidxrds' => 'Yadis ファイル',
 1790+ 'openidconvert' => 'OpenID コンバーター',
 1791+ 'openiderror' => '検証エラー',
 1792+ 'openiderrortext' => 'OpenID URLの検証中にエラーが発生しました。',
 1793+ 'openidconfigerror' => 'OpenID設定エラー',
 1794+ 'openidconfigerrortext' => 'このウィキの OpenID 格納設定は無効です。[[Special:ListUsers/sysop|管理者]]に相談してください。',
 1795+ 'openidpermission' => 'OpenID パーミッション・エラー',
 1796+ 'openidpermissiontext' => 'あなたが与えた OpenID はこのサーバーにログインすることを許可されていません。',
 1797+ 'openidcancel' => '検証中止',
 1798+ 'openidcanceltext' => 'OpenID URLの検証は中止されました。',
 1799+ 'openidfailure' => '検証失敗',
 1800+ 'openidfailuretext' => 'OpenID URLの検証は失敗しました。エラーメッセージ: "$1"',
 1801+ 'openidsuccess' => '検証成功',
 1802+ 'openidsuccesstext' => 'OpenID URLの検証は成功しました。',
 1803+ 'openidusernameprefix' => 'OpenIDユーザー',
 1804+ 'openidserverlogininstructions' => '$3 に利用者 $2 (利用者ページ $1) としてログインするには以下にパスワードを入力してください。',
 1805+ 'openidtrustinstructions' => '$1 とデータを共有したいか確認してください。',
 1806+ 'openidallowtrust' => '$1 がこの利用者アカウントを信用するのを許可する。',
 1807+ 'openidnopolicy' => 'サイトはプライバシーに関する方針を明記していません。',
 1808+ 'openidpolicy' => 'より詳しくは<a target="_new" href="$1">プライバシーに関する方針</a>を確認してください。',
 1809+ 'openidoptional' => '任意',
 1810+ 'openidrequired' => '必須',
 1811+ 'openidnickname' => 'ニックネーム',
 1812+ 'openidfullname' => 'フルネーム',
 1813+ 'openidemail' => '電子メールアドレス',
 1814+ 'openidlanguage' => '言語',
 1815+ 'openidnotavailable' => 'あなたが選んだニックネーム ($1) は既に他の利用者が使っています。',
 1816+ 'openidnotprovided' => 'あなたの OpenID サーバーはニックネームを提供していません(提供できない場合と、提供しないようあなたが指示している場合とがあります)。',
 1817+ 'openidchooseinstructions' => 'すべての利用者はニックネームが必要です。以下の選択肢から1つを選ぶことができます。',
 1818+ 'openidchoosefull' => 'あなたのフルネーム ($1)',
 1819+ 'openidchooseurl' => 'あなたの OpenID から選んだ名前 ($1)',
 1820+ 'openidchooseauto' => '自動生成された名前 ($1)',
 1821+ 'openidchoosemanual' => '名前を別に設定する:',
 1822+ 'openidchooseexisting' => 'このウィキに存在するアカウント:',
 1823+ 'openidchoosepassword' => 'パスワード:',
 1824+ 'openidconvertinstructions' => 'このフォームを使うとあなたの利用者アカウントが OpenID URLを使うように変更できます。',
 1825+ 'openidconvertsuccess' => 'OpenID への変換に成功しました',
 1826+ 'openidconvertsuccesstext' => 'あなたは OpenID の $1 への変換に成功しました。',
 1827+ 'openidconvertyourstext' => 'これは既にあなたの OpenID です。',
 1828+ 'openidconvertothertext' => 'これは他の誰かの OpenID です。',
 1829+ 'openidalreadyloggedin' => "'''$1 さん、あなたは既にログインしています!'''
 1830+
 1831+将来は OpenID を使ってログインしたい場合は、[[Special:OpenIDConvert|あなたのアカウントを OpenID を使うように変換する]]ことができます。",
 1832+ 'openidnousername' => '利用者名が指定されていません。',
 1833+ 'openidbadusername' => '利用者名の指定が不正です。',
 1834+ 'openidautosubmit' => 'このページにあるフォームはあなたが JavaScript を有効にしていれば自動的に送信されるはずです。そうならない場合は、「続ける」ボタンを試してください。',
 1835+ 'openidclientonlytext' => 'あなたはこのウィキのアカウントを他のサイトで OpenID として使うことができません。',
 1836+ 'openidloginlabel' => 'OpenID URL',
 1837+ 'openidlogininstructions' => '{{SITENAME}} はウェブサイト間でのシングルサインオンのための [http://openid.net/ OpenID] 規格に対応しています。OpenID によって、個別のパスワードを使うことなく、たくさんの様々なウェブサイトにログインできるようになります(より詳しい情報は[http://ja.wikipedia.org/wiki/OpenID ウィキペディアの OpenID についての記事]を参照してください)。
 1838+
 1839+あなたが既に {{SITENAME}} でアカウントをもっている場合は、いつもどおりに利用者名とパスワードで[[Special:UserLogin|ログイン]]できます。将来、OpenID を使うためには、通常のログインをした後で[[Special:OpenIDConvert|あなたのアカウントを OpenID に変換する]]ことができます。
 1840+
 1841+多くの [http://openid.net/get/ OpenID プロバイダー]が存在し、あなたは既に別のサービスで OpenID が有効となったアカウントを保持しているかもしれません。',
 1842+ 'openidupdateuserinfo' => '自分の個人情報を更新',
 1843+ 'openid-prefstext' => '[http://openid.net/ OpenID] の設定',
 1844+ 'openid-pref-hide' => 'OpenID でログインしている場合に、あなたの <a href="http://openid.net/">OpenID</a> をあなたの利用者ページで表示しない。',
 1845+ 'openid-pref-update-userinfo-on-login' => 'ログインするたびに、自分の情報を OpenID のペルソナから更新する',
 1846+);
 1847+
 1848+/** Javanese (Basa Jawa)
 1849+ * @author Meursault2004
 1850+ */
 1851+$messages['jv'] = array(
 1852+ 'openidxrds' => 'Berkas Yadis',
 1853+ 'openiderror' => 'Kaluputan vérifikasi',
 1854+ 'openidcancel' => 'Vérifikasi dibatalaké',
 1855+ 'openidfailure' => 'Vérifikasi gagal',
 1856+ 'openidtrustinstructions' => 'Mangga dipriksa yèn panjenengan péngin mbagi data karo $1.',
 1857+ 'openidallowtrust' => 'Marengaké $1 percaya karo rékening panganggo iki.',
 1858+ 'openidnopolicy' => 'Situs iki durung spésifikasi kawicaksanan privasi.',
 1859+ 'openidoptional' => 'Opsional',
 1860+ 'openidrequired' => 'Diperlokaké',
 1861+ 'openidnickname' => 'Jeneng sesinglon',
 1862+ 'openidfullname' => 'Jeneng jangkep',
 1863+ 'openidemail' => 'Alamat e-mail',
 1864+ 'openidlanguage' => 'Basa',
 1865+ 'openidchooseinstructions' => 'Kabèh panganggo prelu jeneng sesinglon;
 1866+panjenengan bisa milih salah siji saka opsi ing ngisor iki.',
 1867+ 'openidchoosefull' => 'Jeneng pepak panjenengan ($1)',
 1868+ 'openidchooseauto' => 'Jeneng ($1) sing digawé sacara otomatis',
 1869+ 'openidchoosemanual' => 'Jeneng miturut pilihan panjenengan:',
 1870+ 'openidchoosepassword' => 'tembung sandhi:',
 1871+);
 1872+
 1873+/** Khmer (ភាសាខ្មែរ)
 1874+ * @author Lovekhmer
 1875+ * @author T-Rithy
 1876+ * @author Thearith
 1877+ * @author គីមស៊្រុន
 1878+ */
 1879+$messages['km'] = array(
 1880+ 'openidconvert' => 'កម្មវិធីបម្លែងOpenID',
 1881+ 'openiderror' => 'កំហុស​ក្នុងការផ្ទៀងផ្ទាត់',
 1882+ 'openidcancel' => 'ការផ្ទៀងផ្ទាត់​ត្រូវបានលុបចោល',
 1883+ 'openidfailure' => 'ការផ្ទៀងផ្ទាត់បរាជ័យ',
 1884+ 'openidsuccess' => 'ផ្ទៀងផ្ទាត់ដោយជោគជ័យ',
 1885+ 'openidtrustinstructions' => 'ចូរ​ពិនិត្យ ប្រសិនបើ​អ្នក​ចង់​ចែករំលែក​ទិន្នន័យ​ជាមួយ $1​។',
 1886+ 'openidoptional' => 'ជាជម្រើស',
 1887+ 'openidrequired' => 'ត្រូវការជាចាំបាច់',
 1888+ 'openidnickname' => 'ឈ្មោះហៅក្រៅ',
 1889+ 'openidfullname' => 'ឈ្មោះពេញ',
 1890+ 'openidemail' => 'អាសយដ្ឋានអ៊ីមែល',
 1891+ 'openidlanguage' => 'ភាសា',
 1892+ 'openidnotavailable' => 'ឈ្មោះហៅក្រៅ​ដែលអ្នកពេញចិត្ត ($1) ត្រូវបានប្រើដោយ​អ្នកប្រើប្រាស់​ម្នាក់​ផ្សេងទៀតហើយ។',
 1893+ 'openidchooseinstructions' => 'អ្នកប្រើប្រាស់ទាំងត្រូវការឈ្មោះហៅក្រៅ
 1894+
 1895+អ្នកអាចជ្រើសរើសពីក្នុងជម្រើសខាងក្រោម។',
 1896+ 'openidchoosefull' => 'ឈ្មោះពេញ​របស់អ្នក ($1)',
 1897+ 'openidchoosemanual' => 'ឈ្មោះនៃជម្រើសរបស់អ្នក:',
 1898+ 'openidchooseexisting' => 'គណនីមាននៅក្នុងវិគីនេះ:',
 1899+ 'openidchoosepassword' => 'ពាក្យសំងាត់៖',
 1900+ 'openidconvertsuccess' => 'បានបម្លែងទៅ OpenID ដោយជោគជ័យ',
 1901+ 'openidconvertyourstext' => 'វាជាOpenIDរបស់អ្នករួចហើយ។',
 1902+ 'openidconvertothertext' => 'វាជាOpenIDរបស់អ្នកដទៃ។',
 1903+ 'openidalreadyloggedin' => "'''អ្នកបានឡុកអ៊ីនរួចហើយ $1!'''
 1904+ប្រសិនបើអ្នកចង់់ប្រើ OpenID ដើម្បីឡុកអ៊ីននាពេលអនាគត អ្នកអាច[[Special:OpenIDConvert|បម្លែងគណនីរបស់អ្នកដើម្បីប្រើ OpenID]]។",
 1905+ 'openidnousername' => 'មិនមានឈ្មោះអ្នកប្រើប្រាស់បានបញ្ជាក់ទេ។',
 1906+ 'openidbadusername' => 'ឈ្មោះមិនត្រឹមត្រូវត្រូវបានបញ្ជាក់',
 1907+ 'openid-pref-hide' => 'លាក់<a href="http://openid.net/">OpenID</a>របស់អ្នកនៅលើទំព័រអ្នកប្រើប្រាស់របស់អ្នក ប្រសិនបើអ្នកឡុកអ៊ីនដោយប្រើOpenID។',
 1908+);
 1909+
 1910+/** Korean (한국어)
 1911+ * @author Ficell
 1912+ * @author Kwj2772
 1913+ */
 1914+$messages['ko'] = array(
 1915+ 'openidlogin' => 'OpenID로 로그인',
 1916+ 'openidserver' => 'OpenID 서버',
 1917+ 'openidconvert' => 'OpenID 변환기',
 1918+ 'openidconfigerror' => 'OpenID 설정 오류',
 1919+ 'openidpermission' => 'OpenID 권한 오류',
 1920+ 'openidemail' => '이메일 주소',
 1921+ 'openidlanguage' => '언어',
 1922+ 'openidchoosepassword' => '비밀번호:',
 1923+ 'openidloginlabel' => 'OpenID URL',
 1924+);
 1925+
 1926+/** Ripoarisch (Ripoarisch)
 1927+ * @author Purodha
 1928+ */
 1929+$messages['ksh'] = array(
 1930+ 'openid-desc' => 'Hee em Wiki met ener [http://openid.net/ OpenID] enlogge, un angerschwoh mer OpenID kennt met enem Metmaacher-Name fum Wiki enlogge.',
 1931+ 'openidlogin' => 'Met OpenID enlogge',
 1932+ 'openidfinish' => 'Et Enlogge met OpenID afschleeße',
 1933+ 'openidserver' => 'OpenID Server',
 1934+ 'openidxrds' => 'Yadis-Dattei',
 1935+ 'openidconvert' => 'OpenID Ömsetzer',
 1936+ 'openiderror' => 'Fähler beim Pröfe',
 1937+ 'openiderrortext' => 'Ene Fähler es opjetrodde beim Pröfe fun de OpenID URL.',
 1938+ 'openidconfigerror' => 'Fähler en dä Aat, wi OpenID opjesaz es',
 1939+ 'openidconfigerrortext' => 'Dem OpenID sing Enstellung för Date affzelääje es nit en Odenung.
 1940+Beß esu joot un don enem [[Special:ListUsers/sysop|Wiki-Köbes]] dofun verzälle.',
 1941+ 'openidpermission' => 'Fähler mem Rääsch en OpenID',
 1942+ 'openidpermissiontext' => 'Met de aanjejovve OpenID darrfs de hee ävver nit enlogge.',
 1943+ 'openidcancel' => 'Övverpröfung affjebroche',
 1944+ 'openidcanceltext' => 'De Övverpröfung fun dä OpenID URL woht affjebroche.',
 1945+ 'openidfailure' => 'Övverpröfung jingk donevve',
 1946+ 'openidfailuretext' => 'De Pröfung fun de OpenID URL es donevve jejange.
 1947+Dä Fähler wohr: „$1“',
 1948+ 'openidsuccess' => 'De Pröfung hät jeflupp',
 1949+ 'openidsuccesstext' => 'De Pröfung fun dä OpenID URL hät jot jejange.',
 1950+ 'openidusernameprefix' => 'OpenID Metmaacher',
 1951+ 'openidserverlogininstructions' => 'Donn Ding Passwoot onge enjävve, öm als dä Metmaacher $2 op $3 enzelogge — de Metmaacher-Sigg es $1.',
 1952+ 'openidtrustinstructions' => 'Loor, ov De de Date met $1 deile wells.',
 1953+ 'openidallowtrust' => 'Donn däm $1 zojestonn, däm Metmaacher ze verdraue.',
 1954+ 'openidnopolicy' => 'Die Websait udder dä Server hät nix aanjejovve övver der Schotz fun private Date.',
 1955+ 'openidpolicy' => 'Loor Der de <a target="_new" href="$1">Räjele för der Schotz fun private Date</a> aan, wann De mieh do drövver wesse wels.',
 1956+ 'openidoptional' => 'Nit nüdesch',
 1957+ 'openidrequired' => 'Nüdesch',
 1958+ 'openidnickname' => 'Spetznam',
 1959+ 'openidfullname' => 'Der janze Name',
 1960+ 'openidemail' => 'De e-mail Address',
 1961+ 'openidlanguage' => 'Sproch',
 1962+ 'openidnotavailable' => 'Dinge leevste Spetznam, „$1“, es ald beleesch,
 1963+un enen anderen Metmaacher es dä am bruche.',
 1964+ 'openidnotprovided' => 'Dinge OpenID Server hät keine Spetzname aanjejovve. Künnt sin, hä kann dat nit, künnt sin, Do häss_et imm verbodde.',
 1965+ 'openidchooseinstructions' => 'Jede Metmaacher bruch enne Spetznam,
 1966+Do kannß Der der Dinge unge druß üßsöke.',
 1967+ 'openidchoosefull' => 'Dinge komplätte Name ($1)',
 1968+ 'openidchooseurl' => 'Enne Name uß Dinge OpenID eruß jejreffe ($1)',
 1969+ 'openidchooseauto' => 'Enne automattesch zerääsch jemaate Name ($1)',
 1970+ 'openidchoosemanual' => 'Ene Name, dä De Der sellver ußjedaach un jejovve häs:',
 1971+ 'openidchooseexisting' => 'Ene Metmaachername, dä et alld jitt op däm Wiki hee:',
 1972+ 'openidchoosepassword' => 'Paßwoot:',
 1973+ 'openidconvertinstructions' => 'He kanns De Ding Aanmeldung als ene Metmaacher esu aanpasse, dat De en OpenID URL bruche kanns.',
 1974+ 'openidconvertsuccess' => 'De Aanpassung aan OpenID hät jeklapp',
 1975+ 'openidconvertsuccesstext' => 'Do häß Ding OpenID jez ömjewandelt noh $1.',
 1976+ 'openidconvertyourstext' => 'Dat es ald Ding OpenID.',
 1977+ 'openidconvertothertext' => 'Dat wämm anders sing OpenID.',
 1978+ 'openidalreadyloggedin' => "'''Leeven $1, Do bes all enjelogg.'''
 1979+
 1980+Wann De OpenID zom Enlogge bruche wells, spääder, dann kanns De
 1981+[[Special:OpenIDConvert|Ding Aanmeldung op OpenID ömstelle]] jonn.",
 1982+ 'openidnousername' => 'Keine Metmaacher-Name aanjejovve.',
 1983+ 'openidbadusername' => 'Ene kapodde Metmaacher-Name aanjejovve.',
 1984+ 'openidautosubmit' => 'Di Sigg enthääld_e Fomulaa för Ennjave, wat automattesch afjeschek weed, wann de Javaskrip enjeschalldt häs.
 1985+Wann nit, donn dä \\"Wigger\\" Knopp nemme.',
 1986+ 'openidclientonlytext' => 'Do kann de Aanmelldunge fun hee dämm Wiki nit als <span lang="en">OpenIDs</span> op annder Webßöövere nämme.',
 1987+ 'openidloginlabel' => 'OpenID URL',
 1988+ 'openidlogininstructions' => 'De {{SITENAME}} ongerstöz der <span lang="en">[http://openid.net/ OpenID]</span> Standat för et eijfache un eijmoolije Enlogge zwesche diverse Websigge.
 1989+<span lang="en">OpenID</span> määd_et müjjesch, dat mer op ongerscheedlijje Websigge enlogge kann, oohne dat mer övverall en annder Paßwoot bruch.
 1990+Loor Der [http://ksh.wikipedia.org/wiki/OpenID der Wikipedia ier Atikkel övver <span lang="en">OpenID</span>] aan, do steit noch mieh dren.
 1991+
 1992+Wann de alld aanjemeldt bes op de {{SITENAME}}, dann kanns De met Dingem Metmaacher-Name un Paßwoot [[Special:UserLogin|enlogge]] wi sönß och.
 1993+Öm spääder och <span lang="en">OpenID</span> ze bruche, kann noh_m nomaale Enlogge Ding Aanmeldungsdate [[Special:OpenIDConvert|op <span lang="en">OpenID</span> ömstelle]].
 1994+
 1995+Et jitt en jruuße Zahl [http://wiki.openid.net/Public_OpenID_providers <span lang="en">OpenID Provider</span> för de Öffentleschkeit], un et künnt joot sin, dat De alld ene <span lang="en">OpenID</span>-fä\'ijje Zojang häß, op däm eine udder andere Server.
 1996+<!--
 1997+; Annder Wikis : Wann De op enem Wiki aanjemelldt bes, wat <span lang="en">OpenID</span> ongerschtöz, zem Beispöll [http://wikitravel.org/ Wikitravel], [http://www.wikihow.com/ wikiHow], [http://vinismo.com/ Vinismo], [http://aboutus.org/ AboutUs] udder [http://kei.ki/ Keiki], kanns de hee op de {{SITENAME}} enlogge, indämm dat De de komplätte URL fun Dinge Metmaacher-Sigg op däm aandere Wiki hee bovve endrähß. Zem Beispöll esu jät wi: \'\'<nowiki>http://kei.ki/en/User:Evan</nowiki>\'\'.
 1998+; [http://openid.yahoo.com/ Yahoo!] : Wann De bei <span lang="en">Yahoo!</span> aanjemelldt bes, kanns de hee op de {{SITENAME}} enlogge, indämm dat De de Ding <span lang="en">OpenID URL</span> bovve aanjiß, di De fun <span lang="en">Yahoo!</span> bekumme häß. Di <span lang="en">OpenID URLs</span> sinn uß wi zem Beispöll: \'\'<nowiki>https://me.yahoo.com/DingeMetmaacherName</nowiki>\'\'.
 1999+; [http://dev.aol.com/aol-and-63-million-openids AOL] : Wann de ene zohjang op [http://www.aol.com/ AOL] häß, esu jet wie ennen Zojang zom [http://www.aim.com/ AIM], do kanns de Desch hee op de {{SITENAME}} enlogge, indämm dat De de Ding <span lang="en">OpenID</span> bovve enjiß. De <span lang="en">OpenID URLs</span> fun AOL sen opjebout wi \'\'<nowiki>http://openid.aol.com/dingemetmaachername</nowiki>\'\'. Dinge Metmaacher-Name sullt uß luuter Kleinbochstave bestonn, kein Zwescheräum.
 2000+; [http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html Blogger], [http://faq.wordpress.com/2007/03/06/what-is-openid/ Wordpress.com], [http://www.livejournal.com/openid/about.bml LiveJournal], [http://bradfitz.vox.com/library/post/openid-for-vox.html Vox] : Wann de e <span lang="en">Blog</span> op einem fun dä Söövere häß, dann draach der Url fu Dingem <span lang="en">Blog</span> bovve en. Zem Beispöll: \'\'<nowiki>http://dingeblogname.blogspot.com/</nowiki>\'\', \'\'<nowiki>http://dingeblogname.wordpress.com/</nowiki>\'\', \'\'<nowiki>http://dingeblogname.livejournal.com/</nowiki>\'\', udder \'\'<nowiki>http://dingeblogname.vox.com/</nowiki>\'\'.
 2001+<!-- -->',
 2002+ 'openidupdateuserinfo' => 'Donn ming päsöönlijje Enstellunge op der neuste Stand bränge',
 2003+ 'openid-prefstext' => '[http://openid.net/ OpenID] Enstellunge',
 2004+ 'openid-pref-hide' => 'Versteich Ding <a lang="en" href="http://openid.net/">OpenID</a> op Dinge Metmaacher-Sigg, wann de met <span lang="en">OpenID</span> enloggs.',
 2005+ 'openid-pref-update-userinfo-on-login' => 'Donn ming Enfomazjuhne vun OpenID jedesmol op der neuste Stand bränge, wann_esch hee enlogge donn',
 2006+);
 2007+
 2008+/** Luxembourgish (Lëtzebuergesch)
 2009+ * @author Robby
 2010+ */
 2011+$messages['lb'] = array(
 2012+ 'openid-desc' => "Sech an d'Wiki matt enger [http://openid.net/ OpenID] aloggen, a sech op aneren Internetsiten, déi OpenID ënerstetzen, matt engem Wiki-Benotzerkont aloggen.",
 2013+ 'openidlogin' => 'Umellen mat OpenID',
 2014+ 'openidfinish' => "D'Aloggen mat OpenID ofschléissen",
 2015+ 'openidserver' => 'OpenID-Server',
 2016+ 'openidxrds' => 'Yadis Fichier',
 2017+ 'openidconvert' => 'OpenID-Ëmwandler',
 2018+ 'openiderror' => 'Feeler bäi der Iwwerpréifung',
 2019+ 'openiderrortext' => 'Beim Iwwerpréifen vun der OpenID URL ass e Feeler geschitt.',
 2020+ 'openidconfigerror' => 'OpenId-Konfiguratiounsfeeler',
 2021+ 'openidconfigerrortext' => "D'OpenID-Späicherastellung fir dës Wiki ass falsch.
 2022+Kontaktéiert w.e.g. een [[Special:ListUsers/sysop|Administrateur]].",
 2023+ 'openidpermission' => 'OpenID-Autorisatiounsfeeler',
 2024+ 'openidpermissiontext' => "D'OpeniD déi Dir uginn hutt ass net erlaabt fir sech op dëse Server anzeloggen.",
 2025+ 'openidcancel' => 'Iwwerpréifung ofgebrach',
 2026+ 'openidcanceltext' => "D'Iwwerpréifung vun der OpenID-URL gouf ofgebrach",
 2027+ 'openidfailure' => 'Feeler bei der Iwwerpréifung',
 2028+ 'openidfailuretext' => 'D\'iwwerpréifung vun der OpeniD URL huet net fonctionnéiert. Feeler Message: "$1"',
 2029+ 'openidsuccess' => 'Iwwerpréifung huet geklappt',
 2030+ 'openidsuccesstext' => "D'Iwwerpréifung vun der OpenID-URL huet geklappt.",
 2031+ 'openidusernameprefix' => 'OpenIDBenotzer',
 2032+ 'openidserverlogininstructions' => 'Gitt ärt Passwuert hei ënnendrënner an, fir iech als Benotzer $2 op $3 unzemellen (Benotzersäit $1).',
 2033+ 'openidtrustinstructions' => 'Klickt un wann Dir Donnéeën mat $1 deele wellt.',
 2034+ 'openidallowtrust' => 'Erlaabt $1 fir dësem Benotzerkont ze vertrauen.',
 2035+ 'openidnopolicy' => 'De Site huet keng Richtlinne fir den Dateschutz uginn.',
 2036+ 'openidpolicy' => 'Fir méi Informatiounen <a target="_new" href="$1">kuckt d\'Dateschutzrichtlinnen</a>.',
 2037+ 'openidoptional' => 'Facultatif',
 2038+ 'openidrequired' => 'Obligatoresch',
 2039+ 'openidnickname' => 'Spëtznumm',
 2040+ 'openidfullname' => 'Ganze Numm',
 2041+ 'openidemail' => 'E-Mailadress',
 2042+ 'openidlanguage' => 'Sprooch',
 2043+ 'openidnotavailable' => 'De Spëtznumm deen Dir wollt hun ($1) gëtt scho vun engem anere Benotzer benotzt.',
 2044+ 'openidnotprovided' => 'Ären OpenID-Server huet kee Spëtznumm ginn (entweder well en dat net kann, oder well Dir him gesot huet dat ne t ze maachen).',
 2045+ 'openidchooseinstructions' => 'All Benotzer brauchen e Spëtznumm; Dir kënnt iech ee vun de Méiglechkeeten ënnendrënner auswielen.',
 2046+ 'openidchoosefull' => 'Äre ganze Numm ($1)',
 2047+ 'openidchooseurl' => 'En Numm gouf vun ärer OpenID ($1) geholl',
 2048+ 'openidchooseauto' => 'Een Numm deen automatesch generéiert gouf ($1)',
 2049+ 'openidchoosemanual' => 'E Numm vun ärer Wiel:',
 2050+ 'openidchooseexisting' => 'E Benotzerkont den et op dëser Wiki scho gëtt:',
 2051+ 'openidchoosepassword' => 'Passwuert:',
 2052+ 'openidconvertinstructions' => 'Mat dësem Formaulaire kënnt dir Äre Benotzerkont ännere fir eng OpenID URL ze benotzen.',
 2053+ 'openidconvertsuccess' => 'An en OpenID-Benotzerkont ëmgewandelt',
 2054+ 'openidconvertsuccesstext' => 'Dir hutt Är OpenID op $1 ëmgewandelt.',
 2055+ 'openidconvertyourstext' => 'Dat ass schon är OpenID.',
 2056+ 'openidconvertothertext' => 'Dëst ass engem anere seng OpenID.',
 2057+ 'openidalreadyloggedin' => "'''Dir sidd schonn ageloggt, $1!'''
 2058+
 2059+Wann Dir OpenID benotze wëllt fir Iech an Zukunft anzeloggen, da kënnt Dir [[Special:OpenIDConvert|Äre Benotzerkont an en OpenID-Benotzerkont ëmwandelen]].",
 2060+ 'openidnousername' => 'Kee Benotzernumm uginn.',
 2061+ 'openidbadusername' => 'Falsche Benotzernumm uginn.',
 2062+ 'openidautosubmit' => 'Op dëser Säit gëtt et e Formulaire deen automatesch soll verschéckt ginn wann Dir JavaScript ageschalt hutt.
 2063+Wann net, da verich et mam Knäppche "Weider"',
 2064+ 'openidclientonlytext' => 'Dir kënnt keng Benotzerkonten aus dëser Wiki als OpendIDen op anere Site benotzen.',
 2065+ 'openidloginlabel' => 'URL vun der OpenID',
 2066+ 'openidlogininstructions' => '{{SITENAME}} ënnerstetzt den [http://openid.net/ OpenID]-Standard fir eng eenheetlech Umeldung fir méi Websiten.
 2067+OpenID mellt Iech bäi ville verschiddene Websäiten un, ouni datt Dir fir jidfer Siten een anert Passwuert gebrauche musst.
 2068+(Méi Informatiounen fannt Dir am [http://de.wikipedia.org/wiki/OpenID Wikipedia-Artikel iwwer OpenID].)
 2069+
 2070+Wann Dir schonn e Benotzerkont op {{SITENAME}} hutt, kënnt Dir Iech ganz normal mat ärem Benotzernumm a Passwuert [[Special:UserLogin|aloggen]].
 2071+Fir an Zukunft OpenID ze benotzen, kënnt Dir [[Special:OpenIDConvert|äre Benotzerkont op OpenID ëmwandelen]], nodeem Dir Iech normal ageloggt huet.
 2072+
 2073+Et gëtt vill [http://openid.net/get/ OpenID-Provider] a méiglecherweis hutt Dir schonn e Benotzerkont mat aktivéierter OpenID bäi engem aneren Ubidder.',
 2074+ 'openidupdateuserinfo' => 'Meng perséinlech Informatiounen aktualiséieren',
 2075+ 'openid-prefstext' => '[http://openid.net/ OpenID]-Astellungen',
 2076+ 'openid-pref-hide' => 'Verstoppt Är <a href="http://openid.net/">OpenID</a> op ärer Benotzersäit, wann dir Iech mat OpenID aloggt.',
 2077+ 'openid-pref-update-userinfo-on-login' => 'Meng Informatiounen vu mengem OpenID-Kont all Kéier aktualiséiere wann ech mech aloggen',
 2078+);
 2079+
 2080+/** Limburgish (Limburgs)
 2081+ * @author Ooswesthoesbes
 2082+ */
 2083+$messages['li'] = array(
 2084+ 'openidchoosepassword' => 'wachwaord:',
 2085+);
 2086+
 2087+/** Lithuanian (Lietuvių)
 2088+ * @author Hugo.arg
 2089+ */
 2090+$messages['lt'] = array(
 2091+ 'openiderror' => 'Tikrinimo klaida',
 2092+ 'openidnickname' => 'Slapyvardis',
 2093+ 'openidfullname' => 'Pilnas vardas',
 2094+ 'openidemail' => 'El. pašto adresas',
 2095+ 'openidlanguage' => 'Kalba',
 2096+ 'openidchoosepassword' => 'slaptažodis:',
 2097+);
 2098+
 2099+/** Eastern Mari (Олык Марий)
 2100+ * @author Сай
 2101+ */
 2102+$messages['mhr'] = array(
 2103+ 'openidchoosepassword' => 'шолыпмут:',
 2104+);
 2105+
 2106+/** Malayalam (മലയാളം)
 2107+ * @author Shijualex
 2108+ */
 2109+$messages['ml'] = array(
 2110+ 'openidlogin' => 'ഓപ്പണ്‍ ഐഡി ഉപയോഗിച്ച് ലോഗിന്‍ ചെയ്യുക',
 2111+ 'openidserver' => 'OpenID സെര്‍‌വര്‍',
 2112+ 'openidcancel' => 'സ്ഥിരീകരണം റദ്ദാക്കിയിരിക്കുന്നു',
 2113+ 'openidfailure' => 'സ്ഥിരീകരണം പരാജയപ്പെട്ടു',
 2114+ 'openidsuccess' => 'സ്ഥിരീകരണം വിജയിച്ചു',
 2115+ 'openidusernameprefix' => 'ഓപ്പണ്‍ ഐഡി ഉപയോക്താവ്',
 2116+ 'openidserverlogininstructions' => '$3യിലേക്ക് $2 എന്ന ഉപയോക്താവായി (ഉപയോക്തൃതാള്‍ $1) ലോഗിന്‍ ചെയ്യുവാന്‍ താങ്കളുടെ രഹസ്യവാക്ക് താഴെ രേഖപ്പെടുത്തുക.',
 2117+ 'openidtrustinstructions' => '$1 താങ്കളുടെ ഡാറ്റ പങ്കുവെക്കണമോ എന്ന കാര്യം പരിശോധിക്കുക.',
 2118+ 'openidnopolicy' => 'സൈറ്റ് സ്വകാര്യതാ നയം കൊടുത്തിട്ടില്ല.',
 2119+ 'openidoptional' => 'നിര്‍ബന്ധമില്ല',
 2120+ 'openidrequired' => 'അത്യാവശ്യമാണ്‌',
 2121+ 'openidnickname' => 'ചെല്ലപ്പേര്',
 2122+ 'openidfullname' => 'പൂര്‍ണ്ണനാമം',
 2123+ 'openidemail' => 'ഇമെയില്‍ വിലാസം',
 2124+ 'openidlanguage' => 'ഭാഷ',
 2125+ 'openidnotavailable' => 'താങ്കള്‍ തിരഞ്ഞെടുത്ത വിളിപ്പേര്‌ ($1) മറ്റൊരാള്‍ ഉപയോഗിക്കുന്നതാണ്‌.',
 2126+ 'openidchooseinstructions' => 'എല്ലാ ഉപയോക്താക്കള്‍ക്കും ഒരു വിളിപ്പേരു ആവശ്യമാണ്‌. താഴെ കൊടുത്തിരിക്കുന്നവയില്‍ നിന്നു ഒരെണ്ണം നിങ്ങള്‍ക്ക് തിരഞ്ഞെടുക്കാവുന്നതാണ്‌.',
 2127+ 'openidchoosefull' => 'താങ്കളുടെ പൂര്‍ണ്ണനാമം ($1)',
 2128+ 'openidchooseurl' => 'താങ്കളുടെ ഓപ്പണ്‍‌ഐഡിയില്‍ നിന്നു തിരഞ്ഞെടുത്ത ഒരു പേര്‌ ($1)',
 2129+ 'openidchooseauto' => 'യാന്ത്രികമായി ഉണ്ടാക്കിയ പേര്‌ ($1)',
 2130+ 'openidchoosemanual' => 'താങ്കള്‍ക്ക് ഇഷ്ടമുള്ള ഒരു പേര്‌:',
 2131+ 'openidchooseexisting' => 'ഈ വിക്കിയില്‍ നിലവിലുള്ള അക്കൗണ്ട്:',
 2132+ 'openidchoosepassword' => 'രഹസ്യവാക്ക്:',
 2133+ 'openidconvertsuccess' => 'ഓപ്പണ്‍ ഐഡിയിലേക്ക് വിജയകരമായി പരിവര്‍ത്തനം ചെയ്തിരിക്കുന്നു',
 2134+ 'openidconvertsuccesstext' => 'താങ്കളുടെ ഓപ്പണ്‍‌ഐഡി $1ലേക്കു വിജയകരമായി പരിവര്‍ത്തനം ചെയ്തിരിക്കുന്നു.',
 2135+ 'openidconvertyourstext' => 'ഇതു ഇപ്പോള്‍ തന്നെ നിങ്ങളുടെ ഓപ്പണ്‍‌ഐഡിയാണ്‌.',
 2136+ 'openidconvertothertext' => 'ഇതു മറ്റാരുടേയോ ഓപ്പണ്‍‌ഐഡിയാണ്‌.',
 2137+ 'openidnousername' => 'ഉപയോക്തൃനാമം തിരഞ്ഞെടുത്തിട്ടില്ല.',
 2138+ 'openidbadusername' => 'അസാധുവായ ഉപയോക്തൃനാമമാണു തിരഞ്ഞെടുത്തിരിക്കുന്നത.',
 2139+ 'openidloginlabel' => 'ഓപ്പണ്‍‌ഐഡി വിലാസം',
 2140+);
 2141+
 2142+/** Marathi (मराठी)
 2143+ * @author Kaustubh
 2144+ */
 2145+$messages['mr'] = array(
 2146+ 'openid-desc' => 'विकिवर [http://openid.net/ ओपनID] वापरून प्रवेश करा, तसेच कुठल्याही इतर ओपनID संकेतस्थळावर विकि सदस्य नाम वापरून प्रवेश करा',
 2147+ 'openidlogin' => 'ओपनID वापरून प्रवेश करा',
 2148+ 'openidfinish' => 'ओपनID प्रवेश प्रक्रिया पूर्ण करा',
 2149+ 'openidserver' => 'ओपनID सर्व्हर',
 2150+ 'openidxrds' => 'Yadis संचिका',
 2151+ 'openidconvert' => 'ओपनID कन्व्हर्टर',
 2152+ 'openiderror' => 'तपासणी त्रुटी',
 2153+ 'openiderrortext' => 'ओपनID URL च्या तपासणीमध्ये त्रुटी आढळलेली आहे.',
 2154+ 'openidconfigerror' => 'ओपनID व्यवस्थापन त्रुटी',
 2155+ 'openidconfigerrortext' => 'या विकिसाठीचे ओपनID जतन व्यवस्थापन चुकीचे आहे.
 2156+कृपया प्रबंधकांशी संपर्क करा.',
 2157+ 'openidpermission' => 'ओपनID परवानगी त्रुटी',
 2158+ 'openidpermissiontext' => 'आपण दिलेल्या ओपनID या सर्व्हरवर प्रवेश करता येणार नाही.',
 2159+ 'openidcancel' => 'तपासणी रद्द',
 2160+ 'openidcanceltext' => 'ओपनID URL ची तपासणी रद्द केलेली आहे.',
 2161+ 'openidfailure' => 'तपासणी पूर्ण झाली नाही',
 2162+ 'openidfailuretext' => 'ओपनID URL ची तपासणी पूर्ण झालेली नाही. त्रुटी संदेश: "$1"',
 2163+ 'openidsuccess' => 'तपासणी पूर्ण',
 2164+ 'openidsuccesstext' => 'ओपनID URL ची तपासणी पूर्ण झालेली आहे.',
 2165+ 'openidusernameprefix' => 'ओपनIDसदस्य',
 2166+ 'openidserverlogininstructions' => '$3 वर $2 या नावाने (सदस्य पान $1) प्रवेश करण्यासाठी आपला परवलीचा शब्द खाली लिहा.',
 2167+ 'openidtrustinstructions' => 'तुम्ही $1 बरोबर डाटा शेअर करू इच्छिता का याची तपासणी करा.',
 2168+ 'openidallowtrust' => '$1 ला ह्या सदस्य खात्यावर विश्वास ठेवण्याची अनुमती द्या.',
 2169+ 'openidnopolicy' => 'संकेतस्थळावर गोपनियता नीती दिलेली नाही.',
 2170+ 'openidpolicy' => 'अधिक माहितीसाठी <a target="_new" href="$1">गुप्तता नीती</a> तपासा.',
 2171+ 'openidoptional' => 'वैकल्पिक',
 2172+ 'openidrequired' => 'आवश्यक',
 2173+ 'openidnickname' => 'टोपणनाव',
 2174+ 'openidfullname' => 'पूर्णनाव',
 2175+ 'openidemail' => 'इमेल पत्ता',
 2176+ 'openidlanguage' => 'भाषा',
 2177+ 'openidnotavailable' => 'तुम्ही दिलेले टोपणनाव ($1) अगोदरच दुसर्‍या सदस्याने वापरलेले आहे.',
 2178+ 'openidnotprovided' => 'तुमच्या ओपनID सर्व्हरने टोपणनाव दिले नाही (कदाचित तो देऊ शकत नसेल किंवा तुम्ही देण्यास मनाई केली असेल).',
 2179+ 'openidchooseinstructions' => 'सर्व सदस्यांना टोपणनाव असणे आवश्यक आहे;
 2180+तुम्ही खाली दिलेल्या नावांमधून एक निवडू शकता.',
 2181+ 'openidchoosefull' => 'तुमचे पूर्ण नाव ($1)',
 2182+ 'openidchooseurl' => 'तुमच्या ओपनID मधून घेतलेले नाव ($1)',
 2183+ 'openidchooseauto' => 'एक आपोआप तयार झालेले नाव ($1)',
 2184+ 'openidchoosemanual' => 'तुमच्या आवडीचे नाव:',
 2185+ 'openidchooseexisting' => 'या विकिवरील अस्तित्वात असलेले सदस्य खाते:',
 2186+ 'openidchoosepassword' => 'परवलीचा शब्द:',
 2187+ 'openidconvertinstructions' => 'हा अर्ज तुम्हाला ओपनID URL वापरण्यासाठी तुमचे सदस्यनाव बदलण्याची परवानगी देतो.',
 2188+ 'openidconvertsuccess' => 'ओपनID मध्ये बदल पूर्ण झालेले आहेत',
 2189+ 'openidconvertsuccesstext' => 'तुम्ही तुमचा ओपनID $1 मध्ये यशस्वीरित्या बदललेला आहे.',
 2190+ 'openidconvertyourstext' => 'हा तुमचाच ओपनID आहे.',
 2191+ 'openidconvertothertext' => 'हा दुसर्‍याचा ओपनID आहे.',
 2192+ 'openidalreadyloggedin' => "'''$1, तुम्ही अगोदरच प्रवेश केलेला आहे!'''
 2193+
 2194+जर तुम्ही भविष्यात ओपनID वापरून प्रवेश करू इच्छित असाल, तर तुम्ही [[Special:OpenIDConvert|तुमचे खाते ओपनID साठी बदलू शकता]].",
 2195+ 'openidnousername' => 'सदस्यनाव दिले नाही.',
 2196+ 'openidbadusername' => 'चुकीचे सदस्यनाव दिले आहे.',
 2197+ 'openidautosubmit' => 'या पानावरील अर्ज जर तुम्ही जावास्क्रीप्ट वापरत असाल तर आपोआप पाठविला जाईल. जर तसे झाले नाही, तर \\"पुढे\\" कळीवर टिचकी मारा.',
 2198+ 'openidclientonlytext' => 'या विकिवरील खाती तुम्ही इतर संकेतस्थळांवर ओपनID म्हणून वापरू शकत नाही.',
 2199+ 'openidloginlabel' => 'ओपनID URL',
 2200+ 'openidlogininstructions' => "{{SITENAME}} [http://openid.net/ ओपनID] वापरून विविध संकेतस्थळांवर प्रवेश करण्याची अनुमती देते.
 2201+ओपनID वापरुन तुम्ही एकाच परवलीच्या शब्दाने विविध संकेतस्थळांवर प्रवेश करू शकता.
 2202+(अधिक माहिती साठी [http://en.wikipedia.org/wiki/OpenID विकिपीडिया वरील ओपनID लेख] पहा.)
 2203+
 2204+जर {{SITENAME}} वर अगोदरच तुमचे खाते असेल, तुम्ही नेहमीप्रमाणे तुमचे सदस्यनाव व परवलीचा शब्द वापरून [[Special:UserLogin|प्रवेश करा]].
 2205+भविष्यात ओपनID वापरण्यासाठी, तुम्ही प्रवेश केल्यानंतर [[Special:OpenIDConvert|तुमचे खाते ओपनID मध्ये बदला]].
 2206+
 2207+अनेक [http://wiki.openid.net/Public_OpenID_providers Public ओपनID वितरक] आहेत, व तुम्ही अगोदरच ओपनID चे खाते उघडले असण्याची शक्यता आहे.
 2208+
 2209+; इतर विकि : जर तुमच्याकडे ओपनID वापरणार्‍या विकिवर खाते असेल, जसे की [http://wikitravel.org/ विकिट्रॅव्हल], [http://www.wikihow.com/ विकिहाऊ], [http://vinismo.com/ विनिस्मो], [http://aboutus.org/ अबाउट‍अस] किंवा [http://kei.ki/ कैकी], तुम्ही {{SITENAME}} वर तुमच्या त्या विकिवरील सदस्य पानाची '''पूर्ण URL''' वरील पृष्ठपेटीमध्ये देऊन प्रवेश करू शकता. उदाहरणार्थ, ''<nowiki>http://kei.ki/en/User:Evan</nowiki>''.
 2210+; [http://openid.yahoo.com/ याहू!] : जर तुमच्याकडे याहू! चे खाते असेल, तर तुम्ही वरील पृष्ठपेटीमध्ये याहू! ने दिलेल्या ओपनID चा वापर करून प्रवेश करू शकता. याहू! ओपनID URL ची रुपरेषा ''<nowiki>https://me.yahoo.com/तुमचेसदस्यनाव</nowiki>'' अशी आहे.
 2211+; [http://dev.aol.com/aol-and-63-million-openids एओएल] : जर तुमच्याकडे [http://www.aol.com/ एओएल]चे खाते असेल, जसे की [http://www.aim.com/ एम] खाते, तुम्ही {{SITENAME}} वर वरील पृष्ठपेटीमध्ये एओएल ने दिलेल्या ओपनID चा वापर करून प्रवेश करू शकता. एओएल ओपनID URL ची रुपरेषा ''<nowiki>http://openid.aol.com/तुमचेसदस्यनाव</nowiki>'' अशी आहे. तुमच्या सदस्यनावात अंतर (space) चालणार नाही.
 2212+; [http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html ब्लॉगर], [http://faq.wordpress.com/2007/03/06/what-is-openid/ वर्डप्रेस.कॉम], [http://www.livejournal.com/openid/about.bml लाईव्ह जर्नल], [http://bradfitz.vox.com/library/post/openid-for-vox.html वॉक्स] : जर यापैकी कुठेही तुमचा ब्लॉग असेल, तर वरील पृष्ठपेटीमध्ये तुमच्या ब्लॉगची URL भरा. उदाहरणार्थ, ''<nowiki>http://yourusername.blogspot.com/</nowiki>'', ''<nowiki>http://yourusername.wordpress.com/</nowiki>'', ''<nowiki>http://yourusername.livejournal.com/</nowiki>'', किंवा ''<nowiki>http://yourusername.vox.com/</nowiki>''.",
 2213+ 'openid-pref-hide' => 'जर तुम्ही ओपनID वापरून प्रवेश केला, तर तुमच्या सदस्यपानावरील तुमचा <a href="http://openid.net/">ओपनID</a> लपवा.',
 2214+);
 2215+
 2216+/** Malay (Bahasa Melayu)
 2217+ * @author Aviator
 2218+ * @author Diagramma Della Verita
 2219+ */
 2220+$messages['ms'] = array(
 2221+ 'openidlogin' => 'Log masuk dengan OpenID',
 2222+ 'openidserver' => 'Pelayan OpenID',
 2223+ 'openidxrds' => 'Fail Yadis',
 2224+ 'openidconvert' => 'Penukar OpenID',
 2225+ 'openiderror' => 'Ralat pengesahan',
 2226+ 'openiderrortext' => 'Berlaku ralat ketika pengesahan URL OpenID.',
 2227+ 'openidconfigerror' => 'Ralat konfigurasi OpenID',
 2228+ 'openidconfigerrortext' => 'Konfigurasi storan OpenID bagi wiki ini tidak sah.
 2229+Sila hubungi [[Special:ListUsers/sysop|pentadbir]].',
 2230+ 'openidpermission' => 'Ralat keizinan OpenID',
 2231+ 'openidcancel' => 'Pengesahan telah dibatalkan',
 2232+ 'openidcanceltext' => 'Pengesahan URL OpenID telah dibatalkan.',
 2233+ 'openidoptional' => 'Pilihan',
 2234+ 'openidrequired' => 'Wajib',
 2235+ 'openidnickname' => 'Nama ringkas',
 2236+ 'openidfullname' => 'Nama penuh',
 2237+ 'openidemail' => 'Alamat e-mel',
 2238+ 'openidlanguage' => 'Bahasa',
 2239+ 'openidchoosefull' => 'Nama penuh anda ($1)',
 2240+ 'openidchooseurl' => 'Nama yang dipilih daripada OpenID anda ($1)',
 2241+ 'openidchooseauto' => 'Nama janaan automatik ($1)',
 2242+ 'openidchoosemanual' => 'Nama pilihan anda:',
 2243+ 'openidchoosepassword' => 'kata laluan:',
 2244+ 'openidconvertinstructions' => 'Gunakan borang ini untuk menukar akaun anda untuk menggunakan OpenID URL.',
 2245+ 'openidconvertsuccess' => 'Berjaya ditukar ke OpenID',
 2246+ 'openidconvertsuccesstext' => 'Anda telah berjaya menukar OpenID ke $1.',
 2247+ 'openidconvertyourstext' => 'OpenID anda seperti yang tertera.',
 2248+ 'openidconvertothertext' => 'OpenID tersebut merupakan milik orang lain.',
 2249+ 'openidalreadyloggedin' => "'''Anda telah log masuk, $1!'''
 2250+
 2251+Sekiranya anda inign menggunakan OpenID untuk log masuk pada masa hadapan, sila [[Special:OpenIDConvert|tukar akaun anda untuk menggunakan OpenID]].",
 2252+ 'openidnousername' => 'Nama pengguna tidak dinyatakan.',
 2253+ 'openidbadusername' => 'Nama pengguna yang dinyatakan tidak sah.',
 2254+ 'openidloginlabel' => 'URL OpenID',
 2255+);
 2256+
 2257+/** Maltese (Malti)
 2258+ * @author Roderick Mallia
 2259+ */
 2260+$messages['mt'] = array(
 2261+ 'openidlanguage' => 'Lingwa',
 2262+);
 2263+
 2264+/** Erzya (Эрзянь)
 2265+ * @author Botuzhaleny-sodamo
 2266+ */
 2267+$messages['myv'] = array(
 2268+ 'openidlanguage' => 'Кель',
 2269+ 'openidchoosepassword' => 'совамо валось:',
 2270+);
 2271+
 2272+/** Nahuatl (Nāhuatl)
 2273+ * @author Fluence
 2274+ */
 2275+$messages['nah'] = array(
 2276+ 'openidemail' => 'E-mailcān',
 2277+ 'openidlanguage' => 'Tlahtōlli',
 2278+ 'openidchoosepassword' => 'tlahtōlichtacāyōtl:',
 2279+);
 2280+
 2281+/** Dutch (Nederlands)
 2282+ * @author Siebrand
 2283+ */
 2284+$messages['nl'] = array(
 2285+ 'openid-desc' => 'Aanmelden bij de wiki met een [http://openid.net/ OpenID] en aanmelden bij andere websites die OpenID ondersteunen met een wikigebruiker',
 2286+ 'openidlogin' => 'Aanmelden met OpenID',
 2287+ 'openidfinish' => 'Aanmelden met OpenID afronden',
 2288+ 'openidserver' => 'OpenID-server',
 2289+ 'openidxrds' => 'Yadis-bestand',
 2290+ 'openidconvert' => 'OpenID-convertor',
 2291+ 'openiderror' => 'Verificatiefout',
 2292+ 'openiderrortext' => 'Er is een fout opgetreden tijdens de verificatie van de OpenID URL.',
 2293+ 'openidconfigerror' => 'Fout in de installatie van OpenID',
 2294+ 'openidconfigerrortext' => "De instellingen van de opslag van OpenID's voor deze wiki kloppen niet.
 2295+Raadpleeg een [[Special:ListUsers/sysop|beheerder]].",
 2296+ 'openidpermission' => 'Fout in de rechten voor OpenID',
 2297+ 'openidpermissiontext' => 'Met de OpenID die u hebt opgegeven kunt u niet aanmelden bij deze server.',
 2298+ 'openidcancel' => 'Verificatie geannuleerd',
 2299+ 'openidcanceltext' => 'De verificatie van de OpenID URL is geannuleerd.',
 2300+ 'openidfailure' => 'Verificatie mislukt',
 2301+ 'openidfailuretext' => 'De verificatie van de OpenID URL is mislukt. Foutmelding: "$1"',
 2302+ 'openidsuccess' => 'Verificatie uitgevoerd',
 2303+ 'openidsuccesstext' => 'De OpenID-URL is geverifieerd.',
 2304+ 'openidusernameprefix' => 'OpenIDGebruiker',
 2305+ 'openidserverlogininstructions' => 'Voer uw wachtwoord hieronder in om aan te melden bij $3 als gebruiker $2 (gebruikerspagina $1).',
 2306+ 'openidtrustinstructions' => 'Controleer of u gegevens wilt delen met $1.',
 2307+ 'openidallowtrust' => 'Toestaan dat $1 deze gebruiker vertrouwt.',
 2308+ 'openidnopolicy' => 'De site heeft geen privacybeleid.',
 2309+ 'openidpolicy' => 'Lees het <a target="_new" href="$1">privacybeleid</a> voor meer informatie.',
 2310+ 'openidoptional' => 'Optioneel',
 2311+ 'openidrequired' => 'Verplicht',
 2312+ 'openidnickname' => 'Nickname',
 2313+ 'openidfullname' => 'Volledige naam',
 2314+ 'openidemail' => 'E-mailadres',
 2315+ 'openidlanguage' => 'Taal',
 2316+ 'openidnotavailable' => 'Uw voorkeursnaam ($1) wordt al gebruikt door een andere gebruiker.',
 2317+ 'openidnotprovided' => 'Uw OpenID-server heeft geen gebruikersnaam opgegeven (omdat het niet wordt ondersteund of omdat u dit zo hebt opgegeven).',
 2318+ 'openidchooseinstructions' => 'Alle gebruikers moeten een gebruikersnaam kiezen. U kunt er een kiezen uit de onderstaande opties.',
 2319+ 'openidchoosefull' => 'Uw volledige naam ($1)',
 2320+ 'openidchooseurl' => 'Een naam uit uw OpenID ($1)',
 2321+ 'openidchooseauto' => 'Een automatisch samengestelde naam ($1)',
 2322+ 'openidchoosemanual' => 'Een te kiezen naam:',
 2323+ 'openidchooseexisting' => 'Een bestaande gebruiker op deze wiki:',
 2324+ 'openidchoosepassword' => 'wachtwoord:',
 2325+ 'openidconvertinstructions' => 'Met dit formulier kunt u uw gebruiker als OpenID URL gebruiken.',
 2326+ 'openidconvertsuccess' => 'Omzetten naar OpenID is uitgevoerd',
 2327+ 'openidconvertsuccesstext' => 'Uw OpenID is omgezet naar $1.',
 2328+ 'openidconvertyourstext' => 'Dat is al uw OpenID.',
 2329+ 'openidconvertothertext' => 'Iemand anders heeft die OpenID al in gebruik.',
 2330+ 'openidalreadyloggedin' => "'''U bent al aangemeld, $1!'''
 2331+
 2332+Als u in de toekomst uw OpenID wilt gebruiken om aan te melden, [[Special:OpenIDConvert|zet uw gebruiker dan om naar OpenID]].",
 2333+ 'openidnousername' => 'Er is geen gebruikersnaam opgegeven.',
 2334+ 'openidbadusername' => 'De opgegeven gebruikersnaam is niet toegestaan.',
 2335+ 'openidautosubmit' => 'Deze pagina bevat een formulier dat automatisch wordt verzonden als JavaScript is ingeschaked.
 2336+Als dat niet werkt, klik dan op de knop "Doorgaan".',
 2337+ 'openidclientonlytext' => 'U kunt gebruikers van deze wiki niet als OpenID gebruiken op een andere site.',
 2338+ 'openidloginlabel' => 'OpenID URL',
 2339+ 'openidlogininstructions' => '{{SITENAME}} ondersteunt de standaard [http://openid.net/ OpenID] voor maar een keer hoeven aanmelden voor meerdere websites.
 2340+Met OpenID kunt u aanmelden bij veel verschillende websites zonder voor iedere site opnieuw een wachtwoord te moeten opgeven.
 2341+Zie het [http://nl.wikipedia.org/wiki/OpenID Wikipedia-artikel over OpenID] voor meer informatie.
 2342+
 2343+Als u al een gebruiker hebt op {{SITENAME}}, dan kunt u aanmelden met uw gebruikersnaam en wachtwoord zoals u normaal doet. Om in de toekomst OpenID te gebruiken, kunt u uw [[Special:OpenIDConvert|gebruiker naar OpenID omzetten]] nadat u hebt aangemeld.
 2344+
 2345+Er zijn veel [http://wiki.openid.net/Public_OpenID_providers publieke OpenID-providers], en wellicht hebt u al een gebruiker voor OpenID bij een andere dienst.',
 2346+ 'openidupdateuserinfo' => 'Mijn persoonlijke gegevens bijwerken',
 2347+ 'openid-prefstext' => 'Voorkeuren [http://openid.net/ OpenID]',
 2348+ 'openid-pref-hide' => 'Bij aanmelden met <a href="http://openid.net/">OpenID</a>, uw OpenID op uw gebruikerspagina verbergen.',
 2349+ 'openid-pref-update-userinfo-on-login' => 'Mijn informatie van mijn OpenID-persona elke keer als ik aanmeld bijwerken',
 2350+);
 2351+
 2352+/** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
 2353+ * @author Gunnernett
 2354+ * @author Harald Khan
 2355+ * @author Jon Harald Søby
 2356+ */
 2357+$messages['nn'] = array(
 2358+ 'openid-desc' => 'Logg inn på wikien med ein [http://openid.net/ OpenID] og logg inn på andre sider som bruker OpenID med kontoen herifrå',
 2359+ 'openidlogin' => 'Logg inn med OpenID',
 2360+ 'openidfinish' => 'Fullfør OpenID-innlogging',
 2361+ 'openidserver' => 'OpenID-tenar',
 2362+ 'openidxrds' => 'Yadis-fil',
 2363+ 'openidconvert' => 'OpenID-konvertering',
 2364+ 'openiderror' => 'Feil under stadfesting',
 2365+ 'openiderrortext' => 'Ein feil oppstod under stadfesting av OpenID-adressa.',
 2366+ 'openidconfigerror' => 'Konfigurasjonsfeil med OpenID',
 2367+ 'openidconfigerrortext' => 'Lagreoppsettet for OpenID på denne wikien er ugyldig.
 2368+Kontakt ein [[Special:ListUsers/sysop|administrator]].',
 2369+ 'openidpermission' => 'Tilgjengefeil med OpenID',
 2370+ 'openidpermissiontext' => 'Du kan ikkje logga deg inn på denne tenaren med OpenID-en du oppgav.',
 2371+ 'openidcancel' => 'Stadfesting avbrote',
 2372+ 'openidcanceltext' => 'Stadfestinga av OpenID-adressa blei avbrote.',
 2373+ 'openidfailure' => 'Stadfesting mislukkast',
 2374+ 'openidfailuretext' => 'Stadfestinga av OpenID-adressa mislukkast. Feilmelding: «$1»',
 2375+ 'openidsuccess' => 'Stadfestinga lukkast',
 2376+ 'openidsuccesstext' => 'Stadfestinga av OpenID-adressa lukkast.',
 2377+ 'openidusernameprefix' => 'OpenID-brukar',
 2378+ 'openidserverlogininstructions' => 'Skriv inn passordet ditt nedanfor for å logga deg inn på $3 som $2 (brukarsida $1).',
 2379+ 'openidtrustinstructions' => 'Sjekk om du ynskjer å dela data med $1.',
 2380+ 'openidallowtrust' => 'Lat $1 stola på denne kontoen.',
 2381+ 'openidnopolicy' => 'Sida har inga personvernerklæring.',
 2382+ 'openidpolicy' => 'Sjekk <a href="_new" href="$1">personvernerklæringa</a> for meir informasjon.',
 2383+ 'openidoptional' => 'Valfri',
 2384+ 'openidrequired' => 'Påkravd',
 2385+ 'openidnickname' => 'Kallenamn',
 2386+ 'openidfullname' => 'Fullt namn',
 2387+ 'openidemail' => 'E-postadressa',
 2388+ 'openidlanguage' => 'Språk',
 2389+ 'openidnotavailable' => 'Føretrukke kallenamn ($1) blir allereie nytta av ein annan brukar.',
 2390+ 'openidnotprovided' => 'OpenID-tenaren din oppgav ikkje eit kallenamn (anten med di han ikkje kunne det, eller med di du har sagt at han ikkje skal gjera det).',
 2391+ 'openidchooseinstructions' => 'All brukarar må ha eit kallenamn; du kan velja mellom vala nedanfor.',
 2392+ 'openidchoosefull' => 'Fullt namn ($1)',
 2393+ 'openidchooseurl' => 'Eit namn teke frå OpenID-en din ($1)',
 2394+ 'openidchooseauto' => 'Eit automatisk oppretta namn ($1)',
 2395+ 'openidchoosemanual' => 'Eit valfritt namn:',
 2396+ 'openidchooseexisting' => 'Ein konto på denne wikien som finst frå før:',
 2397+ 'openidchoosepassword' => 'passord:',
 2398+ 'openidconvertinstructions' => 'Dette skjemaet lèt deg endra brukarkontoen din slik at han kan nytta ei OpenID-adressa.',
 2399+ 'openidconvertsuccess' => 'Konverterte til OpenID',
 2400+ 'openidconvertsuccesstext' => 'Du har konvertert din OpenID til $1.',
 2401+ 'openidconvertyourstext' => 'Det er allereie din OpenID.',
 2402+ 'openidconvertothertext' => 'Den OpenID-en tilhøyrer einkvan annan.',
 2403+ 'openidalreadyloggedin' => "'''Du er allereie innlogga, $1.'''
 2404+
 2405+Om du ynskjer å nytta OpenID i framtida, kan du [[Special:OpenIDConvert|konvertera kontoen din til å nytta OpenID]].",
 2406+ 'openidnousername' => 'Du oppgav ingen brukarnamn.',
 2407+ 'openidbadusername' => 'Du oppgav eit ugyldig brukarnamn.',
 2408+ 'openidautosubmit' => 'Denne sida inneheld eit skjema som blir levert automatisk om du har JavaSvript slege på. Dersom ikkje, trykk på «Hald fram».',
 2409+ 'openidclientonlytext' => 'Du kan ikkje nytta kontoar frå denne wikien som OpenID på ei onnor sida.',
 2410+ 'openidloginlabel' => 'OpenID-adressa',
 2411+ 'openidlogininstructions' => '{{SITENAME}} støttar [http://openid.net/ OpenID]-standarden for einskapleg innlogging på forskjellige nettstader. OpenID lèt deg logga inn på mange forskjellige nettsider utan at du må nytta forskjellige passord på kvar. (Sjå [http://nn.wikipedia.org/wiki/OpenID Wikipedia-artikkelen om OpenID] for meir informasjon.)
 2412+
 2413+Om du allereie har ein konto på {{SITENAME}}, kan du [[Special:UserLogin|logga på]] som vanleg med brukarnamnet og passordet ditt. For å nytta OpenID i framtida, kan du [[Special:OpenIDConvert|konvertera kontoen din til OpenID]] etter at du har logga inn på vanleg vis.
 2414+
 2415+Det er mange [http://wiki.openid.net/Public_OpenID_providers leverandørar av OpenID], og du kan allereie ha ein OpenID-aktivert konto ein annan stad.',
 2416+ 'openidupdateuserinfo' => 'Oppdatér min personlege informasjon',
 2417+ 'openid-prefstext' => '[http://openid.net/ OpenID] instillingar',
 2418+ 'openid-pref-hide' => 'Gøym <a href="http://openid.net/">OpenID</a> på brukarsida di om du loggar inn med ein.',
 2419+ 'openid-pref-update-userinfo-on-login' => 'Oppdatér informasjonen min frå OpenID-persona kvar gong eg loggar inn',
 2420+);
 2421+
 2422+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
 2423+ * @author Jon Harald Søby
 2424+ */
 2425+$messages['no'] = array(
 2426+ 'openid-desc' => 'Logg inn på wikien med en [http://openid.net/ OpenID] og logg inn på andre sider som bruker OpenID med kontoen herfra',
 2427+ 'openidlogin' => 'Logg inn med OpenID',
 2428+ 'openidfinish' => 'Fullfør OpenID-innlogging',
 2429+ 'openidserver' => 'OpenID-tjener',
 2430+ 'openidxrds' => 'Yadis-fil',
 2431+ 'openidconvert' => 'OpenID-konvertering',
 2432+ 'openiderror' => 'Bekreftelsesfeil',
 2433+ 'openiderrortext' => 'En feil oppsto under bekrefting av OpenID-adressen.',
 2434+ 'openidconfigerror' => 'Oppsettsfeil med OpenID',
 2435+ 'openidconfigerrortext' => 'Lagringsoppsettet for OpenID på denne wikien er ugyldig.
 2436+Vennligst kontakt en [[Special:ListUsers/sysop|administrator]].',
 2437+ 'openidpermission' => 'Tillatelsesfeil med OpenID',
 2438+ 'openidpermissiontext' => 'Du kan ikke logge inn på denne tjeneren med OpenID-en du oppga.',
 2439+ 'openidcancel' => 'Bekreftelse avbrutt',
 2440+ 'openidcanceltext' => 'Bekreftelsen av OpenID-adressen ble avbrutt.',
 2441+ 'openidfailure' => 'Bekreftelse mislyktes',
 2442+ 'openidfailuretext' => 'Bekreftelse av OpenID-adressen mislyktes. Feilbeskjed: «$1»',
 2443+ 'openidsuccess' => 'Bekreftelse lyktes',
 2444+ 'openidsuccesstext' => 'Bekreftelse av OpenID-adressen lyktes.',
 2445+ 'openidusernameprefix' => 'OpenID-bruker',
 2446+ 'openidserverlogininstructions' => 'Skriv inn passordet ditt nedenfor for å logge på $3 som $2 (brukerside $1).',
 2447+ 'openidtrustinstructions' => 'Sjekk om du ønsker å dele data med $1.',
 2448+ 'openidallowtrust' => 'La $1 stole på denne kontoen.',
 2449+ 'openidnopolicy' => 'Siden har ingen personvernerklæring.',
 2450+ 'openidpolicy' => 'Sjekk <a href="_new" href="$1">personvernerklæringen</a> for mer informasjon.',
 2451+ 'openidoptional' => 'Valgfri',
 2452+ 'openidrequired' => 'Påkrevd',
 2453+ 'openidnickname' => 'Kallenavn',
 2454+ 'openidfullname' => 'Fullt navn',
 2455+ 'openidemail' => 'E-postadresse',
 2456+ 'openidlanguage' => 'Språk',
 2457+ 'openidnotavailable' => 'Foretrukket kallenavn ($1) brukes allerede av en annen bruker.',
 2458+ 'openidnotprovided' => 'OpenID-tjeneren din oppga ikke et kallenavn (enten fordi den ikke kunne det, eller fordi du har sagt at den ikke skal gjøre det).',
 2459+ 'openidchooseinstructions' => 'Alle brukere må ha et kallenavn; du kan velge blant valgene nedenfor.',
 2460+ 'openidchoosefull' => 'Fullt navn ($1)',
 2461+ 'openidchooseurl' => 'Et navn tatt fra din OpenID ($1)',
 2462+ 'openidchooseauto' => 'Et automatisk opprettet navn ($1)',
 2463+ 'openidchoosemanual' => 'Et valgfritt navn:',
 2464+ 'openidchooseexisting' => 'En eksisterende konto på denne wikien:',
 2465+ 'openidchoosepassword' => 'passord:',
 2466+ 'openidconvertinstructions' => 'Dette skjemaet lar deg endre brukerkontoen din til å bruke en OpenID-adresse.',
 2467+ 'openidconvertsuccess' => 'Konverterte til OpenID',
 2468+ 'openidconvertsuccesstext' => 'Du har konvertert din OpenID til $1.',
 2469+ 'openidconvertyourstext' => 'Det er allerede din OpenID.',
 2470+ 'openidconvertothertext' => 'Den OpenID-en tilhører noen andre.',
 2471+ 'openidalreadyloggedin' => "'''$1, du er allerede logget inn.'''
 2472+
 2473+Om du ønsker å bruke OpenID i framtiden, kan du [[Special:OpenIDConvert|konvertere kontoen din til å bruke OpenID]].",
 2474+ 'openidnousername' => 'Intet brukernavn oppgitt.',
 2475+ 'openidbadusername' => 'Ugyldig brukernavn oppgitt.',
 2476+ 'openidautosubmit' => 'Denne siden inneholder et skjema som vil leveres automatisk om du har JavaScript slått på. Om ikke, trykk på «Fortsett».',
 2477+ 'openidclientonlytext' => 'Du kan ikke bruke kontoer fra denne wikien som OpenID på en annen side.',
 2478+ 'openidloginlabel' => 'OpenID-adresse',
 2479+ 'openidlogininstructions' => "{{SITENAME}} støtter [http://openid.net/ OpenID]-standarden for enhetlig innlogging på forskjellige nettsteder. OpenID lar deg logge inn på mange forskjellige nettsider uten å bruke forskjellige passord overalt. (Se [http://no.wikipedia.org/wiki/OpenID Wikipedia-artikkelen om OpenID] for mer informasjon.)
 2480+
 2481+Om du allerede har en konto på {{SITENAME}}, kan du logge på som vanlig med ditt brukernavn og passord. For å bruke OpenID i framtiden kan du [[Special:OpenIDConvert|konvertere kontoen din til OpenID]] etter at du har logget inn på vanlig vis.
 2482+
 2483+Det er mange [http://wiki.openid.net/Public_OpenID_providers leverandører av OpenID], og du kan allerede ha en OpenID-aktivert konto et annet sted.
 2484+
 2485+;Andre wikier :Om du har en konto på en OpenID-aktivert wiki, som [http://wikitravel.org/ Wikitravel], [http://wikihow.com/ wikiHow], [http://vinismo.com/ Vinismo], [http://aboutus.org/ AboutUs] eller [http://kei.ki/ Keiki], kan du logge inn på {{SITENAME}} ved å skrive inn den '''fullstendige adressen''' til din brukerside på den wikien i boksen ovenfor. For eksempel ''<nowiki>http://kei.kei/en/User:Eksempel</nowiki>''.
 2486+;[http://openid.yahoo.com/ Yahoo!] :Om du har en konto hos Yahoo! kan du logge inn på denne siden ved å skrive inn OpenID-en din fra Yahoo i boksen ovenfor. Yahoo!s OpenID-adresser har formen ''<nowiki>https://me.yahoo.com/dittbrukernavn</nowiki>''.
 2487+;[http://dev.aol.com/aol-and-63-million-openids AOL] :Om du har en konto hos [http://aol.com/ AOL], for eksempel en [http://aim.com/ AIM]-konto, kan du logge inn på {{SITENAME}} ved å skrive inn OpenID-en din fra AOL i boksen ovenfor. AOLs OpenID-adresser har formen ''<nowiki>http://openid.aol.com/dittbrukernavn</nowiki>''. Brukernavnet må være i små bokstaver og uten mellomrom.
 2488+;[http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html Blogger], [http://faq.wordpress.com/2007/03/06/what-is-openid/ Wordpress.com], [http://www.livejournal.com/openid/about.bml LiveJournal], [http://bradfitz.vox.com/library/post/openid-for-vox.html Vox] :Om du har en konto på en av disse tjenestene, skriv inn adressen til bloggen din i boksen ovenfor. For eksempel ''<nowiki>http://dittbrukernavn.blogspot.com/</nowiki>'', ''<nowiki>http://dittbrukernavn.wordpress.com/</nowiki>'', ''<nowiki>http://dittbrukernavn.livejournal.com/</nowiki>'', or ''<nowiki>http://dittbrukernavn.vox.com/</nowiki>''.",
 2489+ 'openid-pref-hide' => 'Skjul <a href="http://openid.net/">OpenID</a> på brukersiden din om du logger inn med en.',
 2490+);
 2491+
 2492+/** Occitan (Occitan)
 2493+ * @author Cedric31
 2494+ */
 2495+$messages['oc'] = array(
 2496+ 'openid-desc' => "Se connecta al wiki amb [http://openid.net/ OpenID] e se connecta a d'autres sits internet OpenID amb un wiki utilizant un compte d'utilizaire.",
 2497+ 'openidlogin' => 'Se connectar amb OpenID',
 2498+ 'openidfinish' => 'Acabar la connexion OpenID',
 2499+ 'openidserver' => 'Servidor OpenID',
 2500+ 'openidxrds' => 'Fichièr Yadis',
 2501+ 'openidconvert' => 'Convertisseire OpenID',
 2502+ 'openiderror' => 'Error de verificacion',
 2503+ 'openiderrortext' => "Una error es intervenguda pendent la verificacion de l'adreça OpenID.",
 2504+ 'openidconfigerror' => 'Error de configuracion de OpenID',
 2505+ 'openidconfigerrortext' => "L'estocatge de la configuracion OpenID per aqueste wiki es incorrècte.
 2506+Metetz-vos en rapòrt amb l’[[Special:ListUsers/sysop|administrator]].",
 2507+ 'openidpermission' => 'Error de permission OpenID',
 2508+ 'openidpermissiontext' => "L’OpenID qu'avètz provesida es pas autorizada a se connectar sus aqueste servidor.",
 2509+ 'openidcancel' => 'Verificacion anullada',
 2510+ 'openidcanceltext' => 'La verificacion de l’adreça OpenID es estada anullada.',
 2511+ 'openidfailure' => 'Fracàs de la verificacion',
 2512+ 'openidfailuretext' => 'La verificacion de l’adreça OpenID a fracassat. Messatge d’error : « $1 »',
 2513+ 'openidsuccess' => 'Verificacion capitada',
 2514+ 'openidsuccesstext' => 'Verificacion de l’adreça OpenID capitada.',
 2515+ 'openidusernameprefix' => 'Utilizaire OpenID',
 2516+ 'openidserverlogininstructions' => "Picatz vòstre senhal çaijós per vos connectar sus $3 coma utilizaire '''$2''' (pagina d'utilizaire $1).",
 2517+ 'openidtrustinstructions' => 'Marcatz se desiratz partejar las donadas amb $1.',
 2518+ 'openidallowtrust' => "Autoriza $1 a far fisança a aqueste compte d'utilizaire.",
 2519+ 'openidnopolicy' => 'Lo sit a pas indicat una politica de las donadas personnalas.',
 2520+ 'openidpolicy' => 'Verificar la <a target="_new" href="$1">Politica de las donadas personalas</a> per mai d’entresenhas.',
 2521+ 'openidoptional' => 'Facultatiu',
 2522+ 'openidrequired' => 'Exigit',
 2523+ 'openidnickname' => 'Escais',
 2524+ 'openidfullname' => 'Nom complet',
 2525+ 'openidemail' => 'Adreça de corrièr electronic',
 2526+ 'openidlanguage' => 'Lenga',
 2527+ 'openidnotavailable' => 'Vòstre escais preferit ($1) ja es utilizat per un autre utilizaire.',
 2528+ 'openidnotprovided' => "Vòstre servidor OpenID a pas pogut provesir un escais (siá o pòt pas, siá li avètz demandat d'o far pas mai).",
 2529+ 'openidchooseinstructions' => "Totes los utilizaires an besonh d'un escais ; ne podètz causir un a partir de la causida çaijós.",
 2530+ 'openidchoosefull' => 'Vòstre nom complet ($1)',
 2531+ 'openidchooseurl' => 'Un nom es estat causit dempuèi vòstra OpenID ($1)',
 2532+ 'openidchooseauto' => 'Un nom creat automaticament ($1)',
 2533+ 'openidchoosemanual' => "Un nom qu'avètz causit :",
 2534+ 'openidchooseexisting' => 'Un compte existent sus aqueste wiki :',
 2535+ 'openidchoosepassword' => 'Senhal :',
 2536+ 'openidconvertinstructions' => "Aqueste formulari vos daissa cambiar vòstre compte d'utilizaire per utilizar una adreça OpenID.",
 2537+ 'openidconvertsuccess' => 'Convertit amb succès cap a OpenID',
 2538+ 'openidconvertsuccesstext' => 'Avètz convertit amb succès vòstra OpenID cap a $1.',
 2539+ 'openidconvertyourstext' => 'Ja es vòstra OpenID.',
 2540+ 'openidconvertothertext' => "Aquò es quicòm d'autre qu'una OpenID.",
 2541+ 'openidalreadyloggedin' => "'''Ja sètz connectat, $1 !'''
 2542+
 2543+Se desiratz utilizar vòstra OpenID per vos connectar ulteriorament, podètz [[Special:OpenIDConvert|convertir vòstre compte per utilizar OpenID]].",
 2544+ 'openidnousername' => 'Cap de nom d’utilizaire es pas estat indicat.',
 2545+ 'openidbadusername' => 'Un nom d’utilizaire marrit es estat indicat.',
 2546+ 'openidautosubmit' => 'Aquesta pagina compren un formulari que poiriá èsser mandat automaticament se avètz activat JavaScript.
 2547+S’èra pas lo cas, ensajatz lo boton « Contunhar ».',
 2548+ 'openidclientonlytext' => 'Podètz pas utilizar de comptes dempuèi aqueste wiki en tant qu’OpenID sus d’autres sits.',
 2549+ 'openidloginlabel' => 'Adreça OpenID',
 2550+ 'openidlogininstructions' => "{{SITENAME}} supòrta lo format [http://openid.net/ OpenID] estandard per una sola signatura entre de sits Internet.
 2551+OpenID vos permet de vos connectar sus maites sits diferents sens aver d'utilizar un senhal diferent per cadun d’entre eles.
 2552+(Vejatz [http://en.wikipedia.org/wiki/OpenID Wikipedia's OpenID article] per mai d'entresenhas.)
 2553+
 2554+S'avètz ja un compte sus {{SITENAME}}, vos podètz [[Special:UserLogin|connectar]] amb vòstre nom d'utilizaire e son senhal coma de costuma. Per utilizar OpenID, a l’avenidor, podètz [[Special:OpenIDConvert|convertir vòstre compte en OpenID]] aprèp vos èsser connectat normalament.
 2555+
 2556+Existís maites [http://wiki.openid.net/Public_OpenID_providers provesidors d'OpenID publicas], e podètz ja obténer un compte OpenID activat sus un autre servici.",
 2557+ 'openidupdateuserinfo' => 'Metre a jorn mas donadas personalas',
 2558+ 'openid-prefstext' => 'Preferéncias de [http://openid.net/ OpenID]',
 2559+ 'openid-pref-hide' => 'Amaga vòstra <a href="http://openid.net/">OpenID</a> sus vòstra pagina d\'utilizaire, se vos connectaz amb OpenID.',
 2560+ 'openid-pref-update-userinfo-on-login' => 'Metre a jorn mas donadas personalas dempuèi OpenID a cada còp que me connecti',
 2561+);
 2562+
 2563+/** Ossetic (Иронау)
 2564+ * @author Amikeco
 2565+ */
 2566+$messages['os'] = array(
 2567+ 'openidnickname' => 'Фæсномыг',
 2568+ 'openidlanguage' => 'Æвзаг',
 2569+ 'openidchoosepassword' => 'пароль:',
 2570+);
 2571+
 2572+/** Plautdietsch (Plautdietsch)
 2573+ * @author Slomox
 2574+ */
 2575+$messages['pdt'] = array(
 2576+ 'openidchoosepassword' => 'Passwuat:',
 2577+);
 2578+
 2579+/** Polish (Polski)
 2580+ * @author Maikking
 2581+ * @author Sp5uhe
 2582+ */
 2583+$messages['pl'] = array(
 2584+ 'openid-desc' => 'Logowanie się do wiki z użyciem [http://openid.net/ OpenID], oraz logowanie się do innych witryn używających OpenID z użyciem konta użytkownika z wiki',
 2585+ 'openidlogin' => 'Zaloguj używając OpenID',
 2586+ 'openidfinish' => 'Zakończ zalogowanie z użyciem OpenID',
 2587+ 'openidserver' => 'Serwer OpenID',
 2588+ 'openidxrds' => 'Plik Yadis',
 2589+ 'openidconvert' => 'Obsługa OpenID',
 2590+ 'openiderror' => 'Błąd weryfikacji',
 2591+ 'openiderrortext' => 'Wystąpił błąd podczas weryfikacji adresu URL OpenID.',
 2592+ 'openidconfigerror' => 'Błąd konfiguracji OpenID',
 2593+ 'openidconfigerrortext' => 'Konfiguracja przechowywania w OpenID dla tej wiki jest nieprawidłowa.
 2594+Skonsultuj to z [[Special:ListUsers/sysop|administratorem]].',
 2595+ 'openidpermission' => 'Błąd uprawnień OpenID',
 2596+ 'openidpermissiontext' => 'OpenID, które podałeś nie ma uprawnień do logowania na ten serwer.',
 2597+ 'openidcancel' => 'Weryfikacja anulowana',
 2598+ 'openidcanceltext' => 'Weryfikacja adresu URL OpenID została przerwana.',
 2599+ 'openidfailure' => 'Weryfikacja nie powiodła się',
 2600+ 'openidfailuretext' => 'Weryfikacja adresu URL OpenID nie powiodła się. Komunikat o błędzie – „$1”',
 2601+ 'openidsuccess' => 'Weryfikacja udana',
 2602+ 'openidsuccesstext' => 'Zweryfikowano adres URL OpenID.',
 2603+ 'openidusernameprefix' => 'UżytkownikOpenID',
 2604+ 'openidserverlogininstructions' => 'Wpisz swoje hasło, aby zalogować się do $3 jako użytkownik $2 (strona użytkownika $1).',
 2605+ 'openidtrustinstructions' => 'Sprawdź, czy chcesz wymieniać informacje z $1.',
 2606+ 'openidallowtrust' => 'Zezwól $1 na użycie tego konta użytkownika.',
 2607+ 'openidnopolicy' => 'Witryna nie ma określonej polityki prywatności.',
 2608+ 'openidpolicy' => 'Zapoznaj się z <a target="_new" href="$1">polityką prywatności</a> aby uzyskać więcej informacji.',
 2609+ 'openidoptional' => 'Opcjonalnie',
 2610+ 'openidrequired' => 'Wymagane',
 2611+ 'openidnickname' => 'Nazwa użytkownika',
 2612+ 'openidfullname' => 'Imię i nazwisko',
 2613+ 'openidemail' => 'Adres e‐mail',
 2614+ 'openidlanguage' => 'Język',
 2615+ 'openidnotavailable' => 'Wybrana nazwa użytkownika „$1” jest już zajęta.',
 2616+ 'openidnotprovided' => 'Twój serwer OpenID nie dostarczył pseudonimu (dlatego że nie mógł albo mu zabroniłeś).',
 2617+ 'openidchooseinstructions' => 'Wszyscy użytkownicy muszą mieć pseudonim.
 2618+Możesz wybrać spośród propozycji podanych poniżej.',
 2619+ 'openidchoosefull' => 'Twoje imię i nazwisko ($1)',
 2620+ 'openidchooseurl' => 'Nazwa wybrana spośród OpenID ($1)',
 2621+ 'openidchooseauto' => 'Automatycznie utworzono nazwę użytkownika ($1)',
 2622+ 'openidchoosemanual' => 'Nazwa użytkownika wybrana przez Ciebie',
 2623+ 'openidchooseexisting' => 'Istniejące konto na tej wiki',
 2624+ 'openidchoosepassword' => 'hasło',
 2625+ 'openidconvertinstructions' => 'Formularz umożliwia przystosowanie konta użytkownika do korzystania z adresu URL OpenID.',
 2626+ 'openidconvertsuccess' => 'Przełączone na korzystanie z OpenID',
 2627+ 'openidconvertsuccesstext' => 'Zmieniłeś swoje OpenID na $1.',
 2628+ 'openidconvertyourstext' => 'Już masz swój OpenID.',
 2629+ 'openidconvertothertext' => 'To jest OpenID należące do kogoś innego.',
 2630+ 'openidalreadyloggedin' => "'''Jesteś już zalogowany jako $1!'''
 2631+
 2632+Jeśli chcesz w przyszłości używać OpenID do logowania się, możesz [[Special:OpenIDConvert|przełączyć konto na korzystanie z OpenID]].",
 2633+ 'openidnousername' => 'Nie wybrano żadnej nazwy użytkownika.',
 2634+ 'openidbadusername' => 'Wybrano nieprawidłową nazwę użytkownika.',
 2635+ 'openidautosubmit' => 'Strona zawiera formularz, który powinien zostać automatycznie przesłany jeśli masz włączoną obsługę JavaScript.
 2636+Jeśli nie spróbuj wcisnąć klawisz „Kontynuuj”.',
 2637+ 'openidclientonlytext' => 'Nie można korzystać z kont tej wiki jako OpenID w innych witrynach.',
 2638+ 'openidloginlabel' => 'Adres URL OpenID',
 2639+ 'openidlogininstructions' => '{{SITENAME}} korzysta ze standardu [http://openid.net/ OpenID] dla zapewnienia jednolitego uwierzytelnienia pomiędzy różnymi witrynami w sieci Web.
 2640+OpenID pozwala na zalogowanie się do wielu różnych witryn sieci Web bez użycia osobnego hasła dla każdej witryny.
 2641+(Zobacz [http://pl.wikipedia.org/wiki/OpenID artykuł o OpenID w Wikipedii] jeśli chcesz uzyskać więcej informacji.)
 2642+
 2643+Jeśli masz już konto w {{GRAMMAR:MS.lp|{{SITENAME}}}}, możesz [[Specjalna:Userlogin|zalogować się]] jak zwykle używając nazwy użytkownika i hasła.
 2644+Jeśli chcesz w przyszłości używać OpenID do logowania się, możesz [[Special:OpenIDConvert|przełączyć konto na korzystanie z OpenID]] po normalnym zalogowaniu się.
 2645+
 2646+Jest wielu [http://openid.net/get/ operatorów usługi OpenID] i możesz mieć już konto przełączone na korzystanie z OpenID innego usługodawcy.',
 2647+ 'openidupdateuserinfo' => 'Uaktualnij moje dane',
 2648+ 'openid-prefstext' => 'Preferencje [http://openid.net/ OpenID]',
 2649+ 'openid-pref-hide' => 'Ukryj mój adres URL OpenID na stronie użytkownika, jeśli zaloguję się za pomocą OpenID.',
 2650+ 'openid-pref-update-userinfo-on-login' => 'Aktualizuj informacje o mnie z OpenID za każdym razem w czasie logowania',
 2651+);
 2652+
 2653+/** Pashto (پښتو)
 2654+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
 2655+ */
 2656+$messages['ps'] = array(
 2657+ 'openidnickname' => 'کورنی نوم',
 2658+ 'openidfullname' => 'بشپړ نوم',
 2659+ 'openidemail' => 'برېښليک پته',
 2660+ 'openidlanguage' => 'ژبه',
 2661+ 'openidchooseinstructions' => 'ټولو کارونکيو ته د يوه کورني نوم اړتيا شته؛
 2662+تاسو يو نوم د لاندينيو خوښو نه ځانته ټاکلی شی.',
 2663+ 'openidchoosefull' => 'ستاسو بشپړ نوم ($1)',
 2664+ 'openidchoosemanual' => 'ستاسو د خوښې يو نوم:',
 2665+ 'openidchoosepassword' => 'پټنوم:',
 2666+ 'openidnousername' => 'هېڅ يو کارن-نوم نه دی ځانګړی شوی.',
 2667+ 'openidbadusername' => 'يو ناسم کارن-نوم مو ځانګړی کړی.',
 2668+);
 2669+
 2670+/** Portuguese (Português)
 2671+ * @author Lijealso
 2672+ * @author Malafaya
 2673+ */
 2674+$messages['pt'] = array(
 2675+ 'openid-desc' => 'Autentique-se no wiki com um [http://openid.net/ OpenID], e autentique-se noutros sítios que usem OpenID com uma conta de utilizador wiki',
 2676+ 'openidlogin' => 'Autenticação com OpenID',
 2677+ 'openidfinish' => 'Terminar autenticação OpenID',
 2678+ 'openidserver' => 'Servidor OpenID',
 2679+ 'openidxrds' => 'Ficheiro Yadis',
 2680+ 'openidconvert' => 'Conversor de OpenID',
 2681+ 'openiderror' => 'Erro de verificação',
 2682+ 'openiderrortext' => 'Ocorreu um erro durante a verificação da URL OpenID.',
 2683+ 'openidconfigerror' => 'Erro de Configuração do OpenID',
 2684+ 'openidconfigerrortext' => 'A configuração de armazenamento OpenID para este wiki é inválida.
 2685+Por favor, consulte um [[Special:ListUsers/sysop|administrator]].',
 2686+ 'openidpermission' => 'Erro de permissões OpenID',
 2687+ 'openidpermissiontext' => 'O OpenID fornecido não está autorizado a autenticar-se neste servidor.',
 2688+ 'openidcancel' => 'Verificação cancelada',
 2689+ 'openidcanceltext' => 'A verificação da URL OpenID foi cancelada.',
 2690+ 'openidfailure' => 'Verificação falhou',
 2691+ 'openidfailuretext' => 'A verificação da URL OpenID falhou. Mensagem de erro: "$1"',
 2692+ 'openidsuccess' => 'Verificação com sucesso',
 2693+ 'openidsuccesstext' => 'A verificação da URL OpenID foi bem sucedida.',
 2694+ 'openidusernameprefix' => 'UtilizadorOpenID',
 2695+ 'openidserverlogininstructions' => 'Introduza a sua palavra-chave abaixo para se autenticar em $3 como utilizador $2 (página de utilizador $1).',
 2696+ 'openidtrustinstructions' => 'Verifique se pretender partilhar dados com $1.',
 2697+ 'openidallowtrust' => 'Permitir que $1 confie nesta conta de utilizador.',
 2698+ 'openidnopolicy' => 'O sítio não especificou uma política de privacidade.',
 2699+ 'openidpolicy' => 'Consulte a <a target="_new" href="$1">política de privacidade</a> para mais informações.',
 2700+ 'openidoptional' => 'Opcional',
 2701+ 'openidrequired' => 'Requerido',
 2702+ 'openidnickname' => 'Alcunha',
 2703+ 'openidfullname' => 'Nome completo',
 2704+ 'openidemail' => 'Endereço de e-mail',
 2705+ 'openidlanguage' => 'Língua',
 2706+ 'openidnotavailable' => 'A sua alcunha preferida ($1) já está em uso por outro utilizador.',
 2707+ 'openidnotprovided' => 'O seu servidor OpenID não forneceu uma alcunha (ou porque não pôde, ou porque você lhe disse para não o fazer).',
 2708+ 'openidchooseinstructions' => 'Todos os utilizadores precisam de uma alcunha;
 2709+pode escolher uma das opções abaixo.',
 2710+ 'openidchoosefull' => 'O seu nome completo ($1)',
 2711+ 'openidchooseurl' => 'Um nome escolhido a partir do seu OpenID ($1)',
 2712+ 'openidchooseauto' => 'Um nome gerado automaticamente ($1)',
 2713+ 'openidchoosemanual' => 'Um nome à sua escolha:',
 2714+ 'openidchooseexisting' => 'Uma conta existente neste wiki:',
 2715+ 'openidchoosepassword' => 'palavra-chave:',
 2716+ 'openidconvertinstructions' => 'Este formulário permite-lhe alterar a sua conta de utilizador para usar uma URL OpenID.',
 2717+ 'openidconvertsuccess' => 'Convertido para OpenID com sucesso',
 2718+ 'openidconvertsuccesstext' => 'Você converteu com sucesso o seu OpenID para $1.',
 2719+ 'openidconvertyourstext' => 'Esse já é o seu OpenID.',
 2720+ 'openidconvertothertext' => 'Esse é o OpenID de outra pessoa.',
 2721+ 'openidalreadyloggedin' => "'''Você já se encontra autenticado, $1!'''
 2722+
 2723+Se de futuro pretender usar OpenID para se autenticar, pode [[Special:OpenIDConvert|converter a sua conta para usar OpenID]].",
 2724+ 'openidnousername' => 'Nenhum nome de utilizador especificado.',
 2725+ 'openidbadusername' => 'Nome de utilizador especificado inválido.',
 2726+ 'openidautosubmit' => 'Esta página inclui um formulário que deverá ser automaticamente submetido se tiver JavaScript activado.
 2727+Caso contrário, utilize o botão \\"Continuar\\".',
 2728+ 'openidclientonlytext' => 'Você pode usar contas deste wiki como OpenIDs noutro sítio.',
 2729+ 'openidloginlabel' => 'URL do OpenID',
 2730+ 'openidlogininstructions' => '{{SITENAME}} suporta o padrão [http://openid.net/ OpenID] para autenticação única entre sítios Web.
 2731+O OpenID permite-lhe autenticar-se em diversos sítios Web sem usar uma palavra-chave diferente em cada um.
 2732+(Veja [http://pt.wikipedia.org/wiki/OpenID o artigo OpenID na Wikipédia] para mais informação.)
 2733+
 2734+Se já possui uma conta em {{SITENAME}}, pode [[Special:UserLogin|autenticar-se]] com o seu nome de utilizador e palavra-chave como habitualmente.
 2735+Para utilizar o OpenID no futuro, pode [[Special:OpenIDConvert|converter a sua conta em OpenID]] após autenticar-se normalmente.
 2736+
 2737+Existems vários [http://wiki.openid.net/Public_OpenID_providers fornecederes de OpenID], e você poderá já ter uma conta ativada para OpenID noutro serviço.',
 2738+ 'openidupdateuserinfo' => 'Atualizar a minha informação pessoal',
 2739+ 'openid-prefstext' => 'Preferências do [http://openid.net/ OpenID]',
 2740+ 'openid-pref-hide' => 'Esconder o seu <a href="http://openid.net/">OpenID</a> na sua página de utilizador, se se autenticar com OpenID.',
 2741+ 'openid-pref-update-userinfo-on-login' => 'Atualizar a minha informação a partir da minha "persona" OpenID cada vez que me autentico',
 2742+);
 2743+
 2744+/** Brazilian Portuguese (Português do Brasil)
 2745+ * @author Eduardo.mps
 2746+ */
 2747+$messages['pt-br'] = array(
 2748+ 'openid-desc' => 'Autentique-se no wiki com um [http://openid.net/ OpenID], e autentique-se em outros sítios que usem OpenID com uma conta de utilizador wiki',
 2749+ 'openidlogin' => 'Autenticação com OpenID',
 2750+ 'openidfinish' => 'Terminar autenticação OpenID',
 2751+ 'openidserver' => 'Servidor OpenID',
 2752+ 'openidxrds' => 'Arquivo Yadis',
 2753+ 'openidconvert' => 'Conversor de OpenID',
 2754+ 'openiderror' => 'Erro de verificação',
 2755+ 'openiderrortext' => 'Ocorreu um erro durante a verificação da URL OpenID.',
 2756+ 'openidconfigerror' => 'Erro de Configuração do OpenID',
 2757+ 'openidconfigerrortext' => 'A configuração de armazenamento OpenID para este wiki é inválida.
 2758+Por favor, consulte um [[Special:ListUsers/sysop|administrator]].',
 2759+ 'openidpermission' => 'Erro de permissões OpenID',
 2760+ 'openidpermissiontext' => 'O OpenID fornecido não está autorizado a autenticar-se neste servidor.',
 2761+ 'openidcancel' => 'Verificação cancelada',
 2762+ 'openidcanceltext' => 'A verificação da URL OpenID foi cancelada.',
 2763+ 'openidfailure' => 'Verificação falhou',
 2764+ 'openidfailuretext' => 'A verificação da URL OpenID falhou. Mensagem de erro: "$1"',
 2765+ 'openidsuccess' => 'Verificação com sucesso',
 2766+ 'openidsuccesstext' => 'A verificação da URL OpenID foi bem sucedida.',
 2767+ 'openidusernameprefix' => 'UtilizadorOpenID',
 2768+ 'openidserverlogininstructions' => 'Introduza a sua palavra-chave abaixo para se autenticar em $3 como utilizador $2 (página de utilizador $1).',
 2769+ 'openidtrustinstructions' => 'Verifique se pretende compartilhar dados com $1.',
 2770+ 'openidallowtrust' => 'Permitir que $1 confie nesta conta de utilizador.',
 2771+ 'openidnopolicy' => 'O sítio não especificou uma política de privacidade.',
 2772+ 'openidpolicy' => 'Consulte a <a target="_new" href="$1">política de privacidade</a> para mais informações.',
 2773+ 'openidoptional' => 'Opcional',
 2774+ 'openidrequired' => 'Requerido',
 2775+ 'openidnickname' => 'Apelido',
 2776+ 'openidfullname' => 'Nome completo',
 2777+ 'openidemail' => 'Endereço de e-mail',
 2778+ 'openidlanguage' => 'Língua',
 2779+ 'openidnotavailable' => 'O seu apelido preferido ($1) já está em uso por outro utilizador.',
 2780+ 'openidnotprovided' => 'O seu servidor OpenID não forneceu um apelido(ou porque não pôde, ou porque você lhe disse para não o fazer).',
 2781+ 'openidchooseinstructions' => 'Todos os utilizadores precisam de um apelido;
 2782+pode escolher uma das opções abaixo.',
 2783+ 'openidchoosefull' => 'O seu nome completo ($1)',
 2784+ 'openidchooseurl' => 'Um nome escolhido a partir do seu OpenID ($1)',
 2785+ 'openidchooseauto' => 'Um nome gerado automaticamente ($1)',
 2786+ 'openidchoosemanual' => 'Um nome à sua escolha:',
 2787+ 'openidchooseexisting' => 'Uma conta existente neste wiki:',
 2788+ 'openidchoosepassword' => 'palavra-chave:',
 2789+ 'openidconvertinstructions' => 'Este formulário lhe permite alterar a sua conta de utilizador para usar uma URL OpenID.',
 2790+ 'openidconvertsuccess' => 'Convertido para OpenID com sucesso',
 2791+ 'openidconvertsuccesstext' => 'Você converteu com sucesso o seu OpenID para $1.',
 2792+ 'openidconvertyourstext' => 'Esse já é o seu OpenID.',
 2793+ 'openidconvertothertext' => 'Esse é o OpenID de outra pessoa.',
 2794+ 'openidalreadyloggedin' => "'''Você já se encontra autenticado, $1!'''
 2795+
 2796+Se no futuro pretender usar OpenID para se autenticar, pode [[Special:OpenIDConvert|converter a sua conta para usar OpenID]].",
 2797+ 'openidnousername' => 'Nenhum nome de utilizador especificado.',
 2798+ 'openidbadusername' => 'Nome de utilizador especificado inválido.',
 2799+ 'openidautosubmit' => 'Esta página inclui um formulário que deverá ser automaticamente submetido se tiver JavaScript ativado.
 2800+Caso contrário, utilize o botão \\"Continuar\\".',
 2801+ 'openidclientonlytext' => 'Você pode usar contas deste wiki como OpenIDs em outro sítio.',
 2802+ 'openidloginlabel' => 'URL do OpenID',
 2803+ 'openidlogininstructions' => '{{SITENAME}} suporta o padrão [http://openid.net/ OpenID] para autenticação única entre sítios Web.
 2804+O OpenID lhe permite autenticar-se em diversos sítios Web sem usar uma palavra-chave diferente em cada um.
 2805+(Veja [http://pt.wikipedia.org/wiki/OpenID o artigo OpenID na Wikipédia] para mais informação.)
 2806+
 2807+Se já possui uma conta em {{SITENAME}}, pode [[Special:UserLogin|autenticar-se]] com o seu nome de utilizador e palavra-chave como habitualmente.
 2808+Para utilizar o OpenID no futuro, pode [[Special:OpenIDConvert|converter a sua conta em OpenID]] após autenticar-se normalmente.
 2809+
 2810+Existem vários [http://wiki.openid.net/Public_OpenID_providers fornecederes de OpenID], e você poderá já ter uma conta ativada para OpenID em outro serviço.',
 2811+ 'openidupdateuserinfo' => 'Atualizar a minha informação pessoal',
 2812+ 'openid-prefstext' => 'Preferências do [http://openid.net/ OpenID]',
 2813+ 'openid-pref-hide' => 'Esconder o seu <a href="http://openid.net/">OpenID</a> na sua página de utilizador, caso se autentique com OpenID.',
 2814+ 'openid-pref-update-userinfo-on-login' => 'Atualizar a minha informação a partir da minha "persona" OpenID cada vez que me autentico',
 2815+);
 2816+
 2817+/** Romanian (Română)
 2818+ * @author KlaudiuMihaila
 2819+ */
 2820+$messages['ro'] = array(
 2821+ 'openidcancel' => 'Verificare anulată',
 2822+ 'openidfailure' => 'Verificare eşuată',
 2823+ 'openidsuccess' => 'Verificare cu succes',
 2824+ 'openidoptional' => 'Opţional',
 2825+ 'openidemail' => 'Adresă e-mail',
 2826+ 'openidlanguage' => 'Limbă',
 2827+ 'openidchoosemanual' => 'Un nume la alegere:',
 2828+ 'openidchooseexisting' => 'Un cont existent pe acest wiki:',
 2829+ 'openidchoosepassword' => 'parolă:',
 2830+);
 2831+
 2832+/** Tarandíne (Tarandíne)
 2833+ * @author Joetaras
 2834+ */
 2835+$messages['roa-tara'] = array(
 2836+ 'openidxrds' => 'File Yadis',
 2837+ 'openidoptional' => 'Opzionele',
 2838+ 'openidrequired' => 'Richieste',
 2839+ 'openidemail' => 'Indirizze e-mail',
 2840+ 'openidlanguage' => 'Lènghe',
 2841+);
 2842+
 2843+/** Russian (Русский)
 2844+ * @author Aleksandrit
 2845+ * @author Ferrer
 2846+ * @author Александр Сигачёв
 2847+ */
 2848+$messages['ru'] = array(
 2849+ 'openid-desc' => 'Вход в вики с помощью [http://openid.net/ OpenID], а также вход на другие сайты поддерживающие OpenID с помощью учётной записи в вики',
 2850+ 'openidlogin' => 'Вход с помощью OpenID',
 2851+ 'openidfinish' => 'Завершить вход OpenID',
 2852+ 'openidserver' => 'Сервер OpenID',
 2853+ 'openidxrds' => 'Файл Yadis',
 2854+ 'openidconvert' => 'Преобразователь OpenID',
 2855+ 'openiderror' => 'Ошибка проверки полномочий',
 2856+ 'openiderrortext' => 'Во время проверки адреса OpenID произошла ошибка.',
 2857+ 'openidconfigerror' => 'Ошибка настройки OpenID',
 2858+ 'openidconfigerrortext' => 'Настройка хранилища OpenID для этой вики ошибочна.
 2859+Пожалуйста, обратитесь к [[Special:ListUsers/sysop|администратору сайта]].',
 2860+ 'openidpermission' => 'Ошибка прав доступа OpenID',
 2861+ 'openidpermissiontext' => 'Указанный OpenID не позволяет войти на этот сервер.',
 2862+ 'openidcancel' => 'Проверка отменена',
 2863+ 'openidcanceltext' => 'Проверка адреса OpenID была отменена.',
 2864+ 'openidfailure' => 'Проверка неудачна',
 2865+ 'openidfailuretext' => 'Проверка адреса OpenID завершилась неудачей. Сообщение об ошибке: «$1»',
 2866+ 'openidsuccess' => 'Проверка прошла успешно',
 2867+ 'openidsuccesstext' => 'Проверка адреса OpenID прошла успешно.',
 2868+ 'openidusernameprefix' => 'УчастникOpenID',
 2869+ 'openidserverlogininstructions' => 'Введите ниже ваш пароль, чтобы войти на $3 как пользователь $2 (личная страница $1).',
 2870+ 'openidtrustinstructions' => 'Отметьте, если вы хотите предоставить доступ к данным для $1.',
 2871+ 'openidallowtrust' => 'Разрешить $1 доверять этой учётной записи.',
 2872+ 'openidnopolicy' => 'Сайт не указал политику конфиденциальности.',
 2873+ 'openidpolicy' => 'Дополнительную информацию см. в <a target="_new" href="$1">политике конфиденциальности</a>.',
 2874+ 'openidoptional' => 'необязательное',
 2875+ 'openidrequired' => 'обязательное',
 2876+ 'openidnickname' => 'Псевдоним',
 2877+ 'openidfullname' => 'Полное имя',
 2878+ 'openidemail' => 'Адрес эл. почты',
 2879+ 'openidlanguage' => 'Язык',
 2880+ 'openidnotavailable' => 'Указанный вами псевдоним ($1) уже используется другим участником.',
 2881+ 'openidnotprovided' => 'Ваш сервер OpenID не предоставил псевдоним (либо потому, что он не может, либо потому, что вы указали не делать этого)',
 2882+ 'openidchooseinstructions' => 'Каждый участник должен иметь псевдоним;
 2883+вы можете выбрать один из представленных ниже.',
 2884+ 'openidchoosefull' => 'Ваше полное имя ($1)',
 2885+ 'openidchooseurl' => 'Имя, полученное из вашего OpenID ($1)',
 2886+ 'openidchooseauto' => 'Автоматически созданное имя ($1)',
 2887+ 'openidchoosemanual' => 'Имя на ваш выбор:',
 2888+ 'openidchooseexisting' => 'Существующая учётная запись на этой вики:',
 2889+ 'openidchoosepassword' => 'пароль:',
 2890+ 'openidconvertinstructions' => 'Эта форма позволяет вам сменить использование учётной записи на использование адреса OpenID.',
 2891+ 'openidconvertsuccess' => 'Успешное преобразование в OpenID',
 2892+ 'openidconvertsuccesstext' => 'Вы успешно преобразовали ваш OpenID в $1.',
 2893+ 'openidconvertyourstext' => 'Это уже ваш OpenID.',
 2894+ 'openidconvertothertext' => 'Это чужой OpenID.',
 2895+ 'openidalreadyloggedin' => "'''Вы уже вошли, $1!'''
 2896+
 2897+Если вы желаете использовать в будущем вход через OpenID, вы можете [[Special:OpenIDConvert|преобразовать вашу учётную запись для использования в OpenID]].",
 2898+ 'openidnousername' => 'Не указано имя участника.',
 2899+ 'openidbadusername' => 'Указано неверное имя участника.',
 2900+ 'openidautosubmit' => 'Эта страница содержит форму, которая должна быть автоматически отправлена, если у вас включён JavaScript.
 2901+Если этого не произошло, попробуйте нажать на кнопку «Продолжить».',
 2902+ 'openidclientonlytext' => 'Вы не можете использовать учётные записи с этой вики, как OpenID на другом сайте.',
 2903+ 'openidloginlabel' => 'Адрес OpenID',
 2904+ 'openidlogininstructions' => '{{SITENAME}} поддерживает стандарт [http://openid.net/ OpenID], позволяющий использовать одну учётную запись для входа на различные веб-сайты.
 2905+OpenID позволяет вам заходить на различные веб-сайты без указания разных паролей для них
 2906+(подробнее см. [http://ru.wikipedia.org/wiki/OpenID статью об OpenID в Википедии]).
 2907+
 2908+Если вы уже имеете учётную запись на {{SITENAME}}, вы можете [[Special:UserLogin|войти]] как обычно, используя ваши имя пользователя и пароль.
 2909+Чтобы использовать в дальнейшем OpenID, вы можете [[Special:OpenIDConvert|преобразовать вашу учётную запись в OpenID]], после того, как вы вошли обычным образом.
 2910+
 2911+Существует множество [http://wiki.openid.net/Public_OpenID_providers общедоступных провайдеров OpenID], возможно, вы уже имеете учётную запись OpenID на другом сайте.',
 2912+ 'openidupdateuserinfo' => 'Обновить мою личную информацию',
 2913+ 'openid-prefstext' => 'Параметры [http://openid.net/ OpenID]',
 2914+ 'openid-pref-hide' => 'Скрывать ваш <a href="http://openid.net/">OpenID</a> на вашей странице участника, если вы вошли с помощью OpenID.',
 2915+ 'openid-pref-update-userinfo-on-login' => 'Обновлять информацию обо мне через OpenID каждый раз, когда я представляюсь системе',
 2916+);
 2917+
 2918+/** Sicilian (Sicilianu)
 2919+ * @author Santu
 2920+ */
 2921+$messages['scn'] = array(
 2922+ 'openid-desc' => "Fai lu login a la wiki cu [http://openid.net/ OpenID] r a l'àutri siti web ca non ùsanu OpenID cu n'account wiki",
 2923+ 'openidlogin' => 'Login cu OpenID',
 2924+ 'openidfinish' => 'Cumpleta lu login OpenID',
 2925+ 'openidserver' => 'server OpenID',
 2926+ 'openidxrds' => 'file Yadis',
 2927+ 'openidconvert' => 'cunvirtituri OpenID',
 2928+ 'openiderror' => 'Sbàgghiu di virìfica',
 2929+ 'openiderrortext' => "Ci fu n'erruri ntô mentri dâ virìfica di l'URL OpenID.",
 2930+ 'openidconfigerror' => 'Sbàgghiu ntâ cunfigurazzioni OpenID',
 2931+ 'openidconfigerrortext' => 'La cunfigurazzioni dâ mimurizzazzioni di OpenID pi sta wiki non è vàlida.
 2932+Pi favuri addumanna cunzigghiu a nu [[Special:ListUsers/sysop|amministraturi]].',
 2933+ 'openidpermission' => 'Sbàgghiu nna li pirmessi OpenID',
 2934+ 'openidpermissiontext' => "Non vinni pirmuttutu di fari lu login a stu server a l'OpenID ca dasti.",
 2935+ 'openidcancel' => 'Virìfica scancillata',
 2936+ 'openidcanceltext' => "La virìfica di l'URL OpenID vinni scancillata.",
 2937+ 'openidfailure' => 'Virìfica falluta',
 2938+ 'openidfailuretext' => 'La virìfica di l\'URL OpenID fallìu. Missaggiu di erruri: "$1"',
 2939+ 'openidsuccess' => 'Virìfica fatta',
 2940+ 'openidsuccesstext' => "La virìfica di l'URL OpenID vinni fatta cu successu.",
 2941+ 'openidusernameprefix' => 'Utenti OpenID',
 2942+ 'openidserverlogininstructions' => 'Nzirisci di sècutu la tò password pi fari lu login a $3 comu utenti $2 (pàggina utenti $1).',
 2943+ 'openidtrustinstructions' => 'Cuntrolla si disìi cunnivìdiri li dati cu $1.',
 2944+ 'openidallowtrust' => "Pirmetti a $1 di fidàrisi di st'account utenti.",
 2945+ 'openidnopolicy' => "Lu situ non pricisau na pulìtica supr'a la privacy.",
 2946+ 'openidpolicy' => 'Cuntrolla la <a target="_new" href="$1">pulìtica supr\'a la privacy</a> pi chiossai nfurmazzioni.',
 2947+ 'openidoptional' => 'Facultativu',
 2948+ 'openidrequired' => 'Addumannatu',
 2949+ 'openidnickname' => 'Nickname',
 2950+ 'openidfullname' => 'Nomu cumpretu',
 2951+ 'openidemail' => 'Nnirizzu e-mail',
 2952+ 'openidlanguage' => 'Lingua',
 2953+ 'openidnotavailable' => "Lu tò nickname favuritu ($1) ci l'havi già n'àutru utenti.",
 2954+ 'openidnotprovided' => 'Lu tò server OpenID non desi nu nickname (o picchi non potti o picchi ci dicisti di non fàrilu).',
 2955+ 'openidchooseinstructions' => "Tutti l'utenti hannu di bisognu di nu nickname;
 2956+ni poi pigghiari unu di chisti ccà di sècutu.",
 2957+ 'openidchoosefull' => 'Lu tò nomu cumpretu ($1)',
 2958+ 'openidchooseurl' => 'Nu nomu scigghiutu dû tò OpenID ($1)',
 2959+ 'openidchooseauto' => 'Nu nomu giniràtusi sulu ($1)',
 2960+ 'openidchoosemanual' => 'Nu nomu scigghiutu di tia:',
 2961+ 'openidchooseexisting' => "N'account ca ggià c'è nti sta wiki:",
 2962+ 'openidchoosepassword' => 'password:',
 2963+ 'openidconvertinstructions' => 'Stu mòdulu ti duna lu pirmessu di canciari lu tò account pi usari nu URL OpenID.',
 2964+ 'openidconvertsuccess' => 'Canciatu cu successu a OpenID',
 2965+ 'openidconvertsuccesstext' => 'Lu tò OpenID canciau cu sucessu a $1.',
 2966+ 'openidconvertyourstext' => 'Chistu è ggià lu tò OpenID.',
 2967+ 'openidconvertothertext' => "Chistu è l'OpenID di n'àutru.",
 2968+ 'openidalreadyloggedin' => "'''Facisti ggià lu login, $1!'''
 2969+
 2970+Si disìi usari OpenID pi fari lu login ntô futuru, poi [[Special:OpenIDConvert|canciari lu tò account pi utilizzari OpenID]].",
 2971+ 'openidnousername' => 'Nuddu nomu utenti spicificatu.',
 2972+ 'openidbadusername' => 'Nomu utenti spicificatu sbagghiatu.',
 2973+ 'openidautosubmit' => 'Sta pàggina havi nu mòdulu c\'avissi èssiri mannatu autumàticamenti si JavaScript ci l\'hai attivatu. Si, mmeci, nun è accuddì, prova a mùnciri lu buttuni \\"Continue\\".',
 2974+ 'openidclientonlytext' => "Non poi usari li account di sta wiki comu OpenID supra a n'àutru situ.",
 2975+ 'openidloginlabel' => 'URL OpenID',
 2976+ 'openidlogininstructions' => "{{SITENAME}} susteni lu standard [http://openid.net/ OpenID] pô login ùnicu supr'a li siti web.
 2977+OpenID ti pirmetti di riggistràriti nni assai siti web senza utilizzari na password diffirenti pi ognidunu d'iddi.
 2978+(Leggi la [http://en.wikipedia.org/wiki/OpenID vuci di Wikipedia supr'a l'OpenID] pi cchiossai nfurmazzioni.)
 2979+
 2980+Si n'account ci l'hai gìa supr'a {{SITENAME}}, poi fari lu [[Special:UserLogin|login]] cu lu tò nomu utentu e la tò password comu ô sòlitu.
 2981+Pi utilizzari OpenID ntô futuru, poi [[Special:OpenIDConvert|canciari lu tò account a OpenID]] doppu ca hà fattu lu login comu ô sòlitu.
 2982+
 2983+Ci sunnu assai [http://wiki.openid.net/Public_OpenID_providers Provider OpenID pùbbrichi], e tu putissi aviri già n'account abbilitatu a l'OpenID supra a n'àutru sirvizu.
 2984+
 2985+; Àutri wiki : Si pussedi n'account supra a na wiki abbilitata a l'OpenID, comu [http://wikitravel.org/ Wikitravel], [http://www.wikihow.com/ wikiHow], [http://vinismo.com/ Vinismo], [http://aboutus.org/ AboutUs] o [http://kei.ki/ Keiki], poi fari lu login a {{SITENAME}} nzirennu l<nowiki>'</nowiki>'''URL cumpretu''' dâ tò pàggina utenti nti ss'àutra wiki ntô box misu susu. P'asèmpiu, ''<nowiki>http://kei.ki/en/User:Evan</nowiki>''.
 2986+; [http://openid.yahoo.com/ Yahoo!] : Si pussedi n'account cu Yahoo!, poi fari lu login a stu situ nzirennu lu tò OpenID Yahoo! ntô box currispunnenti. Li URL OpenID Yahoo! pussèdunu la furma ''<nowiki>https://me.yahoo.com/yourusername</nowiki>''.
 2987+; [http://dev.aol.com/aol-and-63-million-openids AOL] : Si pussedi n'account cu [http://www.aol.com/ AOL], comu a n'account [http://www.aim.com/ AIM], poi fari lu login a {{SITENAME}} nzirennu lu tò OpenID AOL ntô box curripunnenti. Li URL OpenID AOL pussèdunu la furma ''<nowiki>http://openid.aol.com/yourusername</nowiki>''. Lu tò nomu utenti avissi a èssiri tuttu paru 'n caràttiri nichi, senza spàzii.
 2988+; [http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html Blogger], [http://faq.wordpress.com/2007/03/06/what-is-openid/ Wordpress.com], [http://www.livejournal.com/openid/about.bml LiveJournal], [http://bradfitz.vox.com/library/post/openid-for-vox.html Vox] : Si pussedi nu blog supr'a unu di sti siti, nzirisci l'URL dû blog ntô box currispunnenti. P'asèmpiu, ''<nowiki>http://yourusername.blogspot.com/</nowiki>'', ''<nowiki>http://yourusername.wordpress.com/</nowiki>'', ''<nowiki>http://yourusername.livejournal.com/</nowiki>'', o ''<nowiki>http://yourusername.vox.com/</nowiki>''.",
 2989+ 'openid-pref-hide' => 'Ammuccia lu tò <a href="http://openid.net/">OpenID</a> supr\'a tò pàggina utenti, si fai lu login cu OpenID.',
 2990+);
 2991+
 2992+/** Sinhala (සිංහල)
 2993+ * @author Asiri wiki
 2994+ */
 2995+$messages['si'] = array(
 2996+ 'openidlanguage' => 'භාෂාව',
 2997+);
 2998+
 2999+/** Slovak (Slovenčina)
 3000+ * @author Helix84
 3001+ */
 3002+$messages['sk'] = array(
 3003+ 'openid-desc' => 'Prihlásenie sa na wiki pomocou [http://openid.net/ OpenID] a prihlásenie na iné stránky podporujúce OpenID pomocou používateľského účtu wiki',
 3004+ 'openidlogin' => 'Prihlásiť sa pomocou OpenID',
 3005+ 'openidfinish' => 'Dokončiť prihlásenie pomocou OpenID',
 3006+ 'openidserver' => 'OpenID server',
 3007+ 'openidxrds' => 'Súbor Yadis',
 3008+ 'openidconvert' => 'OpenID konvertor',
 3009+ 'openiderror' => 'Chyba pri overovaní',
 3010+ 'openiderrortext' => 'Počas overovania OpenID URL sa vyskytla chyba.',
 3011+ 'openidconfigerror' => 'Chyba konfigurácie OpenID',
 3012+ 'openidconfigerrortext' => 'Konfigurácia OpenID tejto wiki je neplatná.
 3013+Prosím, poraďte sa so [[Special:ListUsers/sysop|správcom]] tejto webovej lokality.',
 3014+ 'openidpermission' => 'Chyba oprávnení OpenID',
 3015+ 'openidpermissiontext' => 'OpenID, ktorý ste poskytli, nemá oprávnenie prihlásiť sa k tomuto serveru',
 3016+ 'openidcancel' => 'Overovanie bolo zrušené',
 3017+ 'openidcanceltext' => 'Overovanie OpenID URL bolo zrušené.',
 3018+ 'openidfailure' => 'Overovanie bolo zrušené',
 3019+ 'openidfailuretext' => 'Overovanie OpenID URL zlyhalo. Chybová správa: „$1“',
 3020+ 'openidsuccess' => 'Overenie bolo úspešné',
 3021+ 'openidsuccesstext' => 'Overenie OpenID URL bolo úspešné.',
 3022+ 'openidusernameprefix' => 'PoužívateľOpenID',
 3023+ 'openidserverlogininstructions' => 'Dolu zadajte heslo pre prihlásenie na $3 ako používateľ $2 (používateľská stránka $1).',
 3024+ 'openidtrustinstructions' => 'Skontrolujte, či chcete zdieľať dáta s používateľom $1.',
 3025+ 'openidallowtrust' => 'Povoliť $1 dôverovať tomuto používateľskému účtu.',
 3026+ 'openidnopolicy' => 'Lokalita nešpecifikovala politiku ochrany osobných údajov.',
 3027+ 'openidpolicy' => 'Viac informácií na stránke <a target="_new" href="$1">Ochrana osobných údajov</a>',
 3028+ 'openidoptional' => 'Voliteľné',
 3029+ 'openidrequired' => 'Požadované',
 3030+ 'openidnickname' => 'Prezývka',
 3031+ 'openidfullname' => 'Plné meno',
 3032+ 'openidemail' => 'Emailová adresa',
 3033+ 'openidlanguage' => 'Jazyk',
 3034+ 'openidnotavailable' => 'Vašu preferovanú prezývku ($1) už používa iný používateľ.',
 3035+ 'openidnotprovided' => 'Váš OpenID server neposkytol prezývku (buď preto, že nemôže alebo preto, že ste mu povedali aby ju neposkytoval).',
 3036+ 'openidchooseinstructions' => 'Každý používateľ musí mať prezývku; môžete si vybrať z dolu uvedených možností.',
 3037+ 'openidchoosefull' => 'Vaše plné meno ($1)',
 3038+ 'openidchooseurl' => 'Meno na základe vášho OpenID ($1)',
 3039+ 'openidchooseauto' => 'Automaticky vytvorené meno ($1)',
 3040+ 'openidchoosemanual' => 'Meno, ktoré si vyberiete:',
 3041+ 'openidchooseexisting' => 'Existujúci účet na tejto wiki:',
 3042+ 'openidchoosepassword' => 'heslo:',
 3043+ 'openidconvertinstructions' => 'Tento formulár vám umožňuje zmeniť váš učet, aby používal OpenID URL.',
 3044+ 'openidconvertsuccess' => 'Úspešne prevedené na OpenID',
 3045+ 'openidconvertsuccesstext' => 'Úspešne ste previedli váš OpenID na $1.',
 3046+ 'openidconvertyourstext' => 'To už je váš OpenID.',
 3047+ 'openidconvertothertext' => 'To je OpenID niekoho iného.',
 3048+ 'openidalreadyloggedin' => "'''Už ste prihlásený, $1!'''
 3049+
 3050+Ak chcete na prihlasovanie v budúcnosti využívať OpenID, môžete [[Special:OpenIDConvert|previesť váš účet na OpenID]].",
 3051+ 'openidnousername' => 'Nebolo zadané používateľské meno.',
 3052+ 'openidbadusername' => 'Bolo zadané chybné používateľské meno.',
 3053+ 'openidautosubmit' => 'Táto stránka obsahuje formulár, ktorý by mal byť automaticky odoslaný ak máte zapnutý JavaScript.
 3054+Ak nie, skúste tlačidlo „Pokračovať“.',
 3055+ 'openidclientonlytext' => 'Nemôžete používať účty z tejto wiki ako OpenID na iných weboch.',
 3056+ 'openidloginlabel' => 'OpenID URL',
 3057+ 'openidlogininstructions' => '{{SITENAME}} podporuje štandard [http://openid.net/ OpenID] na zjednotené prihlasovanie na webstránky.
 3058+OpenID vám umožňuje prihlasovať sa na množstvo rozličných webstránok bez nutnosti používať pre každú odlišné heslo. (Pozri [http://sk.wikipedia.org/wiki/OpenID Článok o OpenID na Wikipédii])
 3059+
 3060+Ak už máte účet na {{GRAMMAR:lokál|{{SITENAME}}}}, môžete sa [[Special:UserLogin|prihlásiť]] pomocou používateľského mena a hesla ako zvyčajne. Ak chcete v budúcnosti používať OpenID, môžete po normálnom prihlásení [[Special:OpenIDConvert|previesť svoj účet na OpenID]].
 3061+
 3062+Existuje množstvo [http://wiki.openid.net/Public_OpenID_providers Verejných poskytovateľov OpenID] a možno už máte účet s podporou OpenID u iného poskytovateľa.',
 3063+ 'openidupdateuserinfo' => 'Aktualizovať moje používateľské informácie',
 3064+ 'openid-prefstext' => 'Nastavenia [http://openid.net/ OpenID]',
 3065+ 'openid-pref-hide' => 'Nezobrazovať váš <a href="http://openid.net/">OpenID</a> na vašej používateľskej stránke ak sa prihlasujete pomocou OpenID.',
 3066+ 'openid-pref-update-userinfo-on-login' => 'Aktualizovať moje informácie z OpenID identity pri každom prihlásení',
 3067+);
 3068+
 3069+/** Serbian Cyrillic ekavian (ћирилица)
 3070+ * @author Sasa Stefanovic
 3071+ * @author Михајло Анђелковић
 3072+ */
 3073+$messages['sr-ec'] = array(
 3074+ 'openidfinish' => 'Заврши OpenID логовање',
 3075+ 'openidserver' => 'OpenID сервер',
 3076+ 'openidconvert' => 'OpenID конвертор',
 3077+ 'openiderror' => 'Грешка приликом верификације',
 3078+ 'openiderrortext' => 'Дошло је до грешке приликом верификације OpenID URL-а.',
 3079+ 'openidconfigerror' => 'Грешка око конфигурације OpenID-а',
 3080+ 'openidpermission' => 'Грешка око OpenID права приступа',
 3081+ 'openidpermissiontext' => 'OpenID-у кога сте навели није дозвољено да се улогује на овај сервер.',
 3082+ 'openidcancel' => 'Верификација поништена',
 3083+ 'openidcanceltext' => 'Верификација OpenID URL-а је поништена.',
 3084+ 'openidfailure' => 'Верификација није прошла',
 3085+ 'openidfailuretext' => 'Верификација OpenID URL-a није прошла. Порука грешке: "$1"',
 3086+ 'openidsuccess' => 'Верификација успешна',
 3087+ 'openidsuccesstext' => 'Верификација OpenID URL-а је била успешна.',
 3088+ 'openidoptional' => 'Необавезно',
 3089+ 'openidrequired' => 'Обавезно',
 3090+ 'openidnickname' => 'Надимак',
 3091+ 'openidfullname' => 'Пуно име',
 3092+ 'openidemail' => 'Е-пошта',
 3093+ 'openidlanguage' => 'Језик',
 3094+ 'openidchooseinstructions' => 'Сваки корисник треба да има надимак;
 3095+Можете да изаберете једну од опција испод.',
 3096+ 'openidchoosefull' => 'Важе пуно име ($1)',
 3097+ 'openidchooseurl' => 'Име преузето од вашег OpenID ($1)',
 3098+ 'openidchooseauto' => 'Аутоматски генерисано корисничко име ($1)',
 3099+ 'openidchoosemanual' => 'Изаберите корисничко име:',
 3100+ 'openidchooseexisting' => 'Постојећи налог на овој Вики:',
 3101+ 'openidchoosepassword' => 'лозинка:',
 3102+ 'openidconvertsuccess' => 'Конверзија ка OpenID је успешна',
 3103+ 'openidconvertsuccesstext' => 'Успешно сте прменили свој OpenID на $1.',
 3104+ 'openidconvertyourstext' => 'Тај OpenID је већ ваш.',
 3105+ 'openidconvertothertext' => 'То је туђ OpenID.',
 3106+ 'openidnousername' => 'Није наведено корисничко име.',
 3107+ 'openidbadusername' => 'Задато неисправно корисничко име.',
 3108+ 'openidclientonlytext' => 'Ви не можете да користите налоге са овог Викија као OpenID-ове на другим сајтовима.',
 3109+ 'openidloginlabel' => 'OpenID URL',
 3110+ 'openidupdateuserinfo' => 'Актуализуј моје личне податке',
 3111+ 'openid-prefstext' => '[http://openid.net/ OpenID] подешавања',
 3112+ 'openid-pref-hide' => 'Сакријте свој OpenID URL са корисничке стране, ако се са њим логујете.',
 3113+ 'openid-pref-update-userinfo-on-login' => 'Актуализуј моје информације са OpenID личност сваки пут кад се улогујем',
 3114+);
 3115+
 3116+/** Seeltersk (Seeltersk)
 3117+ * @author Pyt
 3118+ */
 3119+$messages['stq'] = array(
 3120+ 'openid-desc' => 'Anmeldenge an dit Wiki mäd ne [http://openid.net/ OpenID] un anmäldje an uur Websites, do der OpenID unnerstutsje, mäd een Wiki-Benutserkonto.',
 3121+ 'openidlogin' => 'Anmäldje mäd OpenID',
 3122+ 'openidfinish' => 'OpenID-Anmäldenge ousluute',
 3123+ 'openidserver' => 'OpenID-Server',
 3124+ 'openidxrds' => 'Yadis-Doatäi',
 3125+ 'openidconvert' => 'OpenID-Konverter',
 3126+ 'openiderror' => 'Wröige-Failer',
 3127+ 'openiderrortext' => 'Aan Failer is unner ju Wröige fon ju OpenID-URL aptreeden.',
 3128+ 'openidconfigerror' => 'OpenID-Konfigurationsfailer',
 3129+ 'openidconfigerrortext' => 'Ju OpenID-Spiekerkonfiguration foar dit Wiki ist failerhaft.
 3130+Täl n [[Special:ListUsers/sysop|Administrator]] Bescheed.',
 3131+ 'openidpermission' => 'OpenID-Begjuchtigengsfailer',
 3132+ 'openidpermissiontext' => 'Ju anroate OpenID begjuchtiget nit tou Anmäldenge an dissen Server.',
 3133+ 'openidcancel' => 'Wröige oubreeken',
 3134+ 'openidcanceltext' => 'Ju Wröige fon ju OpenID-URL wuud oubreeken.',
 3135+ 'openidfailure' => 'Wröige-Failer',
 3136+ 'openidfailuretext' => 'Ju Wröige fon ju OpenID-URL is failsloain. Failermäldenge: "$1"',
 3137+ 'openidsuccess' => 'Wröige mäd Ärfoulch be-eended',
 3138+ 'openidsuccesstext' => 'Ju Wröige fon ju Open-ID hied Ärfoulch.',
 3139+ 'openidusernameprefix' => 'OpenID-Benutser',
 3140+ 'openidserverlogininstructions' => 'Reek dien Paaswoud unner ien, uum die as Benutser $2 an $3 antoumäldjen (Benutsersiede $1).',
 3141+ 'openidtrustinstructions' => 'Wröich, of du Doaten mäd $1 deele moatest.',
 3142+ 'openidallowtrust' => 'Ferlööwje $1, dissen Benutserkonto tou tjouen.',
 3143+ 'openidnopolicy' => 'Ju Siede häd neen Doatenschuts-Gjuchtlienje anroat.',
 3144+ 'openidpolicy' => 'Wröich ju <a target="_new" href="$1">Doatenschuts-Gjuchtlienje</a> foar moor Informatione.',
 3145+ 'openidoptional' => 'Optionoal',
 3146+ 'openidrequired' => 'Plicht',
 3147+ 'openidnickname' => 'Benutsernoome',
 3148+ 'openidfullname' => 'Fulboodigen Noome',
 3149+ 'openidemail' => 'E-Mail-Adresse:',
 3150+ 'openidlanguage' => 'Sproake',
 3151+ 'openidnotavailable' => 'Die Noome ($1), dän du dät ljooste hääst, wäd al fon n uur Benutser ferwoand.',
 3152+ 'openidnotprovided' => 'Dien OpenID-Server unnerstutset neen Spitsnoomen (äntweeder, wil hie et nit kon, of deeruum dät du et him nit ferlööwed hääst).',
 3153+ 'openidchooseinstructions' => 'Aal Benutsere benöödigje n Benutsernoome;
 3154+du koast aan uut ju unnerstoundene Lieste uutwääle.',
 3155+ 'openidchoosefull' => 'Din fulboodigen Noome ($1)',
 3156+ 'openidchooseurl' => 'N Noome uut dien OpenID ($1)',
 3157+ 'openidchooseauto' => 'N automatisk moakeden Noome ($1)',
 3158+ 'openidchoosemanual' => 'N Noome fon dien Woal:',
 3159+ 'openidchooseexisting' => 'N existierend Benutserkonto in dit Wiki:',
 3160+ 'openidchoosepassword' => 'Paaswoud:',
 3161+ 'openidconvertinstructions' => 'Mäd dit Formular koast du dien Benutserkonto tou Benutsenge fon n OpenID-URL fräireeke.',
 3162+ 'openidconvertsuccess' => 'Mäd Ärfoulch ätter OpenID konvertierd',
 3163+ 'openidconvertsuccesstext' => 'Du hääst ju Konvertierenge fon dien OpenID ätter $1 mäd Ärfoulch truchfierd.',
 3164+ 'openidconvertyourstext' => 'Dit is al dien OpenID.',
 3165+ 'openidconvertothertext' => 'Dit is ju OpenID fon uurswäl.',
 3166+ 'openidalreadyloggedin' => "'''Du bäst al anmälded, $1!'''
 3167+
 3168+Wan du OpenID foar kuumende Anmäldefoargonge nutsje moatest, koast du [[Special:OpenIDConvert|dien Benutserkonto ätter OpenID konvertierje]].",
 3169+ 'openidnousername' => 'Naan Benutsernoome anroat.',
 3170+ 'openidbadusername' => 'Falsken Benutsernoome anroat.',
 3171+ 'openidautosubmit' => 'Disse Siede änthaalt n Formular, dät automatisk uurdrain wäd, wan JavaSkript aktivierd is. Fals nit, klik ap „Fääre“.',
 3172+ 'openidclientonlytext' => 'Du koast neen Benutserkonten uut dissen Wiki as OpenID foar uur Sieden ferweende.',
 3173+ 'openidloginlabel' => 'OpenID-URL',
 3174+ 'openidlogininstructions' => "{{SITENAME}} unnerstutset dän [http://openid.net/ OpenID]-Standoard foar ne Anmäldenge foar moorere Websites.
 3175+OpenID mäldet die bie fuul unnerscheedelke Websieden an, sunner dät du foar älke Siede n uur Paaswoud ferweende moast.
 3176+(Moor Informatione bjut die [http://de.wikipedia.org/wiki/OpenID Wikipedia-Artikkel tou OpenID].)
 3177+
 3178+Fals du al n Benutserkonto bie {{SITENAME}} hääst, koast du die gans normoal mäd Benutsernoome un Paaswoud [[Special:UserLogin|anmäldje]].
 3179+Wan du in n Toukumst OpenID ferweende moatest, koast du [[Special:OpenIDConvert|dien Account tou OpenID konvertierje]], ätter dät du die normoal ienlogged hääst.
 3180+
 3181+Dät rakt fuul [http://wiki.openid.net/Public_OpenID_providers eepentelke OpenID-Providere] un muugelkerwiese hääst du al n Benutserkonto mäd aktivierden OpenID bie n uur Anbjooder.
 3182+
 3183+; Uur Sites: Wan du al n Benutserkonto ap n Wiki mäd aktivierde OpenID hääst, as biespilswiese [http://wikitravel.org/ Wikitravel], [http://www.wikihow.com/ wikiHow], [http://vinismo.com/ Vinismo], [http://aboutus.org/ AboutUs] of [http://kei.ki/ Keiki], koast du die bie {{SITENAME}} anmäldje, wan du ju '''komplette URL''' fon dien Benutsersiede ap dän uur Wiki in dät Textfäild hierbuppe ienrakst. Biespilswiese ''<nowiki>http://kei.ki/en/User:Evan</nowiki>''.
 3184+; [http://openid.yahoo.com/ Yahoo!]: Wan du n Yahoo!-Konto hääst, koast du die mäd ju fon Yahoo! anroate OpenID in dät Textfäild hierbuppe anmäldje. Yahoo!-OpenIDs hääbe ju Foarm ''<nowiki>https://me.yahoo.com/dienbenutsernoome</nowiki>''.
 3185+; [http://dev.aol.com/aol-and-63-million-openids AOL]: Wan du n [http://www.aol.com/ AOL]-Konto hääst, biespilswiese n [http://www.aim.com/ AIM]-Benutserkonto, koast du die bie {{SITENAME}} anmäldje, wan du ju fon AOL anroate OpenID in dät Textfäild hierbuppe ienrakst. AOL-OpenIDs hääbe ju Foarm ''<nowiki>http://openid.aol.com/dienbenutsernoome</nowiki>''. Dien Benutsernoome schuul bloot uut litje Bouksteeuwen bestounde un neen Loosteekene änthoolde.
 3186+; [http://bloggerindraft.blogspot.com/2008/01/new-feature-blogger-as-openid-provider.html Blogger], [http://faq.wordpress.com/2007/03/06/what-is-openid/ Wordpress.com], [http://www.livejournal.com/openid/about.bml LiveJournal], [http://bradfitz.vox.com/library/post/openid-for-vox.html Vox]: Wan du ap disse Sieden n Blog hääst, reek ju URL fon dien Blog in dät Textfäild hierbuppe ien. Biespilswiese ''<nowiki>http://deinbenutzername.blogspot.com/</nowiki>'', ''<nowiki>http://deinbenutzername.wordpress.com/</nowiki>'', ''<nowiki>http://deinbenutzername.livejournal.com/</nowiki>'', of ''<nowiki>http://deinbenutzername.vox.com/</nowiki>''.",
 3187+ 'openidupdateuserinfo' => 'Persöönelke Doaten aktualisierje',
 3188+ 'openid-prefstext' => '[http://openid.net/ OpenID] Ienstaalengen',
 3189+ 'openid-pref-hide' => 'Fersteet dien <a href="http://openid.net/">OpenID</a> ap dien Benutsersiede, wan du die mäd OpenID anmäldest.',
 3190+ 'openid-pref-update-userinfo-on-login' => 'Mien Doaten anhound fon dät OpenID-Konto bie älke Login aktualisierje',
 3191+);
 3192+
 3193+/** Sundanese (Basa Sunda)
 3194+ * @author Irwangatot
 3195+ */
 3196+$messages['su'] = array(
 3197+ 'openidnickname' => 'Landihan',
 3198+ 'openidlanguage' => 'Basa',
 3199+ 'openidchoosepassword' => 'sandi:',
 3200+);
 3201+
 3202+/** Swedish (Svenska)
 3203+ * @author Boivie
 3204+ * @author Jon Harald Søby
 3205+ * @author Lokal Profil
 3206+ * @author M.M.S.
 3207+ */
 3208+$messages['sv'] = array(
 3209+ 'openid-desc' => 'Logga in på wikin med en [http://openid.net/ OpenID] och logga in på andra sidor som använder OpenID med konton härifrån',
 3210+ 'openidlogin' => 'Logga in med OpenID',
 3211+ 'openidfinish' => 'Fullfölj OpenID-inloggning',
 3212+ 'openidserver' => 'OpenID-server',
 3213+ 'openidxrds' => 'Yadis-fil',
 3214+ 'openidconvert' => 'OpenID-konvertering',
 3215+ 'openiderror' => 'Bekräftelsefel',
 3216+ 'openiderrortext' => 'Ett fel uppstod under bekräftning av OpenID-adressen.',
 3217+ 'openidconfigerror' => 'Konfigurationsfel med OpenID',
 3218+ 'openidconfigerrortext' => 'Lagringkonfigurationen för OpenID på den här wikin är ogiltig.
 3219+Var god konsultera en [[Special:ListUsers/sysop|administratör]].',
 3220+ 'openidpermission' => 'Tillåtelsefel med OpenID',
 3221+ 'openidpermissiontext' => 'Du kan inte logga in på den här servern med den OpenID du angedde.',
 3222+ 'openidcancel' => 'Bekräftning avbruten',
 3223+ 'openidcanceltext' => 'Bekräftningen av OpenID-adressen avbrytes.',
 3224+ 'openidfailure' => 'Bekräftning misslyckades',
 3225+ 'openidfailuretext' => 'Bekräftning av OpenID-adressen misslyckades. Felmeddelande: "$1"',
 3226+ 'openidsuccess' => 'Bekräftning lyckades',
 3227+ 'openidsuccesstext' => 'Bekräftning av OpenID-adressen lyckades.',
 3228+ 'openidusernameprefix' => 'OpenID-användare',
 3229+ 'openidserverlogininstructions' => 'Skriv in ditt lösenord nedan för att logga in på $3 som $2 (användarsida $1).',
 3230+ 'openidtrustinstructions' => 'Kolla om du vill dela data med $1.',
 3231+ 'openidallowtrust' => 'Tillåter $1 att förlita sig på detta användarkonto.',
 3232+ 'openidnopolicy' => 'Sajten har inga riktlinjer för personlig integritet.',
 3233+ 'openidpolicy' => 'Kolla <a href="_new" href="$1">riktlinjer för personlig integritet</a> för mer information.',
 3234+ 'openidoptional' => 'Valfri',
 3235+ 'openidrequired' => 'Behövs',
 3236+ 'openidnickname' => 'Smeknamn',
 3237+ 'openidfullname' => 'Fullt namn',
 3238+ 'openidemail' => 'E-postadress',
 3239+ 'openidlanguage' => 'Språk',
 3240+ 'openidnotavailable' => 'Ditt framförda användarnamn ($1) används redan av en annan användare.',
 3241+ 'openidnotprovided' => 'Din OpenID-server uppgav inte ett användarnamn (antingen för att den inte kan, eller för att du har sagt till den att den inte ska göra det).',
 3242+ 'openidchooseinstructions' => 'Alla användare måste ha ett användarnamn;
 3243+du kan välja ett från alternativen nedan.',
 3244+ 'openidchoosefull' => 'Fullt namn ($1)',
 3245+ 'openidchooseurl' => 'Ett namn taget från din OpenID ($1)',
 3246+ 'openidchooseauto' => 'Ett automatiskt genererat namn ($1)',
 3247+ 'openidchoosemanual' => 'Ett valfritt namn:',
 3248+ 'openidchooseexisting' => 'Ett existerande konto på denna wiki:',
 3249+ 'openidchoosepassword' => 'lösenord:',
 3250+ 'openidconvertinstructions' => 'Detta formulär låter dig ändra dina användarkonton till att använda en OpenID-adress.',
 3251+ 'openidconvertsuccess' => 'Konverterade till OpenID',
 3252+ 'openidconvertsuccesstext' => 'Du har konverterat din OpenID till $1.',
 3253+ 'openidconvertyourstext' => 'Det är redan din OpenID.',
 3254+ 'openidconvertothertext' => 'Den OpenID tillhör någon annan.',
 3255+ 'openidalreadyloggedin' => "'''Du är redan inloggad, $1!'''
 3256+
 3257+Om du vill använda OpenID att logga in i framtiden, kan du [[Special:OpenIDConvert|konvertera dina konton till att använda OpenID]].",
 3258+ 'openidnousername' => 'Inget användarnamn angivet.',
 3259+ 'openidbadusername' => 'Ogiltigt användarnamn angivet.',
 3260+ 'openidautosubmit' => 'Denna sida innehåller ett formulär som kommer levereras automatiskt om du har slagit på JavaScript. Om inte, tryck på "Fortsätt".',
 3261+ 'openidclientonlytext' => 'Du kan inte använda konton från denna wikin som OpenID på en annan sida.',
 3262+ 'openidloginlabel' => 'OpenID-adress',
 3263+ 'openidlogininstructions' => '{{SITENAME}} stödjer [http://openid.net/ OpenID]-standarden för enhetlig inlogging på många webbsidor.
 3264+OpenID låter dig logga in på många webbsidor utan att använda olika lösenord för varje.
 3265+(Se [http://en.wikipedia.org/wiki/OpenID Wikipedia-artikeln om OpenID] för mer information.)
 3266+
 3267+Om du redan har ett konto på {{SITENAME}}, kan du [[Special:UserLogin|logga in]] som vanligt med ditt användarnamn och lösenord.
 3268+För att använda OpenID i framtiden kan du [[Special:OpenIDConvert|konvertera ditt konton till OpenID]] efter att du har loggat in på normalt sätt.
 3269+
 3270+Det finns många [http://openid.net/get/ leverantörer av OpenID], och du kan redan ha ett OpenID-aktiverat konto på en annan plats.',
 3271+ 'openidupdateuserinfo' => 'Uppdatera min personliga information',
 3272+ 'openid-prefstext' => '[http://openid.net/ OpenID] inställningar',
 3273+ 'openid-pref-hide' => 'Dölj <a href="http://openid.net/">OpenID</a> på din användarsida, om du loggar in med OpenID.',
 3274+ 'openid-pref-update-userinfo-on-login' => 'Uppdatera min informationen från OpenID-persona varje gång jag loggar in',
 3275+);
 3276+
 3277+/** Telugu (తెలుగు)
 3278+ * @author Veeven
 3279+ */
 3280+$messages['te'] = array(
 3281+ 'openidpermission' => 'ఓపెన్ఐడీ అనుమతుల పొరపాటు',
 3282+ 'openidcancel' => 'తనిఖీ రద్దయింది',
 3283+ 'openidfailure' => 'తనిఖీ విఫలమైంది',
 3284+ 'openidsuccess' => 'తనిఖీ విజయవంతమైంది',
 3285+ 'openidoptional' => 'ఐచ్చికం',
 3286+ 'openidrequired' => 'తప్పనిసరి',
 3287+ 'openidnickname' => 'ముద్దుపేరు',
 3288+ 'openidfullname' => 'పూర్తిపేరు',
 3289+ 'openidemail' => 'ఈ-మెయిల్ చిరునామా',
 3290+ 'openidlanguage' => 'భాష',
 3291+ 'openidchoosefull' => 'మీ పూర్తి పేరు ($1)',
 3292+ 'openidchoosemanual' => 'మీరు ఎన్నుకున్న పేరు:',
 3293+ 'openidchooseexisting' => 'ఈ వికీలో ఇప్పటికే ఉన్న ఖాతా:',
 3294+ 'openidchoosepassword' => 'సంకేతపదం:',
 3295+ 'openidconvertyourstext' => 'అది ఇప్పటికే మీ ఓపెన్ఐడీ.',
 3296+ 'openidnousername' => 'వాడుకరిపేరు ఇవ్వలేదు.',
 3297+);
 3298+
 3299+/** Tetum (Tetun)
 3300+ * @author MF-Warburg
 3301+ */
 3302+$messages['tet'] = array(
 3303+ 'openidnickname' => "Naran uza-na'in",
 3304+ 'openidfullname' => 'Naran kompletu',
 3305+ 'openidemail' => 'Diresaun korreiu eletróniku',
 3306+ 'openidlanguage' => 'Lian',
 3307+);
 3308+
 3309+/** Tajik (Cyrillic) (Тоҷикӣ (Cyrillic))
 3310+ * @author Ibrahim
 3311+ */
 3312+$messages['tg-cyrl'] = array(
 3313+ 'openid-desc' => 'Ба вики бо [http://openid.net/ OpenID] вуруд кунед, ва ба дигар сомонаҳои OpenID бо ҳисоби корбарии вики вуруд кунед',
 3314+ 'openidlogin' => 'Бо OpenID вуруд кунед',
 3315+ 'openidfinish' => 'Хотима додан вурудшавии OpenID',
 3316+ 'openidserver' => 'Хидматгузори OpenID',
 3317+ 'openidxrds' => 'Парвандаи Yadis',
 3318+ 'openidconvert' => 'Табдилкунандаи OpenID',
 3319+ 'openiderror' => 'Хатои тасдиқ',
 3320+ 'openiderrortext' => 'Дар ҳолати тасдиқи нишонаи OpenID хатое рух дод.',
 3321+ 'openidconfigerror' => 'Хатои Танзимоти OpenID',
 3322+ 'openidconfigerrortext' => 'Танзимоти захирасозии OpenID барои ин вики номӯътабар аст.
 3323+Лутфан бо мудири сомона тамос бигиред.',
 3324+ 'openidoptional' => 'Ихтиёрӣ',
 3325+ 'openidemail' => 'Нишонаи почтаи электронӣ',
 3326+ 'openidlanguage' => 'Забон',
 3327+ 'openidchoosepassword' => 'гузарвожа:',
 3328+);
 3329+
 3330+/** Thai (ไทย)
 3331+ * @author Passawuth
 3332+ */
 3333+$messages['th'] = array(
 3334+ 'openidemail' => 'อีเมล',
 3335+);
 3336+
 3337+/** Tagalog (Tagalog)
 3338+ * @author AnakngAraw
 3339+ */
 3340+$messages['tl'] = array(
 3341+ 'openid-desc' => 'Lumagda sa wiki na may [http://openid.net/ OpenID], at lumagda sa iba pang mga websayt na nakakaalam sa/nakababatid ng OpenID na may kuwenta/akawnt na pang-wiki',
 3342+ 'openidlogin' => 'Lumagda na may OpenID',
 3343+ 'openidfinish' => 'Tapusin na ang paglagdang pang-OpenID',
 3344+ 'openidserver' => 'Serbidor ng OpenID',
 3345+ 'openidxrds' => 'Talaksang Yadis',
 3346+ 'openidconvert' => 'Tagapagpalit ng OpenID',
 3347+ 'openiderror' => 'Kamalian sa pagpapatunay',
 3348+ 'openiderrortext' => 'Naganap ang isang kamalian habang pinatototohanan ang URL ng OpenID.',
 3349+ 'openidconfigerror' => 'Kamalian sa pagkakaayos ng OpenID',
 3350+ 'openidconfigerrortext' => 'Hindi tanggap ang kaayusang pangtaguan ng OpenID para sa wiking ito.
 3351+Makipagugnayan po lamang sa isang [[Special:ListUsers/sysop|tagapangasiwa]].',
 3352+ 'openidpermission' => 'May kamalian sa mga kapahintulutang pang-OpenID',
 3353+ 'openidpermissiontext' => 'Hindi pinapahintulutang makalagda sa serbidor na ito ang ibinigay mong OpenID.',
 3354+ 'openidcancel' => 'Hindi itinuloy ang pagpapatotoo',
 3355+ 'openidcanceltext' => 'Hindi itinuloy ang pagpapatotoo sa URL ng OpenID.',
 3356+ 'openidfailure' => 'Nabigo ang pagpapatotoo',
 3357+ 'openidfailuretext' => 'Nabigo ang pagpapatoo sa URL ng OpenID. Mensaheng pangkamalian: "$1"',
 3358+ 'openidsuccess' => 'Nagtagumpay ang pagpapatotoo',
 3359+ 'openidsuccesstext' => 'Nagtagumpay ang pagpapatotoo sa URL ng OpenID.',
 3360+ 'openidusernameprefix' => 'Tagagamit ng OpenID',
 3361+ 'openidserverlogininstructions' => 'Ipasok (ilagay) ang iyong hudyat sa ibaba upang makalagda patungo sa $3 bilang si tagagamit na $2 (pahina ng tagagamit na $1).',
 3362+ 'openidtrustinstructions' => 'Pakisuri kung nais mong isalo ang dato kay $1.',
 3363+ 'openidallowtrust' => 'Pahintulutan si $1 na pagkatiwalaan ang kuwenta ng tagagamit na ito.',
 3364+ 'openidnopolicy' => 'Hindi tumukoy ang sityo (sayt) ng isang patakaran sa paglilihim na pansarili.',
 3365+ 'openidpolicy' => 'Suriin ang <a target="_new" href="$1">patakaran sa paglilihim na pansarili</a> para sa mas marami pang kabatiran.',
 3366+ 'openidoptional' => 'Opsyonal (hindi talaga kailangan/maaaring wala nito)',
 3367+ 'openidrequired' => 'Kinakailangan',
 3368+ 'openidnickname' => 'Bansag',
 3369+ 'openidfullname' => 'Buong pangalan',
 3370+ 'openidemail' => 'Adres ng e-liham',
 3371+ 'openidlanguage' => 'Wika',
 3372+ 'openidnotavailable' => 'Ang ninanais mong bansag na ($1) ay ginagamit na ng ibang tagagamit.',
 3373+ 'openidnotprovided' => 'Hindi nagbigay ng isang bansag ang iyong serbidor ng OpenID (maaaring hindi niya ito maibigay, o dahil sinabi mo sa kaniyang huwag gawin ito).',
 3374+ 'openidchooseinstructions' => 'Lahat ng mga tagagamit ay kinakailangang may bansag;
 3375+makakapili ka mula sa mga pagpipiliang nasa ibaba.',
 3376+ 'openidchoosefull' => 'Ang buong pangalan mo ($1)',
 3377+ 'openidchooseurl' => 'Isang pangalang napulot (napili/nakuha) mula sa iyong OpenID ($1)',
 3378+ 'openidchooseauto' => 'Isang pangalang kusang nalikha ($1)',
 3379+ 'openidchoosemanual' => 'Isang pangalang ikaw ang pumili:',
 3380+ 'openidchooseexisting' => 'Isang umiiral na kuwenta sa wiking ito:',
 3381+ 'openidchoosepassword' => 'hudyat:',
 3382+ 'openidconvertinstructions' => 'Nagpapahintulot ang pormularyong ito upang mabago mo ang iyong kuwenta ng tagagamit para magamit ang isang URL ng OpenID.',
 3383+ 'openidconvertsuccess' => 'Matagumpay na napalitan (nabago) upang maging OpenID',
 3384+ 'openidconvertsuccesstext' => 'Matagumpay mong napalitan/nabago ang iyong OpenID para maging $1.',
 3385+ 'openidconvertyourstext' => 'Iyan na mismo ang iyong OpenID.',
 3386+ 'openidconvertothertext' => 'Iyan ay isa nang OpenID ng ibang tao.',
 3387+ 'openidalreadyloggedin' => "'''Nakalagda ka na, $1!'''
 3388+
 3389+Kung nais mong gumamit ng OpenID upang makalagda sa hinaharap, maaari mong [[Special:OpenIDConvert|palitan ang kuwenta mo para magamit ang OpenID]].",
 3390+ 'openidnousername' => 'Walang tinukoy na pangalan ng tagagamit.',
 3391+ 'openidbadusername' => 'Masama ang tinukoy na pangalan ng tagagamit.',
 3392+ 'openidautosubmit' => 'Kabilang/kasama sa pahinang ito ang isang pormularyo na dapat na kusang maipasa/maipadala kapag hindi pinaandar (pinagana) ang JavaScript.
 3393+Kung hindi, subukin ang pindutang \\"Magpatuloy\\".',
 3394+ 'openidclientonlytext' => 'Hindi mo magagamit ang mga kuwenta mula sa wiking ito bilang mga OpenID sa iba pang sityo/sayt.',
 3395+ 'openidloginlabel' => 'URL ng OpenID',
 3396+ 'openidlogininstructions' => "Tinatangkilik ng {{SITENAME}} ang pamantayang [http://openid.net/ OpenID] para sa mga isahang paglagda sa pagitan ng mga sayt ng Web.
 3397+Hinahayaan ka ng OpenID na makalagda sa maraming iba't ibang mga sityo ng Web na hindi gumagamit ng isang iba pang hudyat para sa bawat isa.
 3398+(Tingnan ang [http://en.wikipedia.org/wiki/OpenID lathalaing OpenID ng Wikipedia] para sa mas marami pang kabatiran.)
 3399+
 3400+Kung mayroon ka nang kuwenta sa {{SITENAME}}, maaari kang [[Special:UserLogin|lumagdang papasok]] sa pamamagitan ng iyong pangalan ng tagagamit at hudyat sa karaniwang paraan.
 3401+Upang makagamit ng OpenID sa hinaharap, maaari mong [[Special:OpenIDConvert|palitan ang iyong akawnt upang maging OpenID]] pagkatapos mong lumagda sa karaniwang paraan.
 3402+
 3403+Maraming mga [http://wiki.openid.net/Public_OpenID_providers tagapagbigay ng OpenID], at maaaring mayroon ka nang isang kuwentang pinagana ng OpenID na nasa iba pang palingkuran.",
 3404+ 'openidupdateuserinfo' => 'Isapanahon ang aking pansariling kabatiran',
 3405+ 'openid-prefstext' => 'Mga kagustuhang pang-[http://openid.net/ OpenID]',
 3406+ 'openid-pref-hide' => 'Itago ang <a href="http://openid.net/">OpenID</a> mo sa ibabaw ng iyong pahina ng tagagamit, kapag lumagda ka sa pamamagitan ng OpenID.',
 3407+ 'openid-pref-update-userinfo-on-login' => 'Isapahaon ang aking kabatiran mula sa katauhang pang-OpenID sa bawat pagkakataong lalagda akong papasok',
 3408+);
 3409+
 3410+/** Turkish (Türkçe)
 3411+ * @author Joseph
 3412+ */
 3413+$messages['tr'] = array(
 3414+ 'openid-desc' => 'Vikiye bir [http://openid.net/ OpenID] ile giriş yapın, ve diğer OpenID kullanan web sitelerine bir viki kullanıcı hesabıyla giriş yapın.',
 3415+ 'openidlogin' => 'OpenID ile giriş yapın',
 3416+ 'openidfinish' => 'OpenID girişini tamamlayın',
 3417+ 'openidserver' => 'OpenID sunucusu',
 3418+ 'openidxrds' => 'Yadis dosyası',
 3419+ 'openidconvert' => 'OpenID çeviricisi',
 3420+ 'openiderror' => 'Doğrulama hatası',
 3421+ 'openiderrortext' => 'OpenID adresi doğrulanırken bir hata oluştu.',
 3422+ 'openidconfigerror' => 'OpenID yapılandırma hatası',
 3423+ 'openidconfigerrortext' => 'Bu viki için OpenID depolama yapılandırması geçersiz.
 3424+Lütfen bir [[Special:ListUsers/sysop|yöneticiye]] danışın.',
 3425+ 'openidpermission' => 'OpenID izinleri hatası',
 3426+ 'openidpermissiontext' => "Sağladığınız OpenID'nin bu sunucuya oturum açmasına izin verilmiyor.",
 3427+ 'openidcancel' => 'Doğrulama iptal edildi',
 3428+ 'openidcanceltext' => 'OpenID URL doğrulaması iptal edildi.',
 3429+ 'openidfailure' => 'Doğrulama başarısız',
 3430+ 'openidfailuretext' => 'OpenID URL doğrulaması başarısız oldu. Hata iletisi: "$1"',
 3431+ 'openidsuccess' => 'Doğrulama başarılı',
 3432+ 'openidsuccesstext' => 'OpenID URL doğrulaması başarılı.',
 3433+ 'openidusernameprefix' => 'OpenIDKullanıcısı',
 3434+ 'openidserverlogininstructions' => '$3 sitesine $2 kullanıcısı (kullanıcı sayfası $1) olarak oturum açmak için parolanızı aşağıya girin.',
 3435+ 'openidtrustinstructions' => '$1 ile veri paylaşmak istediğinizi kontrol edin.',
 3436+ 'openidallowtrust' => "Bu kullanıcı hesabına güvenmek için $1'e izin ver.",
 3437+ 'openidnopolicy' => 'Site bir gizlilik ilkesi belirtmemiş.',
 3438+ 'openidpolicy' => 'Daha fazla bilgi için <a target="_new" href="$1">gizlilik ilkesine</a> bakın.',
 3439+ 'openidoptional' => 'İsteğe Bağlı',
 3440+ 'openidrequired' => 'Gerekli',
 3441+ 'openidnickname' => 'Kullanıcı adı',
 3442+ 'openidfullname' => 'Tam ad',
 3443+ 'openidemail' => 'E-posta adresi',
 3444+ 'openidlanguage' => 'Dil',
 3445+ 'openidnotavailable' => 'Tercih ettiğiniz kullanıcı adı ($1) zaten başka bir kullanıcı tarafından kullanımda.',
 3446+ 'openidnotprovided' => 'OpenID sunucunuz bir kullanıcı adı sağlamadı (ya bunu yapamadığı için, ya da yapmamasını söylediğiniz için).',
 3447+ 'openidchooseinstructions' => 'Tüm kullanıcılar için bir kullanıcı adı gereklidir;
 3448+aşağıdaki seçeneklerden birini seçebilirsiniz.',
 3449+ 'openidchoosefull' => 'Tam adınız ($1)',
 3450+ 'openidchooseurl' => "OpenID'nizden bir isim alındı ($1)",
 3451+ 'openidchooseauto' => 'Otomatik oluşturulan bir isim ($1)',
 3452+ 'openidchoosemanual' => 'Tercihinizden bir isim:',
 3453+ 'openidchooseexisting' => 'Bu vikide mevcut bir hesap:',
 3454+ 'openidchoosepassword' => 'parola:',
 3455+ 'openidconvertinstructions' => 'Bu form bir OpenID URLsi kullanmak için kullanıcı hesabınızı değiştirmenizi sağlar.',
 3456+ 'openidconvertsuccess' => 'OpenIDye başarıyla dönüştürüldü',
 3457+ 'openidconvertsuccesstext' => "OpenIDnizi başarıyla $1'e dönüştürdünüz.",
 3458+ 'openidconvertyourstext' => 'Bu zaten sizin OpenIDniz.',
 3459+ 'openidconvertothertext' => 'Bu bir başkasının OpenIDsi.',
 3460+ 'openidalreadyloggedin' => "'''Zaten oturum açtınız, $1!'''
 3461+
 3462+Eğer gelecekte de oturum açmak için OpenID kullanmak isterseniz, [[Special:OpenIDConvert|hesabınızı OpenID kullanmak için dönüştürebilirsiniz]].",
 3463+ 'openidnousername' => 'Herhangi bir kullanıcı adı belirtilmedi.',
 3464+ 'openidbadusername' => 'Kötü bir kullanıcı adı belirtildi.',
 3465+ 'openidautosubmit' => 'Bu sayfa, JavaScript etkin ise otomatik olarak gönderilmesi gereken bir form içeriyor.
 3466+Eğer değilse, \\"Devam\\" düğmesini deneyin.',
 3467+ 'openidclientonlytext' => 'Bu vikideki hesapları başka sitelerde OpenID olarak kullanamazsınız.',
 3468+ 'openidloginlabel' => 'OpenID URLsi',
 3469+ 'openidlogininstructions' => "{{SITENAME}}, web sitelerinde tekli giriş için [http://openid.net/ OpenID] standartını desteklemektedir.
 3470+OpenID, herbirine farklı şifre kullanmadan birçok web sitesine giriş yapmanıza izin verir.
 3471+(Daha fazla bilgi için [http://en.wikipedia.org/wiki/OpenID Vikipedideki OpenID maddesine bakın].)
 3472+
 3473+Eğer {{SITENAME}} sitesinde mevcut bir hesabınız varsa, her zamanki gibi kullanıcı adınız ve şifrenizle [[Special:UserLogin|giriş yapabilirsiniz]].
 3474+İleride OpenID kullanmak için, normal giriş yaptıktan sonra [[Special:OpenIDConvert|hesabınızı OpenID'ye çevirebilirsiniz]].
 3475+
 3476+Birçok [http://openid.net/get/ OpenID sağlayıcısı] vardır, ve bir başka serviste halihazırda bir OpenID-etkin hesabınız olabilir.",
 3477+ 'openidupdateuserinfo' => 'Kişisel bilgimi güncelle',
 3478+ 'openid-prefstext' => '[http://openid.net/ OpenID] tercihleri',
 3479+ 'openid-pref-hide' => 'Eğer OpenID ile giriş yaparsanız, kullanıcı sayfanızda OpenID URLnizi gizle.',
 3480+ 'openid-pref-update-userinfo-on-login' => 'Her oturum açışımda OpenID karakterinden bilgilerimi güncelle',
 3481+);
 3482+
 3483+/** ئۇيغۇرچە (ئۇيغۇرچە)
 3484+ * @author Alfredie
 3485+ */
 3486+$messages['ug-arab'] = array(
 3487+ 'openidlanguage' => 'تىل',
 3488+);
 3489+
 3490+/** Uighur (Latin) (Uyghurche‎ / ئۇيغۇرچە (Latin))
 3491+ * @author Jose77
 3492+ */
 3493+$messages['ug-latn'] = array(
 3494+ 'openidlanguage' => 'Til',
 3495+);
 3496+
 3497+/** Ukrainian (Українська)
 3498+ * @author AS
 3499+ * @author Aleksandrit
 3500+ */
 3501+$messages['uk'] = array(
 3502+ 'openid-desc' => 'Вхід у вікі за допомогою [http://openid.net/ OpenID], а також вхід на інші сайти, що підтримують OpenID за допомогою акаунта в вікі',
 3503+ 'openidlogin' => 'Вхід з допомогою OpenID',
 3504+ 'openidserver' => 'Сервер OpenID',
 3505+ 'openidxrds' => 'Файл Yadis',
 3506+ 'openidconvert' => 'Перетворювач OpenID',
 3507+ 'openiderror' => 'Помилка перевірки повноважень',
 3508+ 'openiderrortext' => 'Під час перевірки адреси OpenID сталася помилка.',
 3509+ 'openidconfigerror' => 'Помилка налаштування OpenID',
 3510+ 'openidconfigerrortext' => 'Налаштування сховища OpenID для цієї вікі помилкова.
 3511+Будь-ласка, зверніться до [[Special:ListUsers/sysop|адміністратору сайту]].',
 3512+ 'openidpermission' => 'Помилка прав доступу OpenID',
 3513+ 'openidpermissiontext' => 'Вказаний OpenID не дозволяє увійти на цей сервер.',
 3514+ 'openidcancel' => 'Перевірку скасовано',
 3515+ 'openidcanceltext' => 'Перевірка адреси OpenID була скасована.',
 3516+ 'openidfailure' => 'Перевірка невдала',
 3517+ 'openidfailuretext' => 'Перевірка адреси OpenID завершилася невдачею. Повідомлення про помилку: «$1»',
 3518+ 'openidsuccess' => 'Перевірка пройшла успішно',
 3519+ 'openidsuccesstext' => 'Перевірка адреси OpenID пройшла успішно.',
 3520+ 'openidusernameprefix' => 'Користувач OpenID',
 3521+ 'openidserverlogininstructions' => 'Введіть нижче ваш пароль, щоб увійти на $3 як користувач $2 (особиста сторінка $1).',
 3522+ 'openidtrustinstructions' => 'Відзначте, якщо ви хочете надати доступ до даних для $1.',
 3523+ 'openidallowtrust' => 'Дозволити $1 довіряти цьому акаунту.',
 3524+ 'openidnopolicy' => 'Сайт не вказав політику конфіденційності.',
 3525+ 'openidpolicy' => 'Додаткову інформацію можна дізнатися в <a target="_new" href="$1">політиці конфіденційності</a>.',
 3526+ 'openidoptional' => "необов'язкове",
 3527+ 'openidrequired' => "обов'язкове",
 3528+ 'openidnickname' => 'Псевдонім',
 3529+ 'openidfullname' => "Повне ім'я",
 3530+ 'openidemail' => 'Адреса ел. пошти',
 3531+ 'openidlanguage' => 'Мова',
 3532+ 'openidnotavailable' => 'Зазначений вами псевдонім ($1) вже використовується іншим учасником.',
 3533+ 'openidnotprovided' => 'Ваш сервер OpenID не надав псевдонім (чи тому, що він не може, чи тому, що ви вказали не робити цього).',
 3534+ 'openidchooseinstructions' => 'Кожен користувач повинен мати псевдонім;
 3535+ви можете вибрати один з представлених нижче.',
 3536+ 'openidchoosefull' => "Ваше повне ім'я ($1)",
 3537+ 'openidchooseurl' => 'Ім`я, отримане з вашого OpenID ($1)',
 3538+ 'openidchooseauto' => "Автоматично створене ім'я ($1)",
 3539+ 'openidchoosemanual' => "Ім'я на ваш вибір:",
 3540+ 'openidchooseexisting' => 'Існуючий акаунт на цій вікі:',
 3541+ 'openidchoosepassword' => 'пароль:',
 3542+ 'openidconvertinstructions' => 'Ця форма дозволяє вам змінити використання акаунту на використання адреси OpenID.',
 3543+ 'openidconvertsuccess' => 'Успішне перетворення в OpenID',
 3544+ 'openidconvertsuccesstext' => 'Ви успішно перетворили ваш OpenID в $1.',
 3545+ 'openidconvertyourstext' => 'Це вже ваш OpenID.',
 3546+ 'openidconvertothertext' => 'Це чужий OpenID.',
 3547+ 'openidalreadyloggedin' => "'''Ви вже ввійшли, $1!'''
 3548+
 3549+Якщо ви бажаєте використовувати в майбутньому вхід через OpenID, ви можете [[Special:OpenIDConvert|перетворити ваш акаунт для використання в OpenID]].",
 3550+ 'openidnousername' => "Не вказано ім'я користувача.",
 3551+ 'openidbadusername' => "Зазначено невірне ім'я користувача.",
 3552+ 'openidautosubmit' => 'Ця сторінка містить форму, яка повинна бути автоматично відправлена, якщо у вас включений JavaScript.
 3553+Якщо цього не сталося, спробуйте натиснути на кнопку «Продовжити».',
 3554+ 'openidclientonlytext' => 'Ви не можете використовувати акаунти з цієї вікі, як OpenID на іншому сайті.',
 3555+ 'openidloginlabel' => 'Адреса OpenID',
 3556+ 'openid-pref-hide' => 'Приховувати ваш <a href="http://openid.net/">OpenID</a> на вашій сторінці користувача, якщо ви ввійшли з допомогою OpenID.',
 3557+);
 3558+
 3559+/** Vèneto (Vèneto)
 3560+ * @author Candalua
 3561+ */
 3562+$messages['vec'] = array(
 3563+ 'openid-desc' => "Entra con [http://openid.net/ OpenID] in te la wiki, e entra in tei altri siti web che dòpara OpenID co' na utensa wiki",
 3564+ 'openidlogin' => 'Acesso con OpenID',
 3565+ 'openidfinish' => "Conpleta l'acesso OpenID",
 3566+ 'openidserver' => 'server OpenID',
 3567+ 'openidxrds' => 'file Yadis',
 3568+ 'openidconvert' => 'convertidor OpenID',
 3569+ 'openiderror' => 'Eròr ne la verifica',
 3570+ 'openiderrortext' => "Se gà verificà un eròr durante la verifica de l'URL OpenID.",
 3571+ 'openidconfigerror' => 'Eròr in te la configurassion OpenID',
 3572+ 'openidconfigerrortext' => 'La configurassion de la memorixassion de OpenID par sta wiki no la xe mia valida.
 3573+Par piaser consulta un [[Special:ListUsers/sysop|aministrador]].',
 3574+ 'openidpermission' => 'Eròr in tei parmessi OpenID',
 3575+ 'openidpermissiontext' => "A l'OpenID che ti gà fornìo no xe mia parmesso de entrar su sto server.",
 3576+ 'openidcancel' => 'Verifica anulà',
 3577+ 'openidcanceltext' => "La verifica de l'URL OpenID le stà scancelà.",
 3578+ 'openidfailure' => 'Verifica mia riussìa',
 3579+ 'openidfailuretext' => 'La verifica de l\'URL OpenID la xe \'ndà mal. El messajo de eròr el xe: "$1"',
 3580+ 'openidsuccess' => 'Verifica efetuà',
 3581+ 'openidsuccesstext' => "La verifica de l'URL OpenID la xe stà fata coretamente.",
 3582+ 'openidusernameprefix' => 'Utente OpenID',
 3583+ 'openidserverlogininstructions' => 'Scrivi qua la to password par entrar su $3 come utente $2 (pàxena utente $1).',
 3584+ 'openidtrustinstructions' => 'Contròla se te vol dal bon condivìdar i dati con $1.',
 3585+ 'openidallowtrust' => 'Parméti a $1 de fidarse de sta utensa.',
 3586+ 'openidnopolicy' => "El sito no'l gà indicà na polìtega relativa a la privacy.",
 3587+ 'openidpolicy' => 'Contròla la <a target="_new" href="$1">polìtega relativa a la privacy</a> par savérghene piessè.',
 3588+ 'openidoptional' => 'Opzional',
 3589+ 'openidrequired' => 'Obligatorio',
 3590+ 'openidnickname' => 'Soranòme',
 3591+ 'openidfullname' => 'Nome par intiero',
 3592+ 'openidemail' => 'Indirisso de posta eletronica',
 3593+ 'openidlanguage' => 'Lengoa',
 3594+ 'openidnotavailable' => "El to soranòme preferìo ($1) el xe xà doparà da n'antro utente.",
 3595+ 'openidnotprovided' => "El to server OpenID no'l gà fornìo un soranòme (o parché no'l gà podesto, o parché ti ti gà dito de no farlo).",
 3596+ 'openidchooseinstructions' => 'Tuti i utenti i gà da verghe un soranòme;
 3597+te pol tórghene uno da le opzioni seguenti.',
 3598+ 'openidchoosefull' => 'El to nome par intiero ($1)',
 3599+ 'openidchooseurl' => 'Un nome sielto dal to OpenID ($1)',
 3600+ 'openidchooseauto' => 'Un nome generà automaticamente ($1)',
 3601+ 'openidchoosemanual' => 'Un nome a sielta tua:',
 3602+ 'openidchooseexisting' => 'Na utensa esistente su sta wiki:',
 3603+ 'openidchoosepassword' => 'password:',
 3604+ 'openidconvertinstructions' => 'Sto modulo el te parmete de canbiar la to utensa par doparar un URL OpenID.',
 3605+ 'openidconvertsuccess' => 'Convertìo con successo a OpenID',
 3606+ 'openidconvertsuccesstext' => 'El to OpenID el xe stà convertìo a $1.',
 3607+ 'openidconvertyourstext' => 'Sto chì el xe xà el to OpenID.',
 3608+ 'openidconvertothertext' => "Sto chì el xe l'OpenID de calchidun altro.",
 3609+ 'openidalreadyloggedin' => "'''Te sì xà entrà, $1!'''
 3610+
 3611+Se ti vol doparar OpenID par entrar in futuro, te pol [[Special:OpenIDConvert|convertir la to utensa par doparar OpenID]].",
 3612+ 'openidnousername' => 'Nissun nome utente indicà.',
 3613+ 'openidbadusername' => "El nome utente indicà no'l xe mia valido.",
 3614+ 'openidautosubmit' => 'Sta pàxena la include un modulo che\'l dovarìa èssar invià automaticamente se ti gà JavaScript ativà. Se no, próa a strucar el boton \\"Continua\\".',
 3615+ 'openidclientonlytext' => 'No te podi doparar le utense de sta wiki come OpenID su de un altro sito.',
 3616+ 'openidloginlabel' => 'URL OpenID',
 3617+ 'openidlogininstructions' => "{{SITENAME}} el suporta el standard [http://openid.net/ OpenID] par el login unico sui siti web.
 3618+OpenID el te permete de registrarte in molti siti web sensa doparar na password difarente par ognuno.
 3619+(Lèzi la [http://en.wikipedia.org/wiki/OpenID voce de Wikipedia su l'OpenID] par savérghene piassè.)
 3620+
 3621+Se te ghè zà un account su {{SITENAME}}, te podi far el [[Special:UserLogin|login]] col to nome utente e la to password come al solito.
 3622+Par doparar OpenID in futuro, te podi [[Special:OpenIDConvert|convertir el to account a OpenID]] dopo che te ghè fato normalmente el login.
 3623+
 3624+Ghe xe molti [http://openid.net/get/ Provider OpenID], e te podaressi verghe zà un account abilità a l'OpenID su un altro servissio.",
 3625+ 'openidupdateuserinfo' => 'Ajorna le me informassion personài',
 3626+ 'openid-prefstext' => '[http://openid.net/ OpenID] preferense',
 3627+ 'openid-pref-hide' => 'Scondi el to <a href="http://openid.net/">OpenID</a> su la to pàxena utente, se te fè el login con OpenID.',
 3628+ 'openid-pref-update-userinfo-on-login' => "Ajorna le me informassion da l'utensa de OpenID ogni olta che me conéto",
 3629+);
 3630+
 3631+/** Veps (Vepsan kel')
 3632+ * @author Игорь Бродский
 3633+ */
 3634+$messages['vep'] = array(
 3635+ 'openidoptional' => 'Opcionaline',
 3636+ 'openidemail' => 'E-počtan adres',
 3637+ 'openidlanguage' => "Kel'",
 3638+);
 3639+
 3640+/** Vietnamese (Tiếng Việt)
 3641+ * @author Minh Nguyen
 3642+ * @author Vinhtantran
 3643+ */
 3644+$messages['vi'] = array(
 3645+ 'openid-desc' => 'Đăng nhập vào wiki dùng [http://openid.net/ OpenID] và đăng nhập vào các website nhận OpenID dùng tài khoản wiki',
 3646+ 'openidlogin' => 'Đăng nhập dùng OpenID',
 3647+ 'openidfinish' => 'Đăng nhập dùng OpenID xong',
 3648+ 'openidserver' => 'Dịch vụ OpenID',
 3649+ 'openidxrds' => 'Tập tin Yadis',
 3650+ 'openidconvert' => 'Chuyển đổi ID Mở',
 3651+ 'openiderror' => 'Lỗi thẩm tra',
 3652+ 'openiderrortext' => 'Có lỗi khi thẩm tra địa chỉ OpenID.',
 3653+ 'openidconfigerror' => 'Lỗi thiết lập OpenID',
 3654+ 'openidconfigerrortext' => 'Cấu hình nơi lưu trữ OpenID cho wiki này không hợp lệ.
 3655+Xin hãy liên lạc với [[Special:ListUsers/sysop|quản lý viên]].',
 3656+ 'openidpermission' => 'Lỗi quyền OpenID',
 3657+ 'openidpermissiontext' => 'Địa chỉ OpenID của bạn không được phép đăng nhập vào dịch vụ này.',
 3658+ 'openidcancel' => 'Đã hủy bỏ thẩm tra',
 3659+ 'openidcanceltext' => 'Đã hủy bỏ việc thẩm tra địa chỉ OpenID.',
 3660+ 'openidfailure' => 'Không thẩm tra được',
 3661+ 'openidfailuretext' => 'Không thể thẩm tra địa chỉ OpenID. Lỗi: “$1”',
 3662+ 'openidsuccess' => 'Đã thẩm tra thành công',
 3663+ 'openidsuccesstext' => 'Đã thẩm tra địa chỉ OpenID thành công.',
 3664+ 'openidusernameprefix' => 'Thành viên ID Mở',
 3665+ 'openidserverlogininstructions' => 'Hãy cho vào mật khẩu ở dưới để đăng nhập vào $3 dùng tài khoản $2 (trang thảo luận $1).',
 3666+ 'openidtrustinstructions' => 'Hãy kiểm tra hộp này nếu bạn muốn cho $1 biết thông tin cá nhân của bạn.',
 3667+ 'openidallowtrust' => 'Để $1 tin cậy vào tài khoản này.',
 3668+ 'openidnopolicy' => 'Website chưa xuất bản chính sách về sự riêng tư.',
 3669+ 'openidpolicy' => 'Hãy đọc <a target="_new" href="$1">chính sách về sự riêng tư</a> để biết thêm chi tiết.',
 3670+ 'openidoptional' => 'Tùy ý',
 3671+ 'openidrequired' => 'Bắt buộc',
 3672+ 'openidnickname' => 'Tên hiệu',
 3673+ 'openidfullname' => 'Tên đầy đủ',
 3674+ 'openidemail' => 'Địa chỉ thư điện tử',
 3675+ 'openidlanguage' => 'Ngôn ngữ',
 3676+ 'openidnotavailable' => 'Tên hiệu mà bạn muốn sử dụng, “$1”, đã được sử dụng bởi người khác.',
 3677+ 'openidnotprovided' => 'Dịch vụ OpenID của bạn chưa cung cấp tên hiệu, hoặc vì nó không có khả năng này, hoặc bạn đã tắt tính năng tên hiệu.',
 3678+ 'openidchooseinstructions' => 'Mọi người dùng cần có tên hiệu; bạn có thể chọn tên hiệu ở dưới.',
 3679+ 'openidchoosefull' => 'Tên đầy đủ của bạn ($1)',
 3680+ 'openidchooseurl' => 'Tên bắt nguồn từ OpenID của bạn ($1)',
 3681+ 'openidchooseauto' => 'Tên tự động ($1)',
 3682+ 'openidchoosemanual' => 'Tên khác:',
 3683+ 'openidchooseexisting' => 'Một tài khoản hiện có trên wiki này:',
 3684+ 'openidchoosepassword' => 'mật khẩu:',
 3685+ 'openidconvertinstructions' => 'Mẫu này cho phép bạn thay đổi tài khoản người dùng của bạn để sử dụng một địa chỉ URL ID Mở.',
 3686+ 'openidconvertsuccess' => 'Đã chuyển đổi sang ID Mở thành công',
 3687+ 'openidconvertsuccesstext' => 'Bạn đã chuyển đổi ID Mở của bạn sang $1 thành công.',
 3688+ 'openidconvertyourstext' => 'Đó đã là ID Mở của bạn.',
 3689+ 'openidconvertothertext' => 'Đó là ID Mở của một người nào khác.',
 3690+ 'openidalreadyloggedin' => "'''Bạn đã đăng nhập rồi, $1!'''
 3691+
 3692+Nếu bạn muốn sử dụng ID Mở để đăng nhập vào lần sau, bạn có thể [[Special:OpenIDConvert|chuyển đổi tài khoản của bạn để dùng ID Mở]].",
 3693+ 'openidnousername' => 'Chưa chỉ định tên người dùng.',
 3694+ 'openidbadusername' => 'Tên người dùng không hợp lệ.',
 3695+ 'openidautosubmit' => 'Trang này có một mẫu sẽ tự động đăng lên nếu bạn kích hoạt JavaScript.
 3696+Nếu không, hãy thử nút \\"Tiếp tục\\".',
 3697+ 'openidclientonlytext' => 'Bạn không thể sử dụng tài khoản tại wiki này như ID Mở tại trang khác.',
 3698+ 'openidloginlabel' => 'Địa chỉ OpenID',
 3699+ 'openidlogininstructions' => '{{SITENAME}} hỗ trợ chuẩn [http://openid.net/ OpenID] để đăng nhập một lần giữa các trang web.
 3700+OpenID cho phép bạn đăng nhập vào nhiều trang web khác nhau mà không phải sử dụng mật khẩu khác nhau tại mỗi trang.
 3701+(Xem [http://en.wikipedia.org/wiki/OpenID bài viết về OpenID của Wikipedia] để biết thêm chi tiết.)
 3702+
 3703+Nếu bạn đã có một tài khoản tại {{SITENAME}}, bạn có thể [[Special:UserLogin|đăng nhập]] bằng tên người dùng và mật khẩu của bạn như thông thường.
 3704+Để dùng OpenID vào lần sau, bạn có thể [[Special:OpenIDConvert|chuyển đổi tài khoản của bạn sang ID Mở]] sau khi đã đăng nhập bình thường.
 3705+
 3706+Có nhiều [http://wiki.openid.net/Public_OpenID_providers nhà cung cấp OpenID Công cộng], và có thể bạn đã có một tài khoản kích hoạt OpenID tại dịch vụ khác.',
 3707+ 'openidupdateuserinfo' => 'Cập nhật thông tin cá nhân của tôi',
 3708+ 'openid-prefstext' => 'Tùy chỉnh [http://openid.net/ OpenID]',
 3709+ 'openid-pref-hide' => 'Ẩn <a href="http://openid.net/">ID Mở</a> của bạn khỏi trang thành viên, nếu bạn đăng nhập bằng ID Mở.',
 3710+ 'openid-pref-update-userinfo-on-login' => 'Cập nhật thông tin của tôi từ OpenID persona mỗi khi tôi đăng nhập',
 3711+);
 3712+
 3713+/** Volapük (Volapük)
 3714+ * @author Malafaya
 3715+ * @author Smeira
 3716+ */
 3717+$messages['vo'] = array(
 3718+ 'openiderror' => 'Kontrolamapöl',
 3719+ 'openidoptional' => 'No peflagon',
 3720+ 'openidrequired' => 'Peflagon',
 3721+ 'openidnickname' => 'Näinem',
 3722+ 'openidfullname' => 'Nem lölik',
 3723+ 'openidemail' => 'Ladet leäktronik',
 3724+ 'openidlanguage' => 'Pük',
 3725+ 'openidchooseinstructions' => 'Gebans valik neodons näinemi;
 3726+kanol välön bali sökölas.',
 3727+ 'openidchoosefull' => 'Nem lölik ola ($1)',
 3728+ 'openidchooseauto' => 'Nem itjäfidiko pejaföl ($1)',
 3729+ 'openidchoosemanual' => 'Nem fa ol pevälöl:',
 3730+ 'openidchooseexisting' => 'Kal in vük at dabinöl:',
 3731+ 'openidchoosepassword' => 'letavöd:',
 3732+ 'openidnousername' => 'Gebananem nonik pegivon.',
 3733+ 'openidbadusername' => 'Gebananem no lonöföl pegivon.',
 3734+);
 3735+
 3736+/** Simplified Chinese (‪中文(简体)‬)
 3737+ * @author Gaoxuewei
 3738+ */
 3739+$messages['zh-hans'] = array(
 3740+ 'openidlogin' => '使用OpenID登陆',
 3741+ 'openidfinish' => '结束OpenID登陆',
 3742+ 'openidserver' => 'OpenID服务器',
 3743+ 'openidxrds' => 'Yadis文件',
 3744+ 'openidconvert' => 'OpenID转换',
 3745+ 'openiderror' => '验证错误',
 3746+ 'openiderrortext' => '在验证OpenID地址时出现了一个错误。',
 3747+ 'openidconfigerror' => 'OpenID配制出错',
 3748+ 'openidconfigerrortext' => '这个维基的OpenID存储设置无法使用。
 3749+请通知[[Special:ListUsers/sysop|管理员]]。',
 3750+ 'openidpermission' => 'OpenID许可错误',
 3751+ 'openidpermissiontext' => '您提供的OpenID不允许在本服务器上登录。',
 3752+ 'openidcancel' => '验证取消',
 3753+ 'openidcanceltext' => 'OpenID地址验证被取消。',
 3754+ 'openidfailure' => '验证失败',
 3755+ 'openidfailuretext' => 'OpenID地址验证失败。错误信息:"$1"',
 3756+ 'openidsuccess' => '验证成功',
 3757+ 'openidsuccesstext' => 'OpenID地址验证成功。',
 3758+ 'openidusernameprefix' => 'OpenID用户',
 3759+ 'openidserverlogininstructions' => '请在下面输入您的密码以便以用户$2登陆$3 (用户页面$1)。',
 3760+ 'openidtrustinstructions' => '请确认您是否愿与$1分享数据。',
 3761+ 'openidallowtrust' => '允许$1信任这个用户的账户。',
 3762+ 'openidnopolicy' => '站点没有提供隐私政策。',
 3763+ 'openidpolicy' => '如要获得更多信息,请参见<a target="_new" href="$1">隐私政策</a>。',
 3764+ 'openidoptional' => '可选',
 3765+ 'openidrequired' => '必选',
 3766+ 'openidnickname' => '昵称',
 3767+ 'openidfullname' => '全称',
 3768+ 'openidemail' => '电子邮件地址',
 3769+ 'openidlanguage' => '语言',
 3770+ 'openidnotavailable' => '您选择的昵称($1)已经被其他用户使用。',
 3771+ 'openidnotprovided' => '您的OpenID服务器没有提供昵称(可能无法提供,或者您选择不提供)。',
 3772+ 'openidchooseinstructions' => '所有的用户都需要提供昵称;
 3773+您可以从下面任选一个。',
 3774+ 'openidchoosefull' => '您的全名($1)',
 3775+ 'openidchooseurl' => '从您的OpenID获取的名称($1)',
 3776+ 'openidchooseauto' => '自动生成的名称($1)',
 3777+ 'openidchoosemanual' => '您选择的名称:',
 3778+ 'openidchooseexisting' => '本维基已经存在的帐户:',
 3779+ 'openidchoosepassword' => '密码:',
 3780+ 'openidconvertinstructions' => '本表单可以将您的用户账号修改为OpenID地址。',
 3781+ 'openidconvertsuccess' => '成功转换为OpenID',
 3782+ 'openidconvertsuccesstext' => '您已经成功的将您的OpenID转化为$1。',
 3783+ 'openidconvertyourstext' => '这已经是您的OpenID。',
 3784+ 'openidconvertothertext' => '这是别人的OpenID。',
 3785+ 'openidalreadyloggedin' => "'''您已经成功登陆了,$1!'''
 3786+
 3787+如果您想以后使用OpenID登陆,您可以[[Special:OpenIDConvert|转换您的帐户使用OpenID]]。",
 3788+ 'openidnousername' => '没有指定用户名。',
 3789+ 'openidbadusername' => '指定的用户名是错误的。',
 3790+ 'openidautosubmit' => '本页包含的表单在启用JavaScript的情况下可以自动提交。
 3791+如果没有自动提交,请按 \\"继续\\" 按钮。',
 3792+ 'openidloginlabel' => 'OpenID地址',
 3793+ 'openid-pref-hide' => '如果使用OpenID登陆,您可以在您的用户页隐藏您的<a href="http://openid.net/">OpenID</a>。',
 3794+);
 3795+
 3796+/** Traditional Chinese (‪中文(繁體)‬)
 3797+ * @author Gzdavidwong
 3798+ * @author Wrightbus
 3799+ */
 3800+$messages['zh-hant'] = array(
 3801+ 'openidserver' => 'OpenID伺服器',
 3802+ 'openidconvert' => 'OpenID轉換器',
 3803+ 'openiderror' => '驗證錯誤',
 3804+ 'openidnickname' => '暱稱',
 3805+ 'openidfullname' => '全名',
 3806+ 'openidchoosefull' => '您的全名 ($1)',
 3807+ 'openidchoosepassword' => '密碼:',
 3808+ 'openidconvertyourstext' => '這已是您的OpenID了。',
 3809+ 'openidloginlabel' => 'OpenID網址',
 3810+);
 3811+
Property changes on: tags/extensions/OpenID/REL_0_8_4/OpenID.i18n.php
___________________________________________________________________
Name: svn:eol-style
13812 + native
Index: tags/extensions/OpenID/REL_0_8_4/openid_table.sql
@@ -0,0 +1,7 @@
 2+CREATE TABLE /*$wgDBprefix*/user_openid (
 3+ uoi_openid varchar(255) NOT NULL,
 4+ uoi_user int(5) unsigned NOT NULL,
 5+
 6+ PRIMARY KEY uoi_openid (uoi_openid),
 7+ UNIQUE INDEX uoi_user (uoi_user)
 8+) TYPE=InnoDB;
Property changes on: tags/extensions/OpenID/REL_0_8_4/openid_table.sql
___________________________________________________________________
Name: svn:eol-style
19 + native
Index: tags/extensions/OpenID/REL_0_8_4/OpenID.hooks.php
@@ -0,0 +1,210 @@
 2+<?php
 3+
 4+class OpenIDHooks {
 5+ public static function onSpecialPage_initList( &$list ) {
 6+ global $wgOpenIDOnly, $wgOpenIDClientOnly;
 7+
 8+ if ( $wgOpenIDOnly ) {
 9+ $list['Userlogin'] = array( 'SpecialRedirectToSpecial', 'Userlogin', 'OpenIDLogin' );
 10+ # Used in 1.12.x and above
 11+ $list['CreateAccount'] = array( 'SpecialRedirectToSpecial', 'CreateAccount', 'OpenIDLogin' );
 12+ }
 13+
 14+ # Special pages are added at global scope; remove server-related ones
 15+ # if client-only flag is set
 16+ $addList = array( 'Login', 'Finish', 'Convert' );
 17+ if ( !$wgOpenIDClientOnly ) {
 18+ $addList[] = 'Server';
 19+ $addList[] = 'XRDS';
 20+ }
 21+
 22+ foreach ( $addList as $sp ) {
 23+ $list['OpenID'.$sp] = 'SpecialOpenID' . $sp;
 24+ }
 25+
 26+ return true;
 27+ }
 28+
 29+ # Hook is called whenever an article is being viewed
 30+ public static function onArticleViewHeader( &$article, &$outputDone, &$pcache ) {
 31+ global $wgOut, $wgOpenIDClientOnly;
 32+
 33+ $nt = $article->getTitle();
 34+
 35+ // If the page being viewed is a user page,
 36+ // generate the openid.server META tag and output
 37+ // the X-XRDS-Location. See the OpenIDXRDS
 38+ // special page for the XRDS output / generation
 39+ // logic.
 40+
 41+ if ( $nt && $nt->getNamespace() == NS_USER && strpos( $nt->getText(), '/' ) === false ) {
 42+ $user = User::newFromName( $nt->getText() );
 43+ if ($user && $user->getID() != 0) {
 44+ $openid = SpecialOpenID::getUserUrl( $user );
 45+ if ( isset( $openid ) && strlen( $openid ) != 0 ) {
 46+ global $wgOpenIDShowUrlOnUserPage;
 47+
 48+ if ( $wgOpenIDShowUrlOnUserPage == 'always' ||
 49+ ( $wgOpenIDShowUrlOnUserPage == 'user' && !$user->getOption( 'openid-hide' ) ) )
 50+ {
 51+ global $wgOpenIDLoginLogoUrl;
 52+
 53+ $url = SpecialOpenID::OpenIDToUrl( $openid );
 54+ $disp = htmlspecialchars( $openid );
 55+ $wgOut->setSubtitle("<span class='subpages'>" .
 56+ "<img src='$wgOpenIDLoginLogoUrl' alt='OpenID' />" .
 57+ "<a href='$url'>$disp</a>" .
 58+ "</span>");
 59+ }
 60+ } else {
 61+ # Add OpenID data iif its allowed
 62+ if ( !$wgOpenIDClientOnly ) {
 63+ $st = SpecialPage::getTitleFor( 'OpenIDServer' );
 64+ $wgOut->addLink( array( 'rel' => 'openid.server',
 65+ 'href' => $st->getFullURL() ) );
 66+ $wgOut->addLink( array( 'rel' => 'openid2.provider',
 67+ 'href' => $st->getFullURL() ) );
 68+ $rt = SpecialPage::getTitleFor( 'OpenIDXRDS', $user->getName() );
 69+ $wgOut->addMeta( 'http:X-XRDS-Location', $rt->getFullURL() );
 70+ header( 'X-XRDS-Location: ' . $rt->getFullURL() );
 71+ }
 72+ }
 73+ }
 74+ }
 75+
 76+ return true;
 77+ }
 78+
 79+ public static function onPersonalUrls(&$personal_urls, &$title) {
 80+ global $wgHideOpenIDLoginLink, $wgUser, $wgLang, $wgOut, $wgOpenIDOnly;
 81+
 82+ if ( !$wgHideOpenIDLoginLink && $wgUser->getID() == 0 ) {
 83+ wfLoadExtensionMessages( 'OpenID' );
 84+ $wgOut->addHeadItem( 'openidloginstyle', self::loginStyle() );
 85+ $sk = $wgUser->getSkin();
 86+ $returnto = $title->isSpecial( 'Userlogout' ) ?
 87+ '' : ('returnto=' . $title->getPrefixedURL() );
 88+
 89+ $personal_urls['openidlogin'] = array(
 90+ 'text' => wfMsg( 'openidlogin' ),
 91+ 'href' => $sk->makeSpecialUrl( 'OpenIDLogin', $returnto ),
 92+ 'active' => $title->isSpecial( 'OpenIDLogin' )
 93+ );
 94+
 95+ if ( $wgOpenIDOnly ) {
 96+ # remove other login links
 97+ foreach ( array( 'login', 'anonlogin' ) as $k ) {
 98+ if ( array_key_exists( $k, $personal_urls ) ) {
 99+ unset( $personal_urls[$k] );
 100+ }
 101+ }
 102+ }
 103+ }
 104+
 105+ return true;
 106+ }
 107+
 108+ # list of preferences used by extension
 109+ private static $oidPrefs = array( 'hide', 'update-userinfo-on-login' );
 110+
 111+ public static function onInitPreferencesForm( $prefs, $request ) {
 112+ foreach (self::$oidPrefs as $oidPref)
 113+ {
 114+ $prefs->mToggles['openid-'.$oidPref]
 115+ = $request->getCheck( "wpOpOpenID-".$oidPref ) ? 1 : 0;
 116+ }
 117+
 118+ return true;
 119+ }
 120+
 121+ public static function onRenderPreferencesForm( $prefs, $out ) {
 122+ wfLoadExtensionMessages( 'OpenID' );
 123+
 124+ $out->addHTML( "\n<fieldset>\n<legend>" . wfMsgHtml( 'openid-prefs' ) . "</legend>\n" );
 125+
 126+ $out->addWikiText( wfMsg( 'openid-prefstext') );
 127+
 128+ foreach (self::$oidPrefs as $oidPref)
 129+ {
 130+ $out->addHTML( '<div class="toggle"><input type="checkbox" value="1" '.
 131+ 'id="openid-'.$oidPref.'" name="wpOpOpenID-'.$oidPref.'"'.
 132+ ($prefs->mToggles['openid-'.$oidPref] == 1 ? ' checked="checked"' : '').
 133+ '/> ' .
 134+ '<span class="toggletext">'.
 135+ '<label for="openid-'.$oidPref.'">'.wfMsg( 'openid-pref-'.$oidPref ).'</label>'.
 136+ "</span></div>\n" );
 137+ }
 138+
 139+ $out->addHTML( "</fieldset>\n\n" );
 140+
 141+ return true;
 142+ }
 143+
 144+ public static function onSavePreferences($prefs, $user, &$message, $old)
 145+ {
 146+ foreach (self::$oidPrefs as $oidPref)
 147+ {
 148+ $user->setOption('openid-'.$oidPref, $prefs->mToggles['openid-'.$oidPref]);
 149+ wfDebugLog('OpenID', 'Setting user preferences: ' . print_r($user, true) );
 150+ }
 151+
 152+ $user->saveSettings();
 153+
 154+ return true;
 155+ }
 156+
 157+ public static function onResetPreferences( $prefs, $user )
 158+ {
 159+ foreach ( self::$oidPrefs as $oidPref ) {
 160+ $prefs->mToggles['openid-'.$oidPref] = $user->getOption( 'openid-'.$oidPref );
 161+ }
 162+
 163+ return true;
 164+ }
 165+
 166+ public static function onLoadExtensionSchemaUpdates() {
 167+ global $wgDBtype, $wgExtNewTables;
 168+
 169+ $base = dirname( __FILE__ );
 170+
 171+ if( $wgDBtype == 'mysql' ) {
 172+ $wgExtNewTables[] = array( 'user_openid', "$base/openid_table.sql" );
 173+ } else if( $wgDBtype == 'postgres' ) {
 174+ $wgExtNewTables[] = array( 'user_openid', "$base/openid_table.pg.sql" );
 175+ }
 176+
 177+ return true;
 178+ }
 179+
 180+ private static function loginStyle() {
 181+ global $wgOpenIDLoginLogoUrl;
 182+ return <<<EOS
 183+ <style type='text/css'>
 184+ li#pt-openidlogin {
 185+ background: url($wgOpenIDLoginLogoUrl) top left no-repeat;
 186+ padding-left: 20px;
 187+ text-transform: none;
 188+ }
 189+ </style>
 190+EOS;
 191+ }
 192+
 193+ public static function onUserLoginForm( &$template )
 194+ {
 195+ global $wgOut, $wgUser;
 196+/* $template->set( 'footer',
 197+ '<form id="openid_form" action="' . $wgUser->getSkin()->makeSpecialUrl('OpenIDLogin') . '" method="POST">' .
 198+ '<fieldset><legend>Sign-in or Create New Account</legend>'.
 199+ '<div id="openid_choice"><div id="openid_btns"></div></div>'.
 200+ '<div id="openid_input_area"><label for="openid_url">' . $label . '</label> ' .
 201+ '<input type="text" name="openid_url" id="openid_url" size="30" ' .
 202+ ' style="background: url(' . $wgOpenIDLoginLogoUrl . ') ' .
 203+ ' no-repeat; background-color: #fff; background-position: 0 50%; ' .
 204+ ' color: #000; padding-left: 18px;" value="" />' .
 205+ '<input type="submit" value="' . wfMsg('login') . '" />' .
 206+ '</div>' .
 207+ '</fieldset></form>'
 208+ );
 209+*/ return true;
 210+ }
 211+}
Property changes on: tags/extensions/OpenID/REL_0_8_4/OpenID.hooks.php
___________________________________________________________________
Name: svn:eol-style
1212 + native
Index: tags/extensions/OpenID/REL_0_8_4/SpecialOpenIDServer.body.php
@@ -0,0 +1,749 @@
 2+<?php
 3+/**
 4+ * Server.php -- Server side of OpenID site
 5+ * Copyright 2006,2007 Internet Brands (http://www.internetbrands.com/)
 6+ * Copyright 2007,2008 Evan Prodromou <evan@prodromou.name>
 7+ *
 8+ * This program is free software; you can redistribute it and/or modify
 9+ * it under the terms of the GNU General Public License as published by
 10+ * the Free Software Foundation; either version 2 of the License, or
 11+ * (at your option) any later version.
 12+ *
 13+ * This program is distributed in the hope that it will be useful,
 14+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 16+ * GNU General Public License for more details.
 17+ *
 18+ * You should have received a copy of the GNU General Public License
 19+ * along with this program; if not, write to the Free Software
 20+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 21+ *
 22+ * @author Evan Prodromou <evan@prodromou.name>
 23+ * @addtogroup Extensions
 24+ */
 25+
 26+if (!defined('MEDIAWIKI'))
 27+ exit(1);
 28+
 29+require_once("Auth/OpenID/Server.php");
 30+require_once("Auth/OpenID/Consumer.php");
 31+
 32+# Special page for the server side of OpenID
 33+# It has three major flavors:
 34+# * no parameter is for external requests to validate a user.
 35+# * 'Login' is we got a validation request but the
 36+# user wasn't logged in. We show them a form (see OpenIDServerLoginForm)
 37+# and they post the results, which go to OpenIDServerLogin
 38+# * 'Trust' is when the user has logged in, but they haven't
 39+# specified whether it's OK to let the requesting site trust them.
 40+# If they haven't, we show them a form (see OpenIDServerTrustForm)
 41+# and let them post results which go to OpenIDServerTrust.
 42+#
 43+# OpenID has its own modes; we only handle two of them ('check_setup' and
 44+# 'check_immediate') and let the OpenID libraries handle the rest.
 45+#
 46+# Output may be just a redirect, or a form if we need info.
 47+
 48+class SpecialOpenIDServer extends SpecialOpenID {
 49+
 50+ function SpecialOpenIDServer() {
 51+ SpecialPage::SpecialPage("OpenIDServer", '', false);
 52+ }
 53+
 54+ function execute($par) {
 55+
 56+ global $wgOut, $wgOpenIDClientOnly;
 57+
 58+ wfLoadExtensionMessages( 'OpenID' );
 59+
 60+ $this->setHeaders();
 61+
 62+ # No server functionality if this site is only a client
 63+ # Note: special page is un-registered if this flag is set,
 64+ # so it'd be unusual to get here.
 65+
 66+ if ($wgOpenIDClientOnly) {
 67+ $wgOut->showErrorPage('openiderror', 'openidclientonlytext');
 68+ return;
 69+ }
 70+
 71+ $server =& $this->getServer();
 72+
 73+ switch ($par) {
 74+ case 'Login':
 75+ list($request, $sreg) = $this->FetchValues();
 76+ $result = $this->serverLogin($request);
 77+ if ($result) {
 78+ if (is_string($result)) {
 79+ $this->LoginForm($request, $result);
 80+ return;
 81+ } else {
 82+ $this->Response($server, $result);
 83+ return;
 84+ }
 85+ }
 86+ break;
 87+ case 'Trust':
 88+ list($request, $sreg) = $this->FetchValues();
 89+ $result = $this->Trust($request, $sreg);
 90+ if ($result) {
 91+ if (is_string($result)) {
 92+ $this->TrustForm($request, $sreg, $result);
 93+ return;
 94+ } else {
 95+ $this->Response($server, $result);
 96+ return;
 97+ }
 98+ }
 99+ break;
 100+ default:
 101+ if (strlen($par)) {
 102+ wfDebug("OpenID: aborting in user validation because the parameter was empty\n");
 103+ $wgOut->showErrorPage('openiderror', 'openiderrortext');
 104+ return;
 105+ } else {
 106+ $method = $_SERVER['REQUEST_METHOD'];
 107+ $query = null;
 108+ if ($method == 'GET') {
 109+ $query = $_GET;
 110+ } else {
 111+ $query = $_POST;
 112+ }
 113+
 114+ $request = $server->decodeRequest();
 115+ $sreg = $this->SregFromQuery($query);
 116+ $response = NULL;
 117+ break;
 118+ }
 119+ }
 120+
 121+ if (!isset($request)) {
 122+ wfDebug("OpenID: aborting in user validation because the request was missing\n");
 123+ $wgOut->showErrorPage('openiderror', 'openiderrortext');
 124+ return;
 125+ }
 126+
 127+ global $wgUser;
 128+
 129+ switch ($request->mode) {
 130+ case "checkid_setup":
 131+ $response = $this->Check($server, $request, $sreg, false);
 132+ break;
 133+ case "checkid_immediate":
 134+ $response = $this->Check($server, $request, $sreg, true);
 135+ break;
 136+ default:
 137+ # For all the other parts, just let the libs do it
 138+ $response =& $server->handleRequest($request);
 139+ }
 140+
 141+ # OpenIDServerCheck returns NULL if some output (like a form)
 142+ # has been done
 143+
 144+ if (isset($response)) {
 145+ # We're done; clear values
 146+ $this->ClearValues();
 147+ $this->Response($server, $response);
 148+ }
 149+ }
 150+
 151+ # Returns the full URL of the special page; we need to pass it around
 152+ # for some requests
 153+
 154+ function Url() {
 155+ $nt = Title::makeTitleSafe(NS_SPECIAL, 'OpenIDServer');
 156+ if (isset($nt)) {
 157+ return $nt->getFullURL();
 158+ } else {
 159+ return NULL;
 160+ }
 161+ }
 162+
 163+ # Returns an Auth_OpenID_Server from the libraries. Utility.
 164+
 165+ function getServer() {
 166+ global $wgOpenIDServerStorePath,
 167+ $wgOpenIDServerStoreType;
 168+
 169+ $store = $this->getOpenIDStore($wgOpenIDServerStoreType,
 170+ 'server',
 171+ array('path' => $wgOpenIDServerStorePath));
 172+
 173+ return new Auth_OpenID_Server($store, $this->serverUrl());
 174+ }
 175+
 176+ # Checks a validation request. $imm means don't run any UI.
 177+ # Fairly meticulous and step-by step, and uses assertions
 178+ # to point out assumptions at each step.
 179+ #
 180+ # XXX: this should probably be broken up into multiple functions for
 181+ # clarity.
 182+
 183+ function Check($server, $request, $sreg, $imm = true) {
 184+
 185+ global $wgUser, $wgOut;
 186+
 187+ assert(isset($wgUser) && isset($wgOut));
 188+ assert(isset($server));
 189+ assert(isset($request));
 190+ assert(isset($sreg));
 191+ assert(isset($imm) && is_bool($imm));
 192+
 193+ # Is the passed identity URL a user page?
 194+
 195+ $url = $request->identity;
 196+
 197+ assert(isset($url) && strlen($url) > 0);
 198+
 199+ $name = $this->UrlToUserName($url);
 200+
 201+ if (!isset($name) || strlen($name) == 0) {
 202+ wfDebug("OpenID: '$url' not a user page.\n");
 203+ return $request->answer(false, $this->serverUrl());
 204+ }
 205+
 206+ assert(isset($name) && strlen($name) > 0);
 207+
 208+ # Is there a logged in user?
 209+
 210+ if ($wgUser->getId() == 0) {
 211+ wfDebug("OpenID: User not logged in.\n");
 212+ if ($imm) {
 213+ return $request->answer(false, $this->serverUrl());
 214+ } else {
 215+ # Bank these for later
 216+ $this->SaveValues($request, $sreg);
 217+ $this->LoginForm($request);
 218+ return NULL;
 219+ }
 220+ }
 221+
 222+ assert($wgUser->getId() != 0);
 223+
 224+ # Is the user page for the logged-in user?
 225+
 226+ $user = User::newFromName($name);
 227+
 228+ if (!isset($user) ||
 229+ $user->getId() != $wgUser->getId()) {
 230+ wfDebug("OpenID: User from url not logged in user.\n");
 231+ return $request->answer(false, $this->serverUrl());
 232+ }
 233+
 234+ assert(isset($user) && $user->getId() == $wgUser->getId() && $user->getId() != 0);
 235+
 236+ # Is the user an OpenID user?
 237+
 238+ $openid = $this->getUserUrl($user);
 239+
 240+ if (isset($openid) && strlen($openid) > 0) {
 241+ wfDebug("OpenID: Not one of our users; logs in with OpenID.\n");
 242+ return $request->answer(false, $this->serverUrl());
 243+ }
 244+
 245+ assert(is_array($sreg));
 246+
 247+ # Does the request require sreg fields that the user has not specified?
 248+
 249+ if (array_key_exists('required', $sreg)) {
 250+ $notFound = false;
 251+ foreach ($sreg['required'] as $reqfield) {
 252+ if (is_null($this->GetUserField($user, $reqfield))) {
 253+ $notFound = true;
 254+ break;
 255+ }
 256+ }
 257+ if ($notFound) {
 258+ wfDebug("OpenID: Consumer demands info we don't have.\n");
 259+ return $request->answer(false, $this->serverUrl());
 260+ }
 261+ }
 262+
 263+ # Trust check
 264+
 265+ $trust_root = $request->trust_root;
 266+
 267+ assert(isset($trust_root) && is_string($trust_root) && strlen($trust_root) > 0);
 268+
 269+ $trust = $this->GetUserTrust($user, $trust_root);
 270+
 271+ # Is there a trust record?
 272+
 273+ if (is_null($trust)) {
 274+ wfDebug("OpenID: No trust record.\n");
 275+ if ($imm) {
 276+ return $request->answer(false, $this->serverUrl());
 277+ } else {
 278+ # Bank these for later
 279+ $this->SaveValues($request, $sreg);
 280+ $this->TrustForm($request, $sreg);
 281+ return NULL;
 282+ }
 283+ }
 284+
 285+ assert(!is_null($trust));
 286+
 287+ # Is the trust record _not_ to allow trust?
 288+ # NB: exactly equal
 289+
 290+ if ($trust === false) {
 291+ wfDebug("OpenID: User specified not to allow trust.\n");
 292+ return $request->answer(false, $this->serverUrl());
 293+ }
 294+
 295+ assert(isset($trust) && is_array($trust));
 296+
 297+ # Does the request require sreg fields that the user has
 298+ # not allowed us to pass, or has not specified?
 299+
 300+ if (array_key_exists('required', $sreg)) {
 301+ $notFound = false;
 302+ foreach ($sreg['required'] as $reqfield) {
 303+ if (!in_array($reqfield, $trust) ||
 304+ is_null($this->GetUserField($user, $reqfield))) {
 305+ $notFound = true;
 306+ break;
 307+ }
 308+ }
 309+ if ($notFound) {
 310+ wfDebug("OpenID: Consumer demands info user doesn't want shared.\n");
 311+ return $request->answer(false, $this->serverUrl());
 312+ }
 313+ }
 314+
 315+ # assert(all required sreg fields are in $trust)
 316+
 317+ # XXX: run a hook here to check
 318+
 319+ # SUCCESS
 320+
 321+ $response_fields = array_intersect(array_unique(array_merge($sreg['required'], $sreg['optional'])),
 322+ $trust);
 323+
 324+ $response = $request->answer(true);
 325+
 326+ assert(isset($response));
 327+
 328+ foreach ($response_fields as $field) {
 329+ $value = $this->GetUserField($user, $field);
 330+ if (!is_null($value)) {
 331+ $response->addField('sreg', $field, $value);
 332+ }
 333+ }
 334+
 335+ return $response;
 336+ }
 337+
 338+ # Get the user's configured trust value for a particular trust root.
 339+ # Returns one of three values:
 340+ # * NULL -> no stored trust preferences
 341+ # * false -> stored trust preference is not to trust
 342+ # * array -> possibly empty array of allowed profile fields; trust is OK
 343+
 344+ function GetUserTrust($user, $trust_root) {
 345+ static $allFields = array('nickname', 'fullname', 'email', 'language');
 346+ global $wgOpenIDServerForceAllowTrust;
 347+
 348+ foreach ($wgOpenIDServerForceAllowTrust as $force) {
 349+ if (preg_match($force, $trust_root)) {
 350+ return $allFields;
 351+ }
 352+ }
 353+
 354+ $trust_array = $this->GetUserTrustArray($user);
 355+
 356+ if (array_key_exists($trust_root, $trust_array)) {
 357+ return $trust_array[$trust_root];
 358+ } else {
 359+ return null; # Unspecified trust
 360+ }
 361+ }
 362+
 363+ function SetUserTrust(&$user, $trust_root, $value) {
 364+
 365+ $trust_array = $this->GetUserTrustArray($user);
 366+
 367+ if (is_null($value)) {
 368+ if (array_key_exists($trust_root, $trust_array)) {
 369+ unset($trust_array[$trust_root]);
 370+ }
 371+ } else {
 372+ $trust_array[$trust_root] = $value;
 373+ }
 374+
 375+ $this->SetUserTrustArray($user, $trust_array);
 376+ }
 377+
 378+ function GetUserTrustArray($user) {
 379+ $trust_array = array();
 380+ $trust_str = $user->getOption('openid_trust');
 381+ if (strlen($trust_str) > 0) {
 382+ $trust_records = explode("\x1E", $trust_str);
 383+ foreach ($trust_records as $record) {
 384+ $fields = explode("\x1F", $record);
 385+ $trust_root = array_shift($fields);
 386+ if (count($fields) == 1 && strcmp($fields[0], 'no') == 0) {
 387+ $trust_array[$trust_root] = false;
 388+ } else {
 389+ $fields = array_map('trim', $fields);
 390+ $fields = array_filter($fields, array($this, 'ValidField'));
 391+ $trust_array[$trust_root] = $fields;
 392+ }
 393+ }
 394+ }
 395+ return $trust_array;
 396+ }
 397+
 398+ function SetUserTrustArray(&$user, $arr) {
 399+ $trust_records = array();
 400+ foreach ($arr as $root => $value) {
 401+ if ($value === false) {
 402+ $record = implode("\x1F", array($root, 'no'));
 403+ } else if (is_array($value)) {
 404+ if (count($value) == 0) {
 405+ $record = $root;
 406+ } else {
 407+ $value = array_map('trim', $value);
 408+ $value = array_filter($value, array($this, 'ValidField'));
 409+ $record = implode("\x1F", array_merge(array($root), $value));
 410+ }
 411+ } else {
 412+ continue;
 413+ }
 414+ $trust_records[] = $record;
 415+ }
 416+ $trust_str = implode("\x1E", $trust_records);
 417+ $user->setOption('openid_trust', $trust_str);
 418+ }
 419+
 420+ function ValidField($name) {
 421+ # XXX: eventually add timezone
 422+ static $fields = array('nickname', 'email', 'fullname', 'language');
 423+ return in_array($name, $fields);
 424+ }
 425+
 426+ function SregFromQuery($query) {
 427+ $sreg = array('required' => array(), 'optional' => array(),
 428+ 'policy_url' => NULL);
 429+ if (array_key_exists('openid.sreg.required', $query)) {
 430+ $sreg['required'] = explode(',', $query['openid.sreg.required']);
 431+ }
 432+ if (array_key_exists('openid.sreg.optional', $query)) {
 433+ $sreg['optional'] = explode(',', $query['openid.sreg.optional']);
 434+ }
 435+ if (array_key_exists('openid.sreg.policy_url', $query)) {
 436+ $sreg['policy_url'] = $query['openid.sreg.policy_url'];
 437+ }
 438+ return $sreg;
 439+ }
 440+
 441+ function SetUserField(&$user, $field, $value) {
 442+ switch ($field) {
 443+ case 'fullname':
 444+ $user->setRealName($value);
 445+ return true;
 446+ break;
 447+ case 'email':
 448+ # FIXME: deal with validation
 449+ $user->setEmail($value);
 450+ return true;
 451+ break;
 452+ case 'language':
 453+ $user->setOption('language', $value);
 454+ return true;
 455+ break;
 456+ default:
 457+ return false;
 458+ }
 459+ }
 460+
 461+ function GetUserField($user, $field) {
 462+ switch ($field) {
 463+ case 'nickname':
 464+ return $user->getName();
 465+ break;
 466+ case 'fullname':
 467+ return $user->getRealName();
 468+ break;
 469+ case 'email':
 470+ return $user->getEmail();
 471+ break;
 472+ case 'language':
 473+ return $user->getOption('language');
 474+ break;
 475+ default:
 476+ return NULL;
 477+ }
 478+ }
 479+
 480+ function Response(&$server, &$response) {
 481+ global $wgOut;
 482+
 483+ assert(!is_null($server));
 484+ assert(!is_null($response));
 485+
 486+ $wgOut->disable();
 487+
 488+ $wr =& $server->encodeResponse($response);
 489+
 490+ assert(!is_null($wr));
 491+
 492+ header("Status: " . $wr->code);
 493+
 494+ foreach ($wr->headers as $k => $v) {
 495+ header("$k: $v");
 496+ }
 497+
 498+ print $wr->body;
 499+
 500+ return;
 501+ }
 502+
 503+ function LoginForm($request, $msg = null) {
 504+
 505+ global $wgOut, $wgUser;
 506+
 507+ $url = $request->identity;
 508+ $name = $this->UrlToUserName($url);
 509+ $trust_root = $request->trust_root;
 510+
 511+ $instructions = wfMsg('openidserverlogininstructions', $url, $name, $trust_root);
 512+
 513+ $username = wfMsg('yourname');
 514+ $password = wfMsg('yourpassword');
 515+ $ok = wfMsg('ok');
 516+ $cancel = wfMsg('cancel');
 517+
 518+ if (isset($msg)) {
 519+ $wgOut->addHTML("<p class='error'>{$msg}</p>");
 520+ }
 521+
 522+ $sk = $wgUser->getSkin();
 523+
 524+ $wgOut->addHTML("<p>{$instructions}</p>" .
 525+ '<form action="' . $sk->makeSpecialUrl('OpenIDServer/Login') . '" method="POST">' .
 526+ '<table>' .
 527+ "<tr><td><label for='username'>{$username}</label></td>" .
 528+ ' <td><span id="username">' . htmlspecialchars($name) . '</span></td></tr>' .
 529+ "<tr><td><label for='password'>{$password}</label></td>" .
 530+ ' <td><input type="password" name="wpPassword" size="32" value="" /></td></tr>' .
 531+ "<tr><td colspan='2'><input type='submit' name='wpOK' value='{$ok}' /> <input type='submit' name='wpCancel' value='{$cancel}' /></td></tr>" .
 532+ '</table>' .
 533+ '</form>');
 534+ }
 535+
 536+ function SaveValues($request, $sreg) {
 537+ global $wgSessionStarted, $wgUser;
 538+
 539+ if (!$wgSessionStarted) {
 540+ $wgUser->SetupSession();
 541+ }
 542+
 543+ $_SESSION['openid_server_request'] = $request;
 544+ $_SESSION['openid_server_sreg'] = $sreg;
 545+
 546+ return true;
 547+ }
 548+
 549+ function FetchValues() {
 550+ return array($_SESSION['openid_server_request'], $_SESSION['openid_server_sreg']);
 551+ }
 552+
 553+ function ClearValues() {
 554+ unset($_SESSION['openid_server_request']);
 555+ unset($_SESSION['openid_server_sreg']);
 556+ return true;
 557+ }
 558+
 559+ function serverLogin($request) {
 560+
 561+ global $wgRequest, $wgUser;
 562+
 563+ assert(isset($request));
 564+
 565+ assert(isset($wgRequest));
 566+
 567+ if ($wgRequest->getCheck('wpCancel')) {
 568+ return $request->answer(false);
 569+ }
 570+
 571+ $password = $wgRequest->getText('wpPassword');
 572+
 573+ if (!isset($password) || strlen($password) == 0) {
 574+ return wfMsg('wrongpasswordempty');
 575+ }
 576+
 577+ assert (isset($password) && strlen($password) > 0);
 578+
 579+ $url = $request->identity;
 580+
 581+ assert(isset($url) && is_string($url) && strlen($url) > 0);
 582+
 583+ $name = $this->UrlToUserName($url);
 584+
 585+ assert(isset($name) && is_string($name) && strlen($name) > 0);
 586+
 587+ $user = User::newFromName($name);
 588+
 589+ assert(isset($user));
 590+
 591+ if (!$user->checkPassword($password)) {
 592+ return wfMsg('wrongpassword');
 593+ } else {
 594+ $id = $user->getId();
 595+ $wgUser = $user;
 596+ $wgUser->SetupSession();
 597+ $wgUser->SetCookies();
 598+ wfRunHooks('UserLoginComplete', array(&$wgUser));
 599+ return false;
 600+ }
 601+ }
 602+
 603+ function TrustForm($request, $sreg, $msg = NULL) {
 604+
 605+ global $wgOut, $wgUser;
 606+
 607+ $url = $request->identity;
 608+ $name = $this->UrlToUserName($url);
 609+ $trust_root = $request->trust_root;
 610+
 611+ $instructions = wfMsg('openidtrustinstructions', $trust_root);
 612+ $allow = wfMsg('openidallowtrust', $trust_root);
 613+
 614+ if (is_null($sreg['policy_url'])) {
 615+ $policy = wfMsg('openidnopolicy');
 616+ } else {
 617+ $policy = wfMsg('openidpolicy', $sreg['policy_url']);
 618+ }
 619+
 620+ if (isset($msg)) {
 621+ $wgOut->addHTML("<p class='error'>{$msg}</p>");
 622+ }
 623+
 624+ $ok = wfMsg('ok');
 625+ $cancel = wfMsg('cancel');
 626+
 627+ $sk = $wgUser->getSkin();
 628+
 629+ $wgOut->addHTML("<p>{$instructions}</p>" .
 630+ '<form action="' . $sk->makeSpecialUrl('OpenIDServer/Trust') . '" method="POST">' .
 631+ '<input name="wpAllowTrust" type="checkbox" value="on" checked="checked" id="wpAllowTrust">' .
 632+ '<label for="wpAllowTrust">' . $allow . '</label><br />');
 633+
 634+ $fields = array_filter(array_unique(array_merge($sreg['optional'], $sreg['required'])),
 635+ array($this, 'ValidField'));
 636+
 637+ if (count($fields) > 0) {
 638+ $wgOut->addHTML('<table>');
 639+ foreach ($fields as $field) {
 640+ $wgOut->addHTML("<tr>");
 641+ $wgOut->addHTML("<th><label for='wpAllow{$field}'>");
 642+ $wgOut->addHTML(wfMsg("openid$field"));
 643+ $wgOut->addHTML("</label></th>");
 644+ $value = $this->GetUserField($wgUser, $field);
 645+ $wgOut->addHTML("</td>");
 646+ $wgOut->addHTML("<td> " . ((is_null($value)) ? '' : $value) . "</td>");
 647+ $wgOut->addHTML("<td>" . ((in_array($field, $sreg['required'])) ? wfMsg('openidrequired') : wfMsg('openidoptional')) . "</td>");
 648+ $wgOut->addHTML("<td><input name='wpAllow{$field}' id='wpAllow{$field}' type='checkbox'");
 649+ if (!is_null($value)) {
 650+ $wgOut->addHTML(" value='on' checked='checked' />");
 651+ } else {
 652+ $wgOut->addHTML(" disabled='disabled' />");
 653+ }
 654+ $wgOut->addHTML("</tr>");
 655+ }
 656+ $wgOut->addHTML('</table>');
 657+ }
 658+ $wgOut->addHTML("<input type='submit' name='wpOK' value='{$ok}' /> <input type='submit' name='wpCancel' value='{$cancel}' /></form>");
 659+ return NULL;
 660+ }
 661+
 662+ function Trust($request, $sreg) {
 663+ global $wgRequest, $wgUser;
 664+
 665+ assert(isset($request));
 666+ assert(isset($sreg));
 667+ assert(isset($wgRequest));
 668+
 669+ if ($wgRequest->getCheck('wpCancel')) {
 670+ return $request->answer(false);
 671+ }
 672+
 673+ $trust_root = $request->trust_root;
 674+
 675+ assert(isset($trust_root) && strlen($trust_root) > 0);
 676+
 677+ # If they don't want us to allow trust, save that.
 678+
 679+ if (!$wgRequest->getCheck('wpAllowTrust')) {
 680+
 681+ $this->SetUserTrust($wgUser, $trust_root, false);
 682+ # Set'em and sav'em
 683+ $wgUser->saveSettings();
 684+ } else {
 685+
 686+ $fields = array_filter(array_unique(array_merge($sreg['optional'], $sreg['required'])),
 687+ array($this, 'ValidField'));
 688+
 689+ $allow = array();
 690+
 691+ foreach ($fields as $field) {
 692+ if ($wgRequest->getCheck('wpAllow' . $field)) {
 693+ $allow[] = $field;
 694+ }
 695+ }
 696+
 697+ $this->SetUserTrust($wgUser, $trust_root, $allow);
 698+ # Set'em and sav'em
 699+ $wgUser->saveSettings();
 700+ }
 701+
 702+ }
 703+
 704+ # Converts an URL to a user name, if possible
 705+
 706+ function UrlToUserName($url) {
 707+
 708+ global $wgArticlePath, $wgServer;
 709+
 710+ # URL must be a string
 711+
 712+ if (!isset($url) || !is_string($url) || strlen($url) == 0) {
 713+ return null;
 714+ }
 715+
 716+ # it must start with our server, case doesn't matter
 717+
 718+ if (strpos(strtolower($url), strtolower($wgServer)) !== 0) {
 719+ return null;
 720+ }
 721+
 722+ $parts = parse_url($url);
 723+
 724+ $relative = $parts['path'];
 725+ if (!is_null($parts['query']) && strlen($parts['query']) > 0) {
 726+ $relative .= '?' . $parts['query'];
 727+ }
 728+
 729+ # Use regexps to extract user name
 730+
 731+ $pattern = str_replace('$1', '(.*)', $wgArticlePath);
 732+ $pattern = str_replace('?', '\?', $pattern);
 733+ # Can't have a pound-sign in the relative, since that's for fragments
 734+ if (!preg_match("#$pattern#", $relative, $matches)) {
 735+ return null;
 736+ } else {
 737+ $titletext = urldecode($matches[1]);
 738+ $nt = Title::newFromText($titletext);
 739+ if (is_null($nt) || $nt->getNamespace() != NS_USER) {
 740+ return null;
 741+ } else {
 742+ return $nt->getText();
 743+ }
 744+ }
 745+ }
 746+
 747+ function serverUrl() {
 748+ return $this->fullURL('OpenIDServer');
 749+ }
 750+}
Property changes on: tags/extensions/OpenID/REL_0_8_4/SpecialOpenIDServer.body.php
___________________________________________________________________
Name: svn:eol-style
1751 + native
Index: tags/extensions/OpenID/REL_0_8_4/openid_table.pg.sql
@@ -0,0 +1,9 @@
 2+
 3+-- Schema for the OpenID extension (Postgres version)
 4+
 5+CREATE TABLE user_openid (
 6+ uoi_openid VARCHAR(255) PRIMARY KEY NOT NULL,
 7+ uoi_user INTEGER NOT NULL
 8+);
 9+
 10+CREATE UNIQUE INDEX user_openid_unique ON user_openid(uoi_user);
Property changes on: tags/extensions/OpenID/REL_0_8_4/openid_table.pg.sql
___________________________________________________________________
Name: svn:eol-style
111 + native
Index: tags/extensions/OpenID/REL_0_8_4/SpecialOpenIDLogin.body.php
@@ -0,0 +1,227 @@
 2+<?php
 3+/**
 4+ * SpecialOpenIDLogin.body.php -- Consumer side of OpenID site
 5+ * Copyright 2006,2007 Internet Brands (http://www.internetbrands.com/)
 6+ * Copyright 2007,2008 Evan Prodromou <evan@prodromou.name>
 7+ *
 8+ * This program is free software; you can redistribute it and/or modify
 9+ * it under the terms of the GNU General Public License as published by
 10+ * the Free Software Foundation; either version 2 of the License, or
 11+ * (at your option) any later version.
 12+ *
 13+ * This program is distributed in the hope that it will be useful,
 14+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 16+ * GNU General Public License for more details.
 17+ *
 18+ * You should have received a copy of the GNU General Public License
 19+ * along with this program; if not, write to the Free Software
 20+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 21+ *
 22+ * @author Evan Prodromou <evan@prodromou.name>
 23+ * @addtogroup Extensions
 24+ */
 25+
 26+if (!defined('MEDIAWIKI'))
 27+ exit(1);
 28+
 29+require_once("Auth/OpenID/Consumer.php");
 30+
 31+class SpecialOpenIDLogin extends SpecialOpenID {
 32+
 33+ function SpecialOpenIDLogin() {
 34+ SpecialPage::SpecialPage("OpenIDLogin");
 35+ }
 36+
 37+ function execute($par) {
 38+ global $wgRequest, $wgUser, $wgOut, $wgScriptPath, $wgOpenIDShowProviderIcons;
 39+
 40+ wfLoadExtensionMessages( 'OpenID' );
 41+
 42+ $this->setHeaders();
 43+
 44+ $oidScriptPath = $wgScriptPath . '/extensions/OpenID';
 45+
 46+ $wgOut->addLink( array(
 47+ 'rel' => 'stylesheet',
 48+ 'type' => 'text/css',
 49+ 'media' => 'screen, projection',
 50+ 'href' => $oidScriptPath.($wgOpenIDShowProviderIcons ? '/skin/openid.css' : '/skin/openid-plain.css')
 51+ ));
 52+
 53+ $wgOut->addScript('<script type="text/javascript" src="'.$oidScriptPath.'/skin/jquery-1.3.2.min.js"></script>'."\n");
 54+ $wgOut->addScript('<script type="text/javascript" src="'.$oidScriptPath.'/skin/openid.js"></script>'."\n");
 55+
 56+ if ($wgUser->getID() != 0) {
 57+ $this->alreadyLoggedIn();
 58+ return;
 59+ }
 60+
 61+ if ($wgRequest->getText('returnto')) {
 62+ $this->setReturnTo($wgRequest->getText('returnto'));
 63+ }
 64+
 65+ $openid_url = $wgRequest->getText('openid_url');
 66+
 67+ if (isset($openid_url) && strlen($openid_url) > 0) {
 68+ $this->login($openid_url);
 69+ } else {
 70+ $this->loginForm();
 71+ }
 72+ }
 73+
 74+ function loginForm() {
 75+ global $wgOut, $wgUser, $wgOpenIDLoginLogoUrl, $wgOpenIDShowProviderIcons;
 76+ $sk = $wgUser->getSkin();
 77+ $instructions = wfMsgExt('openidlogininstructions', array('parse'));
 78+
 79+ $formsHTML = '';
 80+
 81+ $largeButtonsHTML = '<div id="openid_large_providers">';
 82+ foreach (OpenIDProvider::getLargeProviders() as $provider) {
 83+ $largeButtonsHTML .= $provider->getLargeButtonHTML();
 84+ $formsHTML .= $provider->getLoginFormHTML();
 85+ }
 86+ $largeButtonsHTML .= '</div>';
 87+
 88+ $smallButtonsHTML = '';
 89+ if ($wgOpenIDShowProviderIcons) {
 90+ $smallButtonsHTML .= '<div id="openid_small_providers_icons">';
 91+ foreach (OpenIDProvider::getSmallProviders() as $provider) {
 92+ $smallButtonsHTML .= $provider->getSmallButtonHTML();
 93+ $formsHTML .= $provider->getLoginFormHTML();
 94+ }
 95+ $smallButtonsHTML .= '</div>';
 96+ }
 97+ else
 98+ {
 99+ $smallButtonsHTML .= '<div id="openid_small_providers_links">';
 100+ $smallButtonsHTML .= '<ul class="openid_small_providers_block">';
 101+ $small = OpenIDProvider::getSmallProviders();
 102+
 103+ $i = 0;
 104+ $break = true;
 105+ foreach ($small as $provider) {
 106+ if ($break && $i > count($small)/2) {
 107+ $smallButtonsHTML .= '</ul><ul class="openid_small_providers_block">';
 108+ $break = false;
 109+ }
 110+
 111+ $smallButtonsHTML .= '<li>'.$provider->getSmallButtonHTML().'</li>';
 112+
 113+ $formsHTML .= $provider->getLoginFormHTML();
 114+ $i++;
 115+ }
 116+ $smallButtonsHTML .= '</ul>';
 117+ $smallButtonsHTML .= '</div>';
 118+ }
 119+
 120+ $wgOut->addHTML('<form id="openid_form" action="' . $sk->makeSpecialUrl('OpenIDLogin') . '" method="POST" onsubmit="openid.update()"">' .
 121+ '<fieldset><legend>' . wfMsg('openidsigninorcreateaccount') . '</legend>' .
 122+ $largeButtonsHTML .
 123+ '<div id="openid_input_area">' .
 124+ $formsHTML .
 125+ '</div>' .
 126+ $smallButtonsHTML .
 127+ '</fieldset></form>' .
 128+ $instructions
 129+ );
 130+ }
 131+
 132+ function toUserName($openid) {
 133+ if (Services_Yadis_identifierScheme($openid) == 'XRI') {
 134+ wfDebug("OpenID: Handling an XRI: $openid\n");
 135+ return $this->toUserNameXri($openid);
 136+ } else {
 137+ wfDebug("OpenID: Handling an URL: $openid\n");
 138+ return $this->toUserNameUrl($openid);
 139+ }
 140+ }
 141+
 142+ function alreadyLoggedIn() {
 143+
 144+ global $wgUser, $wgOut;
 145+
 146+ $wgOut->setPageTitle( wfMsg( 'openiderror' ) );
 147+ $wgOut->setRobotPolicy( 'noindex,nofollow' );
 148+ $wgOut->setArticleRelated( false );
 149+ $wgOut->addWikiText( wfMsg( 'openidalreadyloggedin', $wgUser->getName() ) );
 150+ $wgOut->returnToMain(false, $this->returnTo() );
 151+ }
 152+
 153+ function setUserUrl($user, $url) {
 154+ $other = $this->getUserUrl($user);
 155+ if (isset($other)) {
 156+ $this->updateUserUrl($user, $url);
 157+ } else {
 158+ $this->insertUserUrl($user, $url);
 159+ }
 160+ }
 161+
 162+ function insertUserUrl($user, $url) {
 163+ global $wgSharedDB, $wgDBname;
 164+ $dbw =& wfGetDB( DB_MASTER );
 165+
 166+ if (isset($wgSharedDB)) {
 167+ # It would be nicer to get the existing dbname
 168+ # and save it, but it's not possible
 169+ $dbw->selectDB($wgSharedDB);
 170+ }
 171+
 172+ $dbw->insert('user_openid', array('uoi_user' => $user->getId(),
 173+ 'uoi_openid' => $url));
 174+
 175+ if (isset($wgSharedDB)) {
 176+ $dbw->selectDB($wgDBname);
 177+ }
 178+ }
 179+
 180+ function updateUserUrl($user, $url) {
 181+ global $wgSharedDB, $wgDBname;
 182+ $dbw =& wfGetDB( DB_MASTER );
 183+
 184+ if (isset($wgSharedDB)) {
 185+ # It would be nicer to get the existing dbname
 186+ # and save it, but it's not possible
 187+ $dbw->selectDB($wgSharedDB);
 188+ }
 189+
 190+ $dbw->set('user_openid', 'uoi_openid', $url,
 191+ 'uoi_user = ' . $user->getID());
 192+
 193+ if (isset($wgSharedDB)) {
 194+ $dbw->selectDB($wgDBname);
 195+ }
 196+ }
 197+
 198+ function saveValues($response, $sreg) {
 199+ global $wgSessionStarted, $wgUser;
 200+
 201+ if (!$wgSessionStarted) {
 202+ $wgUser->SetupSession();
 203+ }
 204+
 205+ $_SESSION['openid_consumer_response'] = $response;
 206+ $_SESSION['openid_consumer_sreg'] = $sreg;
 207+
 208+ return true;
 209+ }
 210+
 211+ function clearValues() {
 212+ unset($_SESSION['openid_consumer_response']);
 213+ unset($_SESSION['openid_consumer_sreg']);
 214+ return true;
 215+ }
 216+
 217+ function fetchValues() {
 218+ return array($_SESSION['openid_consumer_response'], $_SESSION['openid_consumer_sreg']);
 219+ }
 220+
 221+ function returnTo() {
 222+ return $_SESSION['openid_consumer_returnto'];
 223+ }
 224+
 225+ function setReturnTo($returnto) {
 226+ $_SESSION['openid_consumer_returnto'] = $returnto;
 227+ }
 228+}
Property changes on: tags/extensions/OpenID/REL_0_8_4/SpecialOpenIDLogin.body.php
___________________________________________________________________
Name: svn:eol-style
1229 + native
Index: tags/extensions/OpenID/REL_0_8_4/OpenID.alias.php
@@ -0,0 +1,74 @@
 2+<?php
 3+/**
 4+ * Aliases for special pages
 5+ *
 6+ * @file
 7+ * @ingroup Extensions
 8+ */
 9+
 10+$aliases = array();
 11+
 12+/** English
 13+ * @author IAlex
 14+ */
 15+$aliases['en'] = array(
 16+ 'OpenIDLogin' => array( 'OpenIDLogin' ),
 17+ 'OpenIDFinish' => array( 'OpenIDFinish' ),
 18+ 'OpenIDConvert' => array( 'OpenIDConvert' ),
 19+ 'OpenIDServer' => array( 'OpenIDServer' ),
 20+ 'OpenIDXRDS' => array( 'OpenIDXRDS' ),
 21+);
 22+
 23+/** Arabic (العربية) */
 24+$aliases['ar'] = array(
 25+ 'OpenIDLogin' => array( 'دخول_الهوية_المفتوحة' ),
 26+ 'OpenIDFinish' => array( 'نهاية_الهوية_المفتوحة' ),
 27+ 'OpenIDConvert' => array( 'تحويل_الهوية_المفتوحة' ),
 28+ 'OpenIDServer' => array( 'خادم_الهوية_المفتوحة' ),
 29+ 'OpenIDXRDS' => array( 'إكسردس_الهوية_المفتوحة' ),
 30+);
 31+
 32+/** Egyptian Spoken Arabic (مصرى) */
 33+$aliases['arz'] = array(
 34+ 'OpenIDLogin' => array( 'دخول_الهوية_المفتوحة' ),
 35+ 'OpenIDFinish' => array( 'نهاية_الهوية_المفتوحة' ),
 36+ 'OpenIDConvert' => array( 'تحويل_الهوية_المفتوحة' ),
 37+ 'OpenIDServer' => array( 'خادم_الهوية_المفتوحة' ),
 38+ 'OpenIDXRDS' => array( 'إكسردس_الهوية_المفتوحة' ),
 39+);
 40+
 41+/** Interlingua (Interlingua) */
 42+$aliases['ia'] = array(
 43+ 'OpenIDLogin' => array( 'Aperir session OpenID' ),
 44+ 'OpenIDFinish' => array( 'Completar session OpenID' ),
 45+ 'OpenIDConvert' => array( 'Converter a OpenID' ),
 46+ 'OpenIDServer' => array( 'Servitor OpenID' ),
 47+ 'OpenIDXRDS' => array( 'XRDS OpenID' ),
 48+);
 49+
 50+/** Japanese (日本語) */
 51+$aliases['ja'] = array(
 52+ 'OpenIDLogin' => array( 'OpenIDログイン' ),
 53+ 'OpenIDFinish' => array( 'OpenID完了' ),
 54+ 'OpenIDConvert' => array( 'OpenID変換' ),
 55+ 'OpenIDServer' => array( 'OpenIDサーバー' ),
 56+);
 57+
 58+/** Sanskrit (संस्कृत) */
 59+$aliases['sa'] = array(
 60+ 'OpenIDLogin' => array( 'उद्घटपरिचयपत्रप्रवेश' ),
 61+ 'OpenIDFinish' => array( 'उद्घटपरिचयपत्रसमापयति' ),
 62+ 'OpenIDConvert' => array( 'उद्घटपरिचयपत्रांतर' ),
 63+ 'OpenIDServer' => array( 'उद्घटपरिचयपत्रविदादाता' ),
 64+ 'OpenIDXRDS' => array( 'उद्घटपरिचयपत्रXRDS' ),
 65+);
 66+
 67+/** Tagalog (Tagalog) */
 68+$aliases['tl'] = array(
 69+ 'OpenIDLogin' => array( 'Paglagda sa OpenID' ),
 70+ 'OpenIDFinish' => array( 'Pagtatapos ng OpenID' ),
 71+ 'OpenIDConvert' => array( 'Pagpapalit ng OpenID' ),
 72+ 'OpenIDServer' => array( 'Serbidor ng OpenID' ),
 73+ 'OpenIDXRDS' => array( 'XRDS ng OpenID' ),
 74+);
 75+
Property changes on: tags/extensions/OpenID/REL_0_8_4/OpenID.alias.php
___________________________________________________________________
Name: svn:eol-style
176 + native
Index: tags/extensions/OpenID/REL_0_8_4/README
@@ -0,0 +1,350 @@
 2+MediaWiki OpenID extension
 3+
 4+version 0.8.4
 5+18 Apr 2009
 6+
 7+This is the README file for the OpenID extension for MediaWiki
 8+software. The extension is only useful if you've got a MediaWiki
 9+installation; it can only be installed by the administrator of the site.
 10+
 11+The extension lets users log in with an OpenID
 12+(http://www.openid.net/) instead of a username and password. An OpenID
 13+is a special URL that people can use to log in to a Web site. The
 14+extension also lets users who have an account on the wiki log in to
 15+other OpenID-aware Web sites with their wiki user page as their OpenID.
 16+
 17+Typical uses:
 18+
 19+* Single-signon between multiple affiliated wikis and other sites. We
 20+ have almost 20 wikis that work together for Wikitravel, and users
 21+ can login to different Wikitravel wikis with their home wiki
 22+ account.
 23+* Single-signon across the Internet. Many, many sites now support
 24+ OpenID, including "big names" like Yahoo!, Google, and AOL. Allowing
 25+ users to login with OpenID means one less step for them to
 26+ contribute to your wiki.
 27+* Distributed reputation. Logging into a new wiki with the same
 28+ username as you have on another wiki doesn't prove that they're the
 29+ same person. Logging in with your OpenID from the old wiki does.
 30+ Using OpenID can help build a distributed reputation across the
 31+ wiki world.
 32+
 33+The software supports OpenID 2.0 and '''requires''' the
 34+openidenabled.com 2.x libraries. Users of previous versions should see
 35+[[#Upgrade]] for more information.
 36+
 37+This extension has been in use for years on several large wikis
 38+without known security problems. However, no software is completely
 39+bug-free or secure, and there's no guarantee that this software will
 40+work as advertised. See [[#Bugs]] section below for info on how to
 41+report problems.
 42+
 43+== License ==
 44+
 45+Copyright 2006,2007 Internet Brands (http://www.internetbrands.com/)
 46+Copyright 2008 Evan Prodromou (http://vinismo.com/en/User:Evan)
 47+
 48+This program is free software; you can redistribute it and/or modify
 49+it under the terms of the GNU General Public License as published by
 50+the Free Software Foundation; either version 2 of the License, or
 51+(at your option) any later version.
 52+
 53+This program is distributed in the hope that it will be useful,
 54+but WITHOUT ANY WARRANTY; without even the implied warranty of
 55+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 56+GNU General Public License for more details.
 57+
 58+You should have received a copy of the GNU General Public License
 59+along with this program; if not, write to the Free Software
 60+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 61+
 62+== Author ==
 63+
 64+Evan Prodromou <evan@vinismo.com>
 65+
 66+Patches for YADIS support and FileStore storage by Jonathan Daugherty
 67+<cygnus@janrain.com>.
 68+
 69+== Pre-requisites ==
 70+
 71+This software has been tested in production with MediaWiki 1.11.x. It
 72+may or may not work with earlier or later versions, but I'm interested
 73+in making later versions work, and I'd be happy to make minor changes
 74+to make older, unsupported versions work too.
 75+
 76+The software depends on the OpenIDEnabled.com PHP library for OpenID,
 77+which in turn depends on the OpenIDEnabled.com PHP library for YADIS.
 78+At the time of this writing, info on installing these libraries was
 79+available here:
 80+
 81+ http://www.openidenabled.com/php-openid/
 82+
 83+The last version tested with is 2.0.1; '''versions below 2.0 will not
 84+work'''. If you must use version 1.x of the openidenabled.com library,
 85+you can use the unsupported version 0.7.0 or below of this extension.
 86+
 87+There are also some required PHP extensions; see the OpenIDEnabled
 88+documentation for details. This software has been tested with the gmp
 89+and curl PHP extensions installed, and it's recommended that you
 90+install them, too.
 91+
 92+Note that some versions of MediaWiki overwrite the PHP library path in
 93+LocalSettings.php. You may need to add the path to your PHP library
 94+directory to the $path variable, like "/usr/share/php" or
 95+"/usr/local/share/php".
 96+
 97+== Installation ==
 98+
 99+To install, copy all the files in the archive you downloaded to the
 100+OpenID subdirectory of the extensions subdirectory of your MediaWiki
 101+installation. Note that the software depends on having its code all in
 102+the "OpenID" sub-directory; naming it "OpenID-Test" or "newextension1"
 103+or whatever won't work.
 104+
 105+Run update.php script in in your MediaWiki maintenance folder to create
 106+necessary tables in MediaWiki database.
 107+
 108+Version 0.3 and below of this extension used a different database
 109+structure that was pretty inefficient. If you installed this extension
 110+before, you should copy the optionToTable.php script to your MediaWiki
 111+"maintenance" directory and run it from the command line. This will
 112+copy the OpenID mappings from the user table to the new table (but it
 113+doesn't erase the old data... just in case).
 114+
 115+In your MediaWiki LocalSettings.php, add the following line some place
 116+towards the bottom of the file:
 117+
 118+ require_once("$IP/extensions/OpenID/OpenID.setup.php");
 119+
 120+Theoretically it should work out of the box, but you'll almost
 121+definitely want to set the trust root and access controls (see
 122+Configuration below).
 123+
 124+== Upgrade ==
 125+
 126+'''This is an incompatible upgrade to the previous version of the
 127+MediaWiki OpenID library.''' In particular, the interfaces of the
 128+openidenabled.com libraries have changed from 1.x to 2.x, and no
 129+effort has been made to retain backwards compatibility with the 1.x
 130+versions of the library.
 131+
 132+To upgrade, you'll need to do at least the following:
 133+
 134+* Install the 2.x version of the openidenabled.com PHP OpenID library.
 135+* Check that your consumer and server stores are correct. I got tired
 136+ of maintaining the MemcStore that nobody seemed to want, so if you
 137+ used that, you need to use the filestore now. See below for how to
 138+ configure it.
 139+* Change your require_once line in LocalSettings.php to use the
 140+ .setup.php file.
 141+* 'openidlogininstructions' is now wikitext, not HTML. If you've
 142+ customized it, you may need to re-customize it. Also, it's now
 143+ shown '''below''' the login box, so if you say ''the box below'',
 144+ you may want to change that to ''the box above''.
 145+* The extension has been converted to use a clumsy and perverse
 146+ OOP-like structure, with one class per special page. Most function
 147+ names have been changed to methods of these classes. If you used
 148+ them, look around for their replacements.
 149+* The extension has been converted to use the autoloading features
 150+ of MediaWiki, which means that you need to require() the files
 151+ directly if you really want to use their code. Or you might get
 152+ lucky and have autoloading work for you.
 153+
 154+If you find other incompatibilities that I haven't mentioned here,
 155+please let me know.
 156+
 157+== Logging in using OpenID ==
 158+
 159+To log in to the wiki using an OpenID, go to the Special:OpenIDLogin
 160+page on the wiki. Add the OpenID identity URL to the login box, and
 161+click "Verify".
 162+
 163+This ''should'' take you to the OpenID server for your identity, where
 164+you can either log in (if you're not already) or approve allowing the
 165+wiki to use your OpenID for logging in. If the OpenID server supports
 166+the Simple Registration Extension ('sreg'), it may also ask you
 167+whether to share personal information like your preferred nickname,
 168+real name, email address, etc. Choose as you wish.
 169+
 170+Once you're logged in to your OpenID server, and you've finished
 171+approving the login, you should return to the wiki from whence you
 172+came automatically.
 173+
 174+Every user who logs in with an OpenID identity for the first time will
 175+be assigned a "fake" username in the local wiki. (This just makes
 176+things work better.)
 177+
 178+If you've allowed your nickname to be passed to the wiki, and it's not
 179+already taken, and it's a legal MediaWiki user name, then it should
 180+use that for your login automatically.
 181+
 182+If not, the extension will try to make up some good candidate
 183+usernames for you and present you with a choice. If you don't like any
 184+of them, you can make up your own.
 185+
 186+After you're logged in, you can edit, read, write, and do all the
 187+other things that MediaWiki users do. Since you've got a "real"
 188+account, you'll also have a home page and a message page and such. It
 189+should also be possible to assign extra permissions ('sysop',
 190+'bureaucrat') to the account. You can log out as normal.
 191+
 192+To log back in, use the OpenIDLogin page again. Don't try to login
 193+using the regular login page, since it won't work.
 194+
 195+You can log in with an Interwiki abbreviation of an URL right now, but
 196+that's experimental and may disappear in later versions. Don't fall in
 197+love with this convenient, useful feature. You may get hurt.
 198+
 199+== Using a MediaWiki account as an OpenID ==
 200+
 201+To log in to other sites with your MediaWiki account, your OpenID
 202+identity URL is the full URL of your MediaWiki user page. So, for
 203+example, the author's identity URL is:
 204+
 205+ http://wikitravel.org/en/User:Evan
 206+
 207+When you use this OpenID with another site, logging in should take you
 208+to the wiki site. You may need to enter your password if you're not
 209+already logged in.
 210+
 211+You'll then be asked if you want to let the other site log you in, and
 212+if you want the MediaWiki wiki to share your personal information
 213+(nickname, email, full name, language) with the other site. Choose
 214+what feels comfortable to you. For some sites, you may not be asked;
 215+see Configuration below.
 216+
 217+Once you've finished deciding, the other site will finish the login.
 218+
 219+You can't log in through OpenID on the same server. You can't use the
 220+user page for a fake account created for an OpenID login as an OpenID
 221+itself.
 222+
 223+== Configuration ==
 224+
 225+The administrator can configure these variables in the
 226+LocalSettings.php file. Please read carefully.
 227+
 228+* $wgTrustRoot -- This is an URL that identifies your site to OpenID
 229+ servers. Typically, it's the "root" url of the site, like
 230+ "http://en.wikipedia.org/" or "http://wikitravel.org/it/". If this is
 231+ not set, the software will make a half-hearted guess, but it's not
 232+ very good and you should probably just set it.
 233+
 234+* $wgOpenIDConsumerDenyByDefault -- The administrator can decide which
 235+ OpenIDs are allowed to login to their server. If this flag is
 236+ true, only those OpenIDs that match one of the $wgOpenIDConsumerAllow
 237+ and not one of the $wgOpenIDConsumerDeny patterns will be allowed to
 238+ log in. If it is false, all OpenIDs are allowed to log in, unless
 239+ they are matched by an $wgOpenIDConsumerDeny pattern and not an
 240+ $wgOpenIDConsumerAllow. Typically you'll set this to true for
 241+ testing and then false for general use.
 242+
 243+* $wgOpenIDConsumerAllow -- an array of regular expressions that match
 244+ OpenIDs you want to allow to log in. For example,
 245+ "@^(http://)?wikitravel.org/@" will allow OpenIDs from the Wikitravel
 246+ domain.
 247+
 248+* $wgOpenIDConsumerDeny -- an array of regular expressions that match
 249+ OpenIDs you want to deny access to. This is mostly useful for
 250+ servers that are known to be bad. Example: "#^(http://)?example.com/#".
 251+
 252+* $wgOpenIDServerForceAllowTrust -- an array of regular expressions
 253+ that match trust roots that you want to skip trust checks for when
 254+ the user logs in from those sites. A typical example would be a
 255+ closely federated cluster of sites (like Wikimedia, Wikia, or
 256+ Wikitravel) where the personal data is available to the trusting
 257+ server ''anyways''. Be very careful using this across organizational
 258+ boundaries.
 259+
 260+* $wgOpenIDConsumerStoreType and $wgOpenIDServerStoreType -- strings
 261+ denoting the type of storage to be used to store OpenID assocation
 262+ data when acting as an OpenID relying party (consumer) and server,
 263+ respectively. Only valid value is "file"; "memc" no long valid.
 264+
 265+* $wgOpenIDConsumerStorePath and $wgOpenIDServerStorePath -- strings
 266+ specifying the paths where OpenID assocation data should be stored
 267+ when acting as a relying party (consumer) or server, respectively.
 268+ Each of these need only be set if the store type settings (above)
 269+ are set to "file", respectively. These strings, if both are set,
 270+ MUST NOT be equal. If the store type is "file", the default here is
 271+ "/tmp/$wgDBname/openidconsumer/" and "/tmp/$wgDBname/openidserver/"
 272+ respectively. The path will be automatically created if it doesn't
 273+ exist at runtime.
 274+
 275+* $wgHideOpenIDLoginLink -- boolean that says whether or not to hide
 276+ the OpenID login link in the personal URLs. Typically you'd use this
 277+ if you've already got some other method for showing the OpenID login
 278+ link, like in your skin. Note that it will *not* prevent login if
 279+ the user navigates to Special:OpenIDLogin directly; it's simply
 280+ cosmetic. This is mostly a backwards-compatibility option.
 281+
 282+* $wgOpenIDLoginLogoUrl -- Url of the OpenID login logo. Defaults to
 283+ 'http://www.openid.net/login-bg.gif', but you may want to move it to
 284+ a local URL, or an URL on a CDN, if that kind of thing floats your
 285+ boat.
 286+
 287+* $wgOpenIDShowUrlOnUserPage -- whether to show the OpenID identity URL
 288+ on a user's home page. Possible values are 'always', 'never', or 'user'
 289+ (lets the user decide). Default is 'user'.
 290+
 291+* $wgOpenIDOnly -- defaults to false. With this enabled, users can
 292+ ''only'' log in with OpenID. This is principally of interest to
 293+ OpenID advocacy sites like openid.net, but you may want it, too.
 294+
 295+* $wgOpenIDClientOnly -- defaults to false. With this enabled, users
 296+ cannot use their accounts on the local wiki as OpenIDs on another
 297+ site. Sucks for users, but some admins have emailed me about not
 298+ wanting the responsibility of being an OpenID server, so this flag
 299+ is for them.
 300+
 301+* $wgOpenIDShowProviderIcons -- defaults to false due to potential
 302+ brand issues. With this enabled, users will see button graphics
 303+ instead of just links in OpenID provider UI.
 304+
 305+== Skins ==
 306+
 307+If you are customizing a skin, and you want to show the OpenID
 308+identity for a user (say, on their user page), use the function
 309+OpenIDGetUserUrl($user). It takes a User object (not a name or an id!)
 310+and returns the user's OpenID identity if it exists, or null if it
 311+doesn't.
 312+
 313+== Translation ==
 314+
 315+The user interface strings for this extension are configurable through
 316+the same Special:Allmessages page as MediaWiki itself. They all start
 317+with "openid", and they're no more or less cryptic than MediaWiki's.
 318+You can look at OpenID.i18n.php for some details.
 319+
 320+== OpenID services ==
 321+
 322+These are some of the OpenID services I tested this extension with;
 323+all have free signup for identities if you want to test, too.
 324+
 325+* http://www.myopenid.com/ -- uses Simple Registration Extension
 326+* http://getopenid.com/
 327+* http://www.typekey.com/
 328+* http://www.claimid.com/
 329+* http://pip.verisignlabs.com/
 330+* http://certifi.ca/
 331+
 332+== Bugs ==
 333+
 334+Please submit bugs into [https://bugzilla.wikimedia.org/enter_bug.cgi?product=MediaWiki%20extensions&component=OpenID Bugzilla under OpenID extenson component].
 335+
 336+== TODO ==
 337+* Move TODO file and things below into Bugzilla
 338+
 339+The TODO file in this distribution has stuff I think needs to be
 340+todone; + marks show things I've already done, and - shows things
 341+that are yet to be done.
 342+
 343+The big changes for the future:
 344+
 345+* Configure some stuff through Special:Preferences or a dedicated
 346+ control panel
 347+* Auto-login if you've logged in before with an OpenID, and are logged
 348+ into that account now
 349+
 350+== CHANGES ==
 351+* [http://svn.wikimedia.org/viewvc/mediawiki/tags/extensions/OpenID/REL_0_8_4/ 0.8.4] (April 16, 2009) - Added provider buttons to the OpenID login page with optional icons ($wgOpenIDShowProviderIcons)
Property changes on: tags/extensions/OpenID/REL_0_8_4/README
___________________________________________________________________
Name: svn:eol-style
1352 + native
Index: tags/extensions/OpenID/REL_0_8_4/SpecialOpenID.body.php
@@ -0,0 +1,378 @@
 2+<?php
 3+/**
 4+ * SpecialOpenID.body.php -- Superclass for all
 5+ * Copyright 2006,2007 Internet Brands (http://www.internetbrands.com/)
 6+ * Copyright 2008 by Evan Prodromou (http://evan.prodromou.name/)
 7+ *
 8+ * This program is free software; you can redistribute it and/or modify
 9+ * it under the terms of the GNU General Public License as published by
 10+ * the Free Software Foundation; either version 2 of the License, or
 11+ * (at your option) any later version.
 12+ *
 13+ * This program is distributed in the hope that it will be useful,
 14+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 16+ * GNU General Public License for more details.
 17+ *
 18+ * You should have received a copy of the GNU General Public License
 19+ * along with this program; if not, write to the Free Software
 20+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 21+ *
 22+ * @author Evan Prodromou <evan@prodromou.name>
 23+ * @addtogroup Extensions
 24+ */
 25+
 26+# FIXME: for login(); figure out better way to share this code
 27+# between Login and Convert
 28+
 29+require_once("Auth/OpenID/Consumer.php");
 30+require_once("Auth/OpenID/SReg.php");
 31+require_once("Auth/OpenID/FileStore.php");
 32+
 33+class SpecialOpenID extends SpecialPage {
 34+
 35+ function getOpenIDStore($storeType, $prefix, $options) {
 36+ global $wgOut;
 37+
 38+ # FIXME: support other kinds of store
 39+ # XXX: used to support memc, now use memcached from php-openid
 40+
 41+ switch ($storeType) {
 42+
 43+ case 'file':
 44+ # Auto-create path if it doesn't exist
 45+ if (!is_dir($options['path'])) {
 46+ if (!mkdir($options['path'], 0770, true)) {
 47+ $wgOut->showErrorPage('openidconfigerror', 'openidconfigerrortext');
 48+ return NULL;
 49+ }
 50+ }
 51+ return new Auth_OpenID_FileStore($options['path']);
 52+
 53+ default:
 54+ $wgOut->showErrorPage('openidconfigerror', 'openidconfigerrortext');
 55+ }
 56+ }
 57+
 58+ function xriBase($xri) {
 59+ if (substr($xri, 0, 6) == 'xri://') {
 60+ return substr($xri, 6);
 61+ } else {
 62+ return $xri;
 63+ }
 64+ }
 65+
 66+ function xriToUrl($xri) {
 67+ return 'http://xri.net/' . OpenIDXriBase($xri);
 68+ }
 69+
 70+ static function OpenIDToUrl($openid) {
 71+ /* ID is either an URL already or an i-name */
 72+ if (Auth_Yadis_identifierScheme($openid) == 'XRI') {
 73+ return OpenIDXriToUrl($openid);
 74+ } else {
 75+ return $openid;
 76+ }
 77+ }
 78+
 79+ function interwikiExpand($openid_url) {
 80+ # try to make it into a title object
 81+ $nt = Title::newFromText($openid_url);
 82+ # If it's got an iw, return that
 83+ if (!is_null($nt) && !is_null($nt->getInterwiki())
 84+ && strlen($nt->getInterwiki()) > 0) {
 85+ return $nt->getFullUrl();
 86+ } else {
 87+ return $openid_url;
 88+ }
 89+ }
 90+
 91+ static function getUserUrl($user) {
 92+ $openid_url = null;
 93+
 94+ if ( isset( $user ) && $user->getId() != 0 ) {
 95+ global $wgSharedDB, $wgDBprefix;
 96+ if ( isset( $wgSharedDB ) ) {
 97+ $tableName = "`${wgSharedDB}`.${wgDBprefix}user_openid";
 98+ } else {
 99+ $tableName = 'user_openid';
 100+ }
 101+
 102+ $dbr = wfGetDB( DB_SLAVE );
 103+ $res = $dbr->select(
 104+ array( $tableName ),
 105+ array( 'uoi_openid' ),
 106+ array( 'uoi_user' => $user->getId() ),
 107+ __METHOD__
 108+ );
 109+
 110+ # This should return 0 or 1 result, since user is unique
 111+ # in the table.
 112+
 113+ while ( $row = $res->fetchObject() ) {
 114+ $openid_url = $row->uoi_openid;
 115+ }
 116+ $res->free();
 117+ }
 118+ return $openid_url;
 119+ }
 120+
 121+ # Login, Finish
 122+
 123+ function getConsumer() {
 124+ global $wgOpenIDConsumerStoreType, $wgOpenIDConsumerStorePath;
 125+
 126+ $store = $this->getOpenIDStore($wgOpenIDConsumerStoreType,
 127+ 'consumer',
 128+ array('path' => $wgOpenIDConsumerStorePath));
 129+
 130+ return new Auth_OpenID_Consumer($store);
 131+ }
 132+
 133+ function fullUrl($title) {
 134+ $nt = Title::makeTitleSafe(NS_SPECIAL, $title);
 135+ if (isset($nt)) {
 136+ return $nt->getFullURL();
 137+ } else {
 138+ return NULL;
 139+ }
 140+ }
 141+
 142+ function scriptUrl($title) {
 143+ global $wgServer, $wgScript;
 144+ $nt = Title::makeTitleSafe(NS_SPECIAL, $title);
 145+ if (isset($nt)) {
 146+ $dbkey = wfUrlencode( $nt->getPrefixedDBkey() );
 147+ return "{$wgServer}{$wgScript}?title={$dbkey}";
 148+ } else {
 149+ return $url;
 150+ }
 151+ }
 152+
 153+ function canLogin($openid_url) {
 154+
 155+ global $wgOpenIDConsumerDenyByDefault, $wgOpenIDConsumerAllow, $wgOpenIDConsumerDeny;
 156+
 157+ if ($this->isLocalUrl($openid_url)) {
 158+ return false;
 159+ }
 160+
 161+ if ($wgOpenIDConsumerDenyByDefault) {
 162+ $canLogin = false;
 163+ foreach ($wgOpenIDConsumerAllow as $allow) {
 164+ if (preg_match($allow, $openid_url)) {
 165+ wfDebug("OpenID: $openid_url matched allow pattern $allow.\n");
 166+ $canLogin = true;
 167+ foreach ($wgOpenIDConsumerDeny as $deny) {
 168+ if (preg_match($deny, $openid_url)) {
 169+ wfDebug("OpenID: $openid_url matched deny pattern $deny.\n");
 170+ $canLogin = false;
 171+ break;
 172+ }
 173+ }
 174+ break;
 175+ }
 176+ }
 177+ } else {
 178+ $canLogin = true;
 179+ foreach ($wgOpenIDConsumerDeny as $deny) {
 180+ if (preg_match($deny, $openid_url)) {
 181+ wfDebug("OpenID: $openid_url matched deny pattern $deny.\n");
 182+ $canLogin = false;
 183+ foreach ($wgOpenIDConsumerAllow as $allow) {
 184+ if (preg_match($allow, $openid_url)) {
 185+ wfDebug("OpenID: $openid_url matched allow pattern $allow.\n");
 186+ $canLogin = true;
 187+ break;
 188+ }
 189+ }
 190+ break;
 191+ }
 192+ }
 193+ }
 194+ return $canLogin;
 195+ }
 196+
 197+ function isLocalUrl($url) {
 198+
 199+ global $wgServer, $wgArticlePath;
 200+
 201+ $pattern = $wgServer . $wgArticlePath;
 202+ $pattern = str_replace('$1', '(.*)', $pattern);
 203+ $pattern = str_replace('?', '\?', $pattern);
 204+
 205+ return preg_match('|^' . $pattern . '$|', $url);
 206+ }
 207+
 208+ # Find the user with the given openid, if any
 209+
 210+ function getUser($openid) {
 211+ global $wgSharedDB, $wgDBprefix;
 212+
 213+ if (isset($wgSharedDB)) {
 214+ $tableName = "`$wgSharedDB`.${wgDBprefix}user_openid";
 215+ } else {
 216+ $tableName = 'user_openid';
 217+ }
 218+
 219+ $dbr =& wfGetDB( DB_SLAVE );
 220+ $id = $dbr->selectField($tableName, 'uoi_user',
 221+ array('uoi_openid' => $openid));
 222+ if ($id) {
 223+ $name = User::whoIs($id);
 224+ return User::newFromName($name);
 225+ } else {
 226+ return NULL;
 227+ }
 228+ }
 229+ function login($openid_url, $finish_page = 'OpenIDFinish') {
 230+
 231+ global $wgUser, $wgTrustRoot, $wgOut;
 232+
 233+ # If it's an interwiki link, expand it
 234+
 235+ $openid_url = $this->interwikiExpand($openid_url);
 236+
 237+ # Check if the URL is allowed
 238+
 239+ if (!$this->canLogin($openid_url)) {
 240+ $wgOut->showErrorPage('openidpermission', 'openidpermissiontext');
 241+ return;
 242+ }
 243+
 244+ $sk = $wgUser->getSkin();
 245+
 246+ if (isset($wgTrustRoot)) {
 247+ $trust_root = $wgTrustRoot;
 248+ } else {
 249+ global $wgArticlePath, $wgServer;
 250+ $root_article = str_replace('$1', '', $wgArticlePath);
 251+ $trust_root = $wgServer . $root_article;
 252+ }
 253+
 254+ $consumer = $this->getConsumer();
 255+
 256+ if (!$consumer) {
 257+ $wgOut->showErrorPage('openiderror', 'openiderrortext');
 258+ return;
 259+ }
 260+
 261+ # Make sure the user has a session!
 262+
 263+ global $wgSessionStarted;
 264+
 265+ if (!$wgSessionStarted) {
 266+ $wgUser->SetupSession();
 267+ }
 268+
 269+ $auth_request = $consumer->begin($openid_url);
 270+
 271+ // Handle failure status return values.
 272+ if (!$auth_request) {
 273+ $wgOut->showErrorPage('openiderror', 'openiderrortext');
 274+ return;
 275+ }
 276+
 277+ # Check the processed URLs, too
 278+
 279+ $endpoint = $auth_request->endpoint;
 280+
 281+ if (isset($endpoint)) {
 282+ # Check if the URL is allowed
 283+
 284+ if (isset($endpoint->identity_url) && !$this->canLogin($endpoint->identity_url)) {
 285+ $wgOut->showErrorPage('openidpermission', 'openidpermissiontext');
 286+ return;
 287+ }
 288+
 289+ if (isset($endpoint->delegate) && !$this->canLogin($endpoint->delegate)) {
 290+ $wgOut->showErrorPage('openidpermission', 'openidpermissiontext');
 291+ return;
 292+ }
 293+ }
 294+
 295+ $sreg_request = Auth_OpenID_SRegRequest::build(
 296+ // Required
 297+ array(),
 298+ // Optional
 299+ array('nickname','email',
 300+ 'fullname','language','timezone'));
 301+
 302+ if ($sreg_request) {
 303+ $auth_request->addExtension($sreg_request);
 304+ }
 305+
 306+ $process_url = $this->scriptUrl($finish_page);
 307+
 308+ if ($auth_request->shouldSendRedirect()) {
 309+ $redirect_url = $auth_request->redirectURL($trust_root,
 310+ $process_url);
 311+ if (Auth_OpenID::isFailure($redirect_url)) {
 312+ displayError("Could not redirect to server: " . $redirect_url->message);
 313+ } else {
 314+ # OK, now go
 315+ $wgOut->redirect($redirect_url);
 316+ }
 317+ } else {
 318+ // Generate form markup and render it.
 319+ $form_id = 'openid_message';
 320+ $form_html = $auth_request->formMarkup($trust_root, $process_url,
 321+ false, array('id' => $form_id));
 322+
 323+ // Display an error if the form markup couldn't be generated;
 324+ // otherwise, render the HTML.
 325+ if (Auth_OpenID::isFailure($form_html)) {
 326+ displayError("Could not redirect to server: " . $form_html->message);
 327+ } else {
 328+ $wgOut->addHTML("<p>" . wfMsg("openidautosubmit") . "</p>");
 329+ $wgOut->addHTML($form_html);
 330+ $wgOut->addInlineScript("function submitOpenIDForm() {\n document.getElementById(\"".$form_id."\").submit()\n }\nhookEvent(\"load\", submitOpenIDForm);\n");
 331+ }
 332+ }
 333+ }
 334+
 335+ function setUserUrl($user, $url) {
 336+ $other = $this->getUserUrl($user);
 337+ if (isset($other)) {
 338+ $this->updateUserUrl($user, $url);
 339+ } else {
 340+ $this->insertUserUrl($user, $url);
 341+ }
 342+ }
 343+
 344+ function insertUserUrl($user, $url) {
 345+ global $wgSharedDB, $wgDBname;
 346+ $dbw =& wfGetDB( DB_MASTER );
 347+
 348+ if (isset($wgSharedDB)) {
 349+ # It would be nicer to get the existing dbname
 350+ # and save it, but it's not possible
 351+ $dbw->selectDB($wgSharedDB);
 352+ }
 353+
 354+ $dbw->insert('user_openid', array('uoi_user' => $user->getId(),
 355+ 'uoi_openid' => $url));
 356+
 357+ if (isset($wgSharedDB)) {
 358+ $dbw->selectDB($wgDBname);
 359+ }
 360+ }
 361+
 362+ function updateUserUrl($user, $url) {
 363+ global $wgSharedDB, $wgDBname;
 364+ $dbw =& wfGetDB( DB_MASTER );
 365+
 366+ if (isset($wgSharedDB)) {
 367+ # It would be nicer to get the existing dbname
 368+ # and save it, but it's not possible
 369+ $dbw->selectDB($wgSharedDB);
 370+ }
 371+
 372+ $dbw->set('user_openid', 'uoi_openid', $url,
 373+ 'uoi_user = ' . $user->getID());
 374+
 375+ if (isset($wgSharedDB)) {
 376+ $dbw->selectDB($wgDBname);
 377+ }
 378+ }
 379+}
Property changes on: tags/extensions/OpenID/REL_0_8_4/SpecialOpenID.body.php
___________________________________________________________________
Name: svn:eol-style
1380 + native
Index: tags/extensions/OpenID/REL_0_8_4/SpecialOpenIDConvert.body.php
@@ -0,0 +1,171 @@
 2+<?php
 3+/**
 4+ * SpecialOpenIDConvert.body.php -- Convert existing account to OpenID account
 5+ * Copyright 2006,2007 Internet Brands (http://www.internetbrands.com/)
 6+ * Copyright 2007,2008 Evan Prodromou <evan@prodromou.name>
 7+ *
 8+ * This program is free software; you can redistribute it and/or modify
 9+ * it under the terms of the GNU General Public License as published by
 10+ * the Free Software Foundation; either version 2 of the License, or
 11+ * (at your option) any later version.
 12+ *
 13+ * This program is distributed in the hope that it will be useful,
 14+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 16+ * GNU General Public License for more details.
 17+ *
 18+ * You should have received a copy of the GNU General Public License
 19+ * along with this program; if not, write to the Free Software
 20+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 21+ *
 22+ * @author Evan Prodromou <evan@prodromou.name>
 23+ * @addtogroup Extensions
 24+ */
 25+
 26+if (!defined('MEDIAWIKI')) {
 27+ exit( 1 );
 28+}
 29+
 30+class SpecialOpenIDConvert extends SpecialOpenID {
 31+
 32+ function SpecialOpenIDConvert() {
 33+ SpecialPage::SpecialPage("OpenIDConvert");
 34+ }
 35+
 36+ function execute($par) {
 37+
 38+ global $wgRequest, $wgUser, $wgOut;
 39+
 40+ wfLoadExtensionMessages( 'OpenID' );
 41+
 42+ $this->setHeaders();
 43+
 44+ if ($wgUser->getID() == 0) {
 45+ $wgOut->showErrorPage('openiderror', 'notloggedin');
 46+ return;
 47+ }
 48+
 49+ switch ($par) {
 50+ case 'Finish':
 51+ $this->finish();
 52+ break;
 53+ default:
 54+ $openid_url = $wgRequest->getText('openid_url');
 55+ if (isset($openid_url) && strlen($openid_url) > 0) {
 56+ $this->convert($openid_url);
 57+ } else {
 58+ $this->Form();
 59+ }
 60+ }
 61+ }
 62+
 63+ function convert($openid_url) {
 64+
 65+ global $wgUser, $wgOut;
 66+
 67+ # Expand Interwiki
 68+
 69+ $openid_url = $this->interwikiExpand($openid_url);
 70+
 71+ # Is this ID allowed to log in?
 72+
 73+ if (!$this->CanLogin($openid_url)) {
 74+ $wgOut->showErrorPage('openidpermission', 'openidpermissiontext');
 75+ return;
 76+ }
 77+
 78+ # Is this ID already taken?
 79+
 80+ $other = $this->getUser($openid_url);
 81+
 82+ if (isset($other)) {
 83+ if ($other->getId() == $wgUser->getID()) {
 84+ $wgOut->showErrorPage('openiderror', 'openidconvertyourstext');
 85+ } else {
 86+ $wgOut->showErrorPage('openiderror', 'openidconvertothertext');
 87+ }
 88+ return;
 89+ }
 90+
 91+ # If we're OK to here, let the user go log in
 92+
 93+ $this->Login($openid_url, 'OpenIDConvert/Finish');
 94+ }
 95+
 96+ function form() {
 97+ global $wgOut, $wgUser;
 98+ $sk = $wgUser->getSkin();
 99+ $url = $this->GetUserUrl($wgUser);
 100+ if (is_null($url)) {
 101+ $url = '';
 102+ }
 103+
 104+ $ok = wfMsg('ok');
 105+ $instructions = wfMsg('openidconvertinstructions');
 106+ $wgOut->addHTML("<p>{$instructions}</p>" .
 107+ '<form action="' . $sk->makeSpecialUrl('OpenIDConvert') . '" method="POST">' .
 108+ '<input type="text" name="openid_url" size="30" ' .
 109+ ' style="background: url(http://www.openid.net/login-bg.gif) ' .
 110+ ' no-repeat; background-color: #fff; background-position: 0 50%; ' .
 111+ ' color: #000; padding-left: 18px;" value="' . $url . '" />' .
 112+ '<input type="submit" value="' . $ok . '" />' .
 113+ '</form>');
 114+ }
 115+
 116+ function finish() {
 117+
 118+ global $wgUser, $wgOut;
 119+
 120+ $consumer = $this->getConsumer();
 121+
 122+ $response = $consumer->complete($this->scriptUrl('OpenIDConvert/Finish'));
 123+
 124+ if (!isset($response)) {
 125+ wfDebug("OpenID: aborting in openid converter because the response was missing\n");
 126+ $wgOut->showErrorPage('openiderror', 'openiderrortext');
 127+ return;
 128+ }
 129+
 130+ switch ($response->status) {
 131+ case Auth_OpenID_CANCEL:
 132+ // This means the authentication was cancelled.
 133+ $wgOut->showErrorPage('openidcancel', 'openidcanceltext');
 134+ break;
 135+ case Auth_OpenID_FAILURE:
 136+ wfDebug("OpenID: error in convert: '" . $response->message . "'\n");
 137+ $wgOut->showErrorPage('openidfailure', 'openidfailuretext', array($response->message));
 138+ break;
 139+ case Auth_OpenID_SUCCESS:
 140+ // This means the authentication succeeded.
 141+ $openid_url = $response->identity_url;
 142+
 143+ if (!isset($openid_url)) {
 144+ wfDebug("OpenID: aborting in openid converter because the openid_url was missing\n");
 145+ $wgOut->showErrorPage('openiderror', 'openiderrortext');
 146+ return;
 147+ }
 148+
 149+ # We check again for dupes; this may be normalized or
 150+ # reformatted by the server.
 151+
 152+ $other = $this->getUser($openid_url);
 153+
 154+ if (isset($other)) {
 155+ if ($other->getId() == $wgUser->getID()) {
 156+ $wgOut->showErrorPage('openiderror', 'openidconvertyourstext');
 157+ } else {
 158+ $wgOut->showErrorPage('openiderror', 'openidconvertothertext');
 159+ }
 160+ return;
 161+ }
 162+
 163+ $this->setUserUrl($wgUser, $openid_url);
 164+
 165+ $wgOut->setPageTitle( wfMsg( 'openidconvertsuccess' ) );
 166+ $wgOut->setRobotPolicy( 'noindex,nofollow' );
 167+ $wgOut->setArticleRelated( false );
 168+ $wgOut->addWikiText( wfMsg( 'openidconvertsuccesstext', $openid_url ) );
 169+ $wgOut->returnToMain( );
 170+ }
 171+ }
 172+}
Property changes on: tags/extensions/OpenID/REL_0_8_4/SpecialOpenIDConvert.body.php
___________________________________________________________________
Name: svn:eol-style
1173 + native
Index: tags/extensions/OpenID/REL_0_8_4/SpecialOpenIDFinish.body.php
@@ -0,0 +1,677 @@
 2+<?php
 3+/**
 4+ * SpecialOpenIDFinish.body.php -- Finish logging into an OpenID site
 5+ * Copyright 2006,2007 Internet Brands (http://www.internetbrands.com/)
 6+ * Copyright 2007,2008 Evan Prodromou <evan@prodromou.name>
 7+ *
 8+ * This program is free software; you can redistribute it and/or modify
 9+ * it under the terms of the GNU General Public License as published by
 10+ * the Free Software Foundation; either version 2 of the License, or
 11+ * (at your option) any later version.
 12+ *
 13+ * This program is distributed in the hope that it will be useful,
 14+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 16+ * GNU General Public License for more details.
 17+ *
 18+ * You should have received a copy of the GNU General Public License
 19+ * along with this program; if not, write to the Free Software
 20+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 21+ *
 22+ * @author Evan Prodromou <evan@prodromou.name>
 23+ * @addtogroup Extensions
 24+ */
 25+
 26+if (!defined('MEDIAWIKI'))
 27+ exit(1);
 28+
 29+require_once("Auth/OpenID/Consumer.php");
 30+require_once("Auth/OpenID/SReg.php");
 31+require_once("Auth/Yadis/XRI.php");
 32+
 33+class SpecialOpenIDFinish extends SpecialOpenID {
 34+
 35+ function SpecialOpenIDFinish() {
 36+ SpecialPage::SpecialPage("OpenIDFinish", '', false);
 37+ }
 38+
 39+ function execute( $par) {
 40+
 41+ global $wgUser, $wgOut, $wgRequest;
 42+
 43+ wfLoadExtensionMessages( 'OpenID' );
 44+
 45+ $this->setHeaders();
 46+
 47+ # Shouldn't work if you're already logged in.
 48+
 49+ if ( $wgUser->getID() != 0 ) {
 50+ $this->alreadyLoggedIn();
 51+ return;
 52+ }
 53+
 54+ $consumer = $this->getConsumer();
 55+
 56+ switch ( $par ) {
 57+ case 'ChooseName':
 58+ list( $openid, $sreg) = $this->fetchValues();
 59+ if ( !isset( $openid ) ) {
 60+ wfDebug( "OpenID: aborting in ChooseName because identity_url is missing\n" );
 61+ $this->clearValues();
 62+ # No messing around, here
 63+ $wgOut->showErrorPage( 'openiderror', 'openiderrortext' );
 64+ return;
 65+ }
 66+
 67+ if ( $wgRequest->getCheck( 'wpCancel' ) ) {
 68+ $this->clearValues();
 69+ $wgOut->showErrorPage( 'openidcancel', 'openidcanceltext' );
 70+ return;
 71+ }
 72+
 73+ $choice = $wgRequest->getText( 'wpNameChoice' );
 74+ $nameValue = $wgRequest->getText( 'wpNameValue' );
 75+
 76+ if ($choice == 'existing') {
 77+ $user = $this->attachUser( $openid, $sreg,
 78+ $wgRequest->getText( 'wpExistingName' ),
 79+ $wgRequest->getText( 'wpExistingPassword' )
 80+ );
 81+
 82+ if ( !$user ) {
 83+ $this->chooseNameForm( $openid, $sreg, 'wrongpassword' );
 84+ return;
 85+ }
 86+
 87+ if ($wgRequest->getText( 'wpUpdateUserInfo' ))
 88+ {
 89+ $this->updateUser( $user, $sreg );
 90+ }
 91+ } else {
 92+ $name = $this->getUserName( $openid, $sreg, $choice, $nameValue);
 93+
 94+ if ( !$name || !$this->userNameOK( $name ) ) {
 95+ wfDebug( "OpenID: Name not OK: '$name'\n" );
 96+ $this->chooseNameForm( $openid, $sreg );
 97+ return;
 98+ }
 99+
 100+ $user = $this->createUser( $openid, $sreg, $name );
 101+ }
 102+
 103+ if ( !isset( $user ) ) {
 104+ wfDebug( "OpenID: aborting in ChooseName because we could not create user object\n" );
 105+ $this->clearValues();
 106+ $wgOut->showErrorPage( 'openiderror', 'openiderrortext' );
 107+ return;
 108+ }
 109+
 110+ $wgUser = $user;
 111+
 112+ $this->clearValues();
 113+
 114+ $this->finishLogin( $response->identity_url );
 115+ break;
 116+
 117+ default: # No parameter, returning from a server
 118+
 119+ $response = $consumer->complete( $this->scriptUrl( 'OpenIDFinish' ) );
 120+
 121+ if ( !isset( $response ) ) {
 122+ wfDebug( "OpenID: aborting in auth because no response was recieved\n" );
 123+ $wgOut->showErrorPage( 'openiderror', 'openiderrortext' );
 124+ return;
 125+ }
 126+
 127+ switch ( $response->status ) {
 128+ case Auth_OpenID_CANCEL:
 129+ // This means the authentication was cancelled.
 130+ $wgOut->showErrorPage( 'openidcancel', 'openidcanceltext' );
 131+ break;
 132+ case Auth_OpenID_FAILURE:
 133+ wfDebug( "OpenID: error message '" . $response->message . "'\n" );
 134+ $wgOut->showErrorPage( 'openidfailure', 'openidfailuretext',
 135+ array( ( $response->message ) ? $response->message : '' ) );
 136+ break;
 137+ case Auth_OpenID_SUCCESS:
 138+ // This means the authentication succeeded.
 139+ $openid = $response->getDisplayIdentifier();
 140+ $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse( $response );
 141+ $sreg = $sreg_resp->contents();
 142+
 143+ if (!isset($openid)) {
 144+ wfDebug( "OpenID: aborting in auth success because display identifier is missing\n" );
 145+ $wgOut->showErrorPage( 'openiderror', 'openiderrortext' );
 146+ return;
 147+ }
 148+
 149+ $user = $this->getUser( $openid );
 150+
 151+ if ( isset( $user ) )
 152+ {
 153+ if ($user->getOption('openid-update-userinfo-on-login'))
 154+ {
 155+ $this->updateUser( $user, $sreg); # update from server
 156+ }
 157+ } else {
 158+ # For easy names
 159+ $name = $this->createName( $openid, $sreg );
 160+ if ( $name ) {
 161+ $user = $this->createUser( $openid, $sreg, $name );
 162+ } else {
 163+ # For hard names
 164+ $this->saveValues( $openid, $sreg );
 165+ $this->chooseNameForm( $openid, $sreg );
 166+ return;
 167+ }
 168+ }
 169+
 170+ if ( !isset( $user ) ) {
 171+ wfDebug( "OpenID: aborting in auth success because we could not create user object\n" );
 172+ $wgOut->showErrorPage( 'openiderror', 'openiderrortext' );
 173+ } else {
 174+ $wgUser = $user;
 175+ $this->finishLogin( $openid );
 176+ }
 177+ }
 178+ }
 179+ }
 180+
 181+ function finishLogin( $openid ) {
 182+ global $wgUser, $wgOut;
 183+
 184+ $wgUser->SetupSession();
 185+ $wgUser->SetCookies();
 186+
 187+ # Run any hooks; ignore results
 188+ $inject_html = '';
 189+ wfRunHooks( 'UserLoginComplete', array( &$wgUser, &$inject_html ) );
 190+
 191+ # Set a cookie for later check-immediate use
 192+
 193+ $this->loginSetCookie($openid);
 194+
 195+ $wgOut->setPageTitle( wfMsg( 'openidsuccess' ) );
 196+ $wgOut->setRobotPolicy( 'noindex,nofollow' );
 197+ $wgOut->setArticleRelated( false );
 198+ $wgOut->addWikiText( wfMsg( 'openidsuccess', $wgUser->getName(), $openid ) );
 199+ $wgOut->addHtml( $inject_html );
 200+ $wgOut->returnToMain( false, $this->returnTo() );
 201+ }
 202+
 203+ function loginSetCookie( $openid ) {
 204+ global $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookiePrefix;
 205+ global $wgOpenIDCookieExpiration;
 206+
 207+ $exp = time() + $wgOpenIDCookieExpiration;
 208+
 209+ setcookie( $wgCookiePrefix.'OpenID', $openid, $exp, $wgCookiePath, $wgCookieDomain, $wgCookieSecure );
 210+ }
 211+
 212+ function chooseNameForm( $openid, $sreg, $messagekey = NULL ) {
 213+
 214+ global $wgOut, $wgUser, $wgOpenIDOnly;
 215+
 216+ $sk = $wgUser->getSkin();
 217+ if ($messagekey) {
 218+ $message = wfMsg( $messagekey );
 219+ } else if ( array_key_exists( 'nickname', $sreg ) ) {
 220+ $message = wfMsg( 'openidnotavailable', $sreg['nickname'] );
 221+ } else {
 222+ $message = wfMsg( 'openidnotprovided' );
 223+ }
 224+ $instructions = wfMsg( 'openidchooseinstructions' );
 225+ $wgOut->addHTML( "<p>{$message}</p>" .
 226+ "<p>{$instructions}</p>" .
 227+ '<form action="' . $sk->makeSpecialUrl( 'OpenIDFinish/ChooseName' ) . '" method="POST">' );
 228+ $def = false;
 229+
 230+ if ( !$wgOpenIDOnly ) {
 231+ # Let them attach it to an existing user
 232+
 233+ # Grab the UserName in the cookie if it exists
 234+
 235+ global $wgCookiePrefix;
 236+ $name = '';
 237+ if ( isset( $_COOKIE["{$wgCookiePrefix}UserName"] ) ) {
 238+ $name = trim( $_COOKIE["{$wgCookiePrefix}UserName"] );
 239+ }
 240+
 241+ # show OpenID Attributes
 242+ $oidAttributesToAccept = array('fullname', 'nickname', 'email', 'language');
 243+ $oidAttributes = array();
 244+
 245+ foreach ($oidAttributesToAccept as $oidAttr)
 246+ {
 247+ if ($oidAttr == 'fullname' && !$wgAllowRealName)
 248+ {
 249+ next;
 250+ }
 251+
 252+ if ( array_key_exists( $oidAttr, $sreg )) {
 253+ $oidAttributes[] = '<div>'.wfMsg( "openid$oidAttr" ).': <i>'.$sreg[$oidAttr].'</i></div>';
 254+ }
 255+ }
 256+
 257+ $oidAttributesUpdate = '';
 258+ if (count($oidAttributes) > 0)
 259+ {
 260+ $oidAttributesUpdate = '<div style="margin-left: 25px">'.
 261+ '<input type="checkbox" name="wpUpdateUserInfo" id="wpUpdateUserInfo">' .
 262+ '<label for="wpUpdateUserInfo">' . wfMsg( "openidupdateuserinfo" ) .
 263+ '<div style="margin-left: 25px">'.implode('', $oidAttributes).'</div>'.
 264+ '</label></div>';
 265+ }
 266+
 267+ $wgOut->addHTML("<div><input type='radio' name='wpNameChoice' id='wpNameChoiceExisting' value='existing' />" .
 268+ "<label for='wpNameChoiceExisting'>" . wfMsg( "openidchooseexisting" ) . "</label> " .
 269+ "<input type='text' name='wpExistingName' id='wpExistingName' size='16' value='{$name}'> " .
 270+ "<label for='wpExistingPassword'>" . wfMsg( "openidchoosepassword" ) . "</label> " .
 271+ "<input type='password' name='wpExistingPassword' size='8' /> " .
 272+ $oidAttributesUpdate . "</div>\n" );
 273+ }
 274+
 275+ # These options won't exist if we can't get them.
 276+
 277+ if ( array_key_exists( 'fullname', $sreg ) && $this->userNameOK( $sreg['fullname'] ) ) {
 278+ $wgOut->addHTML( "<div><input type='radio' name='wpNameChoice' id='wpNameChoiceFull' value='full' " .
 279+ ( ( !$def ) ? "checked = 'checked'" : "" ) . " />" .
 280+ "<label for='wpNameChoiceFull'>" . wfMsg( "openidchoosefull", $sreg['fullname'] ) . "</label></div>\n" );
 281+ $def = true;
 282+ }
 283+
 284+ $idname = $this->toUserName( $openid );
 285+
 286+ if ( $idname && $this->userNameOK( $idname ) ) {
 287+ $wgOut->addHTML( "<div><input type='radio' name='wpNameChoice' id='wpNameChoiceUrl' value='url' " .
 288+ ( ( !$def ) ? "checked = 'checked'" : "" ) . " />" .
 289+ "<label for='wpNameChoiceUrl'>" . wfMsg( "openidchooseurl", $idname ) . "</label></div>\n" );
 290+ $def = true;
 291+ }
 292+
 293+ # These are always available
 294+
 295+ $wgOut->addHTML( "<div><input type='radio' name='wpNameChoice' id='wpNameChoiceAuto' value='auto' " .
 296+ ( ( !$def ) ? "checked = 'checked'" : "" ) . " />" .
 297+ "<label for='wpNameChoiceAuto'>" . wfMsg( "openidchooseauto", $this->automaticName( $sreg ) ) . "</label></div>\n");
 298+
 299+ $def = true;
 300+
 301+ $wgOut->addHTML("<div><input type='radio' name='wpNameChoice' id='wpNameChoiceManual' value='manual' " .
 302+ " checked='off' />" .
 303+ "<label for='wpNameChoiceManual'>" . wfMsg( "openidchoosemanual" ) . "</label> " .
 304+ "<input type='text' name='wpNameValue' id='wpNameValue' size='16' /></div>\n");
 305+
 306+ $ok = wfMsg( 'login' );
 307+ $cancel = wfMsg( 'cancel' );
 308+
 309+ $wgOut->addHTML( "<input type='submit' name='wpOK' value='{$ok}' /> <input type='submit' name='wpCancel' value='{$cancel}' />" );
 310+ $wgOut->addHTML( "</form>" );
 311+ }
 312+
 313+ function canLogin( $openid_url ) {
 314+ global $wgOpenIDConsumerDenyByDefault, $wgOpenIDConsumerAllow, $wgOpenIDConsumerDeny;
 315+
 316+ if ( $this->isLocalUrl( $openid_url ) ) {
 317+ return false;
 318+ }
 319+
 320+ if ( $wgOpenIDConsumerDenyByDefault ) {
 321+ $canLogin = false;
 322+ foreach ( $wgOpenIDConsumerAllow as $allow ) {
 323+ if ( preg_match( $allow, $openid_url ) ) {
 324+ wfDebug( "OpenID: $openid_url matched allow pattern $allow.\n" );
 325+ $canLogin = true;
 326+ foreach ( $wgOpenIDConsumerDeny as $deny ) {
 327+ if ( preg_match( $deny, $openid_url ) ) {
 328+ wfDebug( "OpenID: $openid_url matched deny pattern $deny.\n" );
 329+ $canLogin = false;
 330+ break;
 331+ }
 332+ }
 333+ break;
 334+ }
 335+ }
 336+ } else {
 337+ $canLogin = true;
 338+ foreach ( $wgOpenIDConsumerDeny as $deny ) {
 339+ if ( preg_match( $deny, $openid_url ) ) {
 340+ wfDebug( "OpenID: $openid_url matched deny pattern $deny.\n" );
 341+ $canLogin = false;
 342+ foreach ( $wgOpenIDConsumerAllow as $allow ) {
 343+ if ( preg_match( $allow, $openid_url ) ) {
 344+ wfDebug( "OpenID: $openid_url matched allow pattern $allow.\n" );
 345+ $canLogin = true;
 346+ break;
 347+ }
 348+ }
 349+ break;
 350+ }
 351+ }
 352+ }
 353+ return $canLogin;
 354+ }
 355+
 356+ function isLocalUrl( $url ) {
 357+ global $wgServer, $wgArticlePath;
 358+
 359+ $pattern = $wgServer . $wgArticlePath;
 360+ $pattern = str_replace( '$1', '(.*)', $pattern );
 361+ $pattern = str_replace( '?', '\?', $pattern );
 362+
 363+ return preg_match( '|^' . $pattern . '$|', $url );
 364+ }
 365+
 366+ # Find the user with the given openid, if any
 367+
 368+ function getUser( $openid ) {
 369+ global $wgSharedDB, $wgDBprefix;
 370+
 371+ if ( isset( $wgSharedDB ) ) {
 372+ $tableName = "`$wgSharedDB`.${wgDBprefix}user_openid";
 373+ } else {
 374+ $tableName = 'user_openid';
 375+ }
 376+
 377+ $dbr = wfGetDB( DB_SLAVE );
 378+ $id = $dbr->selectField(
 379+ $tableName,
 380+ 'uoi_user',
 381+ array( 'uoi_openid' => $openid ),
 382+ __METHOD__
 383+ );
 384+ if ( $id ) {
 385+ return User::newFromID( $id );
 386+ } else {
 387+ return NULL;
 388+ }
 389+ }
 390+
 391+ function updateUser( $user, $sreg ) {
 392+ global $wgAllowRealName;
 393+
 394+ # FIXME: only update if there's been a change
 395+ $user->setOption('nickname', array_key_exists( 'nickname', $sreg )
 396+ ? $sreg['nickname'] : '');
 397+
 398+ $user->setEmail( array_key_exists( 'email', $sreg ) ? $sreg['email'] : '' );
 399+
 400+ $user->setRealName( (array_key_exists( 'fullname', $sreg ) && $wgAllowRealName)
 401+ ? $sreg['fullname'] : '');
 402+
 403+ if ( array_key_exists( 'language', $sreg ) ) {
 404+ # FIXME: check and make sure the language exists
 405+ $user->setOption( 'language', $sreg['language'] );
 406+ } else {
 407+ $user->setOption( 'language', NULL );
 408+ }
 409+
 410+ if (array_key_exists( 'timezone', $sreg ) ) {
 411+ # FIXME: do something with it.
 412+ # $offset = OpenIDTimezoneToTzoffset($sreg['timezone']);
 413+ # $user->setOption('timecorrection', $offset);
 414+ } else {
 415+ # $user->setOption('timecorrection', NULL);
 416+ }
 417+
 418+ $user->saveSettings();
 419+ }
 420+
 421+ function createUser($openid, $sreg, $name) {
 422+
 423+ global $wgAuth, $wgAllowRealName;
 424+
 425+ $user = User::newFromName($name);
 426+
 427+ if (!$user) {
 428+ wfDebug("OpenID: Error adding new user.\n");
 429+ return NULL;
 430+ }
 431+
 432+ $user->addToDatabase();
 433+
 434+ if (!$user->getId()) {
 435+ wfDebug("OpenID: Error adding new user.\n");
 436+ } else {
 437+
 438+ $this->insertUserUrl($user, $openid);
 439+
 440+ if (array_key_exists('nickname', $sreg)) {
 441+ $user->setOption('nickname', $sreg['nickname']);
 442+ }
 443+ if (array_key_exists('email', $sreg)) {
 444+ $user->setEmail( $sreg['email'] );
 445+ }
 446+ if ($wgAllowRealName && array_key_exists('fullname', $sreg)) {
 447+ $user->setRealName($sreg['fullname']);
 448+ }
 449+ if (array_key_exists('language', $sreg)) {
 450+ # FIXME: check and make sure the language exists
 451+ $user->setOption('language', $sreg['language']);
 452+ }
 453+ if (array_key_exists('timezone', $sreg)) {
 454+ # FIXME: do something with it.
 455+ # $offset = OpenIDTimezoneToTzoffset($sreg['timezone']);
 456+ # $user->setOption('timecorrection', $offset);
 457+ }
 458+ $user->saveSettings();
 459+ return $user;
 460+ }
 461+ }
 462+
 463+ function createName($openid, $sreg) {
 464+
 465+ if (array_key_exists('nickname', $sreg) && # try nickname
 466+ $this->userNameOK($sreg['nickname']))
 467+ {
 468+ return $sreg['nickname'];
 469+ }
 470+ }
 471+
 472+ function toUserName($openid) {
 473+ if (Auth_Yadis_identifierScheme($openid) == 'XRI') {
 474+ return $this->toUserNameXri($openid);
 475+ } else {
 476+ return $this->toUserNameUrl($openid);
 477+ }
 478+ }
 479+
 480+ # We try to use an OpenID URL as a legal MediaWiki user name in this order
 481+ # 1. Plain hostname, like http://evanp.myopenid.com/
 482+ # 2. One element in path, like http://profile.typekey.com/EvanProdromou/
 483+ # or http://getopenid.com/evanprodromou
 484+
 485+ function toUserNameUrl($openid) {
 486+ static $bad = array('query', 'user', 'password', 'port', 'fragment');
 487+
 488+ $parts = parse_url($openid);
 489+
 490+ # If any of these parts exist, this won't work
 491+
 492+ foreach ($bad as $badpart) {
 493+ if (array_key_exists($badpart, $parts)) {
 494+ return NULL;
 495+ }
 496+ }
 497+
 498+ # We just have host and/or path
 499+
 500+ # If it's just a host...
 501+ if (array_key_exists('host', $parts) &&
 502+ (!array_key_exists('path', $parts) || strcmp($parts['path'], '/') == 0))
 503+ {
 504+ $hostparts = explode('.', $parts['host']);
 505+
 506+ # Try to catch common idiom of nickname.service.tld
 507+
 508+ if ((count($hostparts) > 2) &&
 509+ (strlen($hostparts[count($hostparts) - 2]) > 3) && # try to skip .co.uk, .com.au
 510+ (strcmp($hostparts[0], 'www') != 0))
 511+ {
 512+ return $hostparts[0];
 513+ } else {
 514+ # Do the whole hostname
 515+ return $parts['host'];
 516+ }
 517+ } else {
 518+ if (array_key_exists('path', $parts)) {
 519+ # Strip starting, ending slashes
 520+ $path = preg_replace('@/$@', '', $parts['path']);
 521+ $path = preg_replace('@^/@', '', $path);
 522+ if (strpos($path, '/') === false) {
 523+ return $path;
 524+ }
 525+ }
 526+ }
 527+
 528+ return NULL;
 529+ }
 530+
 531+ function toUserNameXri($xri) {
 532+ $base = $this->xriBase($xri);
 533+
 534+ if (!$base) {
 535+ return NULL;
 536+ } else {
 537+ # =evan.prodromou
 538+ # or @gratis*evan.prodromou
 539+ $parts = explode('*', substr($base, 1));
 540+ return array_pop($parts);
 541+ }
 542+ }
 543+
 544+ # Is this name OK to use as a user name?
 545+
 546+ function userNameOK($name) {
 547+ global $wgReservedUsernames;
 548+ return (0 == User::idFromName($name) &&
 549+ !in_array( $name, $wgReservedUsernames ));
 550+ }
 551+
 552+ # Get an auto-incremented name
 553+
 554+ function firstAvailable($prefix) {
 555+ for ($i = 2; ; $i++) { # FIXME: this is the DUMB WAY to do this
 556+ $name = "$prefix$i";
 557+ if ($this->userNameOK($name)) {
 558+ return $name;
 559+ }
 560+ }
 561+ }
 562+
 563+ function alreadyLoggedIn() {
 564+
 565+ global $wgUser, $wgOut;
 566+
 567+ $wgOut->setPageTitle( wfMsg( 'openiderror' ) );
 568+ $wgOut->setRobotPolicy( 'noindex,nofollow' );
 569+ $wgOut->setArticleRelated( false );
 570+ $wgOut->addWikiText( wfMsg( 'openidalreadyloggedin', $wgUser->getName() ) );
 571+ $wgOut->returnToMain( false, $this->returnTo() );
 572+ }
 573+
 574+ static function getUserUrl( $user ) {
 575+ $openid_url = null;
 576+
 577+ if ( isset( $user ) && $user->getId() != 0 ) {
 578+ global $wgSharedDB, $wgDBprefix;
 579+ if ( isset( $wgSharedDB ) ) {
 580+ $tableName = "`${wgSharedDB}`.${wgDBprefix}user_openid";
 581+ } else {
 582+ $tableName = 'user_openid';
 583+ }
 584+
 585+ $dbr = wfGetDB( DB_SLAVE );
 586+ $res = $dbr->select(
 587+ array( $tableName ),
 588+ array( 'uoi_openid' ),
 589+ array( 'uoi_user' => $user->getId() ),
 590+ __METHOD__
 591+ );
 592+
 593+ # This should return 0 or 1 result, since user is unique
 594+ # in the table.
 595+
 596+ while ( $row = $res->fetchObject() ) {
 597+ $openid_url = $row->uoi_openid;
 598+ }
 599+ $res->free();
 600+ }
 601+ return $openid_url;
 602+ }
 603+
 604+ function saveValues($openid, $sreg) {
 605+ global $wgSessionStarted, $wgUser;
 606+
 607+ if (!$wgSessionStarted) {
 608+ $wgUser->SetupSession();
 609+ }
 610+
 611+ $_SESSION['openid_consumer_identity'] = $openid;
 612+ $_SESSION['openid_consumer_sreg'] = $sreg;
 613+
 614+ return true;
 615+ }
 616+
 617+ function clearValues() {
 618+ unset( $_SESSION['openid_consumer_identity'] );
 619+ unset( $_SESSION['openid_consumer_sreg'] );
 620+ return true;
 621+ }
 622+
 623+ function fetchValues() {
 624+ return array( $_SESSION['openid_consumer_identity'], $_SESSION['openid_consumer_sreg'] );
 625+ }
 626+
 627+ function returnTo() {
 628+ return $_SESSION['openid_consumer_returnto'];
 629+ }
 630+
 631+ function setReturnTo($returnto) {
 632+ $_SESSION['openid_consumer_returnto'] = $returnto;
 633+ }
 634+
 635+ function getUserName($openid, $sreg, $choice, $nameValue) {
 636+ switch ( $choice ) {
 637+ case 'full':
 638+ return ( ( array_key_exists( 'fullname', $sreg ) ) ? $sreg['fullname'] : null );
 639+ break;
 640+ case 'url':
 641+ return $this->toUserName( $openid );
 642+ break;
 643+ case 'auto':
 644+ return $this->automaticName( $sreg );
 645+ break;
 646+ case 'manual':
 647+ return $nameValue;
 648+ default:
 649+ return null;
 650+ }
 651+ }
 652+
 653+ function automaticName( $sreg ) {
 654+ if ( array_key_exists( 'nickname', $sreg ) && # try auto-generated from nickname
 655+ strlen( $sreg['nickname']) > 0 ) {
 656+ return $this->firstAvailable( $sreg['nickname'] );
 657+ } else { # try auto-generated
 658+ return $this->firstAvailable( wfMsg( 'openidusernameprefix' ) );
 659+ }
 660+ }
 661+
 662+ function attachUser( $openid, $sreg, $name, $password ) {
 663+
 664+ $user = User::newFromName( $name );
 665+
 666+ if ( !$user ) {
 667+ return NULL;
 668+ }
 669+
 670+ if ( !$user->checkPassword( $password ) ) {
 671+ return NULL;
 672+ }
 673+
 674+ $this->setUserUrl( $user, $openid );
 675+
 676+ return $user;
 677+ }
 678+}
Property changes on: tags/extensions/OpenID/REL_0_8_4/SpecialOpenIDFinish.body.php
___________________________________________________________________
Name: svn:eol-style
1679 + native
Index: tags/extensions/OpenID/REL_0_8_4/SpecialOpenIDXRDS.body.php
@@ -0,0 +1,115 @@
 2+<?php
 3+/**
 4+ * SpecialOpenIDXRDS.body.php -- Server side of OpenID site
 5+ * Copyright 2006,2007 Internet Brands (http://www.internetbrands.com/)
 6+ * Copyright 2007,2008 Evan Prodromou <evan@prodromou.name>
 7+ *
 8+ * This program is free software; you can redistribute it and/or modify
 9+ * it under the terms of the GNU General Public License as published by
 10+ * the Free Software Foundation; either version 2 of the License, or
 11+ * (at your option) any later version.
 12+ *
 13+ * This program is distributed in the hope that it will be useful,
 14+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 16+ * GNU General Public License for more details.
 17+ *
 18+ * You should have received a copy of the GNU General Public License
 19+ * along with this program; if not, write to the Free Software
 20+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 21+ *
 22+ * @author Evan Prodromou <evan@prodromou.name>
 23+ * @addtogroup Extensions
 24+ */
 25+
 26+if (!defined('MEDIAWIKI'))
 27+ exit(1);
 28+
 29+# Outputs a Yadis (http://yadis.org/) XRDS file, saying that this server
 30+# supports OpenID and lots of other jazz.
 31+
 32+class SpecialOpenIDXRDS extends SpecialOpenID {
 33+
 34+ function SpecialOpenIDXRDS() {
 35+ SpecialPage::SpecialPage("OpenIDXRDS", '', false);
 36+ }
 37+
 38+ # $par is a user name
 39+
 40+ function execute($par) {
 41+ global $wgOut, $wgOpenIDClientOnly;
 42+
 43+ wfLoadExtensionMessages( 'OpenID' );
 44+
 45+ # No server functionality if this site is only a client
 46+ # Note: special page is un-registered if this flag is set,
 47+ # so it'd be unusual to get here.
 48+
 49+ if ($wgOpenIDClientOnly) {
 50+ wfHttpError(404, "Not Found", wfMsg('openidclientonlytext'));
 51+ return;
 52+ }
 53+
 54+ // XRDS preamble XML.
 55+ $xml_template = array('<?xml version="1.0" encoding="UTF-8"?>',
 56+ '<xrds:XRDS',
 57+ ' xmlns:xrds="xri://\$xrds"',
 58+ ' xmlns:openid="http://openid.net/xmlns/1.0"',
 59+ ' xmlns="xri://$xrd*($v*2.0)">',
 60+ '<XRD>');
 61+
 62+ # Check to see if the parameter is really a user name
 63+
 64+ if (!$par) {
 65+ wfHttpError(404, "Not Found", wfMsg('openidnousername'));
 66+ }
 67+
 68+ $user = User::newFromName($par);
 69+
 70+ if (!$user || $user->getID() == 0) {
 71+ wfHttpError(404, "Not Found", wfMsg('openidbadusername'));
 72+ }
 73+
 74+ // Generate the user page URL.
 75+
 76+ $user_title = Title::makeTitle(NS_USER, $user->getName());
 77+ $user_url = $user_title->getFullURL();
 78+
 79+ // Generate the OpenID server endpoint URL.
 80+ $server_title = Title::makeTitle(NS_SPECIAL, 'OpenIDServer');
 81+ $server_url = $server_title->getFullURL();
 82+
 83+ // Define array of Yadis services to be included in
 84+ // the XRDS output.
 85+ $services = array(
 86+ array('uri' => $server_url,
 87+ 'priority' => '0',
 88+ 'types' => array('http://openid.net/signon/1.0',
 89+ 'http://openid.net/sreg/1.0',
 90+ 'http://specs.openid.net/auth/2.0/signon'),
 91+ 'delegate' => $user_url),
 92+ );
 93+
 94+ // Generate <Service> elements into $service_text.
 95+ $service_text = "\n";
 96+ foreach ($services as $service) {
 97+ $types = array();
 98+ foreach ($service['types'] as $type_uri) {
 99+ $types[] = ' <Type>'.$type_uri.'</Type>';
 100+ }
 101+ $service_text .= implode("\n",
 102+ array(' <Service priority="'.$service['priority'].'">',
 103+ ' <URI>'.$server_url.'</URI>',
 104+ implode("\n", $types),
 105+ ' </Service>'));
 106+ }
 107+
 108+ $wgOut->disable();
 109+
 110+ // Print content-type and XRDS XML.
 111+ header("Content-Type: application/xrds+xml");
 112+ print implode("\n", $xml_template);
 113+ print $service_text;
 114+ print implode("\n", array("</XRD>", "</xrds:XRDS>"));
 115+ }
 116+}
\ No newline at end of file
Property changes on: tags/extensions/OpenID/REL_0_8_4/SpecialOpenIDXRDS.body.php
___________________________________________________________________
Name: svn:eol-style
1117 + native
Index: tags/extensions/OpenID/REL_0_8_4/OpenID.setup.php
@@ -0,0 +1,158 @@
 2+<?php
 3+/**
 4+ * OpenID.setup.php -- Make MediaWiki an OpenID consumer and server
 5+ * Copyright 2006,2007 Internet Brands (http://www.internetbrands.com/)
 6+ * Copyright 2007,2008 Evan Prodromou <evan@prodromou.name>
 7+ *
 8+ * This program is free software; you can redistribute it and/or modify
 9+ * it under the terms of the GNU General Public License as published by
 10+ * the Free Software Foundation; either version 2 of the License, or
 11+ * (at your option) any later version.
 12+ *
 13+ * This program is distributed in the hope that it will be useful,
 14+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 16+ * GNU General Public License for more details.
 17+ *
 18+ * You should have received a copy of the GNU General Public License
 19+ * along with this program; if not, write to the Free Software
 20+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 21+ *
 22+ * @author Evan Prodromou <evan@prodromou.name>
 23+ * @addtogroup Extensions
 24+ */
 25+
 26+if (!defined('MEDIAWIKI')) {
 27+ exit( 1 );
 28+}
 29+
 30+define('MEDIAWIKI_OPENID_VERSION', '0.8.4');
 31+
 32+# CONFIGURATION VARIABLES
 33+
 34+# Whether to hide the "Login with OpenID link" link; set to true if you already have this link in your skin.
 35+
 36+$wgHideOpenIDLoginLink = false;
 37+
 38+# Whether to show the OpenID identity URL on a user's home page. Possible values are 'always', 'never', or 'user'
 39+# 'user' lets the user decide.
 40+
 41+$wgOpenIDShowUrlOnUserPage = 'user';
 42+
 43+# These are trust roots that we don't bother asking users
 44+# whether the trust root is allowed to trust; typically
 45+# for closely-linked partner sites.
 46+
 47+$wgOpenIDServerForceAllowTrust = array();
 48+
 49+# Where to store transitory data. Only supported type is 'file'.
 50+
 51+$wgOpenIDServerStoreType = 'file';
 52+
 53+# If the store type is set to 'file', this is is the name of a
 54+# directory to store the data in.
 55+
 56+$wgOpenIDServerStorePath = "/tmp/$wgDBname/openidserver/";
 57+
 58+# Defines the trust root for this server
 59+# If null, we make a guess
 60+
 61+$wgTrustRoot = null;
 62+
 63+# When using deny and allow arrays, defines how the security works.
 64+# If true, works like "Order Allow,Deny" in Apache; deny by default,
 65+# allow items that match allow that don't match deny to pass.
 66+# If false, works like "Order Deny,Allow" in Apache; allow by default,
 67+# deny items in deny that aren't in allow.
 68+
 69+$wgOpenIDConsumerDenyByDefault = false;
 70+
 71+# Which partners to allow; regexps here. See above.
 72+
 73+$wgOpenIDConsumerAllow = array();
 74+
 75+# Which partners to deny; regexps here. See above.
 76+
 77+$wgOpenIDConsumerDeny = array();
 78+
 79+# Where to store transitory data. Only supported type is 'file'.
 80+
 81+$wgOpenIDConsumerStoreType = 'file';
 82+
 83+# If the store type is set to 'file', this is is the name of a
 84+# directory to store the data in.
 85+
 86+$wgOpenIDConsumerStorePath = "/tmp/$wgDBname/openidconsumer/";
 87+
 88+# Expiration time for the OpenID cookie. Lets the user re-authenticate
 89+# automatically if their session is expired. Only really useful if
 90+# it's much greater than $wgCookieExpiration. Default: about one year.
 91+
 92+$wgOpenIDCookieExpiration = 365 * 24 * 60 * 60;
 93+
 94+# Only allow login with OpenID. Careful -- this means everybody!
 95+
 96+$wgOpenIDOnly = false;
 97+
 98+# If true, user accounts on this wiki *cannot* be used as
 99+# OpenIDs on other sites.
 100+
 101+$wgOpenIDClientOnly = false;
 102+
 103+# If true, will show provider icons instead of the text
 104+$wgOpenIDShowProviderIcons = false;
 105+
 106+# END CONFIGURATION VARIABLES
 107+
 108+$wgExtensionCredits['other'][] = array(
 109+ 'name' => 'OpenID',
 110+ 'version' => MEDIAWIKI_OPENID_VERSION,
 111+ 'author' => 'Evan Prodromou',
 112+ 'url' => 'http://www.mediawiki.org/wiki/Extension:OpenID',
 113+ 'description' => 'Lets users login to the wiki with an [http://openid.net/ OpenID] and login to other OpenID-aware Web sites with their wiki user account',
 114+ 'descriptiomsg' => 'openid-desc',
 115+);
 116+
 117+function OpenIDGetServerPath() {
 118+ $rel = 'Auth/OpenID/Server.php';
 119+
 120+ foreach ( explode( PATH_SEPARATOR, get_include_path() ) as $pe ) {
 121+ $full = $pe . DIRECTORY_SEPARATOR . $rel;
 122+ if ( file_exists( $full ) ) {
 123+ return $full;
 124+ }
 125+ }
 126+ return $rel;
 127+}
 128+
 129+$dir = dirname( __FILE__ ) . '/';
 130+
 131+$wgExtensionMessagesFiles['OpenID'] = $dir . 'OpenID.i18n.php';
 132+$wgExtensionAliasesFiles['OpenID'] = $dir . 'OpenID.alias.php';
 133+
 134+$wgAutoloadClasses['OpenIDHooks'] = $dir . 'OpenID.hooks.php';
 135+
 136+# Autoload common parent with utility methods
 137+$wgAutoloadClasses['SpecialOpenID'] = $dir . 'SpecialOpenID.body.php';
 138+
 139+$wgAutoloadClasses['SpecialOpenIDLogin'] = $dir . 'SpecialOpenIDLogin.body.php';
 140+$wgAutoloadClasses['SpecialOpenIDFinish'] = $dir . 'SpecialOpenIDFinish.body.php';
 141+$wgAutoloadClasses['SpecialOpenIDConvert'] = $dir . 'SpecialOpenIDConvert.body.php';
 142+$wgAutoloadClasses['SpecialOpenIDServer'] = $dir . 'SpecialOpenIDServer.body.php';
 143+$wgAutoloadClasses['SpecialOpenIDXRDS'] = $dir . 'SpecialOpenIDXRDS.body.php';
 144+
 145+# UI class
 146+$wgAutoloadClasses['OpenIDProvider'] = $dir . 'OpenIDProvider.body.php';
 147+
 148+# Gets stored in the session, needs to be reified before our setup
 149+$wgAutoloadClasses['Auth_OpenID_CheckIDRequest'] = OpenIDGetServerPath();
 150+
 151+$wgHooks['PersonalUrls'][] = 'OpenIDHooks::onPersonalUrls';
 152+$wgHooks['ArticleViewHeader'][] = 'OpenIDHooks::onArticleViewHeader';
 153+$wgHooks['SpecialPage_initList'][] = 'OpenIDHooks::onSpecialPage_initList';
 154+$wgHooks['LoadExtensionSchemaUpdates'][] = 'OpenIDHooks::onLoadExtensionSchemaUpdates';
 155+$wgHooks['RenderPreferencesForm'][] = 'OpenIDHooks::onRenderPreferencesForm';
 156+$wgHooks['InitPreferencesForm'][] = 'OpenIDHooks::onInitPreferencesForm';
 157+$wgHooks['ResetPreferences'][] = 'OpenIDHooks::onResetPreferences';
 158+$wgHooks['SavePreferences'][] = 'OpenIDHooks::onSavePreferences';
 159+$wgHooks['UserLoginForm'][] = 'OpenIDHooks::onUserLoginForm';
Property changes on: tags/extensions/OpenID/REL_0_8_4/OpenID.setup.php
___________________________________________________________________
Name: svn:eol-style
1160 + native
Index: tags/extensions/OpenID/REL_0_8_4/skin/openid.css
@@ -0,0 +1,75 @@
 2+#openid_form {
 3+ width: 470px;
 4+}
 5+
 6+#openid_form legend {
 7+ font-weight: bold;
 8+}
 9+
 10+#openid_input_area {
 11+ clear: both;
 12+ padding: 20px;
 13+ margin: 5px;
 14+}
 15+#openid_btns {
 16+}
 17+#openid_highlight {
 18+ padding: 3px;
 19+ background-color: #FFFCC9;
 20+ float: left;
 21+}
 22+.openid_large_btn {
 23+ width: 100px;
 24+ height: 60px;
 25+ border: 1px solid #DDD;
 26+ margin: 3px;
 27+ float: left;
 28+ background: #fff url(openid_sprite.png) no-repeat top left;
 29+}
 30+.openid_small_btn {
 31+ width: 24px;
 32+ height: 24px;
 33+ border: 1px solid #DDD;
 34+ margin: 3px;
 35+ float: left;
 36+ background: #fff url(openid_sprite.png) no-repeat top left;
 37+}
 38+
 39+.openid_selected {
 40+ border: 2px solid orange;
 41+}
 42+
 43+a.openid_large_btn:focus {
 44+ outline: none;
 45+}
 46+a.openid_large_btn:focus {
 47+ -moz-outline-style: none;
 48+}
 49+
 50+#openid_large_providers {
 51+}
 52+#openid_small_providers_icons {
 53+}
 54+
 55+#openid_provider_openid_icon { background-position: 0 -526px; }
 56+#openid_provider_google_icon { background-position: 0 -282px; }
 57+#openid_provider_yahoo_icon { background-position: 0 -832px; }
 58+#openid_provider_aol_icon { background-position: 0 -30px; }
 59+
 60+#openid_provider_myopenid_icon { background-position: 0 -426px; }
 61+#openid_provider_livejournal_icon { background-position: 0 -372px; }
 62+#openid_provider_vox_icon { background-position: 0 -724px; }
 63+#openid_provider_wordpress_icon { background-position: 0 -778px; }
 64+#openid_provider_blogger_icon { background-position: 0 -120px; }
 65+#openid_provider_flickr_icon { background-position: 0 -228px; }
 66+#openid_provider_verisign_icon { background-position: 0 -616px; }
 67+#openid_provider_vidoop_icon { background-position: 0 -670px; }
 68+#openid_provider_claimid_icon { background-position: 0 -174px; }
 69+
 70+#openid_url {
 71+ background: url(openid_sprite.png) no-repeat;
 72+ background-position: 0 -480px;
 73+ background-color: #fff;
 74+ color: #000;
 75+ padding-left: 18px;
 76+}
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/openid.css
___________________________________________________________________
Name: svn:eol-style
177 + native
Index: tags/extensions/OpenID/REL_0_8_4/skin/openid-plain.css
@@ -0,0 +1,55 @@
 2+#openid_form {
 3+ width: 470px;
 4+}
 5+
 6+#openid_form legend {
 7+ font-weight: bold;
 8+}
 9+
 10+#openid_input_area {
 11+ clear: both;
 12+ padding: 20px;
 13+ margin: 5px;
 14+}
 15+
 16+#openid_btns {
 17+}
 18+
 19+#openid_highlight {
 20+ padding: 3px;
 21+ background-color: #FFFCC9;
 22+ float: left;
 23+}
 24+
 25+.openid_large_link {
 26+ font-size: larger;
 27+ border: 1px solid #DDD;
 28+ padding: 15px;
 29+ margin: 7px;
 30+}
 31+.openid_small_link {
 32+}
 33+
 34+.openid_selected {
 35+ color: orange;
 36+}
 37+
 38+#openid_large_providers {
 39+ margin: 22px;
 40+}
 41+
 42+#openid_small_providers_links {
 43+ margin: 0 0 0 30px;
 44+}
 45+.openid_small_providers_block {
 46+ float: left;
 47+ margin: 0 0 0 30px;
 48+}
 49+
 50+#openid_url {
 51+ background: url(icons/openid-inputicon.png) no-repeat;
 52+ background-position: 0 50%;
 53+ background-color: #fff;
 54+ color: #000;
 55+ padding-left: 18px;
 56+}
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/openid-plain.css
___________________________________________________________________
Name: svn:eol-style
157 + native
Index: tags/extensions/OpenID/REL_0_8_4/skin/openid_sprite.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/openid_sprite.png
___________________________________________________________________
Name: svn:mime-type
258 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/openid.js
@@ -0,0 +1,16 @@
 2+var openid = {
 3+ current: 'openid',
 4+
 5+ show: function(provider) {
 6+ $('#provider_form_' + openid.current).attr('style', 'display:none');
 7+ $('#provider_form_' + provider).attr('style', 'block');
 8+
 9+ $('#openid_provider_' + openid.current +'_icon, #openid_provider_' + openid.current + '_link').removeClass('openid_selected');
 10+ $('#openid_provider_' + provider +'_icon, #openid_provider_' + provider + '_link').addClass('openid_selected');
 11+
 12+ openid.current = provider;
 13+ },
 14+ update: function() {
 15+ $('#openid_url').val($('#openid_provider_url_' + openid.current).val().replace(/{.*}/, $('#openid_provider_param_' + openid.current).val()));
 16+ }
 17+};
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/openid.js
___________________________________________________________________
Name: svn:eol-style
118 + native
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/myopenid_small.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/myopenid_small.png
___________________________________________________________________
Name: svn:mime-type
219 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/verisign_small.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/verisign_small.png
___________________________________________________________________
Name: svn:mime-type
320 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/wordpress_small.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/wordpress_small.png
___________________________________________________________________
Name: svn:mime-type
421 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/flickr_small.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/flickr_small.png
___________________________________________________________________
Name: svn:mime-type
522 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/livejournal_small.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/livejournal_small.png
___________________________________________________________________
Name: svn:mime-type
623 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/openid-inputicon.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/openid-inputicon.png
___________________________________________________________________
Name: svn:mime-type
724 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/vox_small.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/vox_small.png
___________________________________________________________________
Name: svn:mime-type
825 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/aol_large.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/aol_large.png
___________________________________________________________________
Name: svn:mime-type
926 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/google_large.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/google_large.png
___________________________________________________________________
Name: svn:mime-type
1027 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/openid_large.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/openid_large.png
___________________________________________________________________
Name: svn:mime-type
1128 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/vidoop_small.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/vidoop_small.png
___________________________________________________________________
Name: svn:mime-type
1229 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/blogger_small.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/blogger_small.png
___________________________________________________________________
Name: svn:mime-type
1330 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/yahoo_large.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/yahoo_large.png
___________________________________________________________________
Name: svn:mime-type
1431 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/icons/claimid_small.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/icons/claimid_small.png
___________________________________________________________________
Name: svn:mime-type
1532 + image/png
Index: tags/extensions/OpenID/REL_0_8_4/skin/jquery-1.3.2.min.js
@@ -0,0 +1,19 @@
 2+/*
 3+ * jQuery JavaScript Library v1.3.2
 4+ * http://jquery.com/
 5+ *
 6+ * Copyright (c) 2009 John Resig
 7+ * Dual licensed under the MIT and GPL licenses.
 8+ * http://docs.jquery.com/License
 9+ *
 10+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 11+ * Revision: 6246
 12+ */
 13+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
 14+/*
 15+ * Sizzle CSS Selector Engine - v0.9.3
 16+ * Copyright 2009, The Dojo Foundation
 17+ * Released under the MIT, BSD, and GPL Licenses.
 18+ * More information: http://sizzlejs.com/
 19+ */
 20+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="https://www.mediawiki.org/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
\ No newline at end of file
Property changes on: tags/extensions/OpenID/REL_0_8_4/skin/jquery-1.3.2.min.js
___________________________________________________________________
Name: svn:eol-style
121 + native
Index: tags/extensions/OpenID/REL_0_8_4/OpenID.php
@@ -0,0 +1,3 @@
 2+<?php
 3+# backwards compatibility; new sites should require OpenID.setup.php
 4+require_once(dirname(__FILE__) . '/OpenID.setup.php');
Property changes on: tags/extensions/OpenID/REL_0_8_4/OpenID.php
___________________________________________________________________
Name: svn:eol-style
15 + native
Index: tags/extensions/OpenID/REL_0_8_4/TODO
@@ -0,0 +1,65 @@
 2++ Add a Storage class for $wgMemc
 3++ Prevent running OpenIDLogin, OpenIDFinish when you're already logged in
 4++ Add a server mode
 5++ Prevent serving OpenID accounts
 6++ Prevent trusting the same server
 7++ Limit domains whose OpenIDs you trust
 8++ For domains, Order Allow,Deny or Deny,Allow
 9++ Function to let skins tell if user is OpenID user
 10++ Function to let skins know user's OpenID URL
 11++ Interwiki login
 12+- drop-down for username prefixes (Yahoo, etc.)
 13++ server mode login
 14++ server mode trust form
 15++ server mode share fields form
 16++ change a "regular" account to an OpenID account
 17+- keep user from setting password in OpenID account
 18+- keep user from mailing new password in OpenID account
 19+- participate in account-creation throttle
 20+- audit to prevent circumventing blocks/bans
 21+- OpenID extension to share MW settings
 22+- share timezone when/if available
 23++ split big file into 2-3 smaller modules
 24++ add openid.server to user pages
 25++ hide openid.server for non-user pages
 26+- optimize trust storage
 27++ change trust data separators from , and | to FS and RS
 28+- User preferences tab for OpenID
 29+- Manage allow-to-trust settings in User preferences
 30+- Optionally redirect User: page to OpenID URL
 31+- If user logs in with OpenID, add a cookie, and auto-login next time
 32+ with check_immediate
 33++ Have some $trust_root values that we _always_ allow to trust
 34++ README
 35++ form to choose user ID if not sreg.nickname or sreg.fullname
 36++ try to guess user name from URL with /
 37+ like http://getopenid.com/evanprodromou or
 38+ http://profile.typekey.com/EvanProdromou/
 39++ Allow specifying a FileStore
 40+- Allow specifying a MySQLStore
 41+- Allow specifying a memcached store
 42++ Fall back to FileStore if Memc is bogus
 43++ Unit test for MemcStore
 44++ for just-a-hostname OpenIDs, if the first element is not
 45+ www, use the first element as a proposed ID
 46+- configurable regexps for finding a user ID from an OpenID.
 47++ Make the OpenID login page more prominent. A personal toolbox link for each page?
 48++ Update Sreg support for new API in version 2.0 libraries
 49+- Provider-driven identifier selection (eh? do we care?)
 50++ fix problem with getting $request->identity after login on server
 51++ fix problem with return_to parsing on login
 52++ fix problem with return_to parsing on convert
 53++ optionally allow user to specify an existing username/password after
 54+ logging in with OpenID the first time (like ma.gnolia.com)
 55+- deal with difference between canonical ID and "display ID" with XRIs
 56++ add more explanatory text to the default login instructions (copy Wikitravel text)
 57+- add a public-domain Help:OpenID.wiki
 58+- add more than one OpenID to a user account
 59++ link to Special:OpenIDConvert if user is already logged in
 60+- support RP discovery
 61+- AJAX login, rather than klutzy JS form
 62+- link to OpenID login on Special:Userlogin
 63+- Dynamic HTML swap in of OpenID login form on Special:Userlogin
 64+- warn if a user account has been used as a login before attaching an
 65+ OpenID
 66+
\ No newline at end of file
Property changes on: tags/extensions/OpenID/REL_0_8_4/TODO
___________________________________________________________________
Name: svn:eol-style
167 + native
Index: tags/extensions/OpenID/REL_0_8_4/optionToTable.php
@@ -0,0 +1,49 @@
 2+<?php
 3+/**
 4+ * optionToTable.php -- Convert old user_options-based
 5+ * Copyright 2006,2007 Internet Brands (http://www.internetbrands.com/)
 6+ * By Evan Prodromou <evan@wikitravel.org>
 7+ *
 8+ * This program is free software; you can redistribute it and/or modify
 9+ * it under the terms of the GNU General Public License as published by
 10+ * the Free Software Foundation; either version 2 of the License, or
 11+ * (at your option) any later version.
 12+ *
 13+ * This program is distributed in the hope that it will be useful,
 14+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
 15+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 16+ * GNU General Public License for more details.
 17+ *
 18+ * You should have received a copy of the GNU General Public License
 19+ * along with this program; if not, write to the Free Software
 20+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 21+ *
 22+ * @author Evan Prodromou <evan@wikitravel.org>
 23+ * @addtogroup Extensions
 24+ */
 25+
 26+require_once('commandLine.inc');
 27+ini_set( "include_path", "/usr/share/php:" . ini_get("include_path"));
 28+
 29+require_once("$IP/extensions/OpenID/Consumer.php");
 30+
 31+global $wgSharedDB, $wgDBprefix;
 32+$tableName = "${wgDBprefix}user_openid";
 33+if (isset($wgSharedDB)) {
 34+ $tableName = "`$wgSharedDB`.$tableName";
 35+}
 36+
 37+$dbr =& wfGetDB( DB_SLAVE );
 38+
 39+$res = $dbr->select(array('user'),
 40+ array('user_name'),
 41+ array('user_options LIKE "%openid_url%"'),
 42+ 'optionToTable',
 43+ array('ORDER BY' => 'user_name'));
 44+
 45+while ($res && $row = $dbr->fetchObject($res)) {
 46+ $user = User::newFromName($row->user_name);
 47+ print( $user->getName() . ": " . $user->getOption('openid_url') . "\n");
 48+ OpenIDSetUserUrl($user, $user->getOption('openid_url'));
 49+}
 50+$dbr->freeResult($res);
Property changes on: tags/extensions/OpenID/REL_0_8_4/optionToTable.php
___________________________________________________________________
Name: svn:eol-style
151 + native
Index: tags/extensions/OpenID/REL_0_8_4/OpenIDProvider.body.php
@@ -0,0 +1,95 @@
 2+<?
 3+if (!defined('MEDIAWIKI'))
 4+ exit(1);
 5+
 6+class OpenIDProvider {
 7+ var $id;
 8+ var $name;
 9+ var $label;
 10+ var $url;
 11+
 12+ function OpenIDProvider($id, $name, $label, $url) {
 13+ $this->id = $id;
 14+ $this->name = $name;
 15+ $this->label = $label;
 16+ $this->url = $url;
 17+ }
 18+
 19+ function getButtonHTML($isLarge) {
 20+ global $wgOpenIDShowProviderIcons, $wgOpenIDIconPath;
 21+
 22+ if ($wgOpenIDShowProviderIcons)
 23+ {
 24+ return '<a id="openid_provider_' . $this->id . '_icon" title="' . $this->name . '"' .
 25+ ' href="javascript: openid.show(\'' . $this->id . '\');"' .
 26+ ' class="openid_' . ($isLarge ? 'large' : 'small') . '_btn' .
 27+ ($this->id == 'openid' ? ' openid_selected' : '') . '"></a>';
 28+ }
 29+ else
 30+ {
 31+ return '<a id="openid_provider_' . $this->id . '_link" title="' . $this->name . '"' .
 32+ ' href="javascript: openid.show(\'' . $this->id . '\');"' .
 33+ ' class="openid_'.($isLarge ? 'large' : 'small') . '_link' .
 34+ ($this->id == 'openid' ? ' openid_selected' : '') . '">' . $this->name . '</a>';
 35+ }
 36+ }
 37+ function getLargeButtonHTML() { return $this->getButtonHTML(true); }
 38+ function getSmallButtonHTML() { return $this->getButtonHTML(false); }
 39+
 40+ function getLoginFormHTML() {
 41+ $html = '<div id="provider_form_' . $this->id . '"' .
 42+ ($this->id == 'openid' ? '' : ' style="display:none"') . '>' .
 43+ '<div><label for="openid_url">' . $this->label . '</label></div>';
 44+
 45+ if ($this->id == 'openid') {
 46+ $html .= '<input type="text" name="openid_url" id="openid_url" size="50" value="" />';
 47+ $html .= '<input type="submit" value="' . wfMsg('login') . '"/>';
 48+ } else {
 49+ $html .= '<input type="hidden" id="openid_provider_url_'.$this->id.'" value="'.$this->url.'" />';
 50+ if (strpos($this->url, '{') === false) {
 51+ $html .= '<input type="hidden" id="openid_provider_param_'.$this->id.'" size="25" value="" />';
 52+ } else {
 53+ $html .= '<input type="text" id="openid_provider_param_'.$this->id.'" size="25" value="" />';
 54+ }
 55+ $html .= '<input type="submit" value="' . wfMsg('login') . '"/>';
 56+ }
 57+ $html .= '</div>';
 58+
 59+ return $html;
 60+ }
 61+
 62+ # large ones
 63+ static function getLargeProviders() {
 64+ return array(
 65+ new self('openid', 'OpenID', wfMsg('openid-provider-label-openid'), '{URL}'),
 66+ new self('google', 'Google', wfMsg('openid-provider-label-google'), 'https://www.google.com/accounts/o8/id'),
 67+ new self('yahoo', 'Yahoo', wfMsg('openid-provider-label-yahoo'), 'http://yahoo.com/'),
 68+ new self('aol', 'AOL', wfMsg('openid-provider-label-aol'), 'http://openid.aol.com/{username}')
 69+ );
 70+ }
 71+
 72+ # smaller ones
 73+ static function getSmallProviders() {
 74+ return array(
 75+ new self('myopenid', 'MyOpenID', wfMsg('openid-provider-label-other-username', 'MyOpenID'),
 76+ 'http://{username}.myopenid.com/'),
 77+ new self('livejournal', 'LiveJournal', wfMsg('openid-provider-label-other-username', 'LiveJournal'),
 78+ 'http://{username}.livejournal.com/'),
 79+ new self('vox', 'VOX', wfMsg('openid-provider-label-other-username', 'VOX'),
 80+ 'http://{username}.vox.com/'),
 81+# wordpress.com doesn't work for some reason
 82+# new self('wordpress', 'Wordpress.com', wfMsg('openid-provider-label-other-username', 'Wordpress.com'),
 83+# 'http://{username}.wordpress.com/'),
 84+ new self('blogger', 'Bloggger', wfMsg('openid-provider-label-other-username', 'Bloggger'),
 85+ 'http://{username}.blogspot.com/'),
 86+ new self('flickr', 'Flickr', wfMsg('openid-provider-label-other-username', 'Flickr'),
 87+ 'http://flickr.com/photos/{username}/'),
 88+ new self('verisign', 'Verisign', wfMsg('openid-provider-label-other-username', 'Verisign'),
 89+ 'http://{username}.pip.verisignlabs.com/'),
 90+ new self('vidoop', 'Vidoop', wfMsg('openid-provider-label-other-username', 'Vidoop'),
 91+ 'http://{username}.myvidoop.com/'),
 92+ new self('claimid', 'ClaimID', wfMsg('openid-provider-label-other-username', 'ClaimID'),
 93+ 'http://claimid.com/{username}')
 94+ );
 95+ }
 96+}
Property changes on: tags/extensions/OpenID/REL_0_8_4/OpenIDProvider.body.php
___________________________________________________________________
Name: svn:eol-style
197 + native
Property changes on: tags/extensions/OpenID/REL_0_8_4
___________________________________________________________________
Name: svn:ignore
298 + _darcs
testopenid.sh

Status & tagging log