Merge "New hook for filters on Special:Contributions form"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 1 Feb 2016 22:47:40 +0000 (22:47 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 1 Feb 2016 22:47:40 +0000 (22:47 +0000)
411 files changed:
CREDITS
RELEASE-NOTES-1.27
autoload.php
composer.json
docs/deferred.txt
docs/hooks.txt
includes/DefaultSettings.php
includes/DerivativeRequest.php
includes/EditPage.php
includes/FauxRequest.php
includes/GlobalFunctions.php
includes/Linker.php
includes/MediaWiki.php
includes/OutputPage.php
includes/Sanitizer.php
includes/Setup.php
includes/Title.php
includes/WatchedItem.php
includes/WebRequest.php
includes/ZhConversion.php [deleted file]
includes/actions/HistoryAction.php
includes/actions/RawAction.php
includes/actions/SubmitAction.php
includes/api/ApiBase.php
includes/api/ApiCreateAccount.php
includes/api/ApiLogin.php
includes/api/ApiLogout.php
includes/api/ApiMain.php
includes/api/ApiQueryInfo.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiStashEdit.php
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/fr.json
includes/api/i18n/he.json
includes/api/i18n/it.json
includes/api/i18n/ksh.json
includes/api/i18n/nl.json
includes/api/i18n/qqq.json
includes/api/i18n/zh-hans.json
includes/changes/CategoryMembershipChange.php
includes/context/RequestContext.php
includes/db/DBConnRef.php
includes/db/Database.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabasePostgres.php
includes/db/IDatabase.php
includes/db/loadbalancer/LBFactory.php
includes/db/loadbalancer/LoadBalancer.php
includes/debug/logger/monolog/KafkaHandler.php
includes/htmlform/HTMLUserTextField.php
includes/installer/DatabaseUpdater.php
includes/installer/LocalSettingsGenerator.php
includes/installer/MysqlUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/i18n/el.json
includes/installer/i18n/ja.json
includes/installer/i18n/mk.json
includes/installer/i18n/nl.json
includes/installer/i18n/zh-hans.json
includes/jobqueue/JobRunner.php
includes/jobqueue/jobs/ActivityUpdateJob.php
includes/jobqueue/jobs/CategoryMembershipChangeJob.php
includes/jobqueue/jobs/HTMLCacheUpdateJob.php
includes/jobqueue/jobs/RecentChangesUpdateJob.php
includes/logging/LogFormatter.php
includes/logging/TagLogFormatter.php
includes/mail/EmailNotification.php
includes/media/Bitmap.php
includes/media/TransformationalImageHandler.php
includes/objectcache/ObjectCacheSessionHandler.php [new file with mode: 0644]
includes/objectcache/SqlBagOStuff.php
includes/page/Article.php
includes/page/WikiPage.php
includes/parser/Parser.php
includes/resourceloader/ResourceLoaderImage.php
includes/resourceloader/ResourceLoaderModule.php
includes/session/BotPasswordSessionProvider.php [deleted file]
includes/session/CookieSessionProvider.php [deleted file]
includes/session/ImmutableSessionProviderWithCookie.php [deleted file]
includes/session/PHPSessionHandler.php [deleted file]
includes/session/Session.php [deleted file]
includes/session/SessionBackend.php [deleted file]
includes/session/SessionId.php [deleted file]
includes/session/SessionInfo.php [deleted file]
includes/session/SessionManager.php [deleted file]
includes/session/SessionManagerInterface.php [deleted file]
includes/session/SessionProvider.php [deleted file]
includes/session/SessionProviderInterface.php [deleted file]
includes/session/UserInfo.php [deleted file]
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialBotPasswords.php [deleted file]
includes/specials/SpecialMovepage.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserlogout.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWatchlist.php
includes/user/BotPassword.php [deleted file]
includes/user/User.php
includes/utils/BatchRowWriter.php
languages/Language.php
languages/Names.php [deleted file]
languages/classes/LanguageGan.php
languages/classes/LanguageIu.php
languages/classes/LanguageKk.php
languages/classes/LanguageKu.php
languages/classes/LanguageShi.php
languages/classes/LanguageSr.php
languages/classes/LanguageTg.php
languages/classes/LanguageUz.php
languages/classes/LanguageZh.php
languages/data/Names.php [new file with mode: 0644]
languages/data/ZhConversion.php [new file with mode: 0644]
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/cu.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/fur.json
languages/i18n/gl.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/hak.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/ilo.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jam.json
languages/i18n/ka.json
languages/i18n/kiu.json
languages/i18n/ko.json
languages/i18n/ksh.json
languages/i18n/lb.json
languages/i18n/lki.json
languages/i18n/lt.json
languages/i18n/lzh.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/ms.json
languages/i18n/nap.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sah.json
languages/i18n/scn.json
languages/i18n/sd.json
languages/i18n/sh.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/tg-cyrl.json
languages/i18n/th.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/tyv.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/vi.json
languages/i18n/vo.json
languages/i18n/wuu.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesEn.php
maintenance/Maintenance.php
maintenance/archives/patch-bot_passwords.sql [deleted file]
maintenance/attachLatest.php
maintenance/benchmarks/bench_HTTP_HTTPS.php
maintenance/benchmarks/bench_Wikimedia_base_convert.php
maintenance/benchmarks/bench_delete_truncate.php
maintenance/benchmarks/bench_if_switch.php
maintenance/benchmarks/bench_strtr_str_replace.php
maintenance/benchmarks/bench_utf8_title_check.php
maintenance/benchmarks/bench_wfIsWindows.php
maintenance/benchmarks/benchmarkHooks.php
maintenance/benchmarks/benchmarkPurge.php
maintenance/changePassword.php
maintenance/checkBadRedirects.php
maintenance/checkComposerLockUpToDate.php
maintenance/checkImages.php
maintenance/checkLess.php
maintenance/checkSyntax.php
maintenance/checkUsernames.php
maintenance/cleanupAncientTables.php
maintenance/cleanupBlocks.php
maintenance/cleanupCaps.php
maintenance/cleanupImages.php
maintenance/cleanupRemovedModules.php
maintenance/cleanupSpam.php
maintenance/cleanupTitles.php
maintenance/cleanupUploadStash.php
maintenance/cleanupWatchlist.php
maintenance/clearInterwikiCache.php
maintenance/compareParserCache.php
maintenance/compareParsers.php
maintenance/convertExtensionToRegistration.php
maintenance/convertLinks.php
maintenance/convertUserOptions.php
maintenance/copyFileBackend.php
maintenance/copyJobQueue.php
maintenance/createAndPromote.php
maintenance/createCommonPasswordCdb.php
maintenance/deleteArchivedFiles.php
maintenance/deleteArchivedRevisions.php
maintenance/deleteBatch.php
maintenance/deleteDefaultMessages.php
maintenance/deleteEqualMessages.php
maintenance/deleteOldRevisions.php
maintenance/deleteOrphanedRevisions.php
maintenance/deleteRevision.php
maintenance/deleteSelfExternals.php
maintenance/dumpBackup.php
maintenance/dumpIterator.php
maintenance/dumpLinks.php
maintenance/dumpTextPass.php
maintenance/dumpUploads.php
maintenance/edit.php
maintenance/eraseArchivedFile.php
maintenance/exportSites.php
maintenance/fetchText.php
maintenance/fileOpPerfTest.php
maintenance/findDeprecated.php
maintenance/findHooks.php
maintenance/findMissingFiles.php
maintenance/findOrphanedFiles.php
maintenance/fixDefaultJsonContentPages.php
maintenance/fixDoubleRedirects.php
maintenance/fixExtLinksProtocolRelative.php
maintenance/fixTimestamps.php
maintenance/fixUserRegistration.php
maintenance/generateJsonI18n.php
maintenance/generateSitemap.php
maintenance/getConfiguration.php
maintenance/getLagTimes.php
maintenance/getSlaveServer.php
maintenance/getText.php
maintenance/importDump.php
maintenance/importSiteScripts.php
maintenance/importSites.php
maintenance/importTextFiles.php
maintenance/initEditCount.php
maintenance/initSiteStats.php
maintenance/jsparse.php
maintenance/lag.php
maintenance/language/alltrans.php
maintenance/language/date-formats.php
maintenance/language/digit2html.php
maintenance/language/dumpMessages.php
maintenance/language/generateNormalizerDataAr.php
maintenance/language/generateNormalizerDataMl.php
maintenance/language/generateUtf8Case.php
maintenance/language/langmemusage.php
maintenance/language/listVariants.php
maintenance/language/zhtable/Makefile
maintenance/language/zhtable/Makefile.py
maintenance/makeTestEdits.php
maintenance/mctest.php
maintenance/mergeMessageFileList.php
maintenance/migrateFileRepoLayout.php
maintenance/migrateUserGroup.php
maintenance/minify.php
maintenance/moveBatch.php
maintenance/mwdocgen.php
maintenance/namespaceDupes.php
maintenance/nukeNS.php
maintenance/nukePage.php
maintenance/oracle/alterSharedConstraints.php
maintenance/orphans.php
maintenance/pageExists.php
maintenance/parse.php
maintenance/patchSql.php
maintenance/populateBacklinkNamespace.php
maintenance/populateCategory.php
maintenance/populateContentModel.php
maintenance/populateFilearchiveSha1.php
maintenance/populateImageSha1.php
maintenance/populateLogSearch.php
maintenance/populateLogUsertext.php
maintenance/populateParentId.php
maintenance/populateRecentChangesSource.php
maintenance/populateRevisionLength.php
maintenance/populateRevisionSha1.php
maintenance/postgres/archives/patch-bot_passwords.sql [deleted file]
maintenance/postgres/tables.sql
maintenance/protect.php
maintenance/pruneFileCache.php
maintenance/purgeChangedFiles.php
maintenance/purgeChangedPages.php
maintenance/purgeList.php
maintenance/purgeOldText.php
maintenance/reassignEdits.php
maintenance/rebuildFileCache.php
maintenance/rebuildImages.php
maintenance/rebuildLocalisationCache.php
maintenance/rebuildSitesCache.php
maintenance/rebuildall.php
maintenance/rebuildmessages.php
maintenance/rebuildrecentchanges.php
maintenance/rebuildtextindex.php
maintenance/refreshFileHeaders.php
maintenance/refreshImageMetadata.php
maintenance/refreshLinks.php
maintenance/renderDump.php
maintenance/resetUserEmail.php [new file with mode: 0644]
maintenance/resetUserTokens.php
maintenance/rollbackEdits.php
maintenance/runBatchedQuery.php
maintenance/runJobs.php
maintenance/showJobs.php
maintenance/showSiteStats.php
maintenance/sql.php
maintenance/sqlite.php
maintenance/storage/compressOld.php
maintenance/storage/fixBug20757.php
maintenance/storage/orphanStats.php
maintenance/syncFileBackend.php
maintenance/tables.sql
maintenance/undelete.php
maintenance/update.php
maintenance/updateArticleCount.php
maintenance/updateCollation.php
maintenance/updateDoubleWidthSearch.php
maintenance/updateRestrictions.php
maintenance/updateSearchIndex.php
maintenance/wrapOldPasswords.php
resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
resources/src/mediawiki/mediawiki.js
tests/TestsAutoLoader.php
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/StatusTest.php
tests/phpunit/includes/TestLogger.php [deleted file]
tests/phpunit/includes/TitleArrayFromResultTest.php
tests/phpunit/includes/api/ApiLoginTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/ApiTestCaseUpload.php
tests/phpunit/includes/changes/CategoryMembershipChangeTest.php
tests/phpunit/includes/content/JsonContentTest.php
tests/phpunit/includes/content/WikitextContentHandlerTest.php
tests/phpunit/includes/context/RequestContextTest.php
tests/phpunit/includes/diff/ArrayDiffFormatterTest.php
tests/phpunit/includes/diff/DiffOpTest.php
tests/phpunit/includes/diff/DiffTest.php
tests/phpunit/includes/exception/BadTitleErrorTest.php
tests/phpunit/includes/exception/ErrorPageErrorTest.php
tests/phpunit/includes/exception/ReadOnlyErrorTest.php
tests/phpunit/includes/exception/ThrottledErrorTest.php
tests/phpunit/includes/exception/UserNotLoggedInTest.php
tests/phpunit/includes/jobqueue/JobTest.php
tests/phpunit/includes/media/BitmapScalingTest.php
tests/phpunit/includes/page/WikiPageTest.php
tests/phpunit/includes/session/BotPasswordSessionProviderTest.php [deleted file]
tests/phpunit/includes/session/CookieSessionProviderTest.php [deleted file]
tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php [deleted file]
tests/phpunit/includes/session/PHPSessionHandlerTest.php [deleted file]
tests/phpunit/includes/session/SessionBackendTest.php [deleted file]
tests/phpunit/includes/session/SessionIdTest.php [deleted file]
tests/phpunit/includes/session/SessionInfoTest.php [deleted file]
tests/phpunit/includes/session/SessionManagerTest.php [deleted file]
tests/phpunit/includes/session/SessionProviderTest.php [deleted file]
tests/phpunit/includes/session/SessionTest.php [deleted file]
tests/phpunit/includes/session/TestBagOStuff.php [deleted file]
tests/phpunit/includes/session/TestUtils.php [deleted file]
tests/phpunit/includes/session/UserInfoTest.php [deleted file]
tests/phpunit/includes/specials/SpecialBlankPageTest.php
tests/phpunit/includes/specials/SpecialPageTestBase.php
tests/phpunit/includes/upload/UploadFromUrlTest.php
tests/phpunit/includes/user/BotPasswordTest.php [deleted file]
tests/phpunit/includes/user/UserArrayFromResultTest.php
tests/phpunit/includes/user/UserTest.php
tests/phpunit/mocks/session/DummySessionBackend.php [deleted file]
tests/phpunit/mocks/session/DummySessionProvider.php [deleted file]
tests/phpunit/phpunit.php
tests/phpunit/tests/MediaWikiTestCaseTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.test.js

diff --git a/CREDITS b/CREDITS
index fe7b81e..a54bd90 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -138,6 +138,7 @@ following names for their contribution to the product.
 * Erwin Dokter
 * Étienne Beaulé
 * Federico Leva
+* Florian Schmidt
 * fomafix
 * FunPika
 * Gabriel Wicke
index 50d40a6..f4e4815 100644 (file)
@@ -62,37 +62,13 @@ production.
   $wgSharedDB and $wgSharedTables are properly set even on the "central" wiki
   that all others are sharing from and that $wgLocalDatabases is set to the
   full list of sharing wikis on all those wikis.
-* Massive overhaul to session handling:
-** $wgSessionsInObjectCache is no longer supported and must be true, due to
-   MediaWiki\Session\SessionManager. $wgSessionHandler is similarly no longer
-   used.
-** ObjectCacheSessionHandler is removed, replaced with
-   MediaWiki\Session\PhpSessionHandler.
-** PHP session handling in general ($_SESSION, session_id(), and so on) is
-   deprecated. Use MediaWiki\Session\SessionManager instead. A new config
-   variable, $wgPHPSessionHandling, is available to cause use of $_SESSION to
-   issue a deprecation warning or to cause most PHP session handling to throw
-   exceptions.
-** Deprecated UserSetCookies hook. Session-handling extensions should generally
-   be creating a custom subclass of CookieSessionProvider. Other extensions
-   messing with cookies can no longer count on user data being saved in cookies
-   versus other methods.
-** Deprecated UserLoadFromSession hook, extensions should create a
-   MediaWiki\Session\SessionProvider.
-** The User cannot be loaded from session until after Setup.php completes.
-   Attempts to do so will be ignored and the User will remain unloaded.
-* MediaWiki will now auto-create users as necessary, removing the need for
-  extensions to do so. An 'autocreateaccount' right is added to allow
-  auto-creation when 'createaccount' is not granted to all users.
-* Deprecated AuthPluginAutoCreate hook in favor of LocalUserCreated.
-* Most cookie-handling methods in User are deprecated.
 * $wgAllowAsyncCopyUploads and $CopyUploadAsyncTimeout were removed. This was an
   experimental feature that has never worked.
+* $wgEnotifUseJobQ was removed and the job queue is always used.
 
 === New features in 1.27 ===
-* $wgDataCenterId and $wgDataCenterRoles where added, which will serve as
-  basic configuration settings needed for multi-datacenter setups.
-  $wgDataCenterUpdateStickTTL was also added.
+* $wgDataCenterUpdateStickTTL was also added. This decides how long a user
+  sticks to the primary DC (via cookies) after they make changes to the site.
 * Added a new hook, 'UserMailerTransformContent', to transform the contents
   of an email. This is similar to the EmailUser hook but applies to all mail
   sent via UserMailer.
@@ -132,10 +108,6 @@ production.
 * It is now possible to patrol file uploads (both for new files and new versions
   of existing files). Special:NewFiles has gained an option to filter by patrol
   status. This functionality can be disabled using $wgUseFilePatrol.
-* MediaWiki\Session infrastructure allows for easier use of session mechanisms
-  other than the usual cookies.
-** SessionMetadata and SessionCheckInfo hooks allow for setting and checking
-   custom session metadata.
 * Added MWGrants and associated configuration settings $wgGrantPermissions and
   $wgGrantPermissionGroups to hold configuration for authentication features
   such as OAuth that want to allow restricting the user rights a user may make
@@ -145,7 +117,10 @@ production.
    $wgMWOAuthGrantPermissionGroups.
 * Added MWRestrictions as a class to check restrictions on a WebRequest, e.g.
   to assert that the request comes from a particular IP range.
-* Added bot passwords, a rights-restricted login mechanism for API-using bots.
+* Whitelisted the following HTML attributes for all elements in wikitext:
+  aria-describedby, aria-flowto, aria-label, aria-labelledby, aria-owns.
+* Removed "presentation" restriction on the HTML role attribute in wikitext.
+  All values are now allowed for the role attribute.
 
 === External library changes in 1.27 ===
 
@@ -159,7 +134,6 @@ production.
 * Added wikimedia/cldr-plural-rule-parser v1.0.0.
 * Added wikimedia/relpath v1.0.3.
 * Added wikimedia/running-stat v1.1.0.
-* Added wikimedia/php-session-serializer v1.0.3.
 
 ==== Removed and replaced external libraries ====
 
@@ -182,9 +156,6 @@ production.
 * The following response properties from action=login are deprecated, and may
   be removed in the future: lgtoken, cookieprefix, sessionid. Clients should
   handle cookies to properly manage session state.
-* action=login transparently allows login using bot passwords. Clients should
-  merely need to change the username and password used after setting up a bot
-  password.
 * action=upload no longer understands statuskey, asyncdownload or leavemessage.
 
 === Action API internal changes in 1.27 ===
@@ -199,6 +170,7 @@ production.
 * ApiQueryBase::getDirectionDescription() was removed (deprecated since 1.25).
 * ApiQuery::getModules() was removed (deprecated since 1.21).
 * ApiMain::getModules() was removed (deprecated since 1.21).
+* ApiBase::getVersion() was removed (deprecated since 1.21).
 
 === Languages updated in 1.27 ===
 
@@ -294,6 +266,8 @@ changes to languages because of Phabricator reports.
   together but instead pick the final one, similar to image syntax.
 * XML-like parser tags (such as <gallery>), when unclosed, will be left unparsed
   rather than consume everything until the end of the page.
+* New maintenance script resetUserEmail.php allows sysadmins to reset user emails in case
+  a user forgot password/account was stolen.
 
 == Compatibility ==
 
index 26b6598..8720186 100644 (file)
@@ -72,7 +72,6 @@ $wgAutoloadLocalClasses = array(
        'ApiQueryAllMessages' => __DIR__ . '/includes/api/ApiQueryAllMessages.php',
        'ApiQueryAllPages' => __DIR__ . '/includes/api/ApiQueryAllPages.php',
        'ApiQueryAllRevisions' => __DIR__ . '/includes/api/ApiQueryAllRevisions.php',
-       'ApiQueryMyStashedFiles' => __DIR__ . '/includes/api/ApiQueryMyStashedFiles.php',
        'ApiQueryAllUsers' => __DIR__ . '/includes/api/ApiQueryAllUsers.php',
        'ApiQueryBacklinks' => __DIR__ . '/includes/api/ApiQueryBacklinks.php',
        'ApiQueryBacklinksprop' => __DIR__ . '/includes/api/ApiQueryBacklinksprop.php',
@@ -101,6 +100,7 @@ $wgAutoloadLocalClasses = array(
        'ApiQueryLangLinks' => __DIR__ . '/includes/api/ApiQueryLangLinks.php',
        'ApiQueryLinks' => __DIR__ . '/includes/api/ApiQueryLinks.php',
        'ApiQueryLogEvents' => __DIR__ . '/includes/api/ApiQueryLogEvents.php',
+       'ApiQueryMyStashedFiles' => __DIR__ . '/includes/api/ApiQueryMyStashedFiles.php',
        'ApiQueryPagePropNames' => __DIR__ . '/includes/api/ApiQueryPagePropNames.php',
        'ApiQueryPageProps' => __DIR__ . '/includes/api/ApiQueryPageProps.php',
        'ApiQueryPagesWithProp' => __DIR__ . '/includes/api/ApiQueryPagesWithProp.php',
@@ -181,7 +181,6 @@ $wgAutoloadLocalClasses = array(
        'BlockListPager' => __DIR__ . '/includes/specials/SpecialBlockList.php',
        'BlockLogFormatter' => __DIR__ . '/includes/logging/BlockLogFormatter.php',
        'BmpHandler' => __DIR__ . '/includes/media/BMP.php',
-       'BotPassword' => __DIR__ . '/includes/user/BotPassword.php',
        'BrokenRedirectsPage' => __DIR__ . '/includes/specials/SpecialBrokenRedirects.php',
        'BufferingStatsdDataFactory' => __DIR__ . '/includes/libs/BufferingStatsdDataFactory.php',
        'CLIParser' => __DIR__ . '/maintenance/parse.php',
@@ -771,6 +770,8 @@ $wgAutoloadLocalClasses = array(
        'MediaWikiSite' => __DIR__ . '/includes/site/MediaWikiSite.php',
        'MediaWikiTitleCodec' => __DIR__ . '/includes/title/MediaWikiTitleCodec.php',
        'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php',
+       'MediaWiki\\Languages\\Data\\Names' => __DIR__ . '/languages/data/Names.php',
+       'MediaWiki\\Languages\\Data\\ZhConversion' => __DIR__ . '/languages/data/ZhConversion.php',
        'MediaWiki\\Logger\\LegacyLogger' => __DIR__ . '/includes/debug/logger/LegacyLogger.php',
        'MediaWiki\\Logger\\LegacySpi' => __DIR__ . '/includes/debug/logger/LegacySpi.php',
        'MediaWiki\\Logger\\LoggerFactory' => __DIR__ . '/includes/debug/logger/LoggerFactory.php',
@@ -785,19 +786,6 @@ $wgAutoloadLocalClasses = array(
        'MediaWiki\\Logger\\Monolog\\WikiProcessor' => __DIR__ . '/includes/debug/logger/monolog/WikiProcessor.php',
        'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
        'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php',
-       'MediaWiki\\Session\\BotPasswordSessionProvider' => __DIR__ . '/includes/session/BotPasswordSessionProvider.php',
-       'MediaWiki\\Session\\CookieSessionProvider' => __DIR__ . '/includes/session/CookieSessionProvider.php',
-       'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' => __DIR__ . '/includes/session/ImmutableSessionProviderWithCookie.php',
-       'MediaWiki\\Session\\PHPSessionHandler' => __DIR__ . '/includes/session/PHPSessionHandler.php',
-       'MediaWiki\\Session\\Session' => __DIR__ . '/includes/session/Session.php',
-       'MediaWiki\\Session\\SessionBackend' => __DIR__ . '/includes/session/SessionBackend.php',
-       'MediaWiki\\Session\\SessionId' => __DIR__ . '/includes/session/SessionId.php',
-       'MediaWiki\\Session\\SessionInfo' => __DIR__ . '/includes/session/SessionInfo.php',
-       'MediaWiki\\Session\\SessionManager' => __DIR__ . '/includes/session/SessionManager.php',
-       'MediaWiki\\Session\\SessionManagerInterface' => __DIR__ . '/includes/session/SessionManagerInterface.php',
-       'MediaWiki\\Session\\SessionProvider' => __DIR__ . '/includes/session/SessionProvider.php',
-       'MediaWiki\\Session\\SessionProviderInterface' => __DIR__ . '/includes/session/SessionProviderInterface.php',
-       'MediaWiki\\Session\\UserInfo' => __DIR__ . '/includes/session/UserInfo.php',
        'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php',
        'MediaWiki\\Tidy\\Html5Depurate' => __DIR__ . '/includes/tidy/Html5Depurate.php',
        'MediaWiki\\Tidy\\RaggettBase' => __DIR__ . '/includes/tidy/RaggettBase.php',
@@ -882,6 +870,7 @@ $wgAutoloadLocalClasses = array(
        'ORAField' => __DIR__ . '/includes/db/DatabaseOracle.php',
        'ORAResult' => __DIR__ . '/includes/db/DatabaseOracle.php',
        'ObjectCache' => __DIR__ . '/includes/objectcache/ObjectCache.php',
+       'ObjectCacheSessionHandler' => __DIR__ . '/includes/objectcache/ObjectCacheSessionHandler.php',
        'ObjectFactory' => __DIR__ . '/includes/libs/ObjectFactory.php',
        'ObjectFileCache' => __DIR__ . '/includes/cache/ObjectFileCache.php',
        'OldChangesList' => __DIR__ . '/includes/changes/OldChangesList.php',
@@ -1048,6 +1037,7 @@ $wgAutoloadLocalClasses = array(
        'ReplicatedBagOStuff' => __DIR__ . '/includes/libs/objectcache/ReplicatedBagOStuff.php',
        'RepoGroup' => __DIR__ . '/includes/filerepo/RepoGroup.php',
        'RequestContext' => __DIR__ . '/includes/context/RequestContext.php',
+       'ResetUserEmail' => __DIR__ . '/maintenance/resetUserEmail.php',
        'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php',
        'ResourceFileCache' => __DIR__ . '/includes/cache/ResourceFileCache.php',
        'ResourceLoader' => __DIR__ . '/includes/resourceloader/ResourceLoader.php',
@@ -1166,7 +1156,6 @@ $wgAutoloadLocalClasses = array(
        'SpecialBlock' => __DIR__ . '/includes/specials/SpecialBlock.php',
        'SpecialBlockList' => __DIR__ . '/includes/specials/SpecialBlockList.php',
        'SpecialBookSources' => __DIR__ . '/includes/specials/SpecialBooksources.php',
-       'SpecialBotPasswords' => __DIR__ . '/includes/specials/SpecialBotPasswords.php',
        'SpecialCachedPage' => __DIR__ . '/includes/specials/SpecialCachedPage.php',
        'SpecialCategories' => __DIR__ . '/includes/specials/SpecialCategories.php',
        'SpecialChangeContentModel' => __DIR__ . '/includes/specials/SpecialChangeContentModel.php',
index da088d3..9ff39ad 100644 (file)
@@ -31,7 +31,6 @@
                "wikimedia/cldr-plural-rule-parser": "1.0.0",
                "wikimedia/composer-merge-plugin": "1.3.0",
                "wikimedia/ip-set": "1.0.1",
-               "wikimedia/php-session-serializer": "1.0.3",
                "wikimedia/relpath": "1.0.3",
                "wikimedia/running-stat": "1.1.0",
                "wikimedia/utfnormal": "1.0.3",
index 495e659..b8ec76b 100644 (file)
@@ -33,4 +33,4 @@ Currently there are a few different types of jobs:
     Each job clears $wgUpdateRowsPerJob pages (500 by default).
 
   enotifNotify
-    Used when $wgEnotifUseJobQ is true to send mail using the job queue.
+    Used to send mail using the job queue.
index 9aacaa9..24eb868 100644 (file)
@@ -741,9 +741,8 @@ viewing.
 redirect was followed.
 &$article: target article (object)
 
-'AuthPluginAutoCreate': DEPRECATED! Use the 'LocalUserCreated' hook instead.
-Called when creating a local account for an user logged in from an external
-authentication method.
+'AuthPluginAutoCreate': Called when creating a local account for an user logged
+in from an external authentication method.
 $user: User object created locally
 
 'AuthPluginSetup': Update or replace authentication plugin object ($wgAuth).
@@ -2346,6 +2345,11 @@ run. Use when page save hooks require the presence of custom tables to ensure
 that tests continue to run properly.
 &$tables: array of table names
 
+'ParserOutputStashForEdit': Called when an edit stash parse finishes, before the output is cached.
+$page: the WikiPage of the candidate edit
+$content: the Content object of the candidate edit
+$output: the ParserOutput result of the candidate edit
+
 'PasswordPoliciesForUser': Alter the effective password policy for a user.
 $user: User object whose policy you are modifying
 &$effectivePolicy: Array of policy statements that apply to this user
@@ -2580,20 +2584,6 @@ $targetUser: the user whom to send watchlist email notification
 $title: the page title
 $enotif: EmailNotification object
 
-'SessionCheckInfo': Validate a MediaWiki\Session\SessionInfo as it's being
-loaded from storage. Return false to prevent it from being used.
-&$reason: String rejection reason to be logged
-$info: MediaWiki\Session\SessionInfo being validated
-$request: WebRequest being loaded from
-$metadata: Array|false Metadata array for the MediaWiki\Session\Session
-$data: Array|false Data array for the MediaWiki\Session\Session
-
-'SessionMetadata': Add metadata to a session being saved.
-$backend: MediaWiki\Session\SessionBackend being saved.
-&$metadata: Array Metadata to be stored. Add new keys here.
-$requests: Array of WebRequests potentially being saved to. Generally 0-1 real
-  request and 0+ FauxRequests.
-
 'SetupAfterCache': Called in Setup.php, after cache objects are set
 
 'ShortPagesQuery': Allow extensions to modify the query used by
@@ -3317,9 +3307,8 @@ $name: user name
 $user: user object
 &$s: database query object
 
-'UserLoadFromSession': DEPRECATED! Create a MediaWiki\Session\SessionProvider instead.
-Called to authenticate users on external/environmental means; occurs before
-session is loaded.
+'UserLoadFromSession': Called to authenticate users on external/environmental
+means; occurs before session is loaded.
 $user: user object being loaded
 &$result: set this to a boolean value to abort the normal authentication
   process
@@ -3410,13 +3399,9 @@ $user: User object
 'UserSaveSettings': Called when saving user settings.
 $user: User object
 
-'UserSetCookies': DEPRECATED! If you're trying to replace core session cookie
-handling, you want to create a subclass of MediaWiki\Session\CookieSessionProvider
-instead. Otherwise, you can no longer count on user data being saved to cookies
-versus some other mechanism.
-Called when setting user cookies.
+'UserSetCookies': Called when setting user cookies.
 $user: User object
-&$session: session array, will be added to the session
+&$session: session array, will be added to $_SESSION
 &$cookies: cookies array mapping cookie name to its value
 
 'UserSetEmail': Called when changing user email address.
index 00a5709..4aed617 100644 (file)
@@ -943,6 +943,12 @@ $wgUseImageMagick = false;
  */
 $wgImageMagickConvertCommand = '/usr/bin/convert';
 
+/**
+ * Array of max pixel areas for interlacing per MIME type
+ * @since 1.27
+ */
+$wgMaxInterlacingAreas = array();
+
 /**
  * Sharpening parameter to ImageMagick
  */
@@ -1622,12 +1628,6 @@ $wgEnotifImpersonal = false;
  */
 $wgEnotifMaxRecips = 500;
 
-/**
- * Send mails via the job queue. This can be useful to reduce the time it
- * takes to save a page that a lot of people are watching.
- */
-$wgEnotifUseJobQ = false;
-
 /**
  * Use real name instead of username in e-mail "from" field.
  */
@@ -1865,24 +1865,6 @@ $wgDBservers = false;
  */
 $wgLBFactoryConf = array( 'class' => 'LBFactorySimple' );
 
-/**
- * The ID of the current data center
- * @since 1.27
- */
-$wgDataCenterId = 'default';
-
-/**
- * Map of data center IDs to their role ("master" or "slave")
- *
- * Multiple data centers can be setup to handle MediaWiki, with HTTP
- * POSTs routed to the master data center and GET/HEAD/OPTION routed to
- * any data center (usually the closest to the end user). In such setups,
- * this setting should be set to the appropriate value in the site
- * config for each data center.
- * @since 1.27
- */
-$wgDataCenterRoles = array( 'default' => 'master' );
-
 /**
  * After a state-changing request is done by a client, this determines
  * how many seconds that client should keep using the master datacenter.
@@ -2164,7 +2146,7 @@ $wgMessageCacheType = CACHE_ANYTHING;
 $wgParserCacheType = CACHE_ANYTHING;
 
 /**
- * The cache type for storing session data.
+ * The cache type for storing session data. Used if $wgSessionsInObjectCache is true.
  *
  * For available types see $wgMainCacheType.
  */
@@ -2299,29 +2281,30 @@ $wgParserCacheExpireTime = 86400;
  *
  * @deprecated since 1.20; Use $wgSessionsInObjectCache
  */
-$wgSessionsInMemcached = true;
+$wgSessionsInMemcached = false;
 
 /**
- * @deprecated since 1.27, session data is always stored in object cache.
+ * Store sessions in an object cache, configured by $wgSessionCacheType. This
+ * can be useful to improve performance, or to avoid the locking behavior of
+ * PHP's default session handler, which tends to prevent multiple requests for
+ * the same user from acting concurrently.
  */
-$wgSessionsInObjectCache = true;
+$wgSessionsInObjectCache = false;
 
 /**
- * The expiry time to use for session storage, in seconds.
+ * The expiry time to use for session storage when $wgSessionsInObjectCache is
+ * enabled, in seconds.
  */
 $wgObjectCacheSessionExpiry = 3600;
 
 /**
- * @deprecated since 1.27, MediaWiki\\Session\\SessionManager doesn't use PHP session storage.
+ * This is used for setting php's session.save_handler. In practice, you will
+ * almost never need to change this ever. Other options might be 'user' or
+ * 'session_mysql.' Setting to null skips setting this entirely (which might be
+ * useful if you're doing cross-application sessions, see bug 11381)
  */
 $wgSessionHandler = null;
 
-/**
- * Whether to use PHP session handling ($_SESSION and session_*() functions)
- * @var string 'enable', 'warn', or 'disable'
- */
-$wgPHPSessionHandling = 'enable';
-
 /**
  * If enabled, will send MemCached debugging information to $wgDebugLogFile
  */
@@ -2720,7 +2703,7 @@ $wgUsePrivateIPs = false;
  */
 
 /**
- * Site language code. See languages/Names.php for languages supported by
+ * Site language code. See languages/data/Names.php for languages supported by
  * MediaWiki out of the box. Not all languages listed there have translations,
  * see languages/messages/ for the list of languages with some localisation.
  *
@@ -4650,30 +4633,6 @@ $wgUserrightsInterwikiDelimiter = '@';
  */
 $wgSecureLogin = false;
 
-/**
- * MediaWiki\Session\SessionProvider configuration.
- *
- * Value is an array of ObjectFactory specifications for the SessionProviders
- * to be used. Keys in the array are ignored. Order is not significant.
- *
- * @since 1.27
- */
-$wgSessionProviders = array(
-       'MediaWiki\\Session\\CookieSessionProvider' => array(
-               'class' => 'MediaWiki\\Session\\CookieSessionProvider',
-               'args' => array( array(
-                       'priority' => 30,
-                       'callUserSetCookiesHook' => true,
-               ) ),
-       ),
-       'MediaWiki\\Session\\BotPasswordSessionProvider' => array(
-               'class' => 'MediaWiki\\Session\\BotPasswordSessionProvider',
-               'args' => array( array(
-                       'priority' => 40,
-               ) ),
-       ),
-);
-
 /** @} */ # end user accounts }
 
 /************************************************************************//**
@@ -5510,29 +5469,6 @@ $wgGrantPermissionGroups = array(
        'highvolume'          => 'high-volume',
 );
 
-/**
- * @var bool Whether to enable bot passwords
- * @since 1.27
- */
-$wgEnableBotPasswords = true;
-
-/**
- * Cluster for the bot_passwords table
- * @var string|bool If false, the normal cluster will be used
- * @since 1.27
- */
-$wgBotPasswordsCluster = false;
-
-/**
- * Database name for the bot_passwords table
- *
- * To use a database with a table prefix, set this variable to
- * "{$database}-{$prefix}".
- * @var string|bool If false, the normal database will be used
- * @since 1.27
- */
-$wgBotPasswordsDatabase = false;
-
 /** @} */ # end of user rights settings
 
 /************************************************************************//**
@@ -7684,7 +7620,6 @@ $wgHTTPConnectTimeout = 5e0;
 
 /************************************************************************//**
  * @name   Job queue
- * See also $wgEnotifUseJobQ.
  * @{
  */
 
index 4c149ae..dda1358 100644 (file)
@@ -61,10 +61,6 @@ class DerivativeRequest extends FauxRequest {
                return $this->base->getAllHeaders();
        }
 
-       public function getSession() {
-               return $this->base->getSession();
-       }
-
        public function getSessionData( $key ) {
                return $this->base->getSessionData( $key );
        }
index 47912cb..277a6cc 100644 (file)
@@ -3457,6 +3457,9 @@ HTML
                global $wgOut;
 
                if ( Hooks::run( 'EditPageBeforeConflictDiff', array( &$this, &$wgOut ) ) ) {
+                       $stats = $wgOut->getContext()->getStats();
+                       $stats->increment( 'edit.failures.conflict' );
+
                        $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
 
                        $content1 = $this->toEditContent( $this->textbox1 );
index f049d2e..888f853 100644 (file)
@@ -23,8 +23,6 @@
  * @file
  */
 
-use MediaWiki\Session\SessionManager;
-
 /**
  * WebRequest clone which takes values from a provided array.
  *
@@ -32,6 +30,7 @@ use MediaWiki\Session\SessionManager;
  */
 class FauxRequest extends WebRequest {
        private $wasPosted = false;
+       private $session = array();
        private $requestUrl;
        protected $cookies = array();
 
@@ -39,8 +38,7 @@ class FauxRequest extends WebRequest {
         * @param array $data Array of *non*-urlencoded key => value pairs, the
         *   fake GET/POST values
         * @param bool $wasPosted Whether to treat the data as POST
-        * @param MediaWiki\\Session\\Session|array|null $session Session, session
-        *  data array, or null
+        * @param array|null $session Session array or null
         * @param string $protocol 'http' or 'https'
         * @throws MWException
         */
@@ -55,16 +53,8 @@ class FauxRequest extends WebRequest {
                        throw new MWException( "FauxRequest() got bogus data" );
                }
                $this->wasPosted = $wasPosted;
-               if ( $session instanceof MediaWiki\Session\Session ) {
-                       $this->sessionId = $session->getSessionId();
-               } elseif ( is_array( $session ) ) {
-                       $mwsession = SessionManager::singleton()->getEmptySession( $this );
-                       $this->sessionId = $mwsession->getSessionId();
-                       foreach ( $session as $key => $value ) {
-                               $mwsession->set( $key, $value );
-                       }
-               } elseif ( $session !== null ) {
-                       throw new MWException( "FauxRequest() got bogus session" );
+               if ( $session ) {
+                       $this->session = $session;
                }
                $this->protocol = $protocol;
        }
@@ -150,6 +140,10 @@ class FauxRequest extends WebRequest {
                }
        }
 
+       public function checkSessionCookie() {
+               return false;
+       }
+
        /**
         * @since 1.25
         */
@@ -192,15 +186,31 @@ class FauxRequest extends WebRequest {
        }
 
        /**
+        * @param string $key
         * @return array|null
         */
-       public function getSessionArray() {
-               if ( $this->sessionId !== null ) {
-                       return iterator_to_array( $this->getSession() );
+       public function getSessionData( $key ) {
+               if ( isset( $this->session[$key] ) ) {
+                       return $this->session[$key];
                }
                return null;
        }
 
+       /**
+        * @param string $key
+        * @param array $data
+        */
+       public function setSessionData( $key, $data ) {
+               $this->session[$key] = $data;
+       }
+
+       /**
+        * @return array|mixed|null
+        */
+       public function getSessionArray() {
+               return $this->session;
+       }
+
        /**
         * FauxRequests shouldn't depend on raw request data (but that could be implemented here)
         * @return string
index 4d0ebf6..1f9d14e 100644 (file)
@@ -26,7 +26,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 
 use Liuggio\StatsdClient\Sender\SocketSender;
 use MediaWiki\Logger\LoggerFactory;
-use MediaWiki\Session\SessionManager;
 
 // Hide compatibility functions from Doxygen
 /// @cond
@@ -1475,7 +1474,7 @@ function wfMsgReplaceArgs( $message, $args ) {
        $message = str_replace( "\r", '', $message );
 
        // Replace arguments
-       if ( count( $args ) ) {
+       if ( is_array( $args ) && $args ) {
                if ( is_array( $args[0] ) ) {
                        $args = array_values( $args[0] );
                }
@@ -3011,12 +3010,9 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1,
 /**
  * Check if there is sufficient entropy in php's built-in session generation
  *
- * @deprecated since 1.27, PHP's session generation isn't used with
- *  MediaWiki\\Session\\SessionManager
  * @return bool True = there is sufficient entropy
  */
 function wfCheckEntropy() {
-       wfDeprecated( __FUNCTION__, '1.27' );
        return (
                        ( wfIsWindows() && version_compare( PHP_VERSION, '5.3.3', '>=' ) )
                        || ini_get( 'session.entropy_file' )
@@ -3025,65 +3021,83 @@ function wfCheckEntropy() {
 }
 
 /**
- * @deprecated since 1.27, PHP's session generation isn't used with
- *  MediaWiki\\Session\\SessionManager
+ * Override session_id before session startup if php's built-in
+ * session generation code is not secure.
  */
 function wfFixSessionID() {
-       wfDeprecated( __FUNCTION__, '1.27' );
+       // If the cookie or session id is already set we already have a session and should abort
+       if ( isset( $_COOKIE[session_name()] ) || session_id() ) {
+               return;
+       }
+
+       // PHP's built-in session entropy is enabled if:
+       // - entropy_file is set or you're on Windows with php 5.3.3+
+       // - AND entropy_length is > 0
+       // We treat it as disabled if it doesn't have an entropy length of at least 32
+       $entropyEnabled = wfCheckEntropy();
+
+       // If built-in entropy is not enabled or not sufficient override PHP's
+       // built in session id generation code
+       if ( !$entropyEnabled ) {
+               wfDebug( __METHOD__ . ": PHP's built in entropy is disabled or not sufficient, " .
+                       "overriding session id generation using our cryptrand source.\n" );
+               session_id( MWCryptRand::generateHex( 32 ) );
+       }
 }
 
 /**
- * Reset the session id
+ * Reset the session_id
  *
- * @deprecated since 1.27, use MediaWiki\\Session\\SessionManager instead
  * @since 1.22
  */
 function wfResetSessionID() {
-       wfDeprecated( __FUNCTION__, '1.27' );
-       $session = SessionManager::getGlobalSession();
-       $delay = $session->delaySave();
-
-       $session->resetId();
-
-       // Make sure a session is started, since that's what the old
-       // wfResetSessionID() did.
-       if ( session_id() !== $session->getId() ) {
-               wfSetupSession( $session->getId() );
+       global $wgCookieSecure;
+       $oldSessionId = session_id();
+       $cookieParams = session_get_cookie_params();
+       if ( wfCheckEntropy() && $wgCookieSecure == $cookieParams['secure'] ) {
+               session_regenerate_id( false );
+       } else {
+               $tmp = $_SESSION;
+               session_destroy();
+               wfSetupSession( MWCryptRand::generateHex( 32 ) );
+               $_SESSION = $tmp;
        }
-
-       ScopedCallback::consume( $delay );
+       $newSessionId = session_id();
 }
 
 /**
  * Initialise php session
  *
- * @deprecated since 1.27, use MediaWiki\\Session\\SessionManager instead.
- *  Generally, "using" SessionManager will be calling ->getSessionById() or
- *  ::getGlobalSession() (depending on whether you were passing $sessionId
- *  here), then calling $session->persist().
- * @param bool|string $sessionId
+ * @param bool $sessionId
  */
 function wfSetupSession( $sessionId = false ) {
-       wfDeprecated( __FUNCTION__, '1.27' );
+       global $wgSessionsInObjectCache, $wgSessionHandler;
+       global $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly;
 
-       // If they're calling this, they probably want our session management even
-       // if NO_SESSION was set for Setup.php.
-       if ( !MediaWiki\Session\PHPSessionHandler::isInstalled() ) {
-               MediaWiki\Session\PHPSessionHandler::install( SessionManager::singleton() );
+       if ( $wgSessionsInObjectCache ) {
+               ObjectCacheSessionHandler::install();
+       } elseif ( $wgSessionHandler && $wgSessionHandler != ini_get( 'session.save_handler' ) ) {
+               # Only set this if $wgSessionHandler isn't null and session.save_handler
+               # hasn't already been set to the desired value (that causes errors)
+               ini_set( 'session.save_handler', $wgSessionHandler );
        }
 
+       session_set_cookie_params(
+               0, $wgCookiePath, $wgCookieDomain, $wgCookieSecure, $wgCookieHttpOnly );
+       session_cache_limiter( 'private, must-revalidate' );
        if ( $sessionId ) {
                session_id( $sessionId );
+       } else {
+               wfFixSessionID();
        }
 
-       $session = SessionManager::getGlobalSession();
-       $session->persist();
+       MediaWiki\suppressWarnings();
+       session_start();
+       MediaWiki\restoreWarnings();
 
-       if ( session_id() !== $session->getId() ) {
-               session_id( $session->getId() );
+       if ( $wgSessionsInObjectCache ) {
+               ObjectCacheSessionHandler::renewCurrentSession();
        }
-       MediaWiki\quietCall( 'session_cache_limiter', 'private, must-revalidate' );
-       MediaWiki\quietCall( 'session_start' );
 }
 
 /**
index 3ba472b..4b9b963 100644 (file)
@@ -2013,7 +2013,7 @@ class Linker {
         * directly paste it in as the link (escaping needs to be done manually).
         * Finally, if $more is a Message, call toString().
         *
-        * @param array $templates Array of templates from Article::getUsedTemplate or similar
+        * @param Title[] $templates Array of templates
         * @param bool $preview Whether this is for a preview
         * @param bool $section Whether this is for a section edit
         * @param Title|Message|string|null $more An escaped link for "More..." of the templates
index 6342d71..7846ca4 100644 (file)
@@ -551,21 +551,12 @@ class MediaWiki {
                $config = $context->getConfig();
 
                $factory = wfGetLBFactory();
-               // Check if any transaction was too big
-               $limit = $config->get( 'MaxUserDBWriteDuration' );
-               $factory->forEachLB( function ( LoadBalancer $lb ) use ( $limit ) {
-                       $lb->forEachOpenConnection( function ( IDatabase $db ) use ( $limit ) {
-                               $time = $db->pendingWriteQueryDuration();
-                               if ( $limit > 0 && $time > $limit ) {
-                                       throw new DBTransactionError(
-                                               $db,
-                                               wfMessage( 'transaction-duration-limit-exceeded', $time, $limit )->text()
-                                       );
-                               }
-                       } );
-               } );
                // Commit all changes
-               $factory->commitMasterChanges( __METHOD__ );
+               $factory->commitMasterChanges(
+                       __METHOD__,
+                       // Abort if any transaction was too big
+                       array( 'maxWriteDuration' => $config->get( 'MaxUserDBWriteDuration' ) )
+               );
                // Record ChronologyProtector positions
                $factory->shutdown();
                wfDebug( __METHOD__ . ': all transactions committed' );
@@ -680,10 +671,8 @@ class MediaWiki {
                if (
                        $request->getProtocol() == 'http' &&
                        (
-                               $request->getSession()->shouldForceHTTPS() ||
-                               // Check the cookie manually, for paranoia
                                $request->getCookie( 'forceHTTPS', '' ) ||
-                               // check for prefixed version that was used for a time in older MW versions
+                               // check for prefixed version for currently logged in users
                                $request->getCookie( 'forceHTTPS' ) ||
                                // Avoid checking the user and groups unless it's enabled.
                                (
index 93ba702..97165b4 100644 (file)
@@ -21,7 +21,6 @@
  */
 
 use MediaWiki\Logger\LoggerFactory;
-use MediaWiki\Session\SessionManager;
 use WrappedString\WrappedString;
 
 /**
@@ -1978,9 +1977,11 @@ class OutputPage extends ContextSource {
                if ( $cookies === null ) {
                        $config = $this->getConfig();
                        $cookies = array_merge(
-                               SessionManager::singleton()->getVaryCookies(),
                                array(
-                                       'forceHTTPS',
+                                       $config->get( 'CookiePrefix' ) . 'Token',
+                                       $config->get( 'CookiePrefix' ) . 'LoggedOut',
+                                       "forceHTTPS",
+                                       session_name()
                                ),
                                $config->get( 'CacheVaryCookies' )
                        );
@@ -2032,9 +2033,6 @@ class OutputPage extends ContextSource {
         * @return string
         */
        public function getVaryHeader() {
-               foreach ( SessionManager::singleton()->getVaryHeaders() as $header => $options ) {
-                       $this->addVaryHeader( $header, $options );
-               }
                return 'Vary: ' . join( ', ', array_keys( $this->mVaryHeader ) );
        }
 
@@ -2052,10 +2050,6 @@ class OutputPage extends ContextSource {
                }
                $this->addVaryHeader( 'Cookie', $cookiesOption );
 
-               foreach ( SessionManager::singleton()->getVaryHeaders() as $header => $options ) {
-                       $this->addVaryHeader( $header, $options );
-               }
-
                $headers = array();
                foreach ( $this->mVaryHeader as $header => $option ) {
                        $newheader = $header;
@@ -2179,8 +2173,8 @@ class OutputPage extends ContextSource {
 
                if ( $this->mEnableClientCache ) {
                        if (
-                               $config->get( 'UseSquid' ) && !SessionManager::getGlobalSession()->isPersistent() &&
-                               !$this->isPrintable() && $this->mCdnMaxage != 0 && !$this->haveCacheVaryCookies()
+                               $config->get( 'UseSquid' ) && session_id() == '' && !$this->isPrintable() &&
+                               $this->mCdnMaxage != 0 && !$this->haveCacheVaryCookies()
                        ) {
                                if ( $config->get( 'UseESI' ) ) {
                                        # We'll purge the proxy cache explicitly, but require end user agents
index d41e559..60c9498 100644 (file)
@@ -721,7 +721,7 @@ class Sanitizer {
         * Take an array of attribute names and values and normalize or discard
         * illegal values for the given whitelist.
         *
-        * - Discards attributes not the given whitelist
+        * - Discards attributes not on the given whitelist
         * - Unsafe style attributes are discarded
         * - Invalid id attributes are re-encoded
         *
@@ -770,18 +770,18 @@ class Sanitizer {
                                $value = Sanitizer::checkCss( $value );
                        }
 
+                       # Escape HTML id attributes
                        if ( $attribute === 'id' ) {
                                $value = Sanitizer::escapeId( $value, 'noninitial' );
                        }
 
-                       # WAI-ARIA
-                       # http://www.w3.org/TR/wai-aria/
-                       # http://www.whatwg.org/html/elements.html#wai-aria
-                       # For now we only support role="presentation" until we work out what roles should be
-                       # usable by content and we ensure that our code explicitly rejects patterns that
-                       # violate HTML5's ARIA restrictions.
-                       if ( $attribute === 'role' && $value !== 'presentation' ) {
-                               continue;
+                       # Escape HTML id reference lists
+                       if ( $attribute === 'aria-describedby'
+                               || $attribute === 'aria-flowto'
+                               || $attribute === 'aria-labelledby'
+                               || $attribute === 'aria-owns'
+                       ) {
+                               $value = Sanitizer::escapeIdReferenceList( $value, 'noninitial' );
                        }
 
                        // RDFa and microdata properties allow URLs, URIs and/or CURIs.
@@ -1163,6 +1163,39 @@ class Sanitizer {
                return $id;
        }
 
+       /**
+        * Given a string containing a space delimited list of ids, escape each id
+        * to match ids escaped by the escapeId() function.
+        *
+        * @since 1.27
+        *
+        * @param string $referenceString Space delimited list of ids
+        * @param string|array $options String or array of strings (default is array()):
+        *   'noninitial': This is a non-initial fragment of an id, not a full id,
+        *       so don't pay attention if the first character isn't valid at the
+        *       beginning of an id.  Only matters if $wgExperimentalHtmlIds is
+        *       false.
+        *   'legacy': Behave the way the old HTML 4-based ID escaping worked even
+        *       if $wgExperimentalHtmlIds is used, so we can generate extra
+        *       anchors and links won't break.
+        * @return string
+        */
+       static function escapeIdReferenceList( $referenceString, $options = array() ) {
+               # Explode the space delimited list string into an array of tokens
+               $references = preg_split( '/\s+/', "{$referenceString}", -1, PREG_SPLIT_NO_EMPTY );
+
+               # Escape each token as an id
+               foreach ( $references as &$ref ) {
+                       $ref = Sanitizer::escapeId( $ref, $options );
+               }
+
+               # Merge the array back to a space delimited list string
+               # If the array is empty, the result will be an empty string ('')
+               $referenceString = implode( ' ', $references );
+
+               return $referenceString;
+       }
+
        /**
         * Given a value, escape it so that it can be used as a CSS class and
         * return it.
@@ -1208,7 +1241,7 @@ class Sanitizer {
 
        /**
         * Return an associative array of attribute names and values from
-        * a partial tag string. Attribute names are forces to lowercase,
+        * a partial tag string. Attribute names are forced to lowercase,
         * character references are decoded to UTF-8 text.
         *
         * @param string $text
@@ -1546,6 +1579,11 @@ class Sanitizer {
                        'title',
 
                        # WAI-ARIA
+                       'aria-describedby',
+                       'aria-flowto',
+                       'aria-label',
+                       'aria-labelledby',
+                       'aria-owns',
                        'role',
                );
 
index 9bf05e0..06962c1 100644 (file)
@@ -357,7 +357,6 @@ if ( $wgEnableEmail ) {
        $wgEnotifMaxRecips = 0;
        $wgEnotifMinorEdits = false;
        $wgEnotifRevealEditorAddress = false;
-       $wgEnotifUseJobQ = false;
        $wgEnotifUseRealName = false;
        $wgEnotifUserTalk = false;
        $wgEnotifWatchlist = false;
@@ -497,25 +496,10 @@ if ( $wgMaximalPasswordLength !== false ) {
        $wgPasswordPolicy['policies']['default']['MaximalPasswordLength'] = $wgMaximalPasswordLength;
 }
 
-// Backwards compatibility warning
-if ( !$wgSessionsInObjectCache && !$wgSessionsInMemcached ) {
-       wfDeprecated( '$wgSessionsInObjectCache = false', '1.27' );
-       if ( $wgSessionHandler ) {
-               wfDeprecated( '$wgSessionsHandler', '1.27' );
-       }
-       $cacheType = get_class( ObjectCache::getInstance( $wgSessionCacheType ) );
-       wfDebugLog(
-               "Session data will be stored in \"$cacheType\" cache with " .
-                       "expiry $wgObjectCacheSessionExpiry seconds"
-       );
-}
-$wgSessionsInObjectCache = true;
-
-if ( $wgPHPSessionHandling !== 'enable' &&
-       $wgPHPSessionHandling !== 'warn' &&
-       $wgPHPSessionHandling !== 'disable'
-) {
-       $wgPHPSessionHandling = 'warn';
+// Backwards compatibility with deprecated alias
+// Must be before call to wfSetupSession()
+if ( $wgSessionsInMemcached ) {
+       $wgSessionsInObjectCache = true;
 }
 
 Profiler::instance()->scopedProfileOut( $ps_default );
@@ -672,6 +656,20 @@ Profiler::instance()->scopedProfileOut( $ps_memcached );
 // Most of the config is out, some might want to run hooks here.
 Hooks::run( 'SetupAfterCache' );
 
+$ps_session = Profiler::instance()->scopedProfileIn( $fname . '-session' );
+
+if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
+       // If session.auto_start is there, we can't touch session name
+       if ( !wfIniGetBool( 'session.auto_start' ) ) {
+               session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' );
+       }
+
+       if ( $wgRequest->checkSessionCookie() || isset( $_COOKIE[$wgCookiePrefix . 'Token'] ) ) {
+               wfSetupSession();
+       }
+}
+
+Profiler::instance()->scopedProfileOut( $ps_session );
 $ps_globals = Profiler::instance()->scopedProfileIn( $fname . '-globals' );
 
 /**
@@ -684,66 +682,6 @@ $wgContLang->initContLang();
 // Now that variant lists may be available...
 $wgRequest->interpolateTitle();
 
-if ( !is_object( $wgAuth ) ) {
-       $wgAuth = new AuthPlugin;
-       Hooks::run( 'AuthPluginSetup', array( &$wgAuth ) );
-}
-
-// Set up the session
-$ps_session = Profiler::instance()->scopedProfileIn( $fname . '-session' );
-/**
- * @var MediaWiki\\Session\\SessionId|null $wgInitialSessionId The persistent
- * session ID (if any) loaded at startup
- */
-$wgInitialSessionId = null;
-if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
-       // If session.auto_start is there, we can't touch session name
-       if ( $wgPHPSessionHandling !== 'disable' && !wfIniGetBool( 'session.auto_start' ) ) {
-               session_name( $wgSessionName ? $wgSessionName : $wgCookiePrefix . '_session' );
-       }
-
-       // Create the SessionManager singleton and set up our session handler
-       MediaWiki\Session\PHPSessionHandler::install(
-               MediaWiki\Session\SessionManager::singleton()
-       );
-
-       // Initialize the session
-       try {
-               $session = MediaWiki\Session\SessionManager::getGlobalSession();
-       } catch ( OverflowException $ex ) {
-               if ( isset( $ex->sessionInfos ) && count( $ex->sessionInfos ) >= 2 ) {
-                       // The exception is because the request had multiple possible
-                       // sessions tied for top priority. Report this to the user.
-                       $list = array();
-                       foreach ( $ex->sessionInfos as $info ) {
-                               $list[] = $info->getProvider()->describe( $wgContLang );
-                       }
-                       $list = $wgContLang->listToText( $list );
-                       throw new HttpError( 400,
-                               Message::newFromKey( 'sessionmanager-tie', $list )->inLanguage( $wgContLang )->plain()
-                       );
-               }
-
-               // Not the one we want, rethrow
-               throw $ex;
-       }
-
-       if ( $session->isPersistent() ) {
-               $wgInitialSessionId = $session->getSessionId();
-       }
-
-       $session->renew();
-       if ( MediaWiki\Session\PHPSessionHandler::isEnabled() &&
-               ( $session->isPersistent() || $session->shouldRememberUser() )
-       ) {
-               // Start the PHP-session for backwards compatibility
-               session_id( $session->getId() );
-               MediaWiki\quietCall( 'session_cache_limiter', 'private, must-revalidate' );
-               MediaWiki\quietCall( 'session_start' );
-       }
-}
-Profiler::instance()->scopedProfileOut( $ps_session );
-
 /**
  * @var User $wgUser
  */
@@ -764,6 +702,11 @@ $wgOut = RequestContext::getMain()->getOutput(); // BackCompat
  */
 $wgParser = new StubObject( 'wgParser', $wgParserConf['class'], array( $wgParserConf ) );
 
+if ( !is_object( $wgAuth ) ) {
+       $wgAuth = new AuthPlugin;
+       Hooks::run( 'AuthPluginSetup', array( &$wgAuth ) );
+}
+
 /**
  * @var Title $wgTitle
  */
@@ -795,16 +738,6 @@ foreach ( $wgExtensionFunctions as $func ) {
        Profiler::instance()->scopedProfileOut( $ps_ext_func );
 }
 
-// If the session user has a 0 id but a valid name, that means we need to
-// autocreate it.
-$sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
-if ( $sessionUser->getId() === 0 && User::isValidUserName( $sessionUser->getName() ) ) {
-       $ps_autocreate = Profiler::instance()->scopedProfileIn( $fname . '-autocreate' );
-       MediaWiki\Session\SessionManager::autoCreateUser( $sessionUser );
-       Profiler::instance()->scopedProfileOut( $ps_autocreate );
-}
-unset( $sessionUser );
-
 wfDebug( "Fully initialised\n" );
 $wgFullyInitialised = true;
 
index e549037..882b7dd 100644 (file)
@@ -246,7 +246,7 @@ class Title {
         * Create a new Title from text, such as what one would find in a link. De-
         * codes any HTML entities in the text.
         *
-        * @param string|null $text The link text; spaces, prefixes, and an
+        * @param string|int|null $text The link text; spaces, prefixes, and an
         *   initial ':' indicating the main namespace are accepted.
         * @param int $defaultNamespace The namespace to use if none is specified
         *   by a prefix.  If you want to force a specific namespace even if
@@ -259,7 +259,8 @@ class Title {
                if ( is_object( $text ) ) {
                        throw new InvalidArgumentException( '$text must be a string.' );
                }
-               if ( $text !== null && !is_string( $text ) ) {
+               // DWIM: Integers can be passed in here when page titles are used as array keys.
+               if ( $text !== null && !is_string( $text ) && !is_int( $text ) ) {
                        wfDebugLog( 'T76305', wfGetAllCallers( 5 ) );
                        return null;
                }
@@ -268,7 +269,7 @@ class Title {
                }
 
                try {
-                       return Title::newFromTextThrow( $text, $defaultNamespace );
+                       return Title::newFromTextThrow( strval( $text ), $defaultNamespace );
                } catch ( MalformedTitleException $ex ) {
                        return null;
                }
index 0ef2373..49aca0c 100644 (file)
  */
 class WatchedItem {
        /** @var Title */
-       public $mTitle;
+       private $mTitle;
 
        /** @var User */
-       public $mUser;
+       private $mUser;
 
        /** @var int */
-       public $mCheckRights;
+       private $mCheckRights;
 
        /** @var bool */
        private $loaded = false;
@@ -59,17 +59,6 @@ class WatchedItem {
         */
        const CHECK_USER_RIGHTS = 1;
 
-       /**
-        * Do DB master updates right now
-        * @since 1.26
-        */
-       const IMMEDIATE = 0;
-       /**
-        * Do DB master updates via the job queue
-        * @since 1.26
-        */
-       const DEFERRED = 1;
-
        /**
         * Create a WatchedItem object with the given user and title
         * @since 1.22 $checkRights parameter added
@@ -219,10 +208,9 @@ class WatchedItem {
         * @param bool $force Whether to force the write query to be executed even if the
         *    page is not watched or the notification timestamp is already NULL.
         * @param int $oldid The revision id being viewed. If not given or 0, latest revision is assumed.
-        * @mode int $mode WatchedItem::DEFERRED/IMMEDIATE
         */
        public function resetNotificationTimestamp(
-               $force = '', $oldid = 0, $mode = self::IMMEDIATE
+               $force = '', $oldid = 0
        ) {
                // Only loggedin user can have a watchlist
                if ( wfReadOnly() || $this->mUser->isAnon() || !$this->isAllowed( 'editmywatchlist' ) ) {
@@ -273,28 +261,19 @@ class WatchedItem {
                }
 
                // If the page is watched by the user (or may be watched), update the timestamp
-               if ( $mode === self::DEFERRED ) {
-                       $job = new ActivityUpdateJob(
-                               $title,
-                               array(
-                                       'type'      => 'updateWatchlistNotification',
-                                       'userid'    => $this->getUserId(),
-                                       'notifTime' => $notificationTimestamp,
-                                       'curTime'   => time()
-                               )
-                       );
-                       // Try to run this post-send
-                       DeferredUpdates::addCallableUpdate( function() use ( $job ) {
-                               $job->run();
-                       } );
-               } else {
-                       $dbw = wfGetDB( DB_MASTER );
-                       $dbw->update( 'watchlist',
-                               array( 'wl_notificationtimestamp' => $dbw->timestampOrNull( $notificationTimestamp ) ),
-                               $this->dbCond(),
-                               __METHOD__
-                       );
-               }
+               $job = new ActivityUpdateJob(
+                       $title,
+                       array(
+                               'type'      => 'updateWatchlistNotification',
+                               'userid'    => $this->getUserId(),
+                               'notifTime' => $notificationTimestamp,
+                               'curTime'   => time()
+                       )
+               );
+               // Try to run this post-send
+               DeferredUpdates::addCallableUpdate( function() use ( $job ) {
+                       $job->run();
+               } );
 
                $this->timestamp = null;
        }
index 4c4ca97..7b76592 100644 (file)
@@ -23,8 +23,6 @@
  * @file
  */
 
-use MediaWiki\Session\SessionManager;
-
 /**
  * The WebRequest class encapsulates getting at data passed in the
  * URL or via a POSTed form stripping illegal input characters and
@@ -65,13 +63,6 @@ class WebRequest {
         */
        protected $protocol;
 
-       /**
-        * @var \\MediaWiki\\Session\\SessionId|null Session ID to use for this
-        *  request. We can't save the session directly due to reference cycles not
-        *  working too well (slow GC in Zend and never collected in HHVM).
-        */
-       protected $sessionId = null;
-
        public function __construct() {
                $this->requestTime = isset( $_SERVER['REQUEST_TIME_FLOAT'] )
                        ? $_SERVER['REQUEST_TIME_FLOAT'] : microtime( true );
@@ -647,49 +638,18 @@ class WebRequest {
        }
 
        /**
-        * Return the session for this request
-        * @since 1.27
-        * @note For performance, keep the session locally if you will be making
-        *  much use of it instead of calling this method repeatedly.
-        * @return MediaWiki\\Session\\Session
-        */
-       public function getSession() {
-               if ( $this->sessionId !== null ) {
-                       $session = SessionManager::singleton()->getSessionById( (string)$this->sessionId, true, $this );
-                       if ( $session ) {
-                               return $session;
-                       }
-               }
-
-               $session = SessionManager::singleton()->getSessionForRequest( $this );
-               $this->sessionId = $session->getSessionId();
-               return $session;
-       }
-
-       /**
-        * Set the session for this request
-        * @since 1.27
-        * @private For use by MediaWiki\\Session classes only
-        * @param MediaWiki\\Session\\SessionId $sessionId
-        */
-       public function setSessionId( MediaWiki\Session\SessionId $sessionId ) {
-               $this->sessionId = $sessionId;
-       }
-
-       /**
-        * Returns true if the request has a persistent session.
+        * Returns true if there is a session cookie set.
         * This does not necessarily mean that the user is logged in!
         *
-        * @deprecated since 1.27, use
-        *  \\MediaWiki\\Session\\SessionManager::singleton()->getPersistedSessionId()
-        *  instead.
+        * If you want to check for an open session, use session_id()
+        * instead; that will also tell you if the session was opened
+        * during the current request (in which case the cookie will
+        * be sent back to the client at the end of the script run).
+        *
         * @return bool
         */
        public function checkSessionCookie() {
-               global $wgInitialSessionId;
-               wfDeprecated( __METHOD__, '1.27' );
-               return $wgInitialSessionId !== null &&
-                       $this->getSession()->getId() === (string)$wgInitialSessionId;
+               return isset( $_COOKIE[session_name()] );
        }
 
        /**
@@ -947,25 +907,26 @@ class WebRequest {
        }
 
        /**
-        * Get data from the session
+        * Get data from $_SESSION
         *
-        * @note Prefer $this->getSession() instead if making multiple calls.
-        * @param string $key Name of key in the session
+        * @param string $key Name of key in $_SESSION
         * @return mixed
         */
        public function getSessionData( $key ) {
-               return $this->getSession()->get( $key );
+               if ( !isset( $_SESSION[$key] ) ) {
+                       return null;
+               }
+               return $_SESSION[$key];
        }
 
        /**
         * Set session data
         *
-        * @note Prefer $this->getSession() instead if making multiple calls.
-        * @param string $key Name of key in the session
+        * @param string $key Name of key in $_SESSION
         * @param mixed $data
         */
        public function setSessionData( $key, $data ) {
-               return $this->getSession()->set( $key, $data );
+               $_SESSION[$key] = $data;
        }
 
        /**
diff --git a/includes/ZhConversion.php b/includes/ZhConversion.php
deleted file mode 100644 (file)
index 6c768ff..0000000
+++ /dev/null
@@ -1,20277 +0,0 @@
-<?php
-/**
- * Simplified / Traditional Chinese conversion tables
- *
- * Automatically generated using code and data in maintenance/language/zhtable/
- * Do not modify directly!
- *
- * @file
- */
-
-$zh2Hant = array(
-'㐷' => '傌',
-'㐹' => '㑶',
-'㐽' => '偑',
-'㑇' => '㑳',
-'㑈' => '倲',
-'㑔' => '㑯',
-'㑩' => '儸',
-'㓥' => '劏',
-'㔉' => '劚',
-'㖊' => '噚',
-'㖞' => '喎',
-'㘎' => '㘚',
-'㚯' => '㜄',
-'㛀' => '媰',
-'㛟' => '𡞵',
-'㛠' => '𡢃',
-'㛣' => '㜏',
-'㛤' => '孋',
-'㛿' => '𡠹',
-'㟆' => '㠏',
-'㟜' => '𡾱',
-'㤘' => '㥮',
-'㧏' => '掆',
-'㧐' => '㩳',
-'㧑' => '撝',
-'㧟' => '擓',
-'㧰' => '擽',
-'㨫' => '㩜',
-'㭎' => '棡',
-'㭏' => '椲',
-'㭣' => '𣙎',
-'㭤' => '樢',
-'㭴' => '樫',
-'㱩' => '殰',
-'㱮' => '殨',
-'㲿' => '瀇',
-'㳔' => '濧',
-'㳠' => '澾',
-'㳡' => '濄',
-'㳢' => '𣾷',
-'㳽' => '瀰',
-'㶉' => '鸂',
-'㶶' => '燶',
-'㶽' => '煱',
-'㺍' => '獱',
-'㻅' => '璯',
-'㻏' => '𤫩',
-'㻘' => '𤪺',
-'䀥' => '䁻',
-'䁖' => '瞜',
-'䂵' => '碽',
-'䅉' => '稏',
-'䅪' => '𥢢',
-'䇲' => '筴',
-'䉤' => '籔',
-'䌶' => '䊷',
-'䌷' => '紬',
-'䌸' => '縳',
-'䌹' => '絅',
-'䌺' => '䋙',
-'䌻' => '䋚',
-'䌼' => '綐',
-'䌽' => '綵',
-'䌾' => '䋻',
-'䌿' => '䋹',
-'䍀' => '繿',
-'䍁' => '繸',
-'䎬' => '䎱',
-'䏝' => '膞',
-'䓖' => '藭',
-'䗖' => '螮',
-'䘛' => '𧝞',
-'䘞' => '𧜗',
-'䙊' => '𧜵',
-'䙌' => '䙡',
-'䙓' => '襬',
-'䜣' => '訢',
-'䜥' => '𧩙',
-'䜧' => '䜀',
-'䜩' => '讌',
-'䝙' => '貙',
-'䞌' => '𧵳',
-'䞍' => '䝼',
-'䞎' => '𧶧',
-'䞐' => '賰',
-'䟢' => '躎',
-'䢀' => '𨊰',
-'䢁' => '𨊸',
-'䢂' => '𨋢',
-'䥺' => '釾',
-'䥽' => '鏺',
-'䥾' => '䥱',
-'䥿' => '𨯅',
-'䦀' => '𨦫',
-'䦁' => '𨧜',
-'䦂' => '䥇',
-'䦃' => '鐯',
-'䦅' => '鐥',
-'䦶' => '䦛',
-'䦷' => '䦟',
-'䭪' => '𩞯',
-'䯃' => '𩣑',
-'䯄' => '騧',
-'䯅' => '䯀',
-'䲝' => '䱽',
-'䲞' => '𩶘',
-'䲟' => '鮣',
-'䲠' => '鰆',
-'䲡' => '鰌',
-'䲢' => '鰧',
-'䲣' => '䱷',
-'䴓' => '鳾',
-'䴔' => '鵁',
-'䴕' => '鴷',
-'䴖' => '鶄',
-'䴗' => '鶪',
-'䴘' => '鷈',
-'䴙' => '鷿',
-'䶮' => '龑',
-'万' => '萬',
-'与' => '與',
-'专' => '專',
-'业' => '業',
-'丛' => '叢',
-'东' => '東',
-'丝' => '絲',
-'丢' => '丟',
-'两' => '兩',
-'严' => '嚴',
-'丧' => '喪',
-'个' => '個',
-'丰' => '豐',
-'临' => '臨',
-'为' => '為',
-'丽' => '麗',
-'举' => '舉',
-'么' => '麼',
-'义' => '義',
-'乌' => '烏',
-'乐' => '樂',
-'乔' => '喬',
-'习' => '習',
-'乡' => '鄉',
-'书' => '書',
-'买' => '買',
-'乱' => '亂',
-'争' => '爭',
-'于' => '於',
-'亏' => '虧',
-'云' => '雲',
-'亚' => '亞',
-'产' => '產',
-'亩' => '畝',
-'亲' => '親',
-'亵' => '褻',
-'亸' => '嚲',
-'亿' => '億',
-'仅' => '僅',
-'从' => '從',
-'仑' => '侖',
-'仓' => '倉',
-'仪' => '儀',
-'们' => '們',
-'价' => '價',
-'众' => '眾',
-'优' => '優',
-'会' => '會',
-'伛' => '傴',
-'伞' => '傘',
-'伟' => '偉',
-'传' => '傳',
-'伡' => '俥',
-'伣' => '俔',
-'伤' => '傷',
-'伥' => '倀',
-'伦' => '倫',
-'伧' => '傖',
-'伪' => '偽',
-'伫' => '佇',
-'体' => '體',
-'佣' => '傭',
-'佥' => '僉',
-'侠' => '俠',
-'侣' => '侶',
-'侥' => '僥',
-'侦' => '偵',
-'侧' => '側',
-'侨' => '僑',
-'侩' => '儈',
-'侪' => '儕',
-'侬' => '儂',
-'俣' => '俁',
-'俦' => '儔',
-'俨' => '儼',
-'俩' => '倆',
-'俪' => '儷',
-'俫' => '倈',
-'俭' => '儉',
-'债' => '債',
-'倾' => '傾',
-'偬' => '傯',
-'偻' => '僂',
-'偾' => '僨',
-'偿' => '償',
-'傥' => '儻',
-'傧' => '儐',
-'储' => '儲',
-'傩' => '儺',
-'儿' => '兒',
-'兑' => '兌',
-'兖' => '兗',
-'党' => '黨',
-'兰' => '蘭',
-'关' => '關',
-'兴' => '興',
-'兹' => '茲',
-'养' => '養',
-'兽' => '獸',
-'冁' => '囅',
-'内' => '內',
-'冈' => '岡',
-'册' => '冊',
-'写' => '寫',
-'军' => '軍',
-'农' => '農',
-'冯' => '馮',
-'冲' => '沖',
-'决' => '決',
-'况' => '況',
-'冻' => '凍',
-'净' => '淨',
-'凄' => '淒',
-'凉' => '涼',
-'减' => '減',
-'凑' => '湊',
-'凛' => '凜',
-'几' => '幾',
-'凤' => '鳳',
-'凫' => '鳧',
-'凭' => '憑',
-'凯' => '凱',
-'击' => '擊',
-'凿' => '鑿',
-'刍' => '芻',
-'划' => '劃',
-'刘' => '劉',
-'则' => '則',
-'刚' => '剛',
-'创' => '創',
-'删' => '刪',
-'别' => '別',
-'刬' => '剗',
-'刭' => '剄',
-'刹' => '剎',
-'刽' => '劊',
-'刾' => '㓨',
-'刿' => '劌',
-'剀' => '剴',
-'剂' => '劑',
-'剐' => '剮',
-'剑' => '劍',
-'剥' => '剝',
-'剧' => '劇',
-'劝' => '勸',
-'办' => '辦',
-'务' => '務',
-'劢' => '勱',
-'动' => '動',
-'励' => '勵',
-'劲' => '勁',
-'劳' => '勞',
-'势' => '勢',
-'勋' => '勛',
-'勚' => '勩',
-'匀' => '勻',
-'匦' => '匭',
-'匮' => '匱',
-'区' => '區',
-'医' => '醫',
-'华' => '華',
-'协' => '協',
-'单' => '單',
-'卖' => '賣',
-'卢' => '盧',
-'卤' => '鹵',
-'卧' => '臥',
-'卫' => '衛',
-'却' => '卻',
-'厂' => '廠',
-'厅' => '廳',
-'历' => '歷',
-'厉' => '厲',
-'压' => '壓',
-'厌' => '厭',
-'厍' => '厙',
-'厐' => '龎',
-'厕' => '廁',
-'厢' => '廂',
-'厣' => '厴',
-'厦' => '廈',
-'厨' => '廚',
-'厩' => '廄',
-'厮' => '廝',
-'县' => '縣',
-'叁' => '叄',
-'参' => '參',
-'叆' => '靉',
-'叇' => '靆',
-'双' => '雙',
-'发' => '發',
-'变' => '變',
-'叙' => '敘',
-'叠' => '疊',
-'叶' => '葉',
-'号' => '號',
-'叹' => '嘆',
-'叽' => '嘰',
-'后' => '後',
-'吓' => '嚇',
-'吕' => '呂',
-'吗' => '嗎',
-'吣' => '唚',
-'吨' => '噸',
-'听' => '聽',
-'启' => '啟',
-'吴' => '吳',
-'呐' => '吶',
-'呒' => '嘸',
-'呓' => '囈',
-'呕' => '嘔',
-'呖' => '嚦',
-'呗' => '唄',
-'员' => '員',
-'呙' => '咼',
-'呛' => '嗆',
-'呜' => '嗚',
-'咏' => '詠',
-'咙' => '嚨',
-'咛' => '嚀',
-'咝' => '噝',
-'响' => '響',
-'哑' => '啞',
-'哒' => '噠',
-'哓' => '嘵',
-'哔' => '嗶',
-'哕' => '噦',
-'哗' => '嘩',
-'哙' => '噲',
-'哜' => '嚌',
-'哝' => '噥',
-'哟' => '喲',
-'唛' => '嘜',
-'唝' => '嗊',
-'唠' => '嘮',
-'唡' => '啢',
-'唢' => '嗩',
-'唤' => '喚',
-'啧' => '嘖',
-'啬' => '嗇',
-'啭' => '囀',
-'啮' => '齧',
-'啯' => '嘓',
-'啰' => '囉',
-'啴' => '嘽',
-'啸' => '嘯',
-'喂' => '餵',
-'喷' => '噴',
-'喽' => '嘍',
-'喾' => '嚳',
-'嗫' => '囁',
-'嗳' => '噯',
-'嘘' => '噓',
-'嘤' => '嚶',
-'嘱' => '囑',
-'噜' => '嚕',
-'嚣' => '囂',
-'团' => '團',
-'园' => '園',
-'囱' => '囪',
-'围' => '圍',
-'囵' => '圇',
-'国' => '國',
-'图' => '圖',
-'圆' => '圓',
-'圣' => '聖',
-'圹' => '壙',
-'场' => '場',
-'坏' => '壞',
-'块' => '塊',
-'坚' => '堅',
-'坛' => '壇',
-'坜' => '壢',
-'坝' => '壩',
-'坞' => '塢',
-'坟' => '墳',
-'坠' => '墜',
-'垄' => '壟',
-'垅' => '壠',
-'垆' => '壚',
-'垒' => '壘',
-'垦' => '墾',
-'垩' => '堊',
-'垫' => '墊',
-'垭' => '埡',
-'垱' => '壋',
-'垲' => '塏',
-'埘' => '塒',
-'埙' => '塤',
-'埚' => '堝',
-'埯' => '垵',
-'堑' => '塹',
-'堕' => '墮',
-'墙' => '牆',
-'壮' => '壯',
-'声' => '聲',
-'壳' => '殼',
-'壶' => '壺',
-'壸' => '壼',
-'处' => '處',
-'备' => '備',
-'复' => '復',
-'够' => '夠',
-'头' => '頭',
-'夹' => '夾',
-'夺' => '奪',
-'奁' => '奩',
-'奂' => '奐',
-'奋' => '奮',
-'奖' => '獎',
-'奥' => '奧',
-'妆' => '妝',
-'妇' => '婦',
-'妈' => '媽',
-'妩' => '嫵',
-'妪' => '嫗',
-'妫' => '媯',
-'姗' => '姍',
-'姹' => '奼',
-'娄' => '婁',
-'娅' => '婭',
-'娆' => '嬈',
-'娇' => '嬌',
-'娈' => '孌',
-'娱' => '娛',
-'娲' => '媧',
-'娴' => '嫻',
-'婳' => '嫿',
-'婴' => '嬰',
-'婵' => '嬋',
-'婶' => '嬸',
-'媪' => '媼',
-'媭' => '嬃',
-'嫒' => '嬡',
-'嫔' => '嬪',
-'嫱' => '嬙',
-'嬷' => '嬤',
-'孙' => '孫',
-'学' => '學',
-'孪' => '孿',
-'宁' => '寧',
-'宝' => '寶',
-'实' => '實',
-'宠' => '寵',
-'审' => '審',
-'宪' => '憲',
-'宫' => '宮',
-'宽' => '寬',
-'宾' => '賓',
-'寝' => '寢',
-'对' => '對',
-'寻' => '尋',
-'导' => '導',
-'寿' => '壽',
-'将' => '將',
-'尔' => '爾',
-'尘' => '塵',
-'尝' => '嘗',
-'尧' => '堯',
-'尴' => '尷',
-'尸' => '屍',
-'尽' => '盡',
-'层' => '層',
-'屃' => '屓',
-'屉' => '屜',
-'届' => '屆',
-'属' => '屬',
-'屡' => '屢',
-'屦' => '屨',
-'屿' => '嶼',
-'岁' => '歲',
-'岂' => '豈',
-'岖' => '嶇',
-'岗' => '崗',
-'岘' => '峴',
-'岚' => '嵐',
-'岛' => '島',
-'岭' => '嶺',
-'岽' => '崬',
-'岿' => '巋',
-'峃' => '嶨',
-'峄' => '嶧',
-'峡' => '峽',
-'峣' => '嶢',
-'峤' => '嶠',
-'峥' => '崢',
-'峦' => '巒',
-'崂' => '嶗',
-'崃' => '崍',
-'崄' => '嶮',
-'崭' => '嶄',
-'嵘' => '嶸',
-'嵚' => '嶔',
-'嵝' => '嶁',
-'巅' => '巔',
-'巩' => '鞏',
-'巯' => '巰',
-'币' => '幣',
-'帅' => '帥',
-'师' => '師',
-'帏' => '幃',
-'帐' => '帳',
-'帘' => '簾',
-'帜' => '幟',
-'带' => '帶',
-'帧' => '幀',
-'帮' => '幫',
-'帱' => '幬',
-'帻' => '幘',
-'帼' => '幗',
-'幂' => '冪',
-'并' => '並',
-'幺' => '么',
-'广' => '廣',
-'庄' => '莊',
-'庆' => '慶',
-'庐' => '廬',
-'庑' => '廡',
-'库' => '庫',
-'应' => '應',
-'庙' => '廟',
-'庞' => '龐',
-'废' => '廢',
-'庼' => '廎',
-'廪' => '廩',
-'开' => '開',
-'异' => '異',
-'弃' => '棄',
-'弑' => '弒',
-'张' => '張',
-'弥' => '彌',
-'弪' => '弳',
-'弯' => '彎',
-'弹' => '彈',
-'强' => '強',
-'归' => '歸',
-'当' => '當',
-'录' => '錄',
-'彟' => '彠',
-'彦' => '彥',
-'彨' => '彲',
-'彻' => '徹',
-'径' => '徑',
-'徕' => '徠',
-'忆' => '憶',
-'忏' => '懺',
-'忧' => '憂',
-'忾' => '愾',
-'怀' => '懷',
-'态' => '態',
-'怂' => '慫',
-'怃' => '憮',
-'怄' => '慪',
-'怅' => '悵',
-'怆' => '愴',
-'怜' => '憐',
-'总' => '總',
-'怼' => '懟',
-'怿' => '懌',
-'恋' => '戀',
-'恒' => '恆',
-'恳' => '懇',
-'恶' => '惡',
-'恸' => '慟',
-'恹' => '懨',
-'恺' => '愷',
-'恻' => '惻',
-'恼' => '惱',
-'恽' => '惲',
-'悦' => '悅',
-'悫' => '愨',
-'悬' => '懸',
-'悭' => '慳',
-'悮' => '悞',
-'悯' => '憫',
-'惊' => '驚',
-'惧' => '懼',
-'惨' => '慘',
-'惩' => '懲',
-'惫' => '憊',
-'惬' => '愜',
-'惭' => '慚',
-'惮' => '憚',
-'惯' => '慣',
-'愠' => '慍',
-'愤' => '憤',
-'愦' => '憒',
-'愿' => '願',
-'慑' => '懾',
-'懑' => '懣',
-'懒' => '懶',
-'懔' => '懍',
-'戆' => '戇',
-'戋' => '戔',
-'戏' => '戲',
-'戗' => '戧',
-'战' => '戰',
-'戬' => '戩',
-'戯' => '戱',
-'户' => '戶',
-'扑' => '撲',
-'执' => '執',
-'扩' => '擴',
-'扪' => '捫',
-'扫' => '掃',
-'扬' => '揚',
-'扰' => '擾',
-'抚' => '撫',
-'抛' => '拋',
-'抟' => '摶',
-'抠' => '摳',
-'抡' => '掄',
-'抢' => '搶',
-'护' => '護',
-'报' => '報',
-'担' => '擔',
-'拟' => '擬',
-'拢' => '攏',
-'拣' => '揀',
-'拥' => '擁',
-'拦' => '攔',
-'拧' => '擰',
-'拨' => '撥',
-'择' => '擇',
-'挂' => '掛',
-'挚' => '摯',
-'挛' => '攣',
-'挜' => '掗',
-'挝' => '撾',
-'挞' => '撻',
-'挟' => '挾',
-'挠' => '撓',
-'挡' => '擋',
-'挢' => '撟',
-'挣' => '掙',
-'挤' => '擠',
-'挥' => '揮',
-'挦' => '撏',
-'捝' => '挩',
-'捞' => '撈',
-'损' => '損',
-'捡' => '撿',
-'换' => '換',
-'捣' => '搗',
-'据' => '據',
-'掳' => '擄',
-'掴' => '摑',
-'掷' => '擲',
-'掸' => '撣',
-'掺' => '摻',
-'掼' => '摜',
-'揽' => '攬',
-'揾' => '搵',
-'揿' => '撳',
-'搀' => '攙',
-'搁' => '擱',
-'搂' => '摟',
-'搅' => '攪',
-'携' => '攜',
-'摄' => '攝',
-'摅' => '攄',
-'摆' => '擺',
-'摇' => '搖',
-'摈' => '擯',
-'摊' => '攤',
-'撄' => '攖',
-'撑' => '撐',
-'撵' => '攆',
-'撷' => '擷',
-'撸' => '擼',
-'撺' => '攛',
-'擞' => '擻',
-'攒' => '攢',
-'敌' => '敵',
-'敛' => '斂',
-'敩' => '斆',
-'数' => '數',
-'斋' => '齋',
-'斓' => '斕',
-'斩' => '斬',
-'断' => '斷',
-'无' => '無',
-'旧' => '舊',
-'时' => '時',
-'旷' => '曠',
-'旸' => '暘',
-'昙' => '曇',
-'昼' => '晝',
-'昽' => '曨',
-'显' => '顯',
-'晋' => '晉',
-'晒' => '曬',
-'晓' => '曉',
-'晔' => '曄',
-'晕' => '暈',
-'晖' => '暉',
-'暂' => '暫',
-'暧' => '曖',
-'术' => '術',
-'机' => '機',
-'杀' => '殺',
-'杂' => '雜',
-'权' => '權',
-'杠' => '槓',
-'条' => '條',
-'来' => '來',
-'杨' => '楊',
-'杩' => '榪',
-'杰' => '傑',
-'极' => '極',
-'构' => '構',
-'枞' => '樅',
-'枢' => '樞',
-'枣' => '棗',
-'枥' => '櫪',
-'枧' => '梘',
-'枨' => '棖',
-'枪' => '槍',
-'枫' => '楓',
-'枭' => '梟',
-'柜' => '櫃',
-'柠' => '檸',
-'柽' => '檉',
-'栀' => '梔',
-'栅' => '柵',
-'标' => '標',
-'栈' => '棧',
-'栉' => '櫛',
-'栊' => '櫳',
-'栋' => '棟',
-'栌' => '櫨',
-'栎' => '櫟',
-'栏' => '欄',
-'树' => '樹',
-'栖' => '棲',
-'样' => '樣',
-'栾' => '欒',
-'桠' => '椏',
-'桡' => '橈',
-'桢' => '楨',
-'档' => '檔',
-'桤' => '榿',
-'桥' => '橋',
-'桦' => '樺',
-'桧' => '檜',
-'桨' => '槳',
-'桩' => '樁',
-'桪' => '樳',
-'梦' => '夢',
-'梼' => '檮',
-'梾' => '棶',
-'梿' => '槤',
-'检' => '檢',
-'棁' => '梲',
-'棂' => '欞',
-'椁' => '槨',
-'椝' => '槼',
-'椟' => '櫝',
-'椠' => '槧',
-'椢' => '槶',
-'椤' => '欏',
-'椫' => '樿',
-'椭' => '橢',
-'椮' => '槮',
-'楼' => '樓',
-'榄' => '欖',
-'榅' => '榲',
-'榇' => '櫬',
-'榈' => '櫚',
-'榉' => '櫸',
-'槚' => '檟',
-'槛' => '檻',
-'槟' => '檳',
-'槠' => '櫧',
-'横' => '橫',
-'樯' => '檣',
-'樱' => '櫻',
-'橥' => '櫫',
-'橱' => '櫥',
-'橹' => '櫓',
-'橼' => '櫞',
-'檩' => '檁',
-'欢' => '歡',
-'欤' => '歟',
-'欧' => '歐',
-'歼' => '殲',
-'殁' => '歿',
-'殇' => '殤',
-'残' => '殘',
-'殒' => '殞',
-'殓' => '殮',
-'殚' => '殫',
-'殡' => '殯',
-'殴' => '毆',
-'毁' => '毀',
-'毂' => '轂',
-'毕' => '畢',
-'毙' => '斃',
-'毡' => '氈',
-'毵' => '毿',
-'氇' => '氌',
-'气' => '氣',
-'氢' => '氫',
-'氩' => '氬',
-'氲' => '氳',
-'汇' => '匯',
-'汉' => '漢',
-'汤' => '湯',
-'汹' => '洶',
-'沟' => '溝',
-'没' => '沒',
-'沣' => '灃',
-'沤' => '漚',
-'沥' => '瀝',
-'沦' => '淪',
-'沧' => '滄',
-'沨' => '渢',
-'沩' => '溈',
-'沪' => '滬',
-'泞' => '濘',
-'泪' => '淚',
-'泶' => '澩',
-'泷' => '瀧',
-'泸' => '瀘',
-'泺' => '濼',
-'泻' => '瀉',
-'泼' => '潑',
-'泽' => '澤',
-'泾' => '涇',
-'洁' => '潔',
-'洒' => '灑',
-'洼' => '窪',
-'浃' => '浹',
-'浅' => '淺',
-'浆' => '漿',
-'浇' => '澆',
-'浈' => '湞',
-'浉' => '溮',
-'浊' => '濁',
-'测' => '測',
-'浍' => '澮',
-'济' => '濟',
-'浏' => '瀏',
-'浐' => '滻',
-'浑' => '渾',
-'浒' => '滸',
-'浓' => '濃',
-'浔' => '潯',
-'浕' => '濜',
-'涂' => '塗',
-'涛' => '濤',
-'涝' => '澇',
-'涞' => '淶',
-'涟' => '漣',
-'涠' => '潿',
-'涡' => '渦',
-'涢' => '溳',
-'涣' => '渙',
-'涤' => '滌',
-'润' => '潤',
-'涧' => '澗',
-'涨' => '漲',
-'涩' => '澀',
-'渊' => '淵',
-'渌' => '淥',
-'渍' => '漬',
-'渎' => '瀆',
-'渐' => '漸',
-'渑' => '澠',
-'渔' => '漁',
-'渖' => '瀋',
-'渗' => '滲',
-'温' => '溫',
-'湾' => '灣',
-'湿' => '濕',
-'溃' => '潰',
-'溅' => '濺',
-'溆' => '漵',
-'溇' => '漊',
-'滗' => '潷',
-'滚' => '滾',
-'滞' => '滯',
-'滟' => '灩',
-'滠' => '灄',
-'满' => '滿',
-'滢' => '瀅',
-'滤' => '濾',
-'滥' => '濫',
-'滦' => '灤',
-'滨' => '濱',
-'滩' => '灘',
-'滪' => '澦',
-'漤' => '灠',
-'潆' => '瀠',
-'潇' => '瀟',
-'潋' => '瀲',
-'潍' => '濰',
-'潜' => '潛',
-'潴' => '瀦',
-'澛' => '瀂',
-'澜' => '瀾',
-'濑' => '瀨',
-'濒' => '瀕',
-'灏' => '灝',
-'灭' => '滅',
-'灯' => '燈',
-'灵' => '靈',
-'灾' => '災',
-'灿' => '燦',
-'炀' => '煬',
-'炉' => '爐',
-'炖' => '燉',
-'炜' => '煒',
-'炝' => '熗',
-'点' => '點',
-'炼' => '煉',
-'炽' => '熾',
-'烁' => '爍',
-'烂' => '爛',
-'烃' => '烴',
-'烛' => '燭',
-'烟' => '煙',
-'烦' => '煩',
-'烧' => '燒',
-'烨' => '燁',
-'烩' => '燴',
-'烫' => '燙',
-'烬' => '燼',
-'热' => '熱',
-'焕' => '煥',
-'焖' => '燜',
-'焘' => '燾',
-'煴' => '熅',
-'爱' => '愛',
-'爷' => '爺',
-'牍' => '牘',
-'牦' => '氂',
-'牵' => '牽',
-'牺' => '犧',
-'犊' => '犢',
-'状' => '狀',
-'犷' => '獷',
-'犸' => '獁',
-'犹' => '猶',
-'狈' => '狽',
-'狝' => '獮',
-'狞' => '獰',
-'独' => '獨',
-'狭' => '狹',
-'狮' => '獅',
-'狯' => '獪',
-'狰' => '猙',
-'狱' => '獄',
-'狲' => '猻',
-'猃' => '獫',
-'猎' => '獵',
-'猕' => '獼',
-'猡' => '玀',
-'猪' => '豬',
-'猫' => '貓',
-'猬' => '蝟',
-'献' => '獻',
-'獭' => '獺',
-'玑' => '璣',
-'玙' => '璵',
-'玚' => '瑒',
-'玛' => '瑪',
-'玮' => '瑋',
-'环' => '環',
-'现' => '現',
-'玱' => '瑲',
-'玺' => '璽',
-'珐' => '琺',
-'珑' => '瓏',
-'珰' => '璫',
-'珲' => '琿',
-'琎' => '璡',
-'琏' => '璉',
-'琐' => '瑣',
-'琼' => '瓊',
-'瑶' => '瑤',
-'瑷' => '璦',
-'瑸' => '璸',
-'璎' => '瓔',
-'瓒' => '瓚',
-'瓯' => '甌',
-'电' => '電',
-'画' => '畫',
-'畅' => '暢',
-'畴' => '疇',
-'疖' => '癤',
-'疗' => '療',
-'疟' => '瘧',
-'疠' => '癘',
-'疡' => '瘍',
-'疬' => '癧',
-'疭' => '瘲',
-'疮' => '瘡',
-'疯' => '瘋',
-'疱' => '皰',
-'痈' => '癰',
-'痉' => '痙',
-'痒' => '癢',
-'痖' => '瘂',
-'痨' => '癆',
-'痪' => '瘓',
-'痫' => '癇',
-'痳' => '痲',
-'瘅' => '癉',
-'瘆' => '瘮',
-'瘗' => '瘞',
-'瘘' => '瘺',
-'瘪' => '癟',
-'瘫' => '癱',
-'瘾' => '癮',
-'瘿' => '癭',
-'癞' => '癩',
-'癣' => '癬',
-'癫' => '癲',
-'皑' => '皚',
-'皱' => '皺',
-'皲' => '皸',
-'盏' => '盞',
-'盐' => '鹽',
-'监' => '監',
-'盖' => '蓋',
-'盗' => '盜',
-'盘' => '盤',
-'眍' => '瞘',
-'眦' => '眥',
-'眬' => '矓',
-'睁' => '睜',
-'睐' => '睞',
-'睑' => '瞼',
-'瞆' => '瞶',
-'瞒' => '瞞',
-'瞩' => '矚',
-'矫' => '矯',
-'矶' => '磯',
-'矾' => '礬',
-'矿' => '礦',
-'砀' => '碭',
-'码' => '碼',
-'砖' => '磚',
-'砗' => '硨',
-'砚' => '硯',
-'砜' => '碸',
-'砺' => '礪',
-'砻' => '礱',
-'砾' => '礫',
-'础' => '礎',
-'硁' => '硜',
-'硕' => '碩',
-'硖' => '硤',
-'硗' => '磽',
-'硙' => '磑',
-'硚' => '礄',
-'确' => '確',
-'硵' => '磠',
-'硷' => '鹼',
-'碍' => '礙',
-'碛' => '磧',
-'碜' => '磣',
-'碱' => '鹼',
-'礼' => '禮',
-'祃' => '禡',
-'祎' => '禕',
-'祢' => '禰',
-'祯' => '禎',
-'祷' => '禱',
-'祸' => '禍',
-'禀' => '稟',
-'禄' => '祿',
-'禅' => '禪',
-'离' => '離',
-'秃' => '禿',
-'秆' => '稈',
-'种' => '種',
-'积' => '積',
-'称' => '稱',
-'秽' => '穢',
-'秾' => '穠',
-'稆' => '穭',
-'税' => '稅',
-'稣' => '穌',
-'稳' => '穩',
-'穑' => '穡',
-'穷' => '窮',
-'窃' => '竊',
-'窍' => '竅',
-'窎' => '窵',
-'窑' => '窯',
-'窜' => '竄',
-'窝' => '窩',
-'窥' => '窺',
-'窦' => '竇',
-'窭' => '窶',
-'竖' => '豎',
-'竞' => '競',
-'笃' => '篤',
-'笋' => '筍',
-'笔' => '筆',
-'笕' => '筧',
-'笺' => '箋',
-'笼' => '籠',
-'笾' => '籩',
-'筑' => '築',
-'筚' => '篳',
-'筛' => '篩',
-'筜' => '簹',
-'筝' => '箏',
-'筹' => '籌',
-'筼' => '篔',
-'签' => '簽',
-'简' => '簡',
-'箓' => '籙',
-'箦' => '簀',
-'箧' => '篋',
-'箨' => '籜',
-'箩' => '籮',
-'箪' => '簞',
-'箫' => '簫',
-'篑' => '簣',
-'篓' => '簍',
-'篮' => '籃',
-'篯' => '籛',
-'篱' => '籬',
-'簖' => '籪',
-'籁' => '籟',
-'籴' => '糴',
-'类' => '類',
-'籼' => '秈',
-'粜' => '糶',
-'粝' => '糲',
-'粤' => '粵',
-'粪' => '糞',
-'粮' => '糧',
-'糁' => '糝',
-'糇' => '餱',
-'紧' => '緊',
-'絷' => '縶',
-'纟' => '糹',
-'纠' => '糾',
-'纡' => '紆',
-'红' => '紅',
-'纣' => '紂',
-'纤' => '纖',
-'纥' => '紇',
-'约' => '約',
-'级' => '級',
-'纨' => '紈',
-'纩' => '纊',
-'纪' => '紀',
-'纫' => '紉',
-'纬' => '緯',
-'纭' => '紜',
-'纮' => '紘',
-'纯' => '純',
-'纰' => '紕',
-'纱' => '紗',
-'纲' => '綱',
-'纳' => '納',
-'纴' => '紝',
-'纵' => '縱',
-'纶' => '綸',
-'纷' => '紛',
-'纸' => '紙',
-'纹' => '紋',
-'纺' => '紡',
-'纻' => '紵',
-'纼' => '紖',
-'纽' => '紐',
-'纾' => '紓',
-'线' => '線',
-'绀' => '紺',
-'绁' => '紲',
-'绂' => '紱',
-'练' => '練',
-'组' => '組',
-'绅' => '紳',
-'细' => '細',
-'织' => '織',
-'终' => '終',
-'绉' => '縐',
-'绊' => '絆',
-'绋' => '紼',
-'绌' => '絀',
-'绍' => '紹',
-'绎' => '繹',
-'经' => '經',
-'绐' => '紿',
-'绑' => '綁',
-'绒' => '絨',
-'结' => '結',
-'绔' => '絝',
-'绕' => '繞',
-'绖' => '絰',
-'绗' => '絎',
-'绘' => '繪',
-'给' => '給',
-'绚' => '絢',
-'绛' => '絳',
-'络' => '絡',
-'绝' => '絕',
-'绞' => '絞',
-'统' => '統',
-'绠' => '綆',
-'绡' => '綃',
-'绢' => '絹',
-'绣' => '繡',
-'绤' => '綌',
-'绥' => '綏',
-'绦' => '絛',
-'继' => '繼',
-'绨' => '綈',
-'绩' => '績',
-'绪' => '緒',
-'绫' => '綾',
-'绬' => '緓',
-'续' => '續',
-'绮' => '綺',
-'绯' => '緋',
-'绰' => '綽',
-'绱' => '鞝',
-'绲' => '緄',
-'绳' => '繩',
-'维' => '維',
-'绵' => '綿',
-'绶' => '綬',
-'绷' => '繃',
-'绸' => '綢',
-'绹' => '綯',
-'绺' => '綹',
-'绻' => '綣',
-'综' => '綜',
-'绽' => '綻',
-'绾' => '綰',
-'绿' => '綠',
-'缀' => '綴',
-'缁' => '緇',
-'缂' => '緙',
-'缃' => '緗',
-'缄' => '緘',
-'缅' => '緬',
-'缆' => '纜',
-'缇' => '緹',
-'缈' => '緲',
-'缉' => '緝',
-'缊' => '縕',
-'缋' => '繢',
-'缌' => '緦',
-'缍' => '綞',
-'缎' => '緞',
-'缏' => '緶',
-'缐' => '線',
-'缑' => '緱',
-'缒' => '縋',
-'缓' => '緩',
-'缔' => '締',
-'缕' => '縷',
-'编' => '編',
-'缗' => '緡',
-'缘' => '緣',
-'缙' => '縉',
-'缚' => '縛',
-'缛' => '縟',
-'缜' => '縝',
-'缝' => '縫',
-'缞' => '縗',
-'缟' => '縞',
-'缠' => '纏',
-'缡' => '縭',
-'缢' => '縊',
-'缣' => '縑',
-'缤' => '繽',
-'缥' => '縹',
-'缦' => '縵',
-'缧' => '縲',
-'缨' => '纓',
-'缩' => '縮',
-'缪' => '繆',
-'缫' => '繅',
-'缬' => '纈',
-'缭' => '繚',
-'缮' => '繕',
-'缯' => '繒',
-'缰' => '韁',
-'缱' => '繾',
-'缲' => '繰',
-'缳' => '繯',
-'缴' => '繳',
-'缵' => '纘',
-'罂' => '罌',
-'网' => '網',
-'罗' => '羅',
-'罚' => '罰',
-'罢' => '罷',
-'罴' => '羆',
-'羁' => '羈',
-'羟' => '羥',
-'羡' => '羨',
-'翘' => '翹',
-'翙' => '翽',
-'翚' => '翬',
-'耢' => '耮',
-'耧' => '耬',
-'耸' => '聳',
-'耻' => '恥',
-'聂' => '聶',
-'聋' => '聾',
-'职' => '職',
-'聍' => '聹',
-'联' => '聯',
-'聩' => '聵',
-'聪' => '聰',
-'肃' => '肅',
-'肠' => '腸',
-'肤' => '膚',
-'肮' => '骯',
-'肴' => '餚',
-'肾' => '腎',
-'肿' => '腫',
-'胀' => '脹',
-'胁' => '脅',
-'胆' => '膽',
-'胜' => '勝',
-'胧' => '朧',
-'胨' => '腖',
-'胪' => '臚',
-'胫' => '脛',
-'胶' => '膠',
-'脉' => '脈',
-'脍' => '膾',
-'脏' => '髒',
-'脐' => '臍',
-'脑' => '腦',
-'脓' => '膿',
-'脔' => '臠',
-'脚' => '腳',
-'脱' => '脫',
-'脶' => '腡',
-'脸' => '臉',
-'腊' => '臘',
-'腌' => '醃',
-'腘' => '膕',
-'腭' => '齶',
-'腻' => '膩',
-'腼' => '靦',
-'腽' => '膃',
-'腾' => '騰',
-'膑' => '臏',
-'臜' => '臢',
-'舆' => '輿',
-'舣' => '艤',
-'舰' => '艦',
-'舱' => '艙',
-'舻' => '艫',
-'艰' => '艱',
-'艳' => '艷',
-'艺' => '藝',
-'节' => '節',
-'芈' => '羋',
-'芗' => '薌',
-'芜' => '蕪',
-'芦' => '蘆',
-'苁' => '蓯',
-'苇' => '葦',
-'苈' => '藶',
-'苋' => '莧',
-'苌' => '萇',
-'苍' => '蒼',
-'苎' => '苧',
-'苏' => '蘇',
-'苧' => '薴',
-'茎' => '莖',
-'茏' => '蘢',
-'茑' => '蔦',
-'茔' => '塋',
-'茕' => '煢',
-'茧' => '繭',
-'荆' => '荊',
-'荐' => '薦',
-'荙' => '薘',
-'荚' => '莢',
-'荛' => '蕘',
-'荜' => '蓽',
-'荝' => '萴',
-'荞' => '蕎',
-'荟' => '薈',
-'荠' => '薺',
-'荡' => '盪',
-'荣' => '榮',
-'荤' => '葷',
-'荥' => '滎',
-'荦' => '犖',
-'荧' => '熒',
-'荨' => '蕁',
-'荩' => '藎',
-'荪' => '蓀',
-'荫' => '蔭',
-'荬' => '蕒',
-'荭' => '葒',
-'荮' => '葤',
-'药' => '藥',
-'莅' => '蒞',
-'莱' => '萊',
-'莲' => '蓮',
-'莳' => '蒔',
-'莴' => '萵',
-'莶' => '薟',
-'获' => '獲',
-'莸' => '蕕',
-'莹' => '瑩',
-'莺' => '鶯',
-'莼' => '蓴',
-'萚' => '蘀',
-'萝' => '蘿',
-'萤' => '螢',
-'营' => '營',
-'萦' => '縈',
-'萧' => '蕭',
-'萨' => '薩',
-'葱' => '蔥',
-'蒇' => '蕆',
-'蒉' => '蕢',
-'蒋' => '蔣',
-'蒌' => '蔞',
-'蓝' => '藍',
-'蓟' => '薊',
-'蓠' => '蘺',
-'蓣' => '蕷',
-'蓥' => '鎣',
-'蓦' => '驀',
-'蔂' => '虆',
-'蔷' => '薔',
-'蔹' => '蘞',
-'蔺' => '藺',
-'蔼' => '藹',
-'蕰' => '薀',
-'蕲' => '蘄',
-'蕴' => '蘊',
-'薮' => '藪',
-'藓' => '蘚',
-'蘖' => '櫱',
-'虏' => '虜',
-'虑' => '慮',
-'虚' => '虛',
-'虫' => '蟲',
-'虮' => '蟣',
-'虽' => '雖',
-'虾' => '蝦',
-'虿' => '蠆',
-'蚀' => '蝕',
-'蚁' => '蟻',
-'蚂' => '螞',
-'蚃' => '蠁',
-'蚕' => '蠶',
-'蚬' => '蜆',
-'蛊' => '蠱',
-'蛎' => '蠣',
-'蛏' => '蟶',
-'蛮' => '蠻',
-'蛰' => '蟄',
-'蛱' => '蛺',
-'蛲' => '蟯',
-'蛳' => '螄',
-'蛴' => '蠐',
-'蜕' => '蛻',
-'蜗' => '蝸',
-'蜡' => '蠟',
-'蝇' => '蠅',
-'蝈' => '蟈',
-'蝉' => '蟬',
-'蝎' => '蠍',
-'蝼' => '螻',
-'蝾' => '蠑',
-'螀' => '螿',
-'螨' => '蟎',
-'蟏' => '蠨',
-'衅' => '釁',
-'衔' => '銜',
-'补' => '補',
-'衬' => '襯',
-'衮' => '袞',
-'袄' => '襖',
-'袅' => '裊',
-'袆' => '褘',
-'袜' => '襪',
-'袭' => '襲',
-'袯' => '襏',
-'装' => '裝',
-'裆' => '襠',
-'裈' => '褌',
-'裢' => '褳',
-'裣' => '襝',
-'裤' => '褲',
-'裥' => '襉',
-'褛' => '褸',
-'褴' => '襤',
-'襕' => '襴',
-'见' => '見',
-'观' => '觀',
-'觃' => '覎',
-'规' => '規',
-'觅' => '覓',
-'视' => '視',
-'觇' => '覘',
-'览' => '覽',
-'觉' => '覺',
-'觊' => '覬',
-'觋' => '覡',
-'觌' => '覿',
-'觍' => '覥',
-'觎' => '覦',
-'觏' => '覯',
-'觐' => '覲',
-'觑' => '覷',
-'觞' => '觴',
-'触' => '觸',
-'觯' => '觶',
-'訚' => '誾',
-'詟' => '讋',
-'誉' => '譽',
-'誊' => '謄',
-'讠' => '訁',
-'计' => '計',
-'订' => '訂',
-'讣' => '訃',
-'认' => '認',
-'讥' => '譏',
-'讦' => '訐',
-'讧' => '訌',
-'讨' => '討',
-'让' => '讓',
-'讪' => '訕',
-'讫' => '訖',
-'讬' => '託',
-'训' => '訓',
-'议' => '議',
-'讯' => '訊',
-'记' => '記',
-'讱' => '訒',
-'讲' => '講',
-'讳' => '諱',
-'讴' => '謳',
-'讵' => '詎',
-'讶' => '訝',
-'讷' => '訥',
-'许' => '許',
-'讹' => '訛',
-'论' => '論',
-'讻' => '訩',
-'讼' => '訟',
-'讽' => '諷',
-'设' => '設',
-'访' => '訪',
-'诀' => '訣',
-'证' => '證',
-'诂' => '詁',
-'诃' => '訶',
-'评' => '評',
-'诅' => '詛',
-'识' => '識',
-'诇' => '詗',
-'诈' => '詐',
-'诉' => '訴',
-'诊' => '診',
-'诋' => '詆',
-'诌' => '謅',
-'词' => '詞',
-'诎' => '詘',
-'诏' => '詔',
-'诐' => '詖',
-'译' => '譯',
-'诒' => '詒',
-'诓' => '誆',
-'诔' => '誄',
-'试' => '試',
-'诖' => '詿',
-'诗' => '詩',
-'诘' => '詰',
-'诙' => '詼',
-'诚' => '誠',
-'诛' => '誅',
-'诜' => '詵',
-'话' => '話',
-'诞' => '誕',
-'诟' => '詬',
-'诠' => '詮',
-'诡' => '詭',
-'询' => '詢',
-'诣' => '詣',
-'诤' => '諍',
-'该' => '該',
-'详' => '詳',
-'诧' => '詫',
-'诨' => '諢',
-'诩' => '詡',
-'诪' => '譸',
-'诫' => '誡',
-'诬' => '誣',
-'语' => '語',
-'诮' => '誚',
-'误' => '誤',
-'诰' => '誥',
-'诱' => '誘',
-'诲' => '誨',
-'诳' => '誑',
-'说' => '說',
-'诵' => '誦',
-'诶' => '誒',
-'请' => '請',
-'诸' => '諸',
-'诹' => '諏',
-'诺' => '諾',
-'读' => '讀',
-'诼' => '諑',
-'诽' => '誹',
-'课' => '課',
-'诿' => '諉',
-'谀' => '諛',
-'谁' => '誰',
-'谂' => '諗',
-'调' => '調',
-'谄' => '諂',
-'谅' => '諒',
-'谆' => '諄',
-'谇' => '誶',
-'谈' => '談',
-'谊' => '誼',
-'谋' => '謀',
-'谌' => '諶',
-'谍' => '諜',
-'谎' => '謊',
-'谏' => '諫',
-'谐' => '諧',
-'谑' => '謔',
-'谒' => '謁',
-'谓' => '謂',
-'谔' => '諤',
-'谕' => '諭',
-'谖' => '諼',
-'谗' => '讒',
-'谘' => '諮',
-'谙' => '諳',
-'谚' => '諺',
-'谛' => '諦',
-'谜' => '謎',
-'谝' => '諞',
-'谞' => '諝',
-'谟' => '謨',
-'谠' => '讜',
-'谡' => '謖',
-'谢' => '謝',
-'谣' => '謠',
-'谤' => '謗',
-'谥' => '諡',
-'谦' => '謙',
-'谧' => '謐',
-'谨' => '謹',
-'谩' => '謾',
-'谪' => '謫',
-'谫' => '譾',
-'谬' => '謬',
-'谭' => '譚',
-'谮' => '譖',
-'谯' => '譙',
-'谰' => '讕',
-'谱' => '譜',
-'谲' => '譎',
-'谳' => '讞',
-'谴' => '譴',
-'谵' => '譫',
-'谶' => '讖',
-'豮' => '豶',
-'贝' => '貝',
-'贞' => '貞',
-'负' => '負',
-'贠' => '貟',
-'贡' => '貢',
-'财' => '財',
-'责' => '責',
-'贤' => '賢',
-'败' => '敗',
-'账' => '賬',
-'货' => '貨',
-'质' => '質',
-'贩' => '販',
-'贪' => '貪',
-'贫' => '貧',
-'贬' => '貶',
-'购' => '購',
-'贮' => '貯',
-'贯' => '貫',
-'贰' => '貳',
-'贱' => '賤',
-'贲' => '賁',
-'贳' => '貰',
-'贴' => '貼',
-'贵' => '貴',
-'贶' => '貺',
-'贷' => '貸',
-'贸' => '貿',
-'费' => '費',
-'贺' => '賀',
-'贻' => '貽',
-'贼' => '賊',
-'贽' => '贄',
-'贾' => '賈',
-'贿' => '賄',
-'赀' => '貲',
-'赁' => '賃',
-'赂' => '賂',
-'赃' => '贓',
-'资' => '資',
-'赅' => '賅',
-'赆' => '贐',
-'赇' => '賕',
-'赈' => '賑',
-'赉' => '賚',
-'赊' => '賒',
-'赋' => '賦',
-'赌' => '賭',
-'赍' => '齎',
-'赎' => '贖',
-'赏' => '賞',
-'赐' => '賜',
-'赑' => '贔',
-'赒' => '賙',
-'赓' => '賡',
-'赔' => '賠',
-'赕' => '賧',
-'赖' => '賴',
-'赗' => '賵',
-'赘' => '贅',
-'赙' => '賻',
-'赚' => '賺',
-'赛' => '賽',
-'赜' => '賾',
-'赝' => '贗',
-'赞' => '贊',
-'赟' => '贇',
-'赠' => '贈',
-'赡' => '贍',
-'赢' => '贏',
-'赣' => '贛',
-'赪' => '赬',
-'赵' => '趙',
-'赶' => '趕',
-'趋' => '趨',
-'趱' => '趲',
-'趸' => '躉',
-'跃' => '躍',
-'跄' => '蹌',
-'跞' => '躒',
-'践' => '踐',
-'跶' => '躂',
-'跷' => '蹺',
-'跸' => '蹕',
-'跹' => '躚',
-'跻' => '躋',
-'踊' => '踴',
-'踌' => '躊',
-'踪' => '蹤',
-'踬' => '躓',
-'踯' => '躑',
-'蹑' => '躡',
-'蹒' => '蹣',
-'蹰' => '躕',
-'蹿' => '躥',
-'躏' => '躪',
-'躜' => '躦',
-'躯' => '軀',
-'车' => '車',
-'轧' => '軋',
-'轨' => '軌',
-'轩' => '軒',
-'轪' => '軑',
-'轫' => '軔',
-'转' => '轉',
-'轭' => '軛',
-'轮' => '輪',
-'软' => '軟',
-'轰' => '轟',
-'轱' => '軲',
-'轲' => '軻',
-'轳' => '轤',
-'轴' => '軸',
-'轵' => '軹',
-'轶' => '軼',
-'轷' => '軤',
-'轸' => '軫',
-'轹' => '轢',
-'轺' => '軺',
-'轻' => '輕',
-'轼' => '軾',
-'载' => '載',
-'轾' => '輊',
-'轿' => '轎',
-'辀' => '輈',
-'辁' => '輇',
-'辂' => '輅',
-'较' => '較',
-'辄' => '輒',
-'辅' => '輔',
-'辆' => '輛',
-'辇' => '輦',
-'辈' => '輩',
-'辉' => '輝',
-'辊' => '輥',
-'辋' => '輞',
-'辌' => '輬',
-'辍' => '輟',
-'辎' => '輜',
-'辏' => '輳',
-'辐' => '輻',
-'辑' => '輯',
-'辒' => '轀',
-'输' => '輸',
-'辔' => '轡',
-'辕' => '轅',
-'辖' => '轄',
-'辗' => '輾',
-'辘' => '轆',
-'辙' => '轍',
-'辚' => '轔',
-'辞' => '辭',
-'辩' => '辯',
-'辫' => '辮',
-'边' => '邊',
-'辽' => '遼',
-'达' => '達',
-'迁' => '遷',
-'过' => '過',
-'迈' => '邁',
-'运' => '運',
-'还' => '還',
-'这' => '這',
-'进' => '進',
-'远' => '遠',
-'违' => '違',
-'连' => '連',
-'迟' => '遲',
-'迩' => '邇',
-'迳' => '逕',
-'迹' => '跡',
-'适' => '適',
-'选' => '選',
-'逊' => '遜',
-'递' => '遞',
-'逦' => '邐',
-'逻' => '邏',
-'遗' => '遺',
-'遥' => '遙',
-'邓' => '鄧',
-'邝' => '鄺',
-'邬' => '鄔',
-'邮' => '郵',
-'邹' => '鄒',
-'邺' => '鄴',
-'邻' => '鄰',
-'郏' => '郟',
-'郐' => '鄶',
-'郑' => '鄭',
-'郓' => '鄆',
-'郦' => '酈',
-'郧' => '鄖',
-'郸' => '鄲',
-'酂' => '酇',
-'酝' => '醞',
-'酦' => '醱',
-'酱' => '醬',
-'酽' => '釅',
-'酾' => '釃',
-'酿' => '釀',
-'释' => '釋',
-'鉴' => '鑒',
-'銮' => '鑾',
-'錾' => '鏨',
-'钅' => '釒',
-'钆' => '釓',
-'钇' => '釔',
-'针' => '針',
-'钉' => '釘',
-'钊' => '釗',
-'钋' => '釙',
-'钌' => '釕',
-'钍' => '釷',
-'钎' => '釺',
-'钏' => '釧',
-'钐' => '釤',
-'钑' => '鈒',
-'钒' => '釩',
-'钓' => '釣',
-'钔' => '鍆',
-'钕' => '釹',
-'钖' => '鍚',
-'钗' => '釵',
-'钘' => '鈃',
-'钙' => '鈣',
-'钚' => '鈈',
-'钛' => '鈦',
-'钜' => '鉅',
-'钝' => '鈍',
-'钞' => '鈔',
-'钟' => '鍾',
-'钠' => '鈉',
-'钡' => '鋇',
-'钢' => '鋼',
-'钣' => '鈑',
-'钤' => '鈐',
-'钥' => '鑰',
-'钦' => '欽',
-'钧' => '鈞',
-'钨' => '鎢',
-'钩' => '鈎',
-'钪' => '鈧',
-'钫' => '鈁',
-'钬' => '鈥',
-'钭' => '鈄',
-'钮' => '鈕',
-'钯' => '鈀',
-'钰' => '鈺',
-'钱' => '錢',
-'钲' => '鉦',
-'钳' => '鉗',
-'钴' => '鈷',
-'钵' => '缽',
-'钶' => '鈳',
-'钷' => '鉕',
-'钸' => '鈽',
-'钹' => '鈸',
-'钺' => '鉞',
-'钻' => '鑽',
-'钼' => '鉬',
-'钽' => '鉭',
-'钾' => '鉀',
-'钿' => '鈿',
-'铀' => '鈾',
-'铁' => '鐵',
-'铂' => '鉑',
-'铃' => '鈴',
-'铄' => '鑠',
-'铅' => '鉛',
-'铆' => '鉚',
-'铇' => '鉋',
-'铈' => '鈰',
-'铉' => '鉉',
-'铊' => '鉈',
-'铋' => '鉍',
-'铌' => '鈮',
-'铍' => '鈹',
-'铎' => '鐸',
-'铏' => '鉶',
-'铐' => '銬',
-'铑' => '銠',
-'铒' => '鉺',
-'铓' => '鋩',
-'铔' => '錏',
-'铕' => '銪',
-'铖' => '鋮',
-'铗' => '鋏',
-'铘' => '鋣',
-'铙' => '鐃',
-'铚' => '銍',
-'铛' => '鐺',
-'铜' => '銅',
-'铝' => '鋁',
-'铞' => '銱',
-'铟' => '銦',
-'铠' => '鎧',
-'铡' => '鍘',
-'铢' => '銖',
-'铣' => '銑',
-'铤' => '鋌',
-'铥' => '銩',
-'铦' => '銛',
-'铧' => '鏵',
-'铨' => '銓',
-'铩' => '鎩',
-'铪' => '鉿',
-'铫' => '銚',
-'铬' => '鉻',
-'铭' => '銘',
-'铮' => '錚',
-'铯' => '銫',
-'铰' => '鉸',
-'铱' => '銥',
-'铲' => '鏟',
-'铳' => '銃',
-'铴' => '鐋',
-'铵' => '銨',
-'银' => '銀',
-'铷' => '銣',
-'铸' => '鑄',
-'铹' => '鐒',
-'铺' => '鋪',
-'铻' => '鋙',
-'铼' => '錸',
-'铽' => '鋱',
-'链' => '鏈',
-'铿' => '鏗',
-'销' => '銷',
-'锁' => '鎖',
-'锂' => '鋰',
-'锃' => '鋥',
-'锄' => '鋤',
-'锅' => '鍋',
-'锆' => '鋯',
-'锇' => '鋨',
-'锈' => '銹',
-'锉' => '銼',
-'锊' => '鋝',
-'锋' => '鋒',
-'锌' => '鋅',
-'锍' => '鋶',
-'锎' => '鐦',
-'锏' => '鐧',
-'锐' => '銳',
-'锑' => '銻',
-'锒' => '鋃',
-'锓' => '鋟',
-'锔' => '鋦',
-'锕' => '錒',
-'锖' => '錆',
-'锗' => '鍺',
-'锘' => '鍩',
-'错' => '錯',
-'锚' => '錨',
-'锛' => '錛',
-'锜' => '錡',
-'锝' => '鍀',
-'锞' => '錁',
-'锟' => '錕',
-'锠' => '錩',
-'锡' => '錫',
-'锢' => '錮',
-'锣' => '鑼',
-'锤' => '錘',
-'锥' => '錐',
-'锦' => '錦',
-'锧' => '鑕',
-'锨' => '杴',
-'锩' => '錈',
-'锪' => '鍃',
-'锫' => '錇',
-'锬' => '錟',
-'锭' => '錠',
-'键' => '鍵',
-'锯' => '鋸',
-'锰' => '錳',
-'锱' => '錙',
-'锲' => '鍥',
-'锳' => '鍈',
-'锴' => '鍇',
-'锵' => '鏘',
-'锶' => '鍶',
-'锷' => '鍔',
-'锸' => '鍤',
-'锹' => '鍬',
-'锺' => '鍾',
-'锻' => '鍛',
-'锼' => '鎪',
-'锽' => '鍠',
-'锾' => '鍰',
-'锿' => '鎄',
-'镀' => '鍍',
-'镁' => '鎂',
-'镂' => '鏤',
-'镃' => '鎡',
-'镄' => '鐨',
-'镅' => '鎇',
-'镆' => '鏌',
-'镇' => '鎮',
-'镈' => '鎛',
-'镉' => '鎘',
-'镊' => '鑷',
-'镋' => '钂',
-'镌' => '鐫',
-'镍' => '鎳',
-'镎' => '鎿',
-'镏' => '鎦',
-'镐' => '鎬',
-'镑' => '鎊',
-'镒' => '鎰',
-'镓' => '鎵',
-'镔' => '鑌',
-'镕' => '鎔',
-'镖' => '鏢',
-'镗' => '鏜',
-'镘' => '鏝',
-'镙' => '鏍',
-'镚' => '鏰',
-'镛' => '鏞',
-'镜' => '鏡',
-'镝' => '鏑',
-'镞' => '鏃',
-'镟' => '鏇',
-'镠' => '鏐',
-'镡' => '鐔',
-'镢' => '钁',
-'镣' => '鐐',
-'镤' => '鏷',
-'镥' => '鑥',
-'镦' => '鐓',
-'镧' => '鑭',
-'镨' => '鐠',
-'镩' => '鑹',
-'镪' => '鏹',
-'镫' => '鐙',
-'镬' => '鑊',
-'镭' => '鐳',
-'镮' => '鐶',
-'镯' => '鐲',
-'镰' => '鐮',
-'镱' => '鐿',
-'镲' => '鑔',
-'镳' => '鑣',
-'镴' => '鑞',
-'镵' => '鑱',
-'镶' => '鑲',
-'长' => '長',
-'门' => '門',
-'闩' => '閂',
-'闪' => '閃',
-'闫' => '閆',
-'闬' => '閈',
-'闭' => '閉',
-'问' => '問',
-'闯' => '闖',
-'闰' => '閏',
-'闱' => '闈',
-'闲' => '閒',
-'闳' => '閎',
-'间' => '間',
-'闵' => '閔',
-'闶' => '閌',
-'闷' => '悶',
-'闸' => '閘',
-'闹' => '鬧',
-'闺' => '閨',
-'闻' => '聞',
-'闼' => '闥',
-'闽' => '閩',
-'闾' => '閭',
-'闿' => '闓',
-'阀' => '閥',
-'阁' => '閣',
-'阂' => '閡',
-'阃' => '閫',
-'阄' => '鬮',
-'阅' => '閱',
-'阆' => '閬',
-'阇' => '闍',
-'阈' => '閾',
-'阉' => '閹',
-'阊' => '閶',
-'阋' => '鬩',
-'阌' => '閿',
-'阍' => '閽',
-'阎' => '閻',
-'阏' => '閼',
-'阐' => '闡',
-'阑' => '闌',
-'阒' => '闃',
-'阓' => '闠',
-'阔' => '闊',
-'阕' => '闋',
-'阖' => '闔',
-'阗' => '闐',
-'阘' => '闒',
-'阙' => '闕',
-'阚' => '闞',
-'阛' => '闤',
-'队' => '隊',
-'阳' => '陽',
-'阴' => '陰',
-'阵' => '陣',
-'阶' => '階',
-'际' => '際',
-'陆' => '陸',
-'陇' => '隴',
-'陈' => '陳',
-'陉' => '陘',
-'陕' => '陝',
-'陧' => '隉',
-'陨' => '隕',
-'险' => '險',
-'随' => '隨',
-'隐' => '隱',
-'隶' => '隸',
-'隽' => '雋',
-'难' => '難',
-'雏' => '雛',
-'雠' => '讎',
-'雳' => '靂',
-'雾' => '霧',
-'霁' => '霽',
-'霡' => '霢',
-'霭' => '靄',
-'靓' => '靚',
-'静' => '靜',
-'靥' => '靨',
-'鞑' => '韃',
-'鞒' => '鞽',
-'鞯' => '韉',
-'韦' => '韋',
-'韧' => '韌',
-'韨' => '韍',
-'韩' => '韓',
-'韪' => '韙',
-'韫' => '韞',
-'韬' => '韜',
-'韵' => '韻',
-'页' => '頁',
-'顶' => '頂',
-'顷' => '頃',
-'顸' => '頇',
-'项' => '項',
-'顺' => '順',
-'须' => '須',
-'顼' => '頊',
-'顽' => '頑',
-'顾' => '顧',
-'顿' => '頓',
-'颀' => '頎',
-'颁' => '頒',
-'颂' => '頌',
-'颃' => '頏',
-'预' => '預',
-'颅' => '顱',
-'领' => '領',
-'颇' => '頗',
-'颈' => '頸',
-'颉' => '頡',
-'颊' => '頰',
-'颋' => '頲',
-'颌' => '頜',
-'颍' => '潁',
-'颎' => '熲',
-'颏' => '頦',
-'颐' => '頤',
-'频' => '頻',
-'颒' => '頮',
-'颓' => '頹',
-'颔' => '頷',
-'颕' => '頴',
-'颖' => '穎',
-'颗' => '顆',
-'题' => '題',
-'颙' => '顒',
-'颚' => '顎',
-'颛' => '顓',
-'颜' => '顏',
-'额' => '額',
-'颞' => '顳',
-'颟' => '顢',
-'颠' => '顛',
-'颡' => '顙',
-'颢' => '顥',
-'颣' => '纇',
-'颤' => '顫',
-'颥' => '顬',
-'颦' => '顰',
-'颧' => '顴',
-'风' => '風',
-'飏' => '颺',
-'飐' => '颭',
-'飑' => '颮',
-'飒' => '颯',
-'飓' => '颶',
-'飔' => '颸',
-'飕' => '颼',
-'飖' => '颻',
-'飗' => '飀',
-'飘' => '飄',
-'飙' => '飆',
-'飚' => '飈',
-'飞' => '飛',
-'飨' => '饗',
-'餍' => '饜',
-'饣' => '飠',
-'饤' => '飣',
-'饥' => '飢',
-'饦' => '飥',
-'饧' => '餳',
-'饨' => '飩',
-'饩' => '餼',
-'饪' => '飪',
-'饫' => '飫',
-'饬' => '飭',
-'饭' => '飯',
-'饮' => '飲',
-'饯' => '餞',
-'饰' => '飾',
-'饱' => '飽',
-'饲' => '飼',
-'饳' => '飿',
-'饴' => '飴',
-'饵' => '餌',
-'饶' => '饒',
-'饷' => '餉',
-'饸' => '餄',
-'饹' => '餎',
-'饺' => '餃',
-'饻' => '餏',
-'饼' => '餅',
-'饽' => '餑',
-'饾' => '餖',
-'饿' => '餓',
-'馀' => '餘',
-'馁' => '餒',
-'馂' => '餕',
-'馃' => '餜',
-'馄' => '餛',
-'馅' => '餡',
-'馆' => '館',
-'馇' => '餷',
-'馈' => '饋',
-'馉' => '餶',
-'馊' => '餿',
-'馋' => '饞',
-'馌' => '饁',
-'馍' => '饃',
-'馎' => '餺',
-'馏' => '餾',
-'馐' => '饈',
-'馑' => '饉',
-'馒' => '饅',
-'馓' => '饊',
-'馔' => '饌',
-'馕' => '饢',
-'马' => '馬',
-'驭' => '馭',
-'驮' => '馱',
-'驯' => '馴',
-'驰' => '馳',
-'驱' => '驅',
-'驲' => '馹',
-'驳' => '駁',
-'驴' => '驢',
-'驵' => '駔',
-'驶' => '駛',
-'驷' => '駟',
-'驸' => '駙',
-'驹' => '駒',
-'驺' => '騶',
-'驻' => '駐',
-'驼' => '駝',
-'驽' => '駑',
-'驾' => '駕',
-'驿' => '驛',
-'骀' => '駘',
-'骁' => '驍',
-'骂' => '罵',
-'骃' => '駰',
-'骄' => '驕',
-'骅' => '驊',
-'骆' => '駱',
-'骇' => '駭',
-'骈' => '駢',
-'骉' => '驫',
-'骊' => '驪',
-'骋' => '騁',
-'验' => '驗',
-'骍' => '騂',
-'骎' => '駸',
-'骏' => '駿',
-'骐' => '騏',
-'骑' => '騎',
-'骒' => '騍',
-'骓' => '騅',
-'骔' => '騌',
-'骕' => '驌',
-'骖' => '驂',
-'骗' => '騙',
-'骘' => '騭',
-'骙' => '騤',
-'骚' => '騷',
-'骛' => '騖',
-'骜' => '驁',
-'骝' => '騮',
-'骞' => '騫',
-'骟' => '騸',
-'骠' => '驃',
-'骡' => '騾',
-'骢' => '驄',
-'骣' => '驏',
-'骤' => '驟',
-'骥' => '驥',
-'骦' => '驦',
-'骧' => '驤',
-'髅' => '髏',
-'髋' => '髖',
-'髌' => '髕',
-'鬓' => '鬢',
-'鬶' => '鬹',
-'魇' => '魘',
-'魉' => '魎',
-'鱼' => '魚',
-'鱽' => '魛',
-'鱾' => '魢',
-'鱿' => '魷',
-'鲀' => '魨',
-'鲁' => '魯',
-'鲂' => '魴',
-'鲃' => '䰾',
-'鲄' => '魺',
-'鲅' => '鮁',
-'鲆' => '鮃',
-'鲇' => '鯰',
-'鲈' => '鱸',
-'鲉' => '鮋',
-'鲊' => '鮓',
-'鲋' => '鮒',
-'鲌' => '鮊',
-'鲍' => '鮑',
-'鲎' => '鱟',
-'鲏' => '鮍',
-'鲐' => '鮐',
-'鲑' => '鮭',
-'鲒' => '鮚',
-'鲓' => '鮳',
-'鲔' => '鮪',
-'鲕' => '鮞',
-'鲖' => '鮦',
-'鲗' => '鰂',
-'鲘' => '鮜',
-'鲙' => '鱠',
-'鲚' => '鱭',
-'鲛' => '鮫',
-'鲜' => '鮮',
-'鲝' => '鮺',
-'鲞' => '鯗',
-'鲟' => '鱘',
-'鲠' => '鯁',
-'鲡' => '鱺',
-'鲢' => '鰱',
-'鲣' => '鰹',
-'鲤' => '鯉',
-'鲥' => '鰣',
-'鲦' => '鰷',
-'鲧' => '鯀',
-'鲨' => '鯊',
-'鲩' => '鯇',
-'鲪' => '鮶',
-'鲫' => '鯽',
-'鲬' => '鯒',
-'鲭' => '鯖',
-'鲮' => '鯪',
-'鲯' => '鯕',
-'鲰' => '鯫',
-'鲱' => '鯡',
-'鲲' => '鯤',
-'鲳' => '鯧',
-'鲴' => '鯝',
-'鲵' => '鯢',
-'鲷' => '鯛',
-'鲸' => '鯨',
-'鲹' => '鰺',
-'鲺' => '鯴',
-'鲻' => '鯔',
-'鲼' => '鱝',
-'鲽' => '鰈',
-'鲾' => '鰏',
-'鲿' => '鱨',
-'鳀' => '鯷',
-'鳁' => '鰮',
-'鳂' => '鰃',
-'鳃' => '鰓',
-'鳄' => '鱷',
-'鳅' => '鰍',
-'鳆' => '鰒',
-'鳇' => '鰉',
-'鳈' => '鰁',
-'鳉' => '鱂',
-'鳊' => '鯿',
-'鳋' => '鰠',
-'鳌' => '鰲',
-'鳍' => '鰭',
-'鳎' => '鰨',
-'鳏' => '鰥',
-'鳐' => '鰩',
-'鳑' => '鰟',
-'鳒' => '鰜',
-'鳓' => '鰳',
-'鳔' => '鰾',
-'鳕' => '鱈',
-'鳖' => '鱉',
-'鳗' => '鰻',
-'鳘' => '鰵',
-'鳙' => '鱅',
-'鳚' => '䲁',
-'鳛' => '鰼',
-'鳜' => '鱖',
-'鳝' => '鱔',
-'鳞' => '鱗',
-'鳟' => '鱒',
-'鳠' => '鱯',
-'鳡' => '鱤',
-'鳢' => '鱧',
-'鳣' => '鱣',
-'鳤' => '䲘',
-'鸟' => '鳥',
-'鸠' => '鳩',
-'鸡' => '雞',
-'鸢' => '鳶',
-'鸣' => '鳴',
-'鸤' => '鳲',
-'鸥' => '鷗',
-'鸦' => '鴉',
-'鸧' => '鶬',
-'鸨' => '鴇',
-'鸩' => '鴆',
-'鸪' => '鴣',
-'鸫' => '鶇',
-'鸬' => '鸕',
-'鸭' => '鴨',
-'鸮' => '鴞',
-'鸯' => '鴦',
-'鸰' => '鴒',
-'鸱' => '鴟',
-'鸲' => '鴝',
-'鸳' => '鴛',
-'鸴' => '鷽',
-'鸵' => '鴕',
-'鸶' => '鷥',
-'鸷' => '鷙',
-'鸸' => '鴯',
-'鸹' => '鴰',
-'鸺' => '鵂',
-'鸻' => '鴴',
-'鸼' => '鵃',
-'鸽' => '鴿',
-'鸾' => '鸞',
-'鸿' => '鴻',
-'鹀' => '鵐',
-'鹁' => '鵓',
-'鹂' => '鸝',
-'鹃' => '鵑',
-'鹄' => '鵠',
-'鹅' => '鵝',
-'鹆' => '鵒',
-'鹇' => '鷳',
-'鹈' => '鵜',
-'鹉' => '鵡',
-'鹊' => '鵲',
-'鹋' => '鶓',
-'鹌' => '鵪',
-'鹍' => '鵾',
-'鹎' => '鵯',
-'鹏' => '鵬',
-'鹐' => '鵮',
-'鹑' => '鶉',
-'鹒' => '鶊',
-'鹓' => '鵷',
-'鹔' => '鷫',
-'鹕' => '鶘',
-'鹖' => '鶡',
-'鹗' => '鶚',
-'鹘' => '鶻',
-'鹙' => '鶖',
-'鹚' => '鶿',
-'鹛' => '鶥',
-'鹜' => '鶩',
-'鹝' => '鷊',
-'鹞' => '鷂',
-'鹟' => '鶲',
-'鹠' => '鶹',
-'鹡' => '鶺',
-'鹢' => '鷁',
-'鹣' => '鶼',
-'鹤' => '鶴',
-'鹥' => '鷖',
-'鹦' => '鸚',
-'鹧' => '鷓',
-'鹨' => '鷚',
-'鹩' => '鷯',
-'鹪' => '鷦',
-'鹫' => '鷲',
-'鹬' => '鷸',
-'鹭' => '鷺',
-'鹮' => '䴉',
-'鹯' => '鸇',
-'鹰' => '鷹',
-'鹱' => '鸌',
-'鹲' => '鸏',
-'鹳' => '鸛',
-'鹴' => '鸘',
-'鹾' => '鹺',
-'麦' => '麥',
-'麸' => '麩',
-'麹' => '麴',
-'黄' => '黃',
-'黉' => '黌',
-'黡' => '黶',
-'黩' => '黷',
-'黪' => '黲',
-'黾' => '黽',
-'鼋' => '黿',
-'鼍' => '鼉',
-'鼗' => '鞀',
-'鼹' => '鼴',
-'齐' => '齊',
-'齑' => '齏',
-'齿' => '齒',
-'龀' => '齔',
-'龁' => '齕',
-'龂' => '齗',
-'龃' => '齟',
-'龄' => '齡',
-'龅' => '齙',
-'龆' => '齠',
-'龇' => '齜',
-'龈' => '齦',
-'龉' => '齬',
-'龊' => '齪',
-'龋' => '齲',
-'龌' => '齷',
-'龙' => '龍',
-'龚' => '龔',
-'龛' => '龕',
-'龟' => '龜',
-'𠆲' => '儣',
-'𠆿' => '𠌥',
-'𠉂' => '㒓',
-'𠉗' => '𠏢',
-'𠚳' => '𠠎',
-'𠛅' => '剾',
-'𠛆' => '𠞆',
-'𠯟' => '哯',
-'𠯠' => '噅',
-'𠲥' => '𡅏',
-'𠴢' => '𡄔',
-'𠵸' => '𡄣',
-'𠵾' => '㗲',
-'𡋀' => '𡓾',
-'𡋗' => '𡑭',
-'𡒄' => '壈',
-'𡝠' => '㜷',
-'𡞱' => '㜢',
-'𡭜' => '𡮉',
-'𡭬' => '𡮣',
-'𡶴' => '嵼',
-'𢋈' => '㢝',
-'𢘝' => '𢣚',
-'𢘞' => '𢣭',
-'𢙓' => '懀',
-'𢛯' => '㦎',
-'𢫊' => '𢷮',
-'𢫞' => '𢶫',
-'𢫬' => '摋',
-'𢬦' => '𢹿',
-'𢭏' => '擣',
-'𢽾' => '斅',
-'𣆐' => '曥',
-'𣍨' => '𦢈',
-'𣍯' => '腪',
-'𣍰' => '脥',
-'𣎑' => '臗',
-'𣐤' => '欍',
-'𣑶' => '𣠲',
-'𣗋' => '欓',
-'𣘓' => '𣞻',
-'𣘴' => '檭',
-'𣘷' => '𣝕',
-'𣭤' => '𣯴',
-'𣶩' => '澅',
-'𣶫' => '𣿉',
-'𣸣' => '濆',
-'𣺼' => '灙',
-'𣺽' => '𤁣',
-'𣽷' => '瀃',
-'𤆡' => '熓',
-'𤇃' => '爄',
-'𤇄' => '熌',
-'𤈶' => '熉',
-'𤈷' => '㷿',
-'𤊀' => '𤒎',
-'𤋏' => '熡',
-'𤞤' => '玁',
-'𤠋' => '㺏',
-'𤦀' => '瓕',
-'𤳄' => '𤳸',
-'𤶧' => '𤸫',
-'𤽯' => '㿧',
-'𤾀' => '皟',
-'𥅘' => '𥌃',
-'𥅴' => '䀹',
-'𥆧' => '瞤',
-'𥇢' => '䁪',
-'𥐟' => '礒',
-'𥐯' => '𥖅',
-'𥐰' => '𥕥',
-'𥐻' => '碙',
-'𥧂' => '𥨐',
-'𥬀' => '䉙',
-'𥬞' => '籋',
-'𥬠' => '篘',
-'𥭉' => '𥵊',
-'𥮋' => '𥸠',
-'𥮜' => '䉲',
-'𥱔' => '𥵃',
-'𥹥' => '𥼽',
-'𥺅' => '䊭',
-'𥺇' => '𥽖',
-'𦈈' => '𥿊',
-'𦈉' => '緷',
-'𦈋' => '綇',
-'𦈌' => '綀',
-'𦈎' => '繟',
-'𦈏' => '緍',
-'𦈐' => '縺',
-'𦈑' => '緸',
-'𦈒' => '𦂅',
-'𦈓' => '䋿',
-'𦈔' => '縎',
-'𦈕' => '緰',
-'𦈖' => '䌈',
-'𦈗' => '𦃄',
-'𦈘' => '䌋',
-'𦈙' => '䌰',
-'𦈚' => '縬',
-'𦈛' => '繓',
-'𦈜' => '䌖',
-'𦈝' => '繏',
-'𦈞' => '䌟',
-'𦈟' => '䌝',
-'𦈠' => '䌥',
-'𦈡' => '繻',
-'𦛨' => '朥',
-'𦝼' => '膢',
-'𦟗' => '𦣎',
-'𦨩' => '𦪽',
-'𦰴' => '䕳',
-'𧉞' => '䗿',
-'𧒭' => '𧔥',
-'𧮪' => '詀',
-'𧳕' => '𧳟',
-'𧹑' => '䞈',
-'𧹓' => '𧶔',
-'𧹕' => '䝻',
-'𧹖' => '賟',
-'𧹗' => '贃',
-'𧿈' => '𨇁',
-'𨀱' => '𨄣',
-'𨁴' => '𨅍',
-'𨂺' => '𨈊',
-'𨄄' => '𨈌',
-'𨅫' => '𨇞',
-'𨅬' => '躝',
-'𨉗' => '軉',
-'𨐅' => '軗',
-'𨐆' => '𨊻',
-'𨐇' => '𨏠',
-'𨐈' => '輄',
-'𨐉' => '𨎮',
-'𨐊' => '𨏥',
-'𨑹' => '䢨',
-'𨤰' => '𨤻',
-'𨰾' => '鎷',
-'𨰿' => '釳',
-'𨱀' => '𨥛',
-'𨱁' => '鈠',
-'𨱂' => '鈋',
-'𨱃' => '鈲',
-'𨱄' => '鈯',
-'𨱅' => '鉁',
-'𨱆' => '龯',
-'𨱇' => '銶',
-'𨱈' => '鋉',
-'𨱉' => '鍄',
-'𨱊' => '𨧱',
-'𨱋' => '錂',
-'𨱌' => '鏆',
-'𨱍' => '鎯',
-'𨱎' => '鍮',
-'𨱏' => '鎝',
-'𨱐' => '𨫒',
-'𨱑' => '鐄',
-'𨱒' => '鏉',
-'𨱓' => '鐎',
-'𨱔' => '鐏',
-'𨱕' => '𨮂',
-'𨱖' => '䥩',
-'𨷿' => '䦳',
-'𨸀' => '𨳕',
-'𨸁' => '𨳑',
-'𨸂' => '閍',
-'𨸃' => '閐',
-'𨸄' => '䦘',
-'𨸅' => '𨴗',
-'𨸆' => '𨵩',
-'𨸇' => '𨵸',
-'𨸉' => '𨶀',
-'𨸊' => '𨶏',
-'𨸋' => '𨶲',
-'𨸌' => '𨶮',
-'𨸎' => '𨷲',
-'𨸘' => '𨽏',
-'𨸟' => '䧢',
-'𩏼' => '䪏',
-'𩏽' => '𩏪',
-'𩏾' => '𩎢',
-'𩏿' => '䪘',
-'𩐀' => '䪗',
-'𩖕' => '𩓣',
-'𩖖' => '顃',
-'𩖗' => '䫴',
-'𩙥' => '颰',
-'𩙦' => '𩗀',
-'𩙧' => '𩗡',
-'𩙨' => '𩘹',
-'𩙩' => '𩘀',
-'𩙪' => '颷',
-'𩙫' => '颾',
-'𩙬' => '𩘺',
-'𩙭' => '𩘝',
-'𩙮' => '䬘',
-'𩙯' => '䬝',
-'𩙰' => '𩙈',
-'𩟿' => '𩚛',
-'𩠀' => '𩚥',
-'𩠁' => '𩚵',
-'𩠂' => '𩛆',
-'𩠃' => '𩛩',
-'𩠅' => '𩟐',
-'𩠆' => '𩜦',
-'𩠇' => '䭀',
-'𩠈' => '䭃',
-'𩠉' => '𩜇',
-'𩠊' => '𩜵',
-'𩠋' => '𩝔',
-'𩠌' => '餸',
-'𩠎' => '𩞄',
-'𩠏' => '𩞦',
-'𩠠' => '𩠴',
-'𩧦' => '𩡺',
-'𩧨' => '駎',
-'𩧩' => '𩤊',
-'𩧪' => '䮾',
-'𩧫' => '駚',
-'𩧬' => '𩢡',
-'𩧭' => '䭿',
-'𩧮' => '𩢾',
-'𩧯' => '驋',
-'𩧰' => '䮝',
-'𩧱' => '𩥉',
-'𩧲' => '駧',
-'𩧳' => '𩢸',
-'𩧴' => '駩',
-'𩧵' => '𩢴',
-'𩧶' => '𩣏',
-'𩧺' => '駶',
-'𩧻' => '𩣵',
-'𩧼' => '𩣺',
-'𩧿' => '䮠',
-'𩨀' => '騔',
-'𩨁' => '䮞',
-'𩨃' => '騝',
-'𩨄' => '騪',
-'𩨅' => '𩤸',
-'𩨆' => '𩤙',
-'𩨇' => '䮫',
-'𩨈' => '騟',
-'𩨉' => '𩤲',
-'𩨊' => '騚',
-'𩨋' => '𩥄',
-'𩨌' => '𩥑',
-'𩨍' => '𩥇',
-'𩨎' => '龭',
-'𩨏' => '䮳',
-'𩨐' => '𩧆',
-'𩬣' => '𩭙',
-'𩬤' => '𩰀',
-'𩯒' => '𩯳',
-'𩲒' => '𩳤',
-'𩽹' => '魥',
-'𩽺' => '𩵩',
-'𩽻' => '𩵹',
-'𩽼' => '鯶',
-'𩽽' => '𩶱',
-'𩽾' => '鮟',
-'𩽿' => '𩶰',
-'𩾁' => '鯄',
-'𩾂' => '䲖',
-'𩾃' => '鮸',
-'𩾄' => '𩷰',
-'𩾅' => '𩸃',
-'𩾆' => '𩸦',
-'𩾇' => '鯱',
-'𩾈' => '䱙',
-'𩾊' => '䱬',
-'𩾋' => '䱰',
-'𩾌' => '鱇',
-'𩾎' => '𩽇',
-'𪉂' => '䲰',
-'𪉃' => '鳼',
-'𪉄' => '𩿪',
-'𪉅' => '𪀦',
-'𪉆' => '鴲',
-'𪉈' => '鴜',
-'𪉉' => '𪁈',
-'𪉊' => '鷨',
-'𪉋' => '𪀾',
-'𪉌' => '𪁖',
-'𪉍' => '鵚',
-'𪉎' => '𪂆',
-'𪉏' => '𪃏',
-'𪉐' => '𪃍',
-'𪉑' => '鷔',
-'𪉒' => '𪄕',
-'𪉓' => '𪈼',
-'𪉔' => '𪄆',
-'𪉕' => '𪇳',
-'𪎈' => '䴬',
-'𪎉' => '麲',
-'𪎊' => '麨',
-'𪎋' => '䴴',
-'𪎌' => '麳',
-'𪎍' => '𪋿',
-'𪔭' => '𪔵',
-'𪚏' => '𪘀',
-'𪚐' => '𪘯',
-'𪞝' => '凙',
-'𪡏' => '嗹',
-'𪢮' => '圞',
-'𪨊' => '㞞',
-'𪨗' => '屩',
-'𪻐' => '瑽',
-'𪾢' => '睍',
-'𫁡' => '鴗',
-'𫂈' => '䉬',
-'𫄨' => '絺',
-'𫄸' => '纁',
-'𫌀' => '襀',
-'𫌨' => '覼',
-'𫍙' => '訑',
-'𫍢' => '譊',
-'𫍰' => '諰',
-'𫍲' => '謏',
-'𫏋' => '蹻',
-'𫐄' => '軏',
-'𫐆' => '轣',
-'𫐉' => '軨',
-'𫐐' => '輗',
-'𫐓' => '輮',
-'𫓧' => '鈇',
-'𫓩' => '鏦',
-'𫔎' => '鐍',
-'𫖸' => '願',
-'𫗠' => '餦',
-'𫗦' => '餔',
-'𫗧' => '餗',
-'𫗮' => '餭',
-'𫗴' => '饘',
-'𫘝' => '駃',
-'𫘣' => '駻',
-'𫘤' => '騃',
-'𫘨' => '騠',
-'𫚈' => '鱮',
-'𫚉' => '魟',
-'𫚒' => '鮄',
-'𫚔' => '鮰',
-'𫚕' => '鰤',
-'𫚙' => '鯆',
-'𫛛' => '鳷',
-'𫛞' => '鴃',
-'𫛢' => '鸋',
-'𫛶' => '鶒',
-'𫛸' => '鶗',
-'0出现' => '0出現',
-'0出現' => '0出現',
-'0出線' => '0出線',
-'0出线' => '0出線',
-'0只支持' => '0只支持',
-'0只支援' => '0只支援',
-'0周后' => '0周後',
-'0天后' => '0天後',
-'0年' => '0年',
-'0只' => '0隻',
-'0余' => '0餘',
-'0出' => '0齣',
-'1只支持' => '1只支持',
-'1只支援' => '1只支援',
-'1周后' => '1周後',
-'1天后' => '1天後',
-'1年' => '1年',
-'1只' => '1隻',
-'1余' => '1餘',
-'2只支持' => '2只支持',
-'2只支援' => '2只支援',
-'2周后' => '2周後',
-'2天后' => '2天後',
-'2年' => '2年',
-'2只' => '2隻',
-'2余' => '2餘',
-'3只支持' => '3只支持',
-'3只支援' => '3只支援',
-'3周后' => '3周後',
-'3天后' => '3天後',
-'3年' => '3年',
-'3只' => '3隻',
-'3余' => '3餘',
-'4只支持' => '4只支持',
-'4只支援' => '4只支援',
-'4周后' => '4周後',
-'4天后' => '4天後',
-'4年' => '4年',
-'4只' => '4隻',
-'4余' => '4餘',
-'5只支持' => '5只支持',
-'5只支援' => '5只支援',
-'5周后' => '5周後',
-'5天后' => '5天後',
-'5年' => '5年',
-'5只' => '5隻',
-'5余' => '5餘',
-'6只支持' => '6只支持',
-'6只支援' => '6只支援',
-'6周后' => '6周後',
-'6天后' => '6天後',
-'6年' => '6年',
-'6只' => '6隻',
-'6余' => '6餘',
-'7只支持' => '7只支持',
-'7只支援' => '7只支援',
-'7周后' => '7周後',
-'7天后' => '7天後',
-'7年' => '7年',
-'7只' => '7隻',
-'7余' => '7餘',
-'8只支持' => '8只支持',
-'8只支援' => '8只支援',
-'8周后' => '8周後',
-'8天后' => '8天後',
-'8年' => '8年',
-'8只' => '8隻',
-'8余' => '8餘',
-'9只支持' => '9只支持',
-'9只支援' => '9只支援',
-'9周后' => '9周後',
-'9天后' => '9天後',
-'9年' => '9年',
-'9只' => '9隻',
-'9余' => '9餘',
-'·范' => '·范',
-'’s' => '’s',
-'、面点' => '、麵點',
-'。个中' => '。箇中',
-'〇周后' => '〇周後',
-'〇年' => '〇年',
-'〇只' => '〇隻',
-'〇余' => '〇餘',
-'“' => '「',
-'”' => '」',
-'‘' => '『',
-'’' => '』',
-'一干二净' => '一乾二淨',
-'一伙人' => '一伙人',
-'一伙头' => '一伙頭',
-'一伙食' => '一伙食',
-'一并' => '一併',
-'一个' => '一個',
-'一个准' => '一個準',
-'一划' => '一划',
-'一半只' => '一半只',
-'一吊钱' => '一吊錢',
-'一周后' => '一周後',
-'一地里' => '一地裡',
-'一伙' => '一夥',
-'一天后' => '一天後',
-'一天钟' => '一天鐘',
-'一干人' => '一干人',
-'一干家中' => '一干家中',
-'一干弟兄' => '一干弟兄',
-'一干弟子' => '一干弟子',
-'一干部下' => '一干部下',
-'一年' => '一年',
-'一年里' => '一年裡',
-'一别头' => '一彆頭',
-'一斗斗' => '一斗斗',
-'一树百获' => '一樹百穫',
-'一准' => '一準',
-'一争两丑' => '一爭兩醜',
-'一物克一物' => '一物剋一物',
-'一目了然' => '一目了然',
-'一碗面' => '一碗麵',
-'一扎' => '一紮',
-'一冲' => '一衝',
-'一厘一毫' => '一釐一毫',
-'一锅面' => '一鍋麵',
-'一只' => '一隻',
-'一面食' => '一面食',
-'一余' => '一餘',
-'一发千钧' => '一髮千鈞',
-'一哄而散' => '一鬨而散',
-'一出剧' => '一齣劇',
-'一出喜剧' => '一齣喜劇',
-'一出好戏' => '一齣好戲',
-'一出子' => '一齣子',
-'一出悲剧' => '一齣悲劇',
-'一出戏' => '一齣戲',
-'一出电影' => '一齣電影',
-'丁丁当当' => '丁丁當當',
-'丁丑' => '丁丑',
-'七个' => '七個',
-'七周后' => '七周後',
-'七天后' => '七天後',
-'七年' => '七年',
-'七情六欲' => '七情六慾',
-'七扎' => '七紮',
-'七只' => '七隻',
-'七余' => '七餘',
-'万俟' => '万俟',
-'万旗' => '万旗',
-'三个' => '三個',
-'三周后' => '三周後',
-'三天后' => '三天後',
-'三年' => '三年',
-'三征七辟' => '三徵七辟',
-'三准' => '三準',
-'三扎' => '三紮',
-'三统历' => '三統曆',
-'三统历史' => '三統歷史',
-'三只' => '三隻',
-'三余' => '三餘',
-'三出戏' => '三齣戲',
-'上天里' => '上天里',
-'上梁山' => '上梁山',
-'上梁' => '上樑',
-'上台面' => '上檯面',
-'上签名' => '上簽名',
-'上签字' => '上簽字',
-'上签定' => '上簽定',
-'上签写' => '上簽寫',
-'上签收' => '上簽收',
-'上签发' => '上簽發',
-'上签约' => '上簽約',
-'上签署' => '上簽署',
-'上签订' => '上簽訂',
-'上签' => '上籤',
-'上系上' => '上繫上',
-'上课钟' => '上課鐘',
-'上面糊' => '上面糊',
-'下于' => '下於',
-'下梁' => '下樑',
-'下注解' => '下注解',
-'下签名' => '下簽名',
-'下签字' => '下簽字',
-'下签定' => '下簽定',
-'下签写' => '下簽寫',
-'下签收' => '下簽收',
-'下签发' => '下簽發',
-'下签约' => '下簽約',
-'下签署' => '下簽署',
-'下签订' => '下簽訂',
-'下签' => '下籤',
-'下课钟' => '下課鐘',
-'不干不净' => '不乾不淨',
-'不干胶' => '不乾膠',
-'不克自制' => '不克自制',
-'不加自制' => '不加自制',
-'不占凶吉' => '不占凶吉',
-'不占卜' => '不占卜',
-'不占吉凶' => '不占吉凶',
-'不占算' => '不占算',
-'不只' => '不只',
-'不太准' => '不太準',
-'不好干涉' => '不好干涉',
-'不好干預' => '不好干預',
-'不好干预' => '不好干預',
-'不嫌母丑' => '不嫌母醜',
-'不寒而栗' => '不寒而慄',
-'不吊' => '不弔',
-'不卷' => '不捲',
-'不采' => '不採',
-'不斗胆' => '不斗膽',
-'不斗膽' => '不斗膽',
-'不断发' => '不斷發',
-'不每只' => '不每只',
-'不谷' => '不穀',
-'不托' => '不託',
-'不负所托' => '不負所托',
-'不通吊庆' => '不通弔慶',
-'不丑' => '不醜',
-'不采声' => '不采聲',
-'不采聲' => '不采聲',
-'不锈钢' => '不鏽鋼',
-'不食干腊' => '不食乾腊',
-'不斗' => '不鬥',
-'丑三' => '丑三',
-'丑年' => '丑年',
-'丑日' => '丑日',
-'丑旦' => '丑旦',
-'丑时' => '丑時',
-'丑月' => '丑月',
-'丑表功' => '丑表功',
-'丑角' => '丑角',
-'且于' => '且於',
-'世田谷' => '世田谷',
-'世界杯' => '世界盃',
-'世纪里' => '世紀裡',
-'世纪钟' => '世紀鐘',
-'世纪钟表' => '世紀鐘錶',
-'丢丑' => '丟醜',
-'并曰入淀' => '並曰入澱',
-'并发动' => '並發動',
-'并发展' => '並發展',
-'并发布' => '並發布',
-'并发现' => '並發現',
-'并发表' => '並發表',
-'并行' => '並行',
-'中国国际信托投资公司' => '中國國際信托投資公司',
-'中型钟' => '中型鐘',
-'中型钟表面' => '中型鐘表面',
-'中型钟表' => '中型鐘錶',
-'中型钟面' => '中型鐘面',
-'中境里' => '中境里',
-'中岳' => '中嶽',
-'中庄子' => '中庄子',
-'中文里' => '中文裡',
-'中于' => '中於',
-'中签名' => '中簽名',
-'中签字' => '中簽字',
-'中签定' => '中簽定',
-'中签写' => '中簽寫',
-'中签收' => '中簽收',
-'中签发' => '中簽發',
-'中签约' => '中簽約',
-'中签署' => '中簽署',
-'中签订' => '中簽訂',
-'中签' => '中籤',
-'中风后' => '中風後',
-'丰仪' => '丰儀',
-'丰儀' => '丰儀',
-'丰南' => '丰南',
-'丰姿' => '丰姿',
-'丰容' => '丰容',
-'丰情' => '丰情',
-'丰标' => '丰標',
-'丰标不凡' => '丰標不凡',
-'丰標不凡' => '丰標不凡',
-'丰神' => '丰神',
-'丰茸' => '丰茸',
-'丰采' => '丰采',
-'丰韵' => '丰韻',
-'丰韻' => '丰韻',
-'丹棱' => '丹稜',
-'主仆' => '主僕',
-'主干' => '主幹',
-'主钟差' => '主鐘差',
-'主钟曲线' => '主鐘曲線',
-'乃系' => '乃係',
-'么么唱唱' => '么么唱唱',
-'么九' => '么九',
-'么儿' => '么兒',
-'么半' => '么半',
-'么喝' => '么喝',
-'么女' => '么女',
-'么妹' => '么妹',
-'么子' => '么子',
-'么弟' => '么弟',
-'么正' => '么正',
-'么爷' => '么爺',
-'么雞' => '么雞',
-'么么小丑' => '么麼小丑',
-'之一只' => '之一只',
-'之二只' => '之二只',
-'之八九只' => '之八九只',
-'之征' => '之徵',
-'之托' => '之託',
-'之钟' => '之鐘',
-'之鉴' => '之鑑',
-'之余' => '之餘',
-'乙丑' => '乙丑',
-'九世之仇' => '九世之讎',
-'九个' => '九個',
-'九周后' => '九周後',
-'九天后' => '九天後',
-'九年' => '九年',
-'九谷' => '九穀',
-'九扎' => '九紮',
-'九只' => '九隻',
-'九余' => '九餘',
-'干干' => '乾乾',
-'干干净净' => '乾乾淨淨',
-'干井' => '乾井',
-'干个够' => '乾個夠',
-'干儿' => '乾兒',
-'干冰' => '乾冰',
-'干冷' => '乾冷',
-'干刻版' => '乾刻版',
-'干剥剥' => '乾剝剝',
-'干卦' => '乾卦',
-'干和' => '乾和',
-'干咳' => '乾咳',
-'干咽' => '乾咽',
-'干哥' => '乾哥',
-'干哭' => '乾哭',
-'干唱' => '乾唱',
-'干啼' => '乾啼',
-'干乔' => '乾喬',
-'干呕' => '乾嘔',
-'干哕' => '乾噦',
-'干嚎' => '乾嚎',
-'干回付' => '乾回付',
-'干圆洁净' => '乾圓潔淨',
-'干地' => '乾地',
-'干坞' => '乾塢',
-'干女' => '乾女',
-'干奴才' => '乾奴才',
-'干妹' => '乾妹',
-'干姊' => '乾姊',
-'干姐' => '乾姐',
-'干娘' => '乾娘',
-'干妈' => '乾媽',
-'干子' => '乾子',
-'干季' => '乾季',
-'干尸' => '乾屍',
-'干屎橛' => '乾屎橛',
-'干巴' => '乾巴',
-'干式' => '乾式',
-'干弟' => '乾弟',
-'干急' => '乾急',
-'干性' => '乾性',
-'干打雷' => '乾打雷',
-'干折' => '乾折',
-'干撂台' => '乾撂台',
-'干撇下' => '乾撇下',
-'干擦' => '乾擦',
-'干支剌' => '乾支剌',
-'干支支' => '乾支支',
-'干料' => '乾料',
-'干旱' => '乾旱',
-'干暖' => '乾暖',
-'干材' => '乾材',
-'干村沙' => '乾村沙',
-'干杯' => '乾杯',
-'干果' => '乾果',
-'干枯' => '乾枯',
-'干柴' => '乾柴',
-'干柴烈火' => '乾柴烈火',
-'干梅' => '乾梅',
-'干死' => '乾死',
-'干池' => '乾池',
-'干没' => '乾沒',
-'干洗' => '乾洗',
-'干涸' => '乾涸',
-'干凉' => '乾涼',
-'干净' => '乾淨',
-'干渠' => '乾渠',
-'干渴' => '乾渴',
-'干沟' => '乾溝',
-'干漆' => '乾漆',
-'干涩' => '乾澀',
-'干湿' => '乾濕',
-'干熬' => '乾熬',
-'干热' => '乾熱',
-'干灯盏' => '乾燈盞',
-'干燥' => '乾燥',
-'干爸' => '乾爸',
-'干爹' => '乾爹',
-'干爽' => '乾爽',
-'干片' => '乾片',
-'干物' => '乾物',
-'干生受' => '乾生受',
-'干生子' => '乾生子',
-'干产' => '乾產',
-'干田' => '乾田',
-'干疥' => '乾疥',
-'干瘦' => '乾瘦',
-'干瘪' => '乾癟',
-'干癣' => '乾癬',
-'干瘾' => '乾癮',
-'干白儿' => '乾白兒',
-'干白葡萄酒' => '乾白葡萄酒',
-'干的' => '乾的',
-'干眼' => '乾眼',
-'干瞪眼' => '乾瞪眼',
-'干礼' => '乾禮',
-'干稿' => '乾稿',
-'干笑' => '乾笑',
-'干等' => '乾等',
-'干篾片' => '乾篾片',
-'干粉' => '乾粉',
-'干粮' => '乾糧',
-'干红葡萄酒' => '乾紅葡萄酒',
-'干结' => '乾結',
-'干丝' => '乾絲',
-'干纲' => '乾綱',
-'干绷' => '乾繃',
-'干耗' => '乾耗',
-'干肉片' => '乾肉片',
-'干股' => '乾股',
-'干肥' => '乾肥',
-'干脆' => '乾脆',
-'干脆面' => '乾脆麵',
-'干花' => '乾花',
-'干刍' => '乾芻',
-'干苔' => '乾苔',
-'干茨腊' => '乾茨臘',
-'干茶钱' => '乾茶錢',
-'干草' => '乾草',
-'干菜' => '乾菜',
-'干落' => '乾落',
-'干姜' => '乾薑',
-'干薪' => '乾薪',
-'干虔' => '乾虔',
-'干号' => '乾號',
-'干血浆' => '乾血漿',
-'干衣' => '乾衣',
-'干裂' => '乾裂',
-'干亲' => '乾親',
-'乾象历' => '乾象曆',
-'乾象曆' => '乾象曆',
-'干贝' => '乾貝',
-'干货' => '乾貨',
-'干躁' => '乾躁',
-'干逼' => '乾逼',
-'干酪' => '乾酪',
-'干酵母' => '乾酵母',
-'干醋' => '乾醋',
-'干重' => '乾重',
-'干量' => '乾量',
-'干锅' => '乾鍋',
-'干阿奶' => '乾阿奶',
-'干雷' => '乾雷',
-'干电' => '乾電',
-'干霍乱' => '乾霍亂',
-'干颡' => '乾顙',
-'干台' => '乾颱',
-'干食' => '乾食',
-'干饭' => '乾飯',
-'干馆' => '乾館',
-'干糇' => '乾餱',
-'干馏' => '乾餾',
-'干鱼' => '乾魚',
-'干鲜' => '乾鮮',
-'干面' => '乾麵',
-'乱发生' => '亂發生',
-'乱发脾气' => '亂發脾氣',
-'乱发' => '亂髮',
-'乱哄哄' => '亂鬨鬨',
-'了然后' => '了然後',
-'事有斗巧' => '事有鬥巧',
-'事里' => '事裡',
-'二不棱登' => '二不稜登',
-'二个' => '二個',
-'二只得' => '二只得',
-'二周后' => '二周後',
-'二天后' => '二天後',
-'二年' => '二年',
-'二缶钟惑' => '二缶鐘惑',
-'二老板' => '二老板',
-'二虎相斗' => '二虎相鬥',
-'二里头' => '二里頭',
-'二里頭' => '二里頭',
-'二只' => '二隻',
-'二余' => '二餘',
-'于丹' => '于丹',
-'于于' => '于于',
-'于仁泰' => '于仁泰',
-'于仲文' => '于仲文',
-'于佳卉' => '于佳卉',
-'于来山' => '于來山',
-'于伟国' => '于偉國',
-'于偉國' => '于偉國',
-'于光新' => '于光新',
-'于光远' => '于光遠',
-'于光遠' => '于光遠',
-'于克-兰多县' => '于克-蘭多縣',
-'于克-蘭多縣' => '于克-蘭多縣',
-'于克勒' => '于克勒',
-'于再清' => '于再清',
-'于冕' => '于冕',
-'于冠华' => '于冠華',
-'于凌奎' => '于凌奎',
-'于凌辰' => '于凌辰',
-'于勒' => '于勒',
-'于化虎' => '于化虎',
-'于占元' => '于占元',
-'于友泽' => '于友澤',
-'于台烟' => '于台煙',
-'于台煙' => '于台煙',
-'于右任' => '于右任',
-'于吉' => '于吉',
-'于和伟' => '于和偉',
-'于品海' => '于品海',
-'于国桢' => '于國楨',
-'于國楨' => '于國楨',
-'于国治' => '于國治',
-'于國治' => '于國治',
-'于坚' => '于堅',
-'于堅' => '于堅',
-'于大宝' => '于大寶',
-'于大寶' => '于大寶',
-'于天仁' => '于天仁',
-'于天龙' => '于天龍',
-'于奇库杜克' => '于奇庫杜克',
-'于奇庫杜克' => '于奇庫杜克',
-'于姓' => '于姓',
-'于娜' => '于娜',
-'于娟' => '于娟',
-'于子千' => '于子千',
-'于孔兼' => '于孔兼',
-'于学忠' => '于學忠',
-'于學忠' => '于學忠',
-'于家堡' => '于家堡',
-'于寘' => '于寘',
-'于宝轩' => '于寶軒',
-'于小伟' => '于小偉',
-'于小偉' => '于小偉',
-'于小彤' => '于小彤',
-'于小惠' => '于小惠',
-'于少保' => '于少保',
-'于山' => '于山',
-'于山国' => '于山國',
-'于山國' => '于山國',
-'于帅' => '于帥',
-'于帥' => '于帥',
-'于幼军' => '于幼軍',
-'于幼軍' => '于幼軍',
-'于康震' => '于康震',
-'于广洲' => '于廣洲',
-'于廣洲' => '于廣洲',
-'于式枚' => '于式枚',
-'于从濂' => '于從濂',
-'于從濂' => '于從濂',
-'于德海' => '于德海',
-'于志宁' => '于志寧',
-'于志寧' => '于志寧',
-'于忠肃集' => '于忠肅集',
-'于思' => '于思',
-'于慎行' => '于慎行',
-'于慧' => '于慧',
-'于成龍' => '于成龍',
-'于成龙' => '于成龍',
-'于承惠' => '于承惠',
-'于振' => '于振',
-'于振武' => '于振武',
-'于敏' => '于敏',
-'于敏中' => '于敏中',
-'于斌' => '于斌',
-'于斯塔德' => '于斯塔德',
-'于斯納爾斯貝里' => '于斯納爾斯貝里',
-'于斯纳尔斯贝里' => '于斯納爾斯貝里',
-'于斯达尔' => '于斯達爾',
-'于斯達爾' => '于斯達爾',
-'于明涛' => '于明濤',
-'于明濤' => '于明濤',
-'于是之' => '于是之',
-'于晨楠' => '于晨楠',
-'于晴' => '于晴',
-'于会泳' => '于會泳',
-'于會泳' => '于會泳',
-'于根伟' => '于根偉',
-'于根偉' => '于根偉',
-'于格' => '于格',
-'于枫' => '于楓',
-'于楓' => '于楓',
-'于荣光' => '于榮光',
-'于樂' => '于樂',
-'于树洁' => '于樹潔',
-'于樹潔' => '于樹潔',
-'于欣' => '于欣',
-'于欣源' => '于欣源',
-'于正昇' => '于正昇',
-'于正昌' => '于正昌',
-'于归' => '于歸',
-'于氏' => '于氏',
-'于永波' => '于永波',
-'于江震' => '于江震',
-'于波' => '于波',
-'于洋' => '于洋',
-'于洪区' => '于洪區',
-'于洪區' => '于洪區',
-'于浩威' => '于浩威',
-'于海' => '于海',
-'于海洋' => '于海洋',
-'于湘兰' => '于湘蘭',
-'于湘蘭' => '于湘蘭',
-'于汉超' => '于漢超',
-'于漢超' => '于漢超',
-'于澄' => '于澄',
-'于泽尔' => '于澤爾',
-'于澤爾' => '于澤爾',
-'于涛' => '于濤',
-'于濤' => '于濤',
-'于熙珍' => '于熙珍',
-'于尔岑' => '于爾岑',
-'于爾岑' => '于爾岑',
-'于尔根' => '于爾根',
-'于爾根' => '于爾根',
-'于尔里克' => '于爾里克',
-'于爾里克' => '于爾里克',
-'于特森' => '于特森',
-'于玉立' => '于玉立',
-'于田' => '于田',
-'于禁' => '于禁',
-'于秀敏' => '于秀敏',
-'于立成' => '于立成',
-'于素秋' => '于素秋',
-'于美人' => '于美人',
-'于耘婕' => '于耘婕',
-'于若木' => '于若木',
-'于荫霖' => '于蔭霖',
-'于蔭霖' => '于蔭霖',
-'于衡' => '于衡',
-'于西翰' => '于西翰',
-'于謙' => '于謙',
-'于谦' => '于謙',
-'于谨' => '于謹',
-'于貝爾' => '于貝爾',
-'于贝尔' => '于貝爾',
-'于贈' => '于贈',
-'于赠' => '于贈',
-'于越' => '于越',
-'于軍' => '于軍',
-'于逸堯' => '于逸堯',
-'于道泉' => '于道泉',
-'于远伟' => '于遠偉',
-'于遠偉' => '于遠偉',
-'于都县' => '于都縣',
-'于都縣' => '于都縣',
-'于里察' => '于里察',
-'于阗' => '于闐',
-'于双戈' => '于雙戈',
-'于雙戈' => '于雙戈',
-'于云鹤' => '于雲鶴',
-'于震' => '于震',
-'于震寰' => '于震寰',
-'于震环' => '于震環',
-'于震環' => '于震環',
-'于靖' => '于靖',
-'于非暗' => '于非闇',
-'于非闇' => '于非闇',
-'于韋斯屈萊' => '于韋斯屈萊',
-'于韦斯屈莱' => '于韋斯屈萊',
-'于風政' => '于風政',
-'于风政' => '于風政',
-'于飛' => '于飛',
-'于飞' => '于飛',
-'于余曲折' => '于餘曲折',
-'于鬯' => '于鬯',
-'于魁智' => '于魁智',
-'于凤桐' => '于鳳桐',
-'于鳳桐' => '于鳳桐',
-'于凤至' => '于鳳至',
-'于鳳至' => '于鳳至',
-'于默奥' => '于默奧',
-'于默奧' => '于默奧',
-'云乎' => '云乎',
-'云云' => '云云',
-'云何' => '云何',
-'云敞' => '云敞',
-'云为' => '云為',
-'云為' => '云為',
-'云然' => '云然',
-'云尔' => '云爾',
-'云:' => '云:',
-'五个' => '五個',
-'五周后' => '五周後',
-'五天后' => '五天後',
-'五峰县' => '五峯縣',
-'五岳' => '五嶽',
-'五年' => '五年',
-'五谷' => '五穀',
-'五扎' => '五紮',
-'五脏' => '五臟',
-'五行生克' => '五行生剋',
-'五谷王北街' => '五谷王北街',
-'五谷王南街' => '五谷王南街',
-'五只' => '五隻',
-'五余' => '五餘',
-'井干' => '井幹',
-'井里' => '井裡',
-'亚于' => '亞於',
-'亚美尼亚历' => '亞美尼亞曆',
-'交托' => '交託',
-'交游' => '交遊',
-'交哄' => '交鬨',
-'亦云' => '亦云',
-'京沈' => '京瀋',
-'亮丑' => '亮醜',
-'亮钟' => '亮鐘',
-'人云' => '人云',
-'人如风后入江云' => '人如風後入江雲',
-'人干的' => '人幹的',
-'人欲' => '人慾',
-'人数只' => '人數只',
-'人数里' => '人數裡',
-'人物志' => '人物誌',
-'人生天里' => '人生天里',
-'人发指' => '人髮指',
-'什锦面' => '什錦麵',
-'仁贵' => '仁貴',
-'介胄' => '介冑',
-'他干的' => '他幹的',
-'他钟' => '他鐘',
-'付托' => '付託',
-'仙后' => '仙后',
-'仙后座' => '仙后座',
-'仙游' => '仙遊',
-'代数里' => '代數裡',
-'代理发行' => '代理發行',
-'代码表' => '代碼表',
-'代表' => '代表',
-'以自制' => '以自制',
-'仲裁制' => '仲裁制',
-'件钟' => '件鐘',
-'价川' => '价川',
-'任何钟' => '任何鐘',
-'任何钟表' => '任何鐘錶',
-'任教于' => '任教於',
-'任于' => '任於',
-'仿制' => '仿製',
-'伊于湖底' => '伊于湖底',
-'伊府面' => '伊府麵',
-'伊斯兰教历' => '伊斯蘭教曆',
-'伊斯兰教历史' => '伊斯蘭教歷史',
-'伊斯兰历' => '伊斯蘭曆',
-'伊斯兰历史' => '伊斯蘭歷史',
-'伊东怜' => '伊東怜',
-'伊尔汗历表' => '伊爾汗曆表',
-'伊达里子' => '伊達里子',
-'伊适杰' => '伊適杰',
-'伊里布' => '伊里布',
-'伊郁' => '伊鬱',
-'伏几' => '伏几',
-'伐罪吊民' => '伐罪弔民',
-'休克期' => '休克期',
-'休征' => '休徵',
-'伙头' => '伙頭',
-'伴游' => '伴遊',
-'似于' => '似於',
-'但云' => '但云',
-'位于' => '位於',
-'位准' => '位準',
-'低洼' => '低洼',
-'住扎' => '住紮',
-'占毕' => '佔畢',
-'占头筹' => '佔頭籌',
-'占高枝儿' => '佔高枝兒',
-'何杰' => '何杰',
-'余三勝' => '余三勝',
-'余三胜' => '余三勝',
-'余光中' => '余光中',
-'余光生' => '余光生',
-'余力为' => '余力為',
-'余威德' => '余威德',
-'余子明' => '余子明',
-'余思敏' => '余思敏',
-'佛罗棱萨' => '佛羅稜薩',
-'佛钟' => '佛鐘',
-'作品里' => '作品裡',
-'作准' => '作準',
-'你夸' => '你誇',
-'佣金' => '佣金',
-'佣鈿' => '佣鈿',
-'佣钿' => '佣鈿',
-'佣錢' => '佣錢',
-'佣钱' => '佣錢',
-'佳肴' => '佳肴',
-'佳里鎮' => '佳里鎮',
-'并一不二' => '併一不二',
-'并入' => '併入',
-'并兼' => '併兼',
-'并到' => '併到',
-'并合' => '併合',
-'并名' => '併名',
-'并吞下' => '併吞下',
-'并拢' => '併攏',
-'并案' => '併案',
-'并流' => '併流',
-'并火' => '併火',
-'并为一家' => '併為一家',
-'并为一体' => '併為一體',
-'并叠' => '併疊',
-'并发型模式' => '併發型模式',
-'并发模式' => '併發模式',
-'并发症' => '併發症',
-'并发重症' => '併發重症',
-'并科' => '併科',
-'并网' => '併網',
-'并线' => '併線',
-'并肩子' => '併肩子',
-'并购' => '併購',
-'并骨' => '併骨',
-'使其斗' => '使其鬥',
-'来于' => '來於',
-'侍仆' => '侍僕',
-'供制' => '供製',
-'依依不舍' => '依依不捨',
-'依托' => '依託',
-'侵并' => '侵併',
-'局促' => '侷促',
-'便于' => '便於',
-'系数' => '係數',
-'系为' => '係為',
-'保险柜' => '保險柜',
-'信托贸易' => '信托貿易',
-'信托' => '信託',
-'修杰楷' => '修杰楷',
-'修杰麟' => '修杰麟',
-'修筑前' => '修築前',
-'修筑后' => '修築後',
-'修胡刀' => '修鬍刀',
-'俯冲' => '俯衝',
-'个月里' => '個月裡',
-'个里' => '個裡',
-'个钟' => '個鐘',
-'个钟表' => '個鐘錶',
-'们干的' => '們幹的',
-'幸免' => '倖免',
-'幸存' => '倖存',
-'幸幸' => '倖幸',
-'候复' => '候覆',
-'倚闲' => '倚閑',
-'倛丑' => '倛醜',
-'借鉴' => '借鑑',
-'倦游' => '倦遊',
-'假里' => '假裡',
-'假托' => '假託',
-'假发' => '假髮',
-'偎干' => '偎乾',
-'停停当当' => '停停當當',
-'停征' => '停徵',
-'停制' => '停製',
-'备注' => '備註',
-'家伙' => '傢伙',
-'催并' => '催併',
-'佣仆' => '傭僕',
-'傲游' => '傲遊',
-'傲霜斗雪' => '傲霜鬥雪',
-'传位于四太子' => '傳位于四太子',
-'傳位于四太子' => '傳位于四太子',
-'传于' => '傳於',
-'债累累' => '債纍纍',
-'傻里傻气' => '傻裡傻氣',
-'仅余' => '僅餘',
-'仆人' => '僕人',
-'仆使' => '僕使',
-'仆仆' => '僕僕',
-'仆僮' => '僕僮',
-'仆吏' => '僕吏',
-'仆固怀恩' => '僕固懷恩',
-'仆夫' => '僕夫',
-'仆姑' => '僕姑',
-'仆婢' => '僕婢',
-'仆妇' => '僕婦',
-'仆射' => '僕射',
-'仆少' => '僕少',
-'仆役' => '僕役',
-'仆从' => '僕從',
-'仆憎' => '僕憎',
-'仆欧' => '僕歐',
-'仆程' => '僕程',
-'仆虽罢驽' => '僕雖罷駑',
-'侥幸' => '僥倖',
-'僮仆' => '僮僕',
-'雇主' => '僱主',
-'雇人' => '僱人',
-'雇佣' => '僱傭',
-'雇到' => '僱到',
-'雇工' => '僱工',
-'雇船' => '僱船',
-'雇请' => '僱請',
-'雇车' => '僱車',
-'雇农' => '僱農',
-'仪范' => '儀範',
-'亿个' => '億個',
-'亿周后' => '億周後',
-'亿天后' => '億天後',
-'亿年' => '億年',
-'亿只' => '億隻',
-'亿余' => '億餘',
-'俭仆' => '儉僕',
-'俭朴' => '儉樸',
-'俭确之教' => '儉确之教',
-'儒略改革历' => '儒略改革曆',
-'儒略改革历史' => '儒略改革歷史',
-'儒略历' => '儒略曆',
-'儒略历史' => '儒略歷史',
-'尽尽' => '儘儘',
-'尽先' => '儘先',
-'尽其所有' => '儘其所有',
-'尽可能' => '儘可能',
-'尽快' => '儘快',
-'尽早' => '儘早',
-'尽是' => '儘是',
-'尽管' => '儘管',
-'尽自' => '儘自',
-'尽速' => '儘速',
-'尽量' => '儘量',
-'优于' => '優於',
-'优游' => '優遊',
-'兀术' => '兀朮',
-'元凶' => '元兇',
-'兆个' => '兆個',
-'兆余' => '兆餘',
-'凶刀' => '兇刀',
-'凶器' => '兇器',
-'凶嫌' => '兇嫌',
-'凶巴巴' => '兇巴巴',
-'凶徒' => '兇徒',
-'凶悍' => '兇悍',
-'凶恶' => '兇惡',
-'凶手' => '兇手',
-'凶案' => '兇案',
-'凶枪' => '兇槍',
-'凶横' => '兇橫',
-'凶残' => '兇殘',
-'凶杀' => '兇殺',
-'凶犯' => '兇犯',
-'凶狠' => '兇狠',
-'凶猛' => '兇猛',
-'凶疑' => '兇疑',
-'凶相' => '兇相',
-'凶险' => '兇險',
-'先采' => '先採',
-'光致致' => '光緻緻',
-'克期间' => '克期間',
-'免征' => '免徵',
-'党太尉' => '党太尉',
-'党姓' => '党姓',
-'党家' => '党家',
-'党怀英' => '党懷英',
-'党进' => '党進',
-'党項' => '党項',
-'党项' => '党項',
-'内脏' => '內臟',
-'内制' => '內製',
-'内面包' => '內面包',
-'内面包的' => '內面包的',
-'内斗' => '內鬥',
-'内哄' => '內鬨',
-'全干' => '全乾',
-'两个' => '兩個',
-'两周后' => '兩周後',
-'两天后' => '兩天後',
-'两年' => '兩年',
-'两杆' => '兩桿',
-'两扎' => '兩紮',
-'两虎共斗' => '兩虎共鬥',
-'两只' => '兩隻',
-'两余' => '兩餘',
-'两鼠斗穴' => '兩鼠鬥穴',
-'两出' => '兩齣',
-'八个' => '八個',
-'八周后' => '八周後',
-'八天后' => '八天後',
-'八字胡' => '八字鬍',
-'八年' => '八年',
-'八扎' => '八紮',
-'八蜡' => '八蜡',
-'八只' => '八隻',
-'八余' => '八餘',
-'公仔面' => '公仔麵',
-'公仆' => '公僕',
-'公孙丑' => '公孫丑',
-'公干' => '公幹',
-'公历' => '公曆',
-'公历史' => '公歷史',
-'公里海' => '公里海',
-'公余' => '公餘',
-'六么' => '六么',
-'六个' => '六個',
-'六周后' => '六周後',
-'六天后' => '六天後',
-'六年' => '六年',
-'六楼后座' => '六樓后座',
-'六谷' => '六穀',
-'六扎' => '六紮',
-'六冲' => '六衝',
-'六只' => '六隻',
-'六余' => '六餘',
-'共和历' => '共和曆',
-'共和历史' => '共和歷史',
-'其一只' => '其一只',
-'其二只' => '其二只',
-'其八九只' => '其八九只',
-'其次辟地' => '其次辟地',
-'其余' => '其餘',
-'典范' => '典範',
-'兼并' => '兼并',
-'冉有仆' => '冉有僕',
-'冗余' => '冗餘',
-'冤仇' => '冤讎',
-'冥蒙' => '冥濛',
-'冬山庄' => '冬山庄',
-'冬游' => '冬遊',
-'冰山里' => '冰山裡',
-'冶游' => '冶遊',
-'冷面相' => '冷面相',
-'冷面' => '冷麵',
-'准三后' => '准三后',
-'准保护' => '准保護',
-'准保護' => '准保護',
-'准保释' => '准保釋',
-'准保釋' => '准保釋',
-'凌蒙初' => '凌濛初',
-'凝炼' => '凝鍊',
-'几上' => '几上',
-'几几' => '几几',
-'几凳' => '几凳',
-'几子' => '几子',
-'几旁' => '几旁',
-'几杖' => '几杖',
-'几案' => '几案',
-'几椅' => '几椅',
-'几榻' => '几榻',
-'几净窗明' => '几淨窗明',
-'几筵' => '几筵',
-'几面上' => '几面上',
-'凶征' => '凶徵',
-'凶相毕露' => '凶相畢露',
-'出乖弄丑' => '出乖弄醜',
-'出乖露丑' => '出乖露醜',
-'出征收' => '出征收',
-'出于' => '出於',
-'出游' => '出遊',
-'出丑' => '出醜',
-'函数里' => '函數裡',
-'分别致' => '分别致',
-'分半钟' => '分半鐘',
-'分多钟' => '分多鐘',
-'分子钟' => '分子鐘',
-'分子云' => '分子雲',
-'分布于' => '分布於',
-'分钟' => '分鐘',
-'分钟里' => '分鐘裡',
-'刑余' => '刑餘',
-'划一桨' => '划一槳',
-'划上' => '划上',
-'划下' => '划下',
-'划不來' => '划不來',
-'划不来' => '划不來',
-'划了一会' => '划了一會',
-'划來划去' => '划來划去',
-'划来划去' => '划來划去',
-'划具' => '划具',
-'划到岸' => '划到岸',
-'划到江心' => '划到江心',
-'划动' => '划動',
-'划動' => '划動',
-'划去' => '划去',
-'划子' => '划子',
-'划得來' => '划得來',
-'划得来' => '划得來',
-'划拳' => '划拳',
-'划桨' => '划槳',
-'划槳' => '划槳',
-'划水' => '划水',
-'划着独木舟' => '划着獨木舟',
-'划着竹筏' => '划着竹筏',
-'划着船' => '划着船',
-'划算' => '划算',
-'划船' => '划船',
-'划艇' => '划艇',
-'划行' => '划行',
-'划走' => '划走',
-'划起' => '划起',
-'划进' => '划進',
-'划進' => '划進',
-'划过' => '划過',
-'划過' => '划過',
-'划龍舟' => '划龍舟',
-'划龙舟' => '划龍舟',
-'判断发' => '判斷發',
-'别辟' => '別闢',
-'利欲' => '利慾',
-'利于' => '利於',
-'刮来刮去' => '刮來刮去',
-'刮起来' => '刮起來',
-'刮胡' => '刮鬍',
-'到山里' => '到山裡',
-'制冷机' => '制冷機',
-'制签' => '制籤',
-'制钟' => '制鐘',
-'刻半钟' => '刻半鐘',
-'刻多钟' => '刻多鐘',
-'刻钟' => '刻鐘',
-'剃发' => '剃髮',
-'剃胡' => '剃鬍',
-'剃须' => '剃鬚',
-'削发' => '削髮',
-'削面' => '削麵',
-'克剥' => '剋剝',
-'克扣' => '剋扣',
-'克期' => '剋期',
-'克死' => '剋死',
-'克薄' => '剋薄',
-'前往' => '前往',
-'前面店' => '前面店',
-'剖厘' => '剖釐',
-'刚干' => '剛乾',
-'刚雇' => '剛僱',
-'剥制' => '剝製',
-'剩余' => '剩餘',
-'剪其发' => '剪其髮',
-'剪发' => '剪髮',
-'割舍' => '割捨',
-'创获' => '創穫',
-'创制' => '創製',
-'铲出' => '剷出',
-'铲刈' => '剷刈',
-'铲平' => '剷平',
-'铲除' => '剷除',
-'铲头' => '剷頭',
-'划入' => '劃入',
-'划为' => '劃為',
-'划著' => '劃著名',
-'刘佳怜' => '劉佳怜',
-'劉佳怜' => '劉佳怜',
-'刘芸后' => '劉芸后',
-'力拼' => '力拚',
-'力拼众敌' => '力拼眾敵',
-'力争上游' => '力爭上遊',
-'功勋' => '功勳',
-'加氢精制' => '加氫精制',
-'劣于' => '劣於',
-'助于' => '助於',
-'劫余' => '劫餘',
-'勃郁' => '勃鬱',
-'胜于' => '勝於',
-'勤仆' => '勤僕',
-'勤朴' => '勤樸',
-'勋劳' => '勳勞',
-'勋业' => '勳業',
-'勋爵' => '勳爵',
-'勋章' => '勳章',
-'勋绩' => '勳績',
-'勾干' => '勾幹',
-'勾心斗角' => '勾心鬥角',
-'勾魂荡魄' => '勾魂蕩魄',
-'包括' => '包括',
-'包准' => '包準',
-'包谷' => '包穀',
-'包扎' => '包紮',
-'匏系' => '匏繫',
-'北山索面' => '北山索麵',
-'北仑河' => '北崙河',
-'北岳' => '北嶽',
-'北回线' => '北迴線',
-'北回铁路' => '北迴鐵路',
-'匪干' => '匪幹',
-'匿于' => '匿於',
-'十个' => '十個',
-'十出家' => '十出家',
-'十出击' => '十出擊',
-'十出生' => '十出生',
-'十出祁山' => '十出祁山',
-'十出头' => '十出頭',
-'十周后' => '十周後',
-'十天后' => '十天後',
-'十年' => '十年',
-'十扎' => '十紮',
-'十只' => '十隻',
-'十余' => '十餘',
-'十出' => '十齣',
-'千个' => '千個',
-'千只可' => '千只可',
-'千只够' => '千只夠',
-'千只夠' => '千只夠',
-'千只怕' => '千只怕',
-'千只能' => '千只能',
-'千只足够' => '千只足夠',
-'千只足夠' => '千只足夠',
-'千周后' => '千周後',
-'千天后' => '千天後',
-'千年' => '千年',
-'千扎' => '千紮',
-'千回百折' => '千迴百折',
-'千回百转' => '千迴百轉',
-'千钧一发' => '千鈞一髮',
-'千只' => '千隻',
-'千余' => '千餘',
-'升高后' => '升高後',
-'半制品' => '半制品',
-'半只可' => '半只可',
-'半只够' => '半只夠',
-'半于' => '半於',
-'半只' => '半隻',
-'协防' => '協防',
-'南京钟' => '南京鐘',
-'南京钟表' => '南京鐘錶',
-'南宫适' => '南宮适',
-'南宮适' => '南宮适',
-'南屏晚钟' => '南屏晚鐘',
-'南岳' => '南嶽',
-'南筑' => '南筑',
-'南回线' => '南迴線',
-'南回铁路' => '南迴鐵路',
-'南游' => '南遊',
-'博采' => '博採',
-'博尔术' => '博爾朮',
-'卜云吉' => '卜云吉',
-'占了卜' => '占了卜',
-'印累绶若' => '印纍綬若',
-'印制' => '印製',
-'印鉴' => '印鑑',
-'危于' => '危於',
-'卵与石斗' => '卵與石鬥',
-'卷须' => '卷鬚',
-'厂部' => '厂部',
-'原子钟' => '原子鐘',
-'原钟' => '原鐘',
-'历物之意' => '厤物之意',
-'去山里' => '去山裡',
-'参数只' => '參數只',
-'参数里' => '參數裡',
-'反反复复' => '反反覆覆',
-'反应制得' => '反應製得',
-'反朴' => '反樸',
-'反冲' => '反衝',
-'反复制' => '反複製',
-'反复' => '反覆',
-'反覆' => '反覆',
-'取舍' => '取捨',
-'取决于' => '取決於',
-'受雇' => '受僱',
-'受托' => '受託',
-'丛林里' => '叢林裡',
-'口干' => '口乾',
-'口干冒' => '口干冒',
-'口干政' => '口干政',
-'口干涉' => '口干涉',
-'口干犯' => '口干犯',
-'口干预' => '口干預',
-'口燥唇干' => '口燥唇乾',
-'口腹之欲' => '口腹之慾',
-'口里' => '口裡',
-'口钟' => '口鐘',
-'古人有云' => '古人有云',
-'古书云' => '古書云',
-'古書云' => '古書云',
-'古柯咸' => '古柯鹹',
-'古朴' => '古樸',
-'古語云' => '古語云',
-'古语云' => '古語云',
-'古迹' => '古蹟',
-'古钟' => '古鐘',
-'古钟表' => '古鐘錶',
-'另辟' => '另闢',
-'叩钟' => '叩鐘',
-'只占卜' => '只占卜',
-'只占吉' => '只占吉',
-'只占神问卜' => '只占神問卜',
-'只占算' => '只占算',
-'只影响' => '只影響',
-'只影響' => '只影響',
-'只采' => '只採',
-'只冲' => '只衝',
-'只要功夫深,铁杵磨成锈花针' => '只要功夫深,鐵杵磨成鏽花針',
-'只身上已' => '只身上已',
-'只身上有' => '只身上有',
-'只身上沒' => '只身上沒',
-'只身上没' => '只身上沒',
-'只身上无' => '只身上無',
-'只身上無' => '只身上無',
-'只身上的' => '只身上的',
-'只身世' => '只身世',
-'只身份' => '只身份',
-'只身前' => '只身前',
-'只身受' => '只身受',
-'只身子' => '只身子',
-'只身形' => '只身形',
-'只身影' => '只身影',
-'只身后' => '只身後',
-'只身後' => '只身後',
-'只身心' => '只身心',
-'只身旁' => '只身旁',
-'只身材' => '只身材',
-'只身段' => '只身段',
-'只身为' => '只身為',
-'只身為' => '只身為',
-'只身边' => '只身邊',
-'只身邊' => '只身邊',
-'只身首' => '只身首',
-'只身体' => '只身體',
-'只身體' => '只身體',
-'只身高' => '只身高',
-'只采声' => '只采聲',
-'叮叮当当' => '叮叮噹噹',
-'叮当' => '叮噹',
-'可紧可松' => '可緊可鬆',
-'可自制' => '可自制',
-'可鉴' => '可鑑',
-'台子女' => '台子女',
-'台子孙' => '台子孫',
-'台州' => '台州',
-'台布景' => '台布景',
-'台历史' => '台歷史',
-'台钟' => '台鐘',
-'台风奖' => '台風獎',
-'台风稳健' => '台風穩健',
-'史鉴' => '史鑑',
-'叶不二子' => '叶不二子',
-'叶志穗' => '叶志穗',
-'叶恭弘' => '叶恭弘',
-'叶音' => '叶音',
-'叶韵' => '叶韻',
-'吃板刀面' => '吃板刀麵',
-'吃碗面' => '吃碗麵',
-'吃姜' => '吃薑',
-'吃里扒外' => '吃裡扒外',
-'吃里爬外' => '吃裡爬外',
-'吃面' => '吃麵',
-'各辟' => '各闢',
-'各类钟' => '各類鐘',
-'合伙人' => '合伙人',
-'合并' => '合併',
-'合伙' => '合夥',
-'合府上' => '合府上',
-'合采' => '合採',
-'合历' => '合曆',
-'合历史' => '合歷史',
-'合准' => '合準',
-'吉凶庆吊' => '吉凶慶弔',
-'吉征' => '吉徵',
-'吊钟' => '吊鐘',
-'同人志' => '同人誌',
-'同伙' => '同夥',
-'同于' => '同於',
-'同余' => '同餘',
-'名单于' => '名單於',
-'后冠' => '后冠',
-'后北街' => '后北街',
-'后土' => '后土',
-'后妃' => '后妃',
-'后姓' => '后姓',
-'后安路' => '后安路',
-'后平路' => '后平路',
-'后庄' => '后庄',
-'后座' => '后座',
-'后母戊' => '后母戊',
-'后海湾' => '后海灣',
-'后海灣' => '后海灣',
-'后瑞站' => '后瑞站',
-'后稷' => '后稷',
-'后綜' => '后綜',
-'后羿' => '后羿',
-'后街' => '后街',
-'后角' => '后角',
-'后丰' => '后豐',
-'后豐' => '后豐',
-'后里' => '后里',
-'后发FK型星' => '后髮FK型星',
-'后髮FK型星' => '后髮FK型星',
-'后发座' => '后髮座',
-'后髮座' => '后髮座',
-'后发星系团' => '后髮星系團',
-'后髮星系團' => '后髮星系團',
-'吐哺捉发' => '吐哺捉髮',
-'吐哺握发' => '吐哺握髮',
-'向往来' => '向往來',
-'向往常' => '向往常',
-'向往日' => '向往日',
-'向往时' => '向往時',
-'吞并' => '吞併',
-'吟游' => '吟遊',
-'吧台' => '吧檯',
-'含齿戴发' => '含齒戴髮',
-'吹干' => '吹乾',
-'吹发' => '吹髮',
-'吹胡' => '吹鬍',
-'吾为之范我驰驱' => '吾爲之範我馳驅',
-'吕后' => '呂后',
-'呂后' => '呂后',
-'呆致致' => '呆緻緻',
-'呆里呆气' => '呆裡呆氣',
-'告札' => '告劄',
-'呦喂' => '呦喂',
-'周后' => '周后',
-'周惠后' => '周惠后',
-'周历' => '周曆',
-'周杰' => '周杰',
-'周历史' => '周歷史',
-'周游列国' => '周遊列國',
-'呵喂' => '呵喂',
-'呼吁' => '呼籲',
-'命中注定' => '命中注定',
-'和奸' => '和姦',
-'和制汉' => '和製漢',
-'和制英语' => '和製英語',
-'咎征' => '咎徵',
-'咕咕钟' => '咕咕鐘',
-'咪表' => '咪錶',
-'咬姜呷醋' => '咬薑呷醋',
-'咯当' => '咯噹',
-'哀吊' => '哀弔',
-'哀挽' => '哀輓',
-'品鉴' => '品鑑',
-'哄堂大笑' => '哄堂大笑',
-'員山庄' => '員山庄',
-'哪里' => '哪裡',
-'唁吊' => '唁弔',
-'呗赞' => '唄讚',
-'唇干' => '唇乾',
-'唯一只' => '唯一只',
-'唱游' => '唱遊',
-'唾面自干' => '唾面自乾',
-'唾余' => '唾餘',
-'商历' => '商曆',
-'商标准许' => '商標准許',
-'商历史' => '商歷史',
-'啊喂' => '啊喂',
-'启发式' => '啟發式',
-'啷当' => '啷噹',
-'喂了一声' => '喂了一聲',
-'喂喂' => '喂喂',
-'喂哟' => '喂喲',
-'喂!' => '喂!',
-'喂,' => '喂,',
-'善于' => '善於',
-'喜向往' => '喜向往',
-'喜欢表' => '喜歡錶',
-'喜欢钟' => '喜歡鐘',
-'喜欢钟表' => '喜歡鐘錶',
-'喝干' => '喝乾',
-'喧哗' => '喧譁',
-'喧哄' => '喧鬨',
-'丧钟' => '喪鐘',
-'乔岳' => '喬嶽',
-'单于' => '單于',
-'單于' => '單于',
-'单单于' => '單單於',
-'单干' => '單幹',
-'单打独斗' => '單打獨鬥',
-'哟喂' => '喲喂',
-'喲喂' => '喲喂',
-'嘉谷' => '嘉穀',
-'嘉肴' => '嘉肴',
-'嘴里' => '嘴裡',
-'恶心' => '噁心',
-'噙齿戴发' => '噙齒戴髮',
-'喷洒' => '噴洒',
-'当啷' => '噹啷',
-'当当' => '噹噹',
-'噜苏' => '嚕囌',
-'啮合' => '嚙合',
-'啮齿类' => '嚙齒類',
-'向导' => '嚮導',
-'向往' => '嚮往',
-'向慕' => '嚮慕',
-'向迩' => '嚮邇',
-'严云农' => '嚴云農',
-'严于' => '嚴於',
-'嚼谷' => '嚼穀',
-'啰啰苏苏' => '囉囉囌囌',
-'啰苏' => '囉囌',
-'嘱托' => '囑託',
-'啮虫' => '囓蟲',
-'四个' => '四個',
-'四出征收' => '四出徵收',
-'四分历' => '四分曆',
-'四分历史' => '四分歷史',
-'四周后' => '四周後',
-'四天后' => '四天後',
-'四年' => '四年',
-'四舍五入' => '四捨五入',
-'四舍六入' => '四捨六入',
-'四杆铁笔' => '四桿鐵筆',
-'四扎' => '四紮',
-'四只' => '四隻',
-'四面包' => '四面包',
-'四面钟' => '四面鐘',
-'四余' => '四餘',
-'回佣' => '回佣',
-'回采' => '回採',
-'回旋加速' => '回旋加速',
-'回历' => '回曆',
-'回历史' => '回歷史',
-'回复中' => '回覆中',
-'回复你' => '回覆你',
-'回复帖子' => '回覆帖子',
-'回复意见' => '回覆意見',
-'回复说' => '回覆說',
-'回复邮件' => '回覆郵件',
-'回复:' => '回覆:',
-'回游' => '回遊',
-'因于' => '因於',
-'困倦起来' => '困倦起來',
-'困于' => '困於',
-'困兽之斗' => '困獸之鬥',
-'困兽犹斗' => '困獸猶鬥',
-'困斗' => '困鬥',
-'固定制' => '固定制',
-'固征' => '固徵',
-'囿于' => '囿於',
-'圈梁' => '圈樑',
-'圈里' => '圈裡',
-'国之桢干' => '國之楨榦',
-'国于' => '國於',
-'国历' => '國曆',
-'国历代' => '國歷代',
-'国历任' => '國歷任',
-'国历来' => '國歷來',
-'国历史' => '國歷史',
-'国历届' => '國歷屆',
-'国历经' => '國歷經',
-'国仇' => '國讎',
-'园里' => '園裡',
-'园游会' => '園遊會',
-'图里的' => '圖裡的',
-'图里,' => '圖裡,',
-'图鉴' => '圖鑑',
-'土索面' => '土索麵',
-'土里' => '土裡',
-'土制' => '土製',
-'在制品' => '在制品',
-'在山里' => '在山裡',
-'在于' => '在於',
-'地图里' => '地圖裡',
-'地心历表' => '地心曆表',
-'地方志' => '地方志',
-'地志' => '地誌',
-'地丑德齐' => '地醜德齊',
-'坏于' => '坏於',
-'坐如钟' => '坐如鐘',
-'坐台' => '坐檯',
-'坐钟' => '坐鐘',
-'坑里' => '坑裡',
-'坤范' => '坤範',
-'坦荡' => '坦蕩',
-'坦荡荡' => '坦蕩蕩',
-'坱郁' => '坱鬱',
-'垂于' => '垂於',
-'垂范' => '垂範',
-'垂发' => '垂髮',
-'型范' => '型範',
-'埃及历' => '埃及曆',
-'埃及历史' => '埃及歷史',
-'埃及艳后' => '埃及豔后',
-'埃荣冲' => '埃榮衝',
-'城市里' => '城市裡',
-'城里' => '城裡',
-'埔子里' => '埔子里',
-'埔里社' => '埔裏社',
-'域里' => '域裡',
-'基干' => '基幹',
-'基于' => '基於',
-'基准' => '基準',
-'坚致' => '堅緻',
-'堙淀' => '堙澱',
-'堡子里' => '堡子里',
-'场里' => '場裡',
-'塞耳盗钟' => '塞耳盜鐘',
-'境里' => '境裡',
-'境里程' => '境里程',
-'墓志铭' => '墓志銘',
-'墓志' => '墓誌',
-'增辟' => '增闢',
-'墨子里' => '墨子里',
-'墨斗' => '墨斗',
-'墨沈沈' => '墨沈沈',
-'墨沈' => '墨瀋',
-'垦辟' => '墾闢',
-'压制出' => '壓製出',
-'压制机' => '壓製機',
-'壮游' => '壯遊',
-'壮面' => '壯麵',
-'壹郁' => '壹鬱',
-'壶里' => '壺裡',
-'壸范' => '壼範',
-'壽天里' => '壽天里',
-'寿面' => '壽麵',
-'夏于乔' => '夏于喬',
-'夏于喬' => '夏于喬',
-'夏历' => '夏曆',
-'夏历史' => '夏歷史',
-'夏游' => '夏遊',
-'外强中干' => '外強中乾',
-'外制' => '外製',
-'多半只' => '多半只',
-'多只包括' => '多只包括',
-'多只可' => '多只可',
-'多只含' => '多只含',
-'多只在' => '多只在',
-'多只是' => '多只是',
-'多只会' => '多只會',
-'多只會' => '多只會',
-'多只有' => '多只有',
-'多只比' => '多只比',
-'多只用' => '多只用',
-'多只能' => '多只能',
-'多只限' => '多只限',
-'多只需' => '多只需',
-'多只須' => '多只須',
-'多只须' => '多只須',
-'多周后' => '多周後',
-'多天后' => '多天後',
-'多于' => '多於',
-'多冲' => '多衝',
-'多丑' => '多醜',
-'多只' => '多隻',
-'多余' => '多餘',
-'多出电影' => '多齣電影',
-'夜晚里' => '夜晚裡',
-'夜里' => '夜裡',
-'夜游' => '夜遊',
-'梦里' => '夢裡',
-'梦游' => '夢遊',
-'伙伴' => '夥伴',
-'伙友' => '夥友',
-'伙同' => '夥同',
-'伙众' => '夥眾',
-'伙计' => '夥計',
-'大伙儿' => '大伙兒',
-'大只可' => '大只可',
-'大只在' => '大只在',
-'大只是' => '大只是',
-'大只会' => '大只會',
-'大只有' => '大只有',
-'大只能' => '大只能',
-'大只需' => '大只需',
-'大周后' => '大周后',
-'大型钟' => '大型鐘',
-'大型钟表面' => '大型鐘表面',
-'大型钟表' => '大型鐘錶',
-'大型钟面' => '大型鐘面',
-'大多只' => '大多只',
-'大伙' => '大夥',
-'大干' => '大幹',
-'大批涌到' => '大批湧到',
-'大折儿' => '大摺兒',
-'大明历' => '大明曆',
-'大明历史' => '大明歷史',
-'大历' => '大曆',
-'大本钟' => '大本鐘',
-'大本钟敲' => '大本鐘敲',
-'大历史' => '大歷史',
-'大病初愈' => '大病初癒',
-'大目干连' => '大目乾連',
-'大笨钟' => '大笨鐘',
-'大笨钟敲' => '大笨鐘敲',
-'大蜡' => '大蜡',
-'大衍历' => '大衍曆',
-'大衍历史' => '大衍歷史',
-'大言非夸' => '大言非夸',
-'大夸' => '大誇',
-'大赞' => '大讚',
-'大周折' => '大週摺',
-'大丑' => '大醜',
-'大金发苔' => '大金髮苔',
-'大钟' => '大鐘',
-'大只' => '大隻',
-'大风后' => '大風後',
-'天克地冲' => '天克地衝',
-'天台' => '天台',
-'天后' => '天后',
-'天后宫' => '天后宮',
-'天地志狼' => '天地志狼',
-'天地为范' => '天地為範',
-'天干地支' => '天干地支',
-'天后来' => '天後來',
-'天后半' => '天後半',
-'天后天' => '天後天',
-'天文学钟' => '天文學鐘',
-'天文历表' => '天文曆表',
-'天文钟' => '天文鐘',
-'天历' => '天曆',
-'天历史' => '天歷史',
-'天神之后' => '天神之后',
-'天里' => '天裡',
-'天里昂' => '天里昂',
-'天里村' => '天里村',
-'太仆' => '太僕',
-'太凶' => '太兇',
-'太初历' => '太初曆',
-'太初历史' => '太初歷史',
-'太后' => '太后',
-'太丑' => '太醜',
-'太阁' => '太閤',
-'夸克' => '夸克',
-'夸父' => '夸父',
-'夸特' => '夸特',
-'夸脱' => '夸脫',
-'奇勋' => '奇勳',
-'奇迹' => '奇蹟',
-'奇丑' => '奇醜',
-'奏折' => '奏摺',
-'夺斗' => '奪鬥',
-'奋斗' => '奮鬥',
-'女丑' => '女丑',
-'女仆' => '女僕',
-'奴仆' => '奴僕',
-'奸淫掳掠' => '奸淫擄掠',
-'好家伙' => '好傢夥',
-'好凶' => '好兇',
-'好勇斗狠' => '好勇鬥狠',
-'好斗大' => '好斗大',
-'好斗室' => '好斗室',
-'好斗笠' => '好斗笠',
-'好斗篷' => '好斗篷',
-'好斗胆' => '好斗膽',
-'好斗膽' => '好斗膽',
-'好斗蓬' => '好斗蓬',
-'好于' => '好於',
-'好困' => '好睏',
-'好签' => '好籤',
-'好丑' => '好醜',
-'好斗' => '好鬥',
-'如果干' => '如果幹',
-'如饥似渴' => '如饑似渴',
-'妖后' => '妖后',
-'妖气冲天' => '妖氣衝天',
-'妆台' => '妝檯',
-'始于' => '始於',
-'委托' => '委託',
-'委托书' => '委託書',
-'奸夫' => '姦夫',
-'奸妇' => '姦婦',
-'奸情' => '姦情',
-'奸杀' => '姦殺',
-'奸污' => '姦污',
-'奸淫' => '姦淫',
-'威棱' => '威稜',
-'婢仆' => '婢僕',
-'嫁祸于' => '嫁禍於',
-'嫌凶' => '嫌兇',
-'嫌好道丑' => '嫌好道醜',
-'嫩姜' => '嫩薑',
-'嬉游' => '嬉遊',
-'嬖幸' => '嬖倖',
-'嬴余' => '嬴餘',
-'子之丰兮' => '子之丰兮',
-'子云' => '子云',
-'子里' => '子裡',
-'子里甲' => '子里甲',
-'字汇' => '字彙',
-'字母后' => '字母後',
-'字码表' => '字碼表',
-'字里行间' => '字裡行間',
-'存折' => '存摺',
-'存于' => '存於',
-'孛里海' => '孛里海',
-'孝惠后' => '孝惠后',
-'孙杰' => '孫杰',
-'孫杰' => '孫杰',
-'学家' => '學家',
-'学里' => '學裡',
-'宇宙志' => '宇宙誌',
-'安于' => '安於',
-'安沈铁路' => '安瀋鐵路',
-'宋王台' => '宋王臺',
-'宗周钟' => '宗周鐘',
-'官不怕大只怕管' => '官不怕大只怕管',
-'官地为采' => '官地為寀',
-'官历' => '官曆',
-'官历史' => '官歷史',
-'定于' => '定於',
-'定准' => '定準',
-'定制' => '定製',
-'宜云' => '宜云',
-'宣泄' => '宣洩',
-'宦游' => '宦遊',
-'宫里' => '宮裡',
-'害于' => '害於',
-'宴游' => '宴遊',
-'家仆' => '家僕',
-'家里' => '家裡',
-'家丑' => '家醜',
-'容于' => '容於',
-'容范' => '容範',
-'宿舍' => '宿舍',
-'寄托在' => '寄托在',
-'寄托' => '寄託',
-'密致' => '密緻',
-'寇准' => '寇準',
-'寇仇' => '寇讎',
-'富余' => '富餘',
-'寒栗' => '寒慄',
-'寒于' => '寒於',
-'寓于' => '寓於',
-'寡欲' => '寡慾',
-'实干' => '實幹',
-'实累累' => '實纍纍',
-'写字台' => '寫字檯',
-'宽于' => '寬於',
-'宽余' => '寬餘',
-'宽松' => '寬鬆',
-'宽松松' => '寬鬆鬆',
-'寮采' => '寮寀',
-'寶山庄' => '寶山庄',
-'宝历' => '寶曆',
-'寶曆' => '寶曆',
-'宝历史' => '寶歷史',
-'宝里宝气' => '寶裡寶氣',
-'宝鉴' => '寶鑑',
-'寸发千金' => '寸髮千金',
-'寺钟' => '寺鐘',
-'封后' => '封后',
-'封为后' => '封為后',
-'封面里' => '封面裡',
-'射雕' => '射鵰',
-'专向往' => '專向往',
-'专辑里' => '專輯裡',
-'尊后' => '尊后',
-'对不准' => '對不準',
-'对折' => '對摺',
-'对于' => '對於',
-'对准' => '對準',
-'对准表' => '對準錶',
-'对准钟' => '對準鐘',
-'对准钟表' => '對準鐘錶',
-'对着干' => '對着幹',
-'对华发' => '對華發',
-'对表中' => '對表中',
-'对表扬' => '對表揚',
-'对表明' => '對表明',
-'对表演' => '對表演',
-'对表现' => '對表現',
-'对表达' => '對表達',
-'导游' => '導遊',
-'小丑' => '小丑',
-'小井里' => '小井里',
-'小价' => '小价',
-'小仆' => '小僕',
-'小几' => '小几',
-'小只可' => '小只可',
-'小只在' => '小只在',
-'小只是' => '小只是',
-'小只会' => '小只會',
-'小只有' => '小只有',
-'小只能' => '小只能',
-'小只需' => '小只需',
-'小周后' => '小周后',
-'小型钟' => '小型鐘',
-'小型钟表面' => '小型鐘表面',
-'小型钟表' => '小型鐘錶',
-'小型钟面' => '小型鐘面',
-'小时里' => '小時裡',
-'小米面' => '小米麵',
-'小只' => '小隻',
-'少采' => '少採',
-'就范' => '就範',
-'就里' => '就裡',
-'尸位素餐' => '尸位素餐',
-'尸佼' => '尸佼',
-'尸利' => '尸利',
-'尸子' => '尸子',
-'尸居余气' => '尸居餘氣',
-'尸弃佛' => '尸棄佛',
-'尸祝' => '尸祝',
-'尸禄' => '尸祿',
-'尸罗精舍' => '尸羅精舍',
-'尸羅精舍' => '尸羅精舍',
-'尸臣' => '尸臣',
-'尸谏' => '尸諫',
-'尸魂界' => '尸魂界',
-'尸鸠' => '尸鳩',
-'局促不安' => '局促不安',
-'局里' => '局裡',
-'屋梁' => '屋樑',
-'屋里' => '屋裡',
-'屏风后' => '屏風後',
-'屑于' => '屑於',
-'屡顾尔仆' => '屢顧爾僕',
-'属于' => '屬於',
-'属托' => '屬託',
-'屯扎' => '屯紮',
-'屯里' => '屯裡',
-'山仔后' => '山仔后',
-'山崩钟应' => '山崩鐘應',
-'山岳' => '山嶽',
-'山梁' => '山樑',
-'山棱' => '山稜',
-'山羊胡' => '山羊鬍',
-'山里有' => '山裡有',
-'山里的' => '山裡的',
-'山谷' => '山谷',
-'山重水复' => '山重水複',
-'岫岩' => '岫巖',
-'岱岳' => '岱嶽',
-'峇里海' => '峇里海',
-'峰回' => '峰迴',
-'峻岭' => '峻岭',
-'崑剧' => '崑劇',
-'昆剧' => '崑劇',
-'崑山' => '崑山',
-'昆山' => '崑山',
-'昆冈' => '崑岡',
-'昆仑' => '崑崙',
-'昆嵛' => '崑嵛',
-'昆承湖' => '崑承湖',
-'崑曲' => '崑曲',
-'昆曲' => '崑曲',
-'崑腔' => '崑腔',
-'昆腔' => '崑腔',
-'崑苏' => '崑蘇',
-'昆苏' => '崑蘇',
-'崑调' => '崑調',
-'昆调' => '崑調',
-'崖广' => '崖广',
-'嶒棱' => '嶒稜',
-'岳岳' => '嶽嶽',
-'岳麓' => '嶽麓',
-'川谷' => '川穀',
-'巡回医疗' => '巡回醫療',
-'巡回' => '巡迴',
-'巡游' => '巡遊',
-'工作台' => '工作檯',
-'左冲右突' => '左衝右突',
-'巧干' => '巧幹',
-'巧历' => '巧曆',
-'巧历史' => '巧歷史',
-'巨制' => '巨製',
-'差之毫厘' => '差之毫厘',
-'差于' => '差於',
-'己丑' => '己丑',
-'已占卜' => '已占卜',
-'已占算' => '已占算',
-'巴尔干' => '巴爾幹',
-'巷里' => '巷裡',
-'市里的' => '市裡的',
-'布谷' => '布穀',
-'布谷鸟' => '布穀鳥',
-'布谷鸟钟' => '布穀鳥鐘',
-'布里海' => '布里海',
-'希伯来历' => '希伯來曆',
-'希伯来历史' => '希伯來歷史',
-'帘子' => '帘子',
-'帘布' => '帘布',
-'帝后台' => '帝后臺',
-'师范' => '師範',
-'席卷' => '席捲',
-'带征' => '帶徵',
-'带余' => '帶餘',
-'带发修行' => '帶髮修行',
-'幅图里' => '幅圖裡',
-'干系' => '干係',
-'平平当当' => '平平當當',
-'平准' => '平準',
-'年代里' => '年代裡',
-'年历' => '年曆',
-'年历史' => '年歷史',
-'年谷' => '年穀',
-'年里' => '年裡',
-'年鉴' => '年鑑',
-'并力' => '并力',
-'并吞' => '并吞',
-'并州' => '并州',
-'并日而食' => '并日而食',
-'并迭' => '并迭',
-'幸免于难' => '幸免於難',
-'幸于' => '幸於',
-'幸运胡' => '幸運鬍',
-'干上' => '幹上',
-'干下去' => '幹下去',
-'干不了' => '幹不了',
-'干不成' => '幹不成',
-'干了' => '幹了',
-'干事' => '幹事',
-'干些' => '幹些',
-'干什么' => '幹什麼',
-'干仗' => '幹仗',
-'干个' => '幹個',
-'干劲' => '幹勁',
-'干吏' => '幹吏',
-'干员' => '幹員',
-'干啥' => '幹啥',
-'干吗' => '幹嗎',
-'干嘛' => '幹嘛',
-'干坏事' => '幹壞事',
-'干大事' => '幹大事',
-'干完' => '幹完',
-'干家' => '幹家',
-'干得' => '幹得',
-'干性油' => '幹性油',
-'干才' => '幹才',
-'干掉' => '幹掉',
-'干探' => '幹探',
-'干校' => '幹校',
-'干活' => '幹活',
-'干流' => '幹流',
-'干济' => '幹濟',
-'干营生' => '幹營生',
-'干父之蛊' => '幹父之蠱',
-'干球温度' => '幹球溫度',
-'干甚么' => '幹甚麼',
-'干略' => '幹略',
-'干当' => '幹當',
-'干的事' => '幹的事',
-'干的好事' => '幹的好事',
-'干细胞' => '幹細胞',
-'干线' => '幹線',
-'干练' => '幹練',
-'干缺' => '幹缺',
-'干群关系' => '幹群關係',
-'干蛊' => '幹蠱',
-'干警' => '幹警',
-'干起来' => '幹起來',
-'干路' => '幹路',
-'干办' => '幹辦',
-'干这' => '幹這',
-'干道' => '幹道',
-'干部' => '幹部',
-'干革命' => '幹革命',
-'干头' => '幹頭',
-'干么' => '幹麼',
-'几个' => '幾個',
-'几周后' => '幾周後',
-'几天后' => '幾天後',
-'几进几出' => '幾進幾出',
-'几只' => '幾隻',
-'几出' => '幾齣',
-'广部' => '广部',
-'庄司' => '庄司',
-'床席' => '床蓆',
-'店里' => '店裡',
-'府干卿' => '府干卿',
-'府干扰' => '府干擾',
-'府干擾' => '府干擾',
-'府干政' => '府干政',
-'府干涉' => '府干涉',
-'府干犯' => '府干犯',
-'府干預' => '府干預',
-'府干预' => '府干預',
-'府干' => '府幹',
-'座钟' => '座鐘',
-'廍子里' => '廍子里',
-'廓子里' => '廓子里',
-'厨余' => '廚餘',
-'厮斗' => '廝鬥',
-'庙里' => '廟裡',
-'废后' => '廢后',
-'廢后' => '廢后',
-'广征' => '廣徵',
-'广舍' => '廣捨',
-'广播里' => '廣播裡',
-'延历' => '延曆',
-'建于' => '建於',
-'建筑前' => '建築前',
-'建筑后' => '建築後',
-'弄干' => '弄乾',
-'弄丑' => '弄醜',
-'弄脏胸' => '弄髒胸',
-'弄松' => '弄鬆',
-'弄鬼吊猴' => '弄鬼弔猴',
-'吊卷' => '弔卷',
-'吊取' => '弔取',
-'吊古' => '弔古',
-'吊唁' => '弔唁',
-'吊问' => '弔問',
-'吊喉' => '弔喉',
-'吊丧' => '弔喪',
-'吊喭' => '弔喭',
-'吊奠' => '弔奠',
-'吊孝' => '弔孝',
-'吊客' => '弔客',
-'吊宴' => '弔宴',
-'吊带' => '弔帶',
-'吊影' => '弔影',
-'吊恤' => '弔恤',
-'吊慰' => '弔慰',
-'吊扣' => '弔扣',
-'吊拷' => '弔拷',
-'吊挂' => '弔掛',
-'吊撒' => '弔撒',
-'吊文' => '弔文',
-'吊旗' => '弔旗',
-'吊死' => '弔死',
-'吊民' => '弔民',
-'吊祭' => '弔祭',
-'吊纸' => '弔紙',
-'吊者大悦' => '弔者大悅',
-'吊腰撒跨' => '弔腰撒跨',
-'吊脚儿事' => '弔腳兒事',
-'吊膀子' => '弔膀子',
-'吊词' => '弔詞',
-'吊诡' => '弔詭',
-'吊谎' => '弔謊',
-'吊贺迎送' => '弔賀迎送',
-'吊头' => '弔頭',
-'吊鹤' => '弔鶴',
-'引斗' => '引鬥',
-'弘历' => '弘曆',
-'弘历史' => '弘歷史',
-'弱于' => '弱於',
-'弱水三千只取一瓢' => '弱水三千只取一瓢',
-'张三丰' => '張三丰',
-'張三丰' => '張三丰',
-'张勋' => '張勳',
-'张杰' => '張杰',
-'張杰' => '張杰',
-'张乐于张徐' => '張樂于張徐',
-'强制作用' => '強制作用',
-'强奸' => '強姦',
-'强干' => '強幹',
-'强于' => '強於',
-'别口气' => '彆口氣',
-'别强' => '彆強',
-'别扭' => '彆扭',
-'别拗' => '彆拗',
-'别气' => '彆氣',
-'弹子台' => '彈子檯',
-'弹珠台' => '彈珠檯',
-'汇刊' => '彙刊',
-'汇算' => '彙算',
-'汇纂' => '彙纂',
-'汇辑' => '彙輯',
-'形单影只' => '形單影隻',
-'形于' => '形於',
-'彭于晏' => '彭于晏',
-'影后' => '影后',
-'影相吊' => '影相弔',
-'役于' => '役於',
-'往复式' => '往復式',
-'往日无仇' => '往日無讎',
-'往里' => '往裡',
-'待复' => '待覆',
-'很干' => '很乾',
-'很凶' => '很兇',
-'很准' => '很準',
-'很丑' => '很醜',
-'很松' => '很鬆',
-'律历志' => '律曆志',
-'后印' => '後印',
-'后台老板' => '後台老板',
-'后天' => '後天',
-'後庄' => '後庄',
-'后面店' => '後面店',
-'徐干' => '徐幹',
-'徒杠' => '徒杠',
-'徒托空言' => '徒託空言',
-'得到回复' => '得到回覆',
-'得力干将' => '得力幹將',
-'从仆' => '從僕',
-'从图里' => '從圖裡',
-'从山里' => '從山裡',
-'从于' => '從於',
-'从里到外' => '從裡到外',
-'从里向外' => '從裡向外',
-'御岳山' => '御嶽山',
-'御制' => '御製',
-'复始' => '復始',
-'复活节历表' => '復活節曆表',
-'复苏' => '復甦',
-'征人' => '徵人',
-'征令' => '徵令',
-'征信' => '徵信',
-'征候' => '徵候',
-'征兆' => '徵兆',
-'征兵' => '徵兵',
-'征到' => '徵到',
-'征募' => '徵募',
-'征友' => '徵友',
-'征召' => '徵召',
-'征名责实' => '徵名責實',
-'征吏' => '徵吏',
-'征咎' => '徵咎',
-'征启' => '徵啟',
-'征士' => '徵士',
-'征婚' => '徵婚',
-'征实' => '徵實',
-'征庸' => '徵庸',
-'征引' => '徵引',
-'征得' => '徵得',
-'征怪' => '徵怪',
-'征才' => '徵才',
-'征招' => '徵招',
-'征收' => '徵收',
-'征效' => '徵效',
-'征文' => '徵文',
-'征求' => '徵求',
-'征状' => '徵狀',
-'征用' => '徵用',
-'征发' => '徵發',
-'征税' => '徵稅',
-'征稿' => '徵稿',
-'征答' => '徵答',
-'征结' => '徵結',
-'征圣' => '徵聖',
-'征聘' => '徵聘',
-'征训' => '徵訓',
-'征询' => '徵詢',
-'征调' => '徵調',
-'征象' => '徵象',
-'征购' => '徵購',
-'征迹' => '徵跡',
-'征车' => '徵車',
-'征辟' => '徵辟',
-'征逐' => '徵逐',
-'征选' => '徵選',
-'征集' => '徵集',
-'征风召雨' => '徵風召雨',
-'征验' => '徵驗',
-'心愿' => '心愿',
-'心于' => '心於',
-'心理' => '心理',
-'心细如发' => '心細如髮',
-'心系一' => '心繫一',
-'心系世' => '心繫世',
-'心系中' => '心繫中',
-'心系乔' => '心繫乔',
-'心系五' => '心繫五',
-'心系京' => '心繫京',
-'心系人' => '心繫人',
-'心系他' => '心繫他',
-'心系伊' => '心繫伊',
-'心系何' => '心繫何',
-'心系你' => '心繫你',
-'心系健' => '心繫健',
-'心系传' => '心繫傳',
-'心系全' => '心繫全',
-'心系两' => '心繫兩',
-'心系农' => '心繫农',
-'心系功' => '心繫功',
-'心系动' => '心繫動',
-'心系募' => '心繫募',
-'心系北' => '心繫北',
-'心系十' => '心繫十',
-'心系千' => '心繫千',
-'心系南' => '心繫南',
-'心系台' => '心繫台',
-'心系和' => '心繫和',
-'心系哪' => '心繫哪',
-'心系唐' => '心繫唐',
-'心系嘱' => '心繫囑',
-'心系四' => '心繫四',
-'心系困' => '心繫困',
-'心系国' => '心繫國',
-'心系在' => '心繫在',
-'心系地' => '心繫地',
-'心系大' => '心繫大',
-'心系天' => '心繫天',
-'心系夫' => '心繫夫',
-'心系奥' => '心繫奧',
-'心系女' => '心繫女',
-'心系她' => '心繫她',
-'心系妻' => '心繫妻',
-'心系妇' => '心繫婦',
-'心系子' => '心繫子',
-'心系它' => '心繫它',
-'心系宣' => '心繫宣',
-'心系家' => '心繫家',
-'心系富' => '心繫富',
-'心系小' => '心繫小',
-'心系山' => '心繫山',
-'心系川' => '心繫川',
-'心系幼' => '心繫幼',
-'心系广' => '心繫廣',
-'心系彼' => '心繫彼',
-'心系德' => '心繫德',
-'心系您' => '心繫您',
-'心系慈' => '心繫慈',
-'心系我' => '心繫我',
-'心系摩' => '心繫摩',
-'心系故' => '心繫故',
-'心系新' => '心繫新',
-'心系日' => '心繫日',
-'心系昌' => '心繫昌',
-'心系晓' => '心繫曉',
-'心系曼' => '心繫曼',
-'心系东' => '心繫東',
-'心系林' => '心繫林',
-'心系母' => '心繫母',
-'心系民' => '心繫民',
-'心系江' => '心繫江',
-'心系汶' => '心繫汶',
-'心系沈' => '心繫沈',
-'心系沙' => '心繫沙',
-'心系泰' => '心繫泰',
-'心系浙' => '心繫浙',
-'心系港' => '心繫港',
-'心系湖' => '心繫湖',
-'心系澳' => '心繫澳',
-'心系灾' => '心繫災',
-'心系父' => '心繫父',
-'心系生' => '心繫生',
-'心系病' => '心繫病',
-'心系百' => '心繫百',
-'心系的' => '心繫的',
-'心系众' => '心繫眾',
-'心系社' => '心繫社',
-'心系祖' => '心繫祖',
-'心系神' => '心繫神',
-'心系红' => '心繫紅',
-'心系美' => '心繫美',
-'心系群' => '心繫群',
-'心系老' => '心繫老',
-'心系舞' => '心繫舞',
-'心系英' => '心繫英',
-'心系茶' => '心繫茶',
-'心系万' => '心繫萬',
-'心系兰' => '心繫蘭',
-'心系西' => '心繫西',
-'心系贫' => '心繫貧',
-'心系输' => '心繫輸',
-'心系近' => '心繫近',
-'心系远' => '心繫遠',
-'心系选' => '心繫選',
-'心系重' => '心繫重',
-'心系长' => '心繫長',
-'心系阮' => '心繫阮',
-'心系震' => '心繫震',
-'心系非' => '心繫非',
-'心系风' => '心繫風',
-'心系香' => '心繫香',
-'心系高' => '心繫高',
-'心系麦' => '心繫麥',
-'心系黄' => '心繫黃',
-'心脏' => '心臟',
-'心脏痳痹' => '心臟痲痺',
-'心荡' => '心蕩',
-'心里面' => '心裏面',
-'心里' => '心裡',
-'心长发短' => '心長髮短',
-'心余' => '心餘',
-'必须' => '必須',
-'忙里' => '忙裡',
-'忙里偷闲' => '忙裡偷閒',
-'忠人之托' => '忠人之托',
-'忠仆' => '忠僕',
-'忠于' => '忠於',
-'快快当当' => '快快當當',
-'快冲' => '快衝',
-'怎么干' => '怎麼幹',
-'怒于' => '怒於',
-'怒气冲天' => '怒氣衝天',
-'怒火冲天' => '怒火衝天',
-'怒发冲冠' => '怒髮衝冠',
-'思如泉涌' => '思如泉湧',
-'怠于' => '怠於',
-'急于' => '急於',
-'急冲而下' => '急衝而下',
-'性征' => '性徵',
-'性欲' => '性慾',
-'怨气冲天' => '怨氣衝天',
-'怪里怪气' => '怪裡怪氣',
-'怫郁' => '怫鬱',
-'恂栗' => '恂慄',
-'恒基' => '恒基',
-'恒生' => '恒生',
-'恒隆' => '恒隆',
-'恕乏价催' => '恕乏价催',
-'息交绝游' => '息交絕遊',
-'息谷' => '息穀',
-'悒郁' => '悒鬱',
-'悠悠荡荡' => '悠悠蕩蕩',
-'悠荡' => '悠蕩',
-'悠游' => '悠遊',
-'悲凄' => '悲悽',
-'悲筑' => '悲筑',
-'悲郁' => '悲鬱',
-'悸栗' => '悸慄',
-'凄厉' => '悽厲',
-'凄怨' => '悽怨',
-'凄惋' => '悽惋',
-'凄惶' => '悽惶',
-'凄恻' => '悽惻',
-'凄怆' => '悽愴',
-'凄惨' => '悽慘',
-'凄戾' => '悽戾',
-'凄然' => '悽然',
-'凄美' => '悽美',
-'凄苦' => '悽苦',
-'凄酸' => '悽酸',
-'情欲' => '情慾',
-'惇朴' => '惇樸',
-'惠文后' => '惠文后',
-'恶仆' => '惡僕',
-'恶直丑正' => '惡直醜正',
-'恶斗' => '惡鬥',
-'惴栗' => '惴慄',
-'意大利面' => '意大利麵',
-'爱困' => '愛睏',
-'感于' => '感於',
-'愿朴' => '愿樸',
-'愿樸' => '愿樸',
-'愿而恭' => '愿而恭',
-'栗冽' => '慄冽',
-'栗栗' => '慄慄',
-'慈溪' => '慈谿',
-'慌里慌张' => '慌裡慌張',
-'惨淡' => '慘澹',
-'庆吊' => '慶弔',
-'庆历' => '慶曆',
-'庆历史' => '慶歷史',
-'欲令智昏' => '慾令智昏',
-'欲壑难填' => '慾壑難填',
-'欲念' => '慾念',
-'欲海' => '慾海',
-'欲火' => '慾火',
-'欲障' => '慾障',
-'忧郁' => '憂鬱',
-'凭几' => '憑几',
-'凭吊' => '憑弔',
-'凭折' => '憑摺',
-'凭准' => '憑準',
-'凭借' => '憑藉',
-'凭闲' => '憑閑',
-'宪法里' => '憲法裡',
-'恳托' => '懇託',
-'懈松' => '懈鬆',
-'应制得' => '應制得',
-'應制得' => '應制得',
-'应征' => '應徵',
-'应钟' => '應鐘',
-'懔栗' => '懍慄',
-'懞懞懂懂' => '懞懞懂懂',
-'懞直' => '懞直',
-'惩忿窒欲' => '懲忿窒欲',
-'怀里' => '懷裡',
-'怀钟' => '懷鐘',
-'悬挂' => '懸掛',
-'悬梁' => '懸樑',
-'悬臂梁' => '懸臂樑',
-'悬钟' => '懸鐘',
-'懿范' => '懿範',
-'恋恋不舍' => '戀戀不捨',
-'成于' => '成於',
-'成于思' => '成於思',
-'戬谷' => '戩穀',
-'截发' => '截髮',
-'战天斗地' => '戰天鬥地',
-'战栗' => '戰慄',
-'战于' => '戰於',
-'战斗' => '戰鬥',
-'戏里' => '戲裡',
-'戲院里' => '戲院里',
-'戴表元' => '戴表元',
-'戴发含齿' => '戴髮含齒',
-'房里' => '房裡',
-'所云' => '所云',
-'所云云' => '所云云',
-'所占卜' => '所占卜',
-'所占星' => '所占星',
-'所占算' => '所占算',
-'所托' => '所託',
-'扁拟谷盗虫' => '扁擬穀盜蟲',
-'手塚治虫' => '手塚治虫',
-'手折' => '手摺',
-'手表态' => '手表態',
-'手表態' => '手表態',
-'手表明' => '手表明',
-'手表决' => '手表決',
-'手表決' => '手表決',
-'手表演' => '手表演',
-'手表现' => '手表現',
-'手表現' => '手表現',
-'手表示' => '手表示',
-'手表达' => '手表達',
-'手表達' => '手表達',
-'手表露' => '手表露',
-'手表面' => '手表面',
-'手里剑' => '手裏劍',
-'手里' => '手裡',
-'手游' => '手遊',
-'手表' => '手錶',
-'手链' => '手鍊',
-'手松' => '手鬆',
-'才干休' => '才干休',
-'才干戈' => '才干戈',
-'才干扰' => '才干擾',
-'才干政' => '才干政',
-'才干涉' => '才干涉',
-'才干预' => '才干預',
-'才干' => '才幹',
-'扎好底子' => '扎好底子',
-'扎好根' => '扎好根',
-'扑作教刑' => '扑作教刑',
-'扑打' => '扑打',
-'扑挞' => '扑撻',
-'打干哕' => '打乾噦',
-'打出吊入' => '打出弔入',
-'打卡钟' => '打卡鐘',
-'打吨' => '打吨',
-'打干' => '打幹',
-'打拼' => '打拚',
-'打断发' => '打斷發',
-'打卤' => '打滷',
-'打谷' => '打穀',
-'打钟' => '打鐘',
-'打风后' => '打風後',
-'打斗' => '打鬥',
-'托管国' => '托管國',
-'扛大梁' => '扛大樑',
-'扯面' => '扯麵',
-'扶余' => '扶餘',
-'批准的' => '批准的',
-'批准确定' => '批准確定',
-'批复' => '批覆',
-'批注' => '批註',
-'批斗' => '批鬥',
-'抑制' => '抑制',
-'抑郁' => '抑鬱',
-'抓奸' => '抓姦',
-'抓斗' => '抓鬥',
-'抗御' => '抗禦',
-'折向往' => '折向往',
-'折子戏' => '折子戲',
-'折子戲' => '折子戲',
-'折戟沈河' => '折戟沈河',
-'折冲' => '折衝',
-'披榛采兰' => '披榛採蘭',
-'披头散发' => '披頭散髮',
-'披发' => '披髮',
-'抱朴而长吟兮' => '抱朴而長吟兮',
-'抱素怀朴' => '抱素懷樸',
-'抵御' => '抵禦',
-'抹干' => '抹乾',
-'抽公签' => '抽公籤',
-'抽签' => '抽籤',
-'抿发' => '抿髮',
-'拂钟无声' => '拂鐘無聲',
-'拆伙' => '拆夥',
-'拈须' => '拈鬚',
-'拉克施尔德钟' => '拉克施爾德鐘',
-'拉纤' => '拉縴',
-'拉面上' => '拉面上',
-'拉面具' => '拉面具',
-'拉面前' => '拉面前',
-'拉面巾' => '拉面巾',
-'拉面无' => '拉面無',
-'拉面皮' => '拉面皮',
-'拉面罩' => '拉面罩',
-'拉面色' => '拉面色',
-'拉面部' => '拉面部',
-'拉面' => '拉麵',
-'拒人于' => '拒人於',
-'拒于' => '拒於',
-'拓朴' => '拓樸',
-'拔发' => '拔髮',
-'拔须' => '拔鬚',
-'拗别' => '拗彆',
-'拘于' => '拘於',
-'拙于' => '拙於',
-'拙朴' => '拙樸',
-'拼却' => '拚卻',
-'拼命' => '拚命',
-'拼舍' => '拚捨',
-'拼死' => '拚死',
-'拼生尽死' => '拚生盡死',
-'拼绝' => '拚絕',
-'拼老命' => '拚老命',
-'拼斗' => '拚鬥',
-'拜托' => '拜託',
-'括发' => '括髮',
-'拭干' => '拭乾',
-'拮据' => '拮据',
-'拳局' => '拳跼',
-'拼死拼活' => '拼死拼活',
-'拾沈' => '拾瀋',
-'拿下表' => '拿下錶',
-'拿下钟' => '拿下鐘',
-'拿准' => '拿準',
-'拿破仑' => '拿破崙',
-'挂图' => '挂圖',
-'挂帅' => '挂帥',
-'挂彩' => '挂彩',
-'挂念' => '挂念',
-'挂号' => '挂號',
-'挂车' => '挂車',
-'挌斗' => '挌鬥',
-'挑大梁' => '挑大樑',
-'挑斗' => '挑鬥',
-'振荡' => '振蕩',
-'捉奸徒' => '捉奸徒',
-'捉奸细' => '捉奸細',
-'捉奸贼' => '捉奸賊',
-'捉奸党' => '捉奸黨',
-'捉奸' => '捉姦',
-'捉发' => '捉髮',
-'捍御' => '捍禦',
-'捏面人' => '捏麵人',
-'舍不得' => '捨不得',
-'舍入' => '捨入',
-'舍出' => '捨出',
-'舍去' => '捨去',
-'舍命' => '捨命',
-'舍堕' => '捨墮',
-'舍安就危' => '捨安就危',
-'舍实' => '捨實',
-'舍己从人' => '捨己從人',
-'舍己救人' => '捨己救人',
-'舍己为人' => '捨己為人',
-'舍己为公' => '捨己為公',
-'舍己为国' => '捨己為國',
-'舍得' => '捨得',
-'舍我其谁' => '捨我其誰',
-'舍本逐末' => '捨本逐末',
-'舍弃' => '捨棄',
-'舍死忘生' => '捨死忘生',
-'舍生' => '捨生',
-'舍短取长' => '捨短取長',
-'舍身' => '捨身',
-'舍车保帅' => '捨車保帥',
-'舍近求远' => '捨近求遠',
-'卷住' => '捲住',
-'卷来' => '捲來',
-'卷儿' => '捲兒',
-'卷入' => '捲入',
-'卷动' => '捲動',
-'卷去' => '捲去',
-'卷图' => '捲圖',
-'卷土重来' => '捲土重來',
-'卷地' => '捲地',
-'卷尺' => '捲尺',
-'卷尾猴' => '捲尾猴',
-'卷心菜' => '捲心菜',
-'卷成' => '捲成',
-'卷曲' => '捲曲',
-'卷款' => '捲款',
-'卷毛' => '捲毛',
-'卷烟盒' => '捲煙盒',
-'卷积云' => '捲積雲',
-'卷筒' => '捲筒',
-'卷帘' => '捲簾',
-'卷纸' => '捲紙',
-'卷缩' => '捲縮',
-'卷舌' => '捲舌',
-'卷烟' => '捲菸',
-'卷叶蛾' => '捲葉蛾',
-'卷袖' => '捲袖',
-'卷走' => '捲走',
-'卷起' => '捲起',
-'卷轴' => '捲軸',
-'卷逃' => '捲逃',
-'卷铺盖' => '捲鋪蓋',
-'卷云' => '捲雲',
-'卷风' => '捲風',
-'卷发' => '捲髮',
-'捵面' => '捵麵',
-'捶炼' => '捶鍊',
-'扫荡' => '掃蕩',
-'授勋' => '授勳',
-'掌柜' => '掌柜',
-'排骨面' => '排骨麵',
-'挂名' => '掛名',
-'挂帘' => '掛帘',
-'挂历' => '掛曆',
-'挂钩' => '掛鈎',
-'挂钟' => '掛鐘',
-'挂面' => '掛麵',
-'采下' => '採下',
-'采伐' => '採伐',
-'采住' => '採住',
-'采信' => '採信',
-'采光' => '採光',
-'采到' => '採到',
-'采制' => '採制',
-'采区' => '採區',
-'采去' => '採去',
-'采取' => '採取',
-'采回' => '採回',
-'采在' => '採在',
-'采好' => '採好',
-'采得' => '採得',
-'采拾' => '採拾',
-'采挖' => '採挖',
-'采掘' => '採掘',
-'采摘' => '採摘',
-'采摭' => '採摭',
-'采择' => '採擇',
-'采撷' => '採擷',
-'采收' => '採收',
-'采料' => '採料',
-'采暖' => '採暖',
-'采桑' => '採桑',
-'采样' => '採樣',
-'采樵人' => '採樵人',
-'采树种' => '採樹種',
-'采气' => '採氣',
-'采油' => '採油',
-'采为' => '採為',
-'采煤' => '採煤',
-'采获' => '採獲',
-'采猎' => '採獵',
-'采珠' => '採珠',
-'采生折割' => '採生折割',
-'采用' => '採用',
-'采石' => '採石',
-'采砂场' => '採砂場',
-'采矿' => '採礦',
-'采种' => '採種',
-'采空区' => '採空區',
-'采空采穗' => '採空採穗',
-'采納' => '採納',
-'采纳' => '採納',
-'采给' => '採給',
-'采花' => '採花',
-'采芹人' => '採芹人',
-'采茶' => '採茶',
-'采菊' => '採菊',
-'采莲' => '採蓮',
-'采薇' => '採薇',
-'采薪' => '採薪',
-'采药' => '採藥',
-'采血' => '採血',
-'采行' => '採行',
-'采补' => '採補',
-'采访' => '採訪',
-'采证' => '採證',
-'采买' => '採買',
-'采购' => '採購',
-'采办' => '採辦',
-'采运' => '採運',
-'采过' => '採過',
-'采选' => '採選',
-'采金' => '採金',
-'采录' => '採錄',
-'采铁' => '採鐵',
-'采集' => '採集',
-'采风' => '採風',
-'采风问俗' => '採風問俗',
-'采食' => '採食',
-'采盐' => '採鹽',
-'掣签' => '掣籤',
-'控制' => '控制',
-'推情准理' => '推情準理',
-'推托之词' => '推托之詞',
-'推托' => '推託',
-'提子干' => '提子乾',
-'提心吊胆' => '提心弔膽',
-'提摩太后书' => '提摩太後書',
-'提高后' => '提高後',
-'插于' => '插於',
-'换签' => '換籤',
-'换只' => '換隻',
-'换发' => '換髮',
-'握发' => '握髮',
-'揩干' => '揩乾',
-'揪采' => '揪採',
-'揪发' => '揪髮',
-'揪须' => '揪鬚',
-'揭丑' => '揭醜',
-'挥手表' => '揮手表',
-'揮手表' => '揮手表',
-'搋面' => '搋麵',
-'损于' => '損於',
-'搏斗' => '搏鬥',
-'捣鬼吊白' => '搗鬼弔白',
-'扼肮' => '搤肮',
-'扼肮拊背' => '搤肮拊背',
-'搬斗' => '搬鬥',
-'搭干铺' => '搭乾鋪',
-'搭伙' => '搭夥',
-'摧坚获丑' => '摧堅獲醜',
-'摭采' => '摭採',
-'摸棱' => '摸稜',
-'摸钟' => '摸鐘',
-'折奏' => '摺奏',
-'折子' => '摺子',
-'折尺' => '摺尺',
-'折扇' => '摺扇',
-'折梯' => '摺梯',
-'折椅' => '摺椅',
-'折台' => '摺檯',
-'折叠' => '摺疊',
-'折痕' => '摺痕',
-'折篷' => '摺篷',
-'折纸' => '摺紙',
-'折裙' => '摺裙',
-'撇吊' => '撇弔',
-'捞干' => '撈乾',
-'捞面' => '撈麵',
-'撚须' => '撚鬚',
-'撞钟' => '撞鐘',
-'撞阵冲军' => '撞陣衝軍',
-'撤并' => '撤併',
-'拨谷' => '撥穀',
-'撩斗' => '撩鬥',
-'播于' => '播於',
-'扑冬' => '撲鼕',
-'扑咚' => '撲鼕',
-'扑咚咚' => '撲鼕鼕',
-'擀面' => '擀麵',
-'击扑' => '擊扑',
-'击钟' => '擊鐘',
-'操作钟' => '操作鐘',
-'担仔面' => '擔仔麵',
-'担担面' => '擔擔麵',
-'据云' => '據云',
-'擢发' => '擢髮',
-'擦干' => '擦乾',
-'拧干' => '擰乾',
-'摆钟' => '擺鐘',
-'摄制' => '攝製',
-'支干' => '支幹',
-'支配欲' => '支配慾',
-'收获' => '收穫',
-'改制成' => '改制成',
-'改征' => '改徵',
-'改采' => '改採',
-'放懞挣' => '放懞掙',
-'放荡' => '放蕩',
-'放松' => '放鬆',
-'政斗' => '政鬥',
-'故云' => '故云',
-'敏于' => '敏於',
-'败于' => '敗於',
-'教学钟' => '教學鐘',
-'教于' => '教於',
-'教范' => '教範',
-'敢干' => '敢幹',
-'敢情欲' => '敢情欲',
-'敢斗了胆' => '敢斗了膽',
-'散伙' => '散夥',
-'散于' => '散於',
-'散荡' => '散蕩',
-'敦朴' => '敦樸',
-'敬挽' => '敬輓',
-'敲扑' => '敲扑',
-'敲钟' => '敲鐘',
-'整只' => '整隻',
-'整风后' => '整風後',
-'整发用品' => '整髮用品',
-'整出剧' => '整齣劇',
-'整出戏' => '整齣戲',
-'整出电影' => '整齣電影',
-'敌忾同仇' => '敵愾同讎',
-'数只包括' => '數只包括',
-'数只可' => '數只可',
-'数只含' => '數只含',
-'数只在' => '數只在',
-'数只应' => '數只應',
-'数只是' => '數只是',
-'数只会' => '數只會',
-'数只有' => '數只有',
-'数只比' => '數只比',
-'数只能' => '數只能',
-'数只限' => '數只限',
-'数只需' => '數只需',
-'数只须' => '數只須',
-'数天后' => '數天後',
-'数字钟' => '數字鐘',
-'数字钟表' => '數字鐘錶',
-'数罪并罚' => '數罪併罰',
-'数与虏确' => '數與虜确',
-'数只' => '數隻',
-'文丑' => '文丑',
-'文学志' => '文學誌',
-'文征明' => '文徵明',
-'文思泉涌' => '文思泉湧',
-'文杰' => '文杰',
-'文采郁郁' => '文采郁郁',
-'斗牛星' => '斗牛星',
-'斫雕为朴' => '斫雕為樸',
-'新井里美' => '新井里美',
-'新干县' => '新幹縣',
-'新历' => '新曆',
-'新历史' => '新歷史',
-'新扎' => '新紮',
-'斲雕为朴' => '斲雕為樸',
-'断发' => '斷髮',
-'断发文身' => '斷髮文身',
-'方便面' => '方便麵',
-'方向往' => '方向往',
-'方志恒' => '方志恒',
-'方法里' => '方法裡',
-'方志' => '方誌',
-'于后' => '於後',
-'于征' => '於徵',
-'于海上' => '於海上',
-'于海边' => '於海邊',
-'于震中' => '於震中',
-'于震前' => '於震前',
-'于震后' => '於震後',
-'施舍' => '施捨',
-'施于' => '施於',
-'施舍之道' => '施舍之道',
-'旁征博引' => '旁徵博引',
-'旁注' => '旁註',
-'旅游' => '旅遊',
-'旋回' => '旋迴',
-'族里' => '族裡',
-'日心历表' => '日心曆表',
-'日历' => '日曆',
-'日历史' => '日歷史',
-'日里' => '日裡',
-'日志' => '日誌',
-'早于' => '早於',
-'旱干' => '旱乾',
-'升州' => '昇州',
-'升平' => '昇平',
-'升阳' => '昇陽',
-'昊天不吊' => '昊天不弔',
-'明征' => '明徵',
-'明目张胆' => '明目張胆',
-'明窗净几' => '明窗淨几',
-'明范' => '明範',
-'明鉴' => '明鑑',
-'易于' => '易於',
-'昔人有云' => '昔人有云',
-'星历' => '星曆',
-'星期后' => '星期後',
-'星历史' => '星歷史',
-'春游' => '春遊',
-'春香斗学' => '春香鬥學',
-'昭惠后' => '昭惠后',
-'是发小' => '是髮小',
-'时钟' => '時鐘',
-'时间不准' => '時間不準',
-'晃荡' => '晃蕩',
-'晚于' => '晚於',
-'晚钟' => '晚鐘',
-'晞发' => '晞髮',
-'晨钟' => '晨鐘',
-'普咚咚' => '普鼕鼕',
-'晾干' => '晾乾',
-'暗地里' => '暗地裡',
-'暗沟里' => '暗溝裡',
-'暗里' => '暗裡',
-'暗斗' => '暗鬥',
-'畅游' => '暢遊',
-'昵称' => '暱稱',
-'暴敛横征' => '暴斂橫徵',
-'历元' => '曆元',
-'历命' => '曆命',
-'历始' => '曆始',
-'历室' => '曆室',
-'历尾' => '曆尾',
-'历局' => '曆局',
-'历数书' => '曆數書',
-'历日' => '曆日',
-'历书' => '曆書',
-'历本' => '曆本',
-'历法' => '曆法',
-'历狱' => '曆獄',
-'历纪' => '曆紀',
-'历象' => '曆象',
-'晒干' => '曬乾',
-'晒谷' => '曬穀',
-'曰云' => '曰云',
-'更仆难数' => '更僕難數',
-'更签' => '更籤',
-'更钟' => '更鐘',
-'书签' => '書籤',
-'书面' => '書面',
-'曹子里' => '曹子里',
-'曼谷' => '曼谷',
-'曾朴' => '曾樸',
-'最多' => '最多',
-'最多只' => '最多只',
-'会干扰' => '會干擾',
-'會干擾' => '會干擾',
-'会干' => '會幹',
-'会吊' => '會弔',
-'会里' => '會裡',
-'月历' => '月曆',
-'月历史' => '月歷史',
-'月球历表' => '月球曆表',
-'月里来' => '月裡來',
-'月面' => '月面',
-'有事之无范' => '有事之無範',
-'有仆' => '有僕',
-'有只不' => '有只不',
-'有只允' => '有只允',
-'有只容' => '有只容',
-'有只採' => '有只採',
-'有只采' => '有只採',
-'有只是' => '有只是',
-'有只用' => '有只用',
-'有回复' => '有回覆',
-'有够赞' => '有夠讚',
-'有征伐' => '有征伐',
-'有征战' => '有征戰',
-'有征戰' => '有征戰',
-'有征服' => '有征服',
-'有征討' => '有征討',
-'有征讨' => '有征討',
-'有征' => '有徵',
-'有恒街' => '有恒街',
-'有栖川' => '有栖川',
-'有准' => '有準',
-'有棱有角' => '有稜有角',
-'有只' => '有隻',
-'有余' => '有餘',
-'有发头陀寺' => '有髮頭陀寺',
-'服于' => '服於',
-'望了望' => '望了望',
-'望后石' => '望后石',
-'朝乾夕惕' => '朝乾夕惕',
-'朝钟' => '朝鐘',
-'朝鲜于' => '朝鮮於',
-'朦胧' => '朦朧',
-'蒙胧' => '朦朧',
-'木偶戏扎' => '木偶戲紮',
-'木材干馏' => '木材乾餾',
-'木梁' => '木樑',
-'木签' => '木籤',
-'木制' => '木製',
-'木钟' => '木鐘',
-'未干' => '未乾',
-'未干涉' => '未干涉',
-'未干預' => '未干預',
-'未干预' => '未干預',
-'本庄' => '本庄',
-'本征' => '本徵',
-'本出戏' => '本齣戲',
-'术赤' => '朮赤',
-'朱庆余' => '朱慶餘',
-'朱理安历' => '朱理安曆',
-'朱理安历史' => '朱理安歷史',
-'朴子里' => '朴子里',
-'李志喜' => '李志喜',
-'李适' => '李适',
-'李连杰' => '李連杰',
-'李連杰' => '李連杰',
-'材干' => '材幹',
-'村落发' => '村落發',
-'村里' => '村裡',
-'村里長' => '村里長',
-'村里长' => '村里長',
-'杜老志道' => '杜老誌道',
-'杞宋无征' => '杞宋無徵',
-'束发' => '束髮',
-'杠人' => '杠人',
-'杠梁' => '杠梁',
-'杠毂' => '杠轂',
-'杠轂' => '杠轂',
-'杯干' => '杯乾',
-'杯面' => '杯麵',
-'杰伦' => '杰倫',
-'杰倫' => '杰倫',
-'杰威尔' => '杰威爾',
-'杰威爾' => '杰威爾',
-'东周钟' => '東周鐘',
-'东岳' => '東嶽',
-'東湖里' => '東湖里',
-'东冲西突' => '東衝西突',
-'东游' => '東遊',
-'松口镇' => '松口鎮',
-'松山庄' => '松山庄',
-'松溪县' => '松谿縣',
-'板荡' => '板蕩',
-'林宏岳' => '林宏嶽',
-'林杰樑' => '林杰樑',
-'林郁方' => '林郁方',
-'林钟' => '林鐘',
-'林鹅峰' => '林鵞峰',
-'果干' => '果乾',
-'果子干' => '果子乾',
-'果累累' => '果纍纍',
-'枝干' => '枝幹',
-'枯干' => '枯乾',
-'架钟' => '架鐘',
-'某只' => '某隻',
-'染指于' => '染指於',
-'染殿后' => '染殿后',
-'染发' => '染髮',
-'柜上' => '柜上',
-'柜子' => '柜子',
-'柜柳' => '柜柳',
-'查封后' => '查封後',
-'柱梁' => '柱樑',
-'柳斌杰' => '柳斌杰',
-'柳诒征' => '柳詒徵',
-'栖栖皇皇' => '栖栖皇皇',
-'栗栖溪' => '栗栖溪',
-'校准' => '校準',
-'校舍' => '校舍',
-'核准的' => '核准的',
-'格于' => '格於',
-'格范' => '格範',
-'格里历' => '格里曆',
-'格里高利历' => '格里高利曆',
-'格斗' => '格鬥',
-'桂圆干' => '桂圓乾',
-'框里' => '框裡',
-'桌几' => '桌几',
-'桌历' => '桌曆',
-'桌历史' => '桌歷史',
-'桌游' => '桌遊',
-'桑干' => '桑乾',
-'杆枪' => '桿槍',
-'杆秤' => '桿秤',
-'杆菌' => '桿菌',
-'梁上君子' => '梁上君子',
-'梁启超' => '梁啓超',
-'条干' => '條幹',
-'梨干' => '梨乾',
-'梯冲' => '梯衝',
-'械系' => '械繫',
-'械斗' => '械鬥',
-'弃舍' => '棄捨',
-'棉里' => '棉裡',
-'棉制' => '棉製',
-'棒子面' => '棒子麵',
-'栋梁' => '棟樑',
-'棫朴' => '棫樸',
-'森林里' => '森林裡',
-'棺材里' => '棺材裡',
-'植发' => '植髮',
-'椒面' => '椒麵',
-'椰枣干' => '椰棗乾',
-'杨雅筑' => '楊雅筑',
-'楊雅筑' => '楊雅筑',
-'桢干' => '楨幹',
-'业余' => '業餘',
-'榨干' => '榨乾',
-'枪杆' => '槍桿',
-'杠杆' => '槓桿',
-'乐器钟' => '樂器鐘',
-'乐游原' => '樂遊原',
-'樊于期' => '樊於期',
-'梁上' => '樑上',
-'梁柱' => '樑柱',
-'樗里子' => '樗里子',
-'标标致致' => '標標致致',
-'标准' => '標準',
-'标签' => '標籤',
-'标致' => '標緻',
-'标注' => '標註',
-'标志' => '標誌',
-'模棱' => '模稜',
-'模范' => '模範',
-'模范七棒' => '模范七棒',
-'模范三军' => '模范三軍',
-'模范三軍' => '模范三軍',
-'模范棒棒堂' => '模范棒棒堂',
-'模制' => '模製',
-'样范' => '樣範',
-'樵采' => '樵採',
-'朴修斯' => '樸修斯',
-'朴厚' => '樸厚',
-'朴学' => '樸學',
-'朴实' => '樸實',
-'朴念仁' => '樸念仁',
-'朴拙' => '樸拙',
-'朴樕' => '樸樕',
-'朴父' => '樸父',
-'朴直' => '樸直',
-'朴素' => '樸素',
-'朴讷' => '樸訥',
-'朴质' => '樸質',
-'朴鄙' => '樸鄙',
-'朴重' => '樸重',
-'朴野' => '樸野',
-'朴钝' => '樸鈍',
-'朴陋' => '樸陋',
-'朴马' => '樸馬',
-'朴鲁' => '樸魯',
-'树干' => '樹幹',
-'树林里' => '樹林裡',
-'树梁' => '樹樑',
-'桥梁' => '橋樑',
-'机械系' => '機械系',
-'機械系' => '機械系',
-'机械表' => '機械錶',
-'机械钟' => '機械鐘',
-'机械钟表' => '機械鐘錶',
-'横峰县' => '橫峯縣',
-'横征暴敛' => '橫徵暴斂',
-'横梁' => '橫樑',
-'横冲' => '橫衝',
-'台布' => '檯布',
-'台历' => '檯曆',
-'台灯' => '檯燈',
-'台球' => '檯球',
-'台面上' => '檯面上',
-'台面化' => '檯面化',
-'柜台' => '櫃檯',
-'柜里' => '櫃裡',
-'栉发工' => '櫛髮工',
-'欲海难填' => '欲海難填',
-'欺蒙' => '欺矇',
-'歌后' => '歌后',
-'歌钟' => '歌鐘',
-'欧游' => '歐遊',
-'止于' => '止於',
-'正官庄' => '正官庄',
-'正杰' => '正杰',
-'武丑' => '武丑',
-'武后' => '武后',
-'武斗' => '武鬥',
-'岁聿云暮' => '歲聿云暮',
-'历史里' => '歷史裡',
-'归并' => '歸併',
-'归于' => '歸於',
-'归余' => '歸餘',
-'歹斗' => '歹鬥',
-'死于' => '死於',
-'死里求生' => '死裡求生',
-'死里逃生' => '死裡逃生',
-'殖谷' => '殖穀',
-'残肴' => '殘肴',
-'残余' => '殘餘',
-'僵尸' => '殭屍',
-'殷师牛斗' => '殷師牛鬥',
-'殷鉴' => '殷鑑',
-'壳里' => '殼裡',
-'殿钟自鸣' => '殿鐘自鳴',
-'毁于' => '毀於',
-'毁钟为铎' => '毀鐘為鐸',
-'殴斗' => '毆鬥',
-'母后' => '母后',
-'母范' => '母範',
-'母丑' => '母醜',
-'每每只' => '每每只',
-'每只' => '每隻',
-'毗婆尸佛' => '毗婆尸佛',
-'毛坏' => '毛坏',
-'毛姜' => '毛薑',
-'毛发' => '毛髮',
-'毫厘' => '毫釐',
-'毫发' => '毫髮',
-'气冲斗牛' => '氣沖斗牛',
-'气郁' => '氣鬱',
-'氤郁' => '氤鬱',
-'水来汤里去' => '水來湯裡去',
-'水准' => '水準',
-'水无怜奈' => '水無怜奈',
-'水表示' => '水表示',
-'水表面' => '水表面',
-'水里' => '水裡',
-'水里商工' => '水里商工',
-'水里溪' => '水里溪',
-'水里濁水溪' => '水里濁水溪',
-'水里鄉' => '水里鄉',
-'水里高級商工' => '水里高級商工',
-'水里鳳林' => '水里鳳林',
-'水表' => '水錶',
-'永历' => '永曆',
-'永历史' => '永歷史',
-'永志不忘' => '永誌不忘',
-'求知欲' => '求知慾',
-'求签' => '求籤',
-'池里' => '池裡',
-'污蔑' => '污衊',
-'汤卤' => '汤滷',
-'汲于' => '汲於',
-'决斗' => '決鬥',
-'沈淀' => '沈澱',
-'沈郁' => '沈鬱',
-'沉淀' => '沉澱',
-'沉郁' => '沉鬱',
-'没干没净' => '沒乾沒淨',
-'没事干' => '沒事幹',
-'没干' => '沒幹',
-'没折至' => '沒摺至',
-'没样范' => '沒樣範',
-'没准' => '沒準',
-'冲冠发怒' => '沖冠髮怒',
-'冲天' => '沖天',
-'沙琅' => '沙瑯',
-'沙羡' => '沙羡',
-'沙里淘金' => '沙裡淘金',
-'河岳' => '河嶽',
-'河里' => '河裡',
-'油泼面' => '油潑麵',
-'油斗' => '油鬥',
-'油面' => '油麵',
-'治愈' => '治癒',
-'沿溯' => '沿泝',
-'法自制' => '法自制',
-'法里,' => '法裡,',
-'泛游' => '泛遊',
-'泡制' => '泡製',
-'泡面' => '泡麵',
-'波棱菜' => '波稜菜',
-'波发藻' => '波髮藻',
-'泥于' => '泥於',
-'注云' => '注云',
-'注释' => '注釋',
-'泰山梁木' => '泰山梁木',
-'泱郁' => '泱鬱',
-'泳气钟' => '泳氣鐘',
-'洄游' => '洄遊',
-'洋河大曲' => '洋河大麯',
-'洒家' => '洒家',
-'洒扫' => '洒掃',
-'洒水' => '洒水',
-'洒洒' => '洒洒',
-'洒淅' => '洒淅',
-'洒涤' => '洒滌',
-'洒濯' => '洒濯',
-'洒然' => '洒然',
-'洒脱' => '洒脫',
-'洗炼' => '洗鍊',
-'洗练' => '洗鍊',
-'洗发' => '洗髮',
-'洛钟东应' => '洛鐘東應',
-'洞里' => '洞裡',
-'洞里萨' => '洞里薩',
-'洞里薩' => '洞里薩',
-'泄欲' => '洩慾',
-'洪范' => '洪範',
-'洪谷子' => '洪谷子',
-'洪适' => '洪适',
-'洪钟' => '洪鐘',
-'汹涌' => '洶湧',
-'流征' => '流徵',
-'流于' => '流於',
-'流荡' => '流蕩',
-'流风余俗' => '流風餘俗',
-'流风余韵' => '流風餘韻',
-'浩浩荡荡' => '浩浩蕩蕩',
-'浩荡' => '浩蕩',
-'浪荡' => '浪蕩',
-'浪游' => '浪遊',
-'浮于' => '浮於',
-'浮荡' => '浮蕩',
-'浮夸' => '浮誇',
-'浮松' => '浮鬆',
-'海干' => '海乾',
-'海淀山后' => '海淀山後',
-'海淀山後' => '海淀山後',
-'浸卤' => '浸滷',
-'涂善妮' => '涂善妮',
-'涂坤' => '涂坤',
-'涂壮勋' => '涂壯勳',
-'涂壯勳' => '涂壯勳',
-'涂天相' => '涂天相',
-'涂姓' => '涂姓',
-'涂序瑄' => '涂序瑄',
-'涂敏恆' => '涂敏恆',
-'涂敏恒' => '涂敏恆',
-'涂泽民' => '涂澤民',
-'涂澤民' => '涂澤民',
-'涂绍煃' => '涂紹煃',
-'涂羽卿' => '涂羽卿',
-'涂謹申' => '涂謹申',
-'涂谨申' => '涂謹申',
-'涂逢年' => '涂逢年',
-'涂醒哲' => '涂醒哲',
-'涂長望' => '涂長望',
-'涂长望' => '涂長望',
-'涂鴻欽' => '涂鴻欽',
-'涂鸿钦' => '涂鴻欽',
-'涌水塘' => '涌水塘',
-'涳蒙' => '涳濛',
-'涸干' => '涸乾',
-'凉席' => '涼蓆',
-'凉面' => '涼麵',
-'淋余土' => '淋餘土',
-'淑范' => '淑範',
-'泪干' => '淚乾',
-'泪如泉涌' => '淚如泉湧',
-'淡于' => '淡於',
-'淡蒙蒙' => '淡濛濛',
-'净余' => '淨餘',
-'净发' => '淨髮',
-'淫欲' => '淫慾',
-'淫荡' => '淫蕩',
-'淬炼' => '淬鍊',
-'深山何处钟' => '深山何處鐘',
-'深山里' => '深山裡',
-'淳于' => '淳于',
-'淳朴' => '淳樸',
-'渊淳岳峙' => '淵淳嶽峙',
-'渊里' => '淵裡',
-'浅淀' => '淺澱',
-'清心寡欲' => '清心寡欲',
-'渠冲' => '渠衝',
-'测不准' => '測不準',
-'港制' => '港製',
-'游离' => '游離',
-'浑朴' => '渾樸',
-'浑个' => '渾箇',
-'湖里' => '湖裡',
-'湘累' => '湘纍',
-'涌上' => '湧上',
-'涌来' => '湧來',
-'涌入' => '湧入',
-'涌出' => '湧出',
-'涌向' => '湧向',
-'涌水' => '湧水',
-'涌泉' => '湧泉',
-'涌现' => '湧現',
-'涌起' => '湧起',
-'涌进' => '湧進',
-'湮郁' => '湮鬱',
-'汤下面' => '湯下麵',
-'汤团' => '湯糰',
-'汤面' => '湯麵',
-'源于' => '源於',
-'准不准' => '準不準',
-'准例' => '準例',
-'准保' => '準保',
-'准备' => '準備',
-'准儿' => '準兒',
-'准分子' => '準分子',
-'准则' => '準則',
-'准噶尔' => '準噶爾',
-'准定' => '準定',
-'准平原' => '準平原',
-'准度' => '準度',
-'准式' => '準式',
-'准拿督' => '準拿督',
-'准据' => '準據',
-'准拟' => '準擬',
-'准新娘' => '準新娘',
-'准新郎' => '準新郎',
-'准星' => '準星',
-'准是' => '準是',
-'准时' => '準時',
-'准会' => '準會',
-'准决赛' => '準決賽',
-'准的' => '準的',
-'准直' => '準直',
-'准确' => '準確',
-'准线' => '準線',
-'准绳' => '準繩',
-'准话' => '準話',
-'准谱' => '準譜',
-'准货币' => '準貨幣',
-'准军事' => '準軍事',
-'准头' => '準頭',
-'准点' => '準點',
-'沟大曲' => '溝大麯',
-'沟谷' => '溝谷',
-'溟蒙' => '溟濛',
-'溢于' => '溢於',
-'温洛克期' => '溫洛克期',
-'溲面' => '溲麵',
-'溺于' => '溺於',
-'滃郁' => '滃鬱',
-'滑借' => '滑藉',
-'汇丰' => '滙豐',
-'渗漓' => '滲灕',
-'卤了' => '滷了',
-'卤五花' => '滷五花',
-'卤味' => '滷味',
-'卤好' => '滷好',
-'卤子' => '滷子',
-'卤料' => '滷料',
-'卤水' => '滷水',
-'卤汁' => '滷汁',
-'卤湖' => '滷湖',
-'卤煮' => '滷煮',
-'卤牛' => '滷牛',
-'卤的' => '滷的',
-'卤肉' => '滷肉',
-'卤菜' => '滷菜',
-'卤蛋' => '滷蛋',
-'卤虾' => '滷蝦',
-'卤制' => '滷製',
-'卤豆' => '滷豆',
-'卤鸡' => '滷雞',
-'卤鸭' => '滷鴨',
-'卤鹅' => '滷鵝',
-'卤面' => '滷麵',
-'满拼自尽' => '滿拚自盡',
-'满满当当' => '滿滿當當',
-'满头洋发' => '滿頭洋髮',
-'漂荡' => '漂蕩',
-'漕挽' => '漕輓',
-'沤郁' => '漚鬱',
-'漠里' => '漠裡',
-'汉弥登钟' => '漢彌登鐘',
-'漫卷' => '漫捲',
-'漫游' => '漫遊',
-'潜意识里' => '潛意識裡',
-'潜水表' => '潛水錶',
-'潜水钟' => '潛水鐘',
-'潜水钟表' => '潛水鐘錶',
-'潭里' => '潭裡',
-'潮涌' => '潮湧',
-'溃于' => '潰於',
-'涩谷区' => '澀谷區',
-'澄江县' => '澂江縣',
-'澄澹精致' => '澄澹精致',
-'澒蒙' => '澒濛',
-'淀乃不耕之地' => '澱乃不耕之地',
-'淀北片' => '澱北片',
-'淀山' => '澱山',
-'淀淀' => '澱澱',
-'淀积' => '澱積',
-'淀粉' => '澱粉',
-'淀解物' => '澱解物',
-'淀谓之滓' => '澱謂之滓',
-'澹台' => '澹臺',
-'澹荡' => '澹蕩',
-'激斗' => '激鬥',
-'浓发' => '濃髮',
-'蒙汜' => '濛汜',
-'蒙蒙细雨' => '濛濛細雨',
-'蒙雾' => '濛霧',
-'蒙鸿' => '濛鴻',
-'浚州' => '濬州',
-'浚县' => '濬縣',
-'滨田里佳子' => '濱田里佳子',
-'沈丹客运' => '瀋丹客運',
-'沈丹线' => '瀋丹線',
-'沈丹铁路' => '瀋丹鐵路',
-'沈丹高' => '瀋丹高',
-'沈北' => '瀋北',
-'沈吉' => '瀋吉',
-'沈大线' => '瀋大線',
-'沈大铁路' => '瀋大鐵路',
-'沈大高速' => '瀋大高速',
-'沈山线' => '瀋山線',
-'沈山铁路' => '瀋山鐵路',
-'沈州' => '瀋州',
-'沈抚' => '瀋撫',
-'沈水' => '瀋水',
-'沈河' => '瀋河',
-'沈海铁路' => '瀋海鐵路',
-'沈海高速' => '瀋海高速',
-'沈阳' => '瀋陽',
-'泸州大曲' => '瀘州大麯',
-'沥干' => '瀝乾',
-'潇洒' => '瀟洒',
-'弥山遍野' => '瀰山遍野',
-'弥漫' => '瀰漫',
-'弥弥' => '瀰瀰',
-'漓水' => '灕水',
-'漓江' => '灕江',
-'漓湘' => '灕湘',
-'漓然' => '灕然',
-'滩涂' => '灘涂',
-'滩席' => '灘蓆',
-'火并非' => '火並非',
-'火并' => '火併',
-'火山里' => '火山裡',
-'火拼' => '火拚',
-'火折子' => '火摺子',
-'火签' => '火籤',
-'灰蒙' => '灰濛',
-'灰蒙蒙' => '灰濛濛',
-'炆面' => '炆麵',
-'炒面' => '炒麵',
-'炮制' => '炮製',
-'炸酱面' => '炸醬麵',
-'为准' => '為準',
-'为鉴' => '為鑑',
-'乌兹冲锋枪' => '烏茲衝鋒槍',
-'乌苏里' => '烏蘇里',
-'乌发' => '烏髮',
-'乌龙面' => '烏龍麵',
-'烘干' => '烘乾',
-'烘制' => '烘製',
-'烤干' => '烤乾',
-'烤卤' => '烤滷',
-'烹制' => '烹製',
-'焙干' => '焙乾',
-'无征不信' => '無徵不信',
-'无业游民' => '無業游民',
-'无梁楼盖' => '無樑樓蓋',
-'无余' => '無餘',
-'炼制' => '煉製',
-'煎面' => '煎麵',
-'烟卷' => '煙捲',
-'烟台' => '煙臺',
-'照入签' => '照入籤',
-'照相干片' => '照相乾片',
-'煨干' => '煨乾',
-'煮面' => '煮麵',
-'熊杰' => '熊杰',
-'荧郁' => '熒鬱',
-'燎发' => '燎髮',
-'烧干' => '燒乾',
-'燕几' => '燕几',
-'燕游' => '燕遊',
-'烫一个发' => '燙一個髮',
-'烫一次发' => '燙一次髮',
-'烫个发' => '燙個髮',
-'烫完发' => '燙完髮',
-'烫次发' => '燙次髮',
-'烫发' => '燙髮',
-'烫面' => '燙麵',
-'营干' => '營幹',
-'烩面' => '燴麵',
-'烬余' => '燼餘',
-'爆发指数' => '爆發指數',
-'争奇斗妍' => '爭奇鬥妍',
-'争奇斗异' => '爭奇鬥異',
-'争奇斗艳' => '爭奇鬥豔',
-'争妍斗奇' => '爭妍鬥奇',
-'争妍斗艳' => '爭妍鬥豔',
-'争红斗紫' => '爭紅鬥紫',
-'争斗' => '爭鬥',
-'爰定祥历' => '爰定祥厤',
-'爽荡' => '爽蕩',
-'尔冬陞' => '爾冬陞',
-'墙里' => '牆裡',
-'片里' => '片裡',
-'片言只语' => '片言隻語',
-'版图里' => '版圖裡',
-'牙签' => '牙籤',
-'牛只' => '牛隻',
-'物欲' => '物慾',
-'抵牾' => '牴牾',
-'抵触' => '牴觸',
-'特别致' => '特别致',
-'特制住' => '特制住',
-'特制定' => '特制定',
-'特制止' => '特制止',
-'特制订' => '特制訂',
-'特征' => '特徵',
-'特制' => '特製',
-'牵一发' => '牽一髮',
-'牵系' => '牽繫',
-'荦确' => '犖确',
-'狂并潮' => '狂併潮',
-'狃于' => '狃於',
-'狄志杰' => '狄志杰',
-'狐借虎威' => '狐藉虎威',
-'猛于' => '猛於',
-'猛冲' => '猛衝',
-'猜三划五' => '猜三划五',
-'犹如表' => '猶如錶',
-'犹如钟' => '猶如鐘',
-'犹如钟表' => '猶如鐘錶',
-'狱里' => '獄裡',
-'奖杯' => '獎盃',
-'独裁制' => '獨裁制',
-'独辟蹊径' => '獨闢蹊徑',
-'获匪其丑' => '獲匪其醜',
-'兽欲' => '獸慾',
-'献丑' => '獻醜',
-'玉历' => '玉曆',
-'玉历史' => '玉歷史',
-'玉米面' => '玉米面',
-'王侯后' => '王侯后',
-'王后' => '王后',
-'王添灯' => '王添灯',
-'王田里' => '王田里',
-'王鉴' => '王鑑',
-'王余鱼' => '王餘魚',
-'珍肴异馔' => '珍肴異饌',
-'班里' => '班裡',
-'现于' => '現於',
-'球台' => '球檯',
-'理一个发' => '理一個髮',
-'理一次发' => '理一次髮',
-'理个发' => '理個髮',
-'理完发' => '理完髮',
-'理次发' => '理次髮',
-'理发' => '理髮',
-'琴钟' => '琴鐘',
-'珐琅' => '琺瑯',
-'瑞城里' => '瑞城里',
-'瑞征' => '瑞徵',
-'瑶签' => '瑤籤',
-'环游' => '環遊',
-'瓷制' => '瓷製',
-'甄后' => '甄后',
-'瓮安' => '甕安',
-'甚于' => '甚於',
-'甜水面' => '甜水麵',
-'甜面酱' => '甜麵醬',
-'生力面' => '生力麵',
-'生于' => '生於',
-'生殖洄游' => '生殖洄游',
-'生物钟' => '生物鐘',
-'生发生' => '生發生',
-'生华发' => '生華髮',
-'生姜' => '生薑',
-'生锈' => '生鏽',
-'生发' => '生髮',
-'产卵洄游' => '產卵洄游',
-'苏醒' => '甦醒',
-'用于' => '用於',
-'用法里' => '用法裡',
-'甩发' => '甩髮',
-'田子里' => '田子里',
-'田庄英雄' => '田庄英雄',
-'田谷' => '田穀',
-'田里' => '田裡',
-'由余' => '由余',
-'由于' => '由於',
-'甲胄' => '甲冑',
-'甲后路' => '甲后路',
-'男仆' => '男僕',
-'界里' => '界裡',
-'畏于' => '畏於',
-'留长发' => '留長髮',
-'留发' => '留髮',
-'毕于' => '畢於',
-'毕业于' => '畢業於',
-'毕生发展' => '畢生發展',
-'当准' => '當準',
-'当当丁丁' => '當當丁丁',
-'当当网' => '當當網',
-'叠席' => '疊蓆',
-'疏松' => '疏鬆',
-'疑系' => '疑係',
-'疑凶' => '疑兇',
-'疲于' => '疲於',
-'疲困' => '疲睏',
-'病征' => '病徵',
-'病愈' => '病癒',
-'病余' => '病餘',
-'痊愈' => '痊癒',
-'痒疹' => '痒疹',
-'痒痒' => '痒痒',
-'痳木' => '痳木',
-'痳疹' => '痳疹',
-'痳病' => '痳病',
-'痳痹' => '痳痺',
-'痳疯' => '痳瘋',
-'愈合' => '癒合',
-'症结' => '癥結',
-'癸丑' => '癸丑',
-'发干' => '發乾',
-'发呆' => '發獃',
-'发签' => '發籤',
-'发松' => '發鬆',
-'发面' => '發麵',
-'白干儿' => '白乾兒',
-'白术' => '白朮',
-'白朴' => '白樸',
-'白净面皮' => '白淨面皮',
-'白发其事' => '白發其事',
-'白皮松' => '白皮松',
-'白粉面' => '白粉麵',
-'白里透红' => '白裡透紅',
-'白面包青天' => '白面包青天',
-'白发' => '白髮',
-'白胡' => '白鬍',
-'白霉' => '白黴',
-'百个' => '百個',
-'百只可' => '百只可',
-'百只够' => '百只夠',
-'百只夠' => '百只夠',
-'百只怕' => '百只怕',
-'百只足够' => '百只足夠',
-'百只足夠' => '百只足夠',
-'百周后' => '百周後',
-'百天后' => '百天後',
-'百子里' => '百子里',
-'百年' => '百年',
-'百拙千丑' => '百拙千醜',
-'百科里' => '百科裡',
-'百谷' => '百穀',
-'百扎' => '百紮',
-'百花历' => '百花曆',
-'百花历史' => '百花歷史',
-'百炼' => '百鍊',
-'百只' => '百隻',
-'百余' => '百餘',
-'的回复' => '的回覆',
-'的图里' => '的圖裡',
-'的山里' => '的山裡',
-'的干将' => '的幹將',
-'的个中' => '的箇中',
-'的钟' => '的鐘',
-'的长发' => '的長髮',
-'的发小' => '的髮小',
-'皆可作淀' => '皆可作澱',
-'皆准' => '皆準',
-'皇后' => '皇后',
-'皇历' => '皇曆',
-'皇极历' => '皇極曆',
-'皇极历史' => '皇極歷史',
-'皇历史' => '皇歷史',
-'皓发' => '皓髮',
-'皮制服' => '皮制服',
-'皮托管' => '皮托管',
-'皮肤' => '皮膚',
-'皮里春秋' => '皮裡春秋',
-'皮里阳秋' => '皮裡陽秋',
-'皮制' => '皮製',
-'皮松' => '皮鬆',
-'皱别' => '皺彆',
-'皱折' => '皺摺',
-'盆吊' => '盆弔',
-'盈余' => '盈餘',
-'益于' => '益於',
-'盒里' => '盒裡',
-'盛赞' => '盛讚',
-'盗采' => '盜採',
-'盗钟' => '盜鐘',
-'监制' => '監製',
-'盘里' => '盤裡',
-'盘回' => '盤迴',
-'卢棱伽' => '盧稜伽',
-'荡气回肠' => '盪氣迴腸',
-'盲干' => '盲幹',
-'直于' => '直於',
-'直冲' => '直衝',
-'相并' => '相併',
-'相克制' => '相克制',
-'相克服' => '相克服',
-'相克' => '相剋',
-'相干' => '相干',
-'相于' => '相於',
-'相冲' => '相衝',
-'相斗' => '相鬥',
-'看下表' => '看下錶',
-'看下钟' => '看下鐘',
-'看法里' => '看法裡',
-'看准' => '看準',
-'看表面' => '看表面',
-'看表' => '看錶',
-'看钟' => '看鐘',
-'真凶' => '真兇',
-'真个' => '真箇',
-'真丑' => '真醜',
-'眼干' => '眼乾',
-'眼帘' => '眼帘',
-'眼眶里' => '眼眶裡',
-'眼睛里' => '眼睛裡',
-'眼里' => '眼裡',
-'着眼于' => '着眼於',
-'困乏' => '睏乏',
-'困了' => '睏了',
-'困倦' => '睏倦',
-'困觉' => '睏覺',
-'睡游病' => '睡遊病',
-'瞄准' => '瞄準',
-'瞅下表' => '瞅下錶',
-'瞅下钟' => '瞅下鐘',
-'瞎蒙' => '瞎矇',
-'了望' => '瞭望',
-'了然' => '瞭然',
-'了若指掌' => '瞭若指掌',
-'瞳蒙' => '瞳矇',
-'蒙事' => '矇事',
-'蒙昧无知' => '矇昧無知',
-'蒙松雨' => '矇松雨',
-'蒙混' => '矇混',
-'蒙瞍' => '矇瞍',
-'蒙眬' => '矇矓',
-'蒙聩' => '矇聵',
-'蒙头转' => '矇頭轉',
-'蒙骗' => '矇騙',
-'瞩托' => '矚託',
-'矜夸' => '矜誇',
-'短几' => '短几',
-'短于' => '短於',
-'短发生' => '短發生',
-'短发' => '短髮',
-'矮几' => '矮几',
-'石几' => '石几',
-'石杠' => '石杠',
-'石梁' => '石樑',
-'石英钟' => '石英鐘',
-'石英钟表' => '石英鐘錶',
-'石钟' => '石鐘',
-'研制' => '研製',
-'砰当' => '砰噹',
-'破鉴' => '破鑑',
-'朱砂' => '硃砂',
-'硬干' => '硬幹',
-'确瘠' => '确瘠',
-'碑志' => '碑誌',
-'碗里' => '碗裡',
-'碰钟' => '碰鐘',
-'确系' => '確係',
-'码表' => '碼錶',
-'磁制' => '磁製',
-'磨蝎' => '磨蝎',
-'磨制' => '磨製',
-'磨炼' => '磨鍊',
-'磬钟' => '磬鐘',
-'硗确' => '磽确',
-'砻谷' => '礱穀',
-'示范' => '示範',
-'社里' => '社裡',
-'祝赞' => '祝讚',
-'祝发' => '祝髮',
-'神荼郁垒' => '神荼鬱壘',
-'神游' => '神遊',
-'神雕像' => '神雕像',
-'神雕' => '神鵰',
-'祭吊' => '祭弔',
-'禁欲' => '禁慾',
-'禁欲主义' => '禁欲主義',
-'祸于' => '禍於',
-'御侮' => '禦侮',
-'御寇' => '禦寇',
-'御寒' => '禦寒',
-'御敌' => '禦敵',
-'礼赞' => '禮讚',
-'禾谷' => '禾穀',
-'秃妃之发' => '禿妃之髮',
-'秃发' => '禿髮',
-'秀发动' => '秀發動',
-'秀发展' => '秀發展',
-'秀发布' => '秀發布',
-'秀发村' => '秀發村',
-'秀发现' => '秀發現',
-'秀发生' => '秀發生',
-'秀发表' => '秀發表',
-'秀发起' => '秀發起',
-'秀发' => '秀髮',
-'私下里' => '私下裡',
-'私欲' => '私慾',
-'私斗' => '私鬥',
-'秋游' => '秋遊',
-'种丹妮' => '种丹妮',
-'种师中' => '种師中',
-'种师道' => '种師道',
-'种放' => '种放',
-'科尼亚克期' => '科尼亞克期',
-'科斗' => '科斗',
-'科范' => '科範',
-'秒表明' => '秒表明',
-'秒表示' => '秒表示',
-'秒钟' => '秒鐘',
-'秤杆' => '秤桿',
-'秦沈客运' => '秦瀋客運',
-'移祸于' => '移禍於',
-'稀松' => '稀鬆',
-'棱台' => '稜台',
-'棱子' => '稜子',
-'棱层' => '稜層',
-'棱柱' => '稜柱',
-'棱登' => '稜登',
-'棱棱' => '稜稜',
-'棱等登' => '稜等登',
-'棱线' => '稜線',
-'棱缝' => '稜縫',
-'棱角' => '稜角',
-'棱锥' => '稜錐',
-'棱镜' => '稜鏡',
-'棱体' => '稜體',
-'种谷' => '種穀',
-'称赞' => '稱讚',
-'稻谷' => '稻穀',
-'稽征' => '稽徵',
-'谷人' => '穀人',
-'谷保家商' => '穀保家商',
-'谷仓' => '穀倉',
-'谷圭' => '穀圭',
-'谷场' => '穀場',
-'谷子' => '穀子',
-'谷日' => '穀日',
-'谷旦' => '穀旦',
-'谷梁' => '穀梁',
-'谷壳' => '穀殼',
-'谷物' => '穀物',
-'谷皮' => '穀皮',
-'谷神' => '穀神',
-'谷禄' => '穀祿',
-'谷谷' => '穀穀',
-'谷米' => '穀米',
-'谷粒' => '穀粒',
-'谷舱' => '穀艙',
-'谷苗' => '穀苗',
-'谷草' => '穀草',
-'谷贵饿农' => '穀貴餓農',
-'谷贱伤农' => '穀賤傷農',
-'谷雨' => '穀雨',
-'谷类' => '穀類',
-'谷食' => '穀食',
-'穆棱' => '穆稜',
-'穆罕默德历' => '穆罕默德曆',
-'穆罕默德历史' => '穆罕默德歷史',
-'积淀' => '積澱',
-'积谷' => '積穀',
-'积谷防饥' => '積穀防饑',
-'积郁' => '積鬱',
-'稳健的台风' => '穩健的台風',
-'稳扎' => '穩紮',
-'空蒙' => '空濛',
-'空荡' => '空蕩',
-'空荡荡' => '空蕩蕩',
-'空钟' => '空鐘',
-'空余' => '空餘',
-'窒欲' => '窒慾',
-'窗明几亮' => '窗明几亮',
-'窗明几净' => '窗明几淨',
-'窗帘' => '窗簾',
-'窝里' => '窩裡',
-'窝里斗' => '窩裡鬥',
-'穷于' => '窮於',
-'穷追不舍' => '窮追不捨',
-'穷发' => '窮髮',
-'窃钟掩耳' => '竊鐘掩耳',
-'立于' => '立於',
-'立范' => '立範',
-'童仆' => '童僕',
-'竞斗' => '競鬥',
-'竹几' => '竹几',
-'竹林之游' => '竹林之遊',
-'竹签' => '竹籤',
-'竹席' => '竹蓆',
-'竹制' => '竹製',
-'竹溪县' => '竹谿縣',
-'笑里藏刀' => '笑裡藏刀',
-'第一出现' => '第一出現',
-'第一出現' => '第一出現',
-'第一出線' => '第一出線',
-'第一出线' => '第一出線',
-'第一出' => '第一齣',
-'第七出' => '第七齣',
-'第三出局' => '第三出局',
-'第三出' => '第三齣',
-'第九出' => '第九齣',
-'第二出線' => '第二出線',
-'第二出线' => '第二出線',
-'第二出' => '第二齣',
-'第五出局' => '第五出局',
-'第五出' => '第五齣',
-'第八出' => '第八齣',
-'第六出' => '第六齣',
-'第四出局' => '第四出局',
-'第四出' => '第四齣',
-'笔杆' => '筆桿',
-'笔秃墨干' => '筆禿墨乾',
-'等于' => '等於',
-'笋干' => '筍乾',
-'筑前' => '筑前',
-'筑北' => '筑北',
-'筑州' => '筑州',
-'筑后' => '筑後',
-'筑後' => '筑後',
-'筑波' => '筑波',
-'筑紫' => '筑紫',
-'筑肥' => '筑肥',
-'筑西' => '筑西',
-'筑邦' => '筑邦',
-'筑阳' => '筑陽',
-'筑陽' => '筑陽',
-'答复' => '答覆',
-'筵几' => '筵几',
-'个中原因' => '箇中原因',
-'个中奥' => '箇中奧',
-'个中好手' => '箇中好手',
-'个中强手' => '箇中強手',
-'个中滋味' => '箇中滋味',
-'个中玄机' => '箇中玄機',
-'个中理由' => '箇中理由',
-'个中翘楚' => '箇中翹楚',
-'个中道理' => '箇中道理',
-'个中高手' => '箇中高手',
-'个旧' => '箇舊',
-'算历' => '算曆',
-'算历史' => '算歷史',
-'算准' => '算準',
-'管制' => '管制',
-'管干' => '管幹',
-'箱里' => '箱裡',
-'节欲' => '節慾',
-'节目里' => '節目裡',
-'节余' => '節餘',
-'范亭' => '範亭',
-'范例' => '範例',
-'范围' => '範圍',
-'范字' => '範字',
-'范式' => '範式',
-'范性形变' => '範性形變',
-'范数' => '範數',
-'范文' => '範文',
-'范本' => '範本',
-'范畴' => '範疇',
-'范金' => '範金',
-'简并' => '簡併',
-'简朴' => '簡樸',
-'简短发' => '簡短發',
-'简筑翎' => '簡筑翎',
-'簡筑翎' => '簡筑翎',
-'簸荡' => '簸蕩',
-'签幐' => '籤幐',
-'签押' => '籤押',
-'签条' => '籤條',
-'签诗' => '籤詩',
-'吁天' => '籲天',
-'吁求' => '籲求',
-'吁请' => '籲請',
-'米沈' => '米瀋',
-'米谷' => '米穀',
-'米团' => '米糰',
-'米余' => '米餘',
-'米面' => '米麵',
-'粉签子' => '粉籤子',
-'粗制' => '粗製',
-'精制伏' => '精制伏',
-'精制住' => '精制住',
-'精制服' => '精制服',
-'精干' => '精幹',
-'精于' => '精於',
-'精准' => '精準',
-'精致' => '精緻',
-'精制' => '精製',
-'精炼' => '精鍊',
-'精辟' => '精闢',
-'精松' => '精鬆',
-'糊里糊涂' => '糊裡糊塗',
-'糕干' => '糕乾',
-'粪秽蔑面' => '糞穢衊面',
-'团子' => '糰子',
-'系列里' => '系列裡',
-'系里' => '系裡',
-'纪历' => '紀曆',
-'纪历史' => '紀歷史',
-'红后假说' => '紅后假說',
-'红绳系足' => '紅繩繫足',
-'红钟' => '紅鐘',
-'红发' => '紅髮',
-'纡回' => '紆迴',
-'纡余' => '紆餘',
-'纡郁' => '紆鬱',
-'纳征' => '納徵',
-'纯朴' => '純樸',
-'纸扎' => '紙紮',
-'素数里' => '素數裡',
-'素朴' => '素樸',
-'素发' => '素髮',
-'素面' => '素麵',
-'索馬里' => '索馬里',
-'索马里' => '索馬里',
-'索面' => '索麵',
-'紫姜' => '紫薑',
-'扎上' => '紮上',
-'扎下' => '紮下',
-'扎囮' => '紮囮',
-'扎好' => '紮好',
-'扎实' => '紮實',
-'扎寨' => '紮寨',
-'扎带子' => '紮帶子',
-'扎成' => '紮成',
-'扎根' => '紮根',
-'扎营' => '紮營',
-'扎紧' => '紮緊',
-'扎脚' => '紮腳',
-'扎裹' => '紮裹',
-'扎诈' => '紮詐',
-'扎起' => '紮起',
-'扎铁' => '紮鐵',
-'细不容发' => '細不容髮',
-'细如发' => '細如髮',
-'细致' => '細緻',
-'细炼' => '細鍊',
-'终于' => '終於',
-'组里' => '組裡',
-'结伴同游' => '結伴同遊',
-'结伙' => '結夥',
-'结扎' => '結紮',
-'结余' => '結餘',
-'结发' => '結髮',
-'绝于' => '絕於',
-'绞干' => '絞乾',
-'络腮胡' => '絡腮鬍',
-'给于' => '給於',
-'丝恩发怨' => '絲恩髮怨',
-'丝制' => '絲製',
-'丝发' => '絲髮',
-'绑扎' => '綁紮',
-'绥棱' => '綏稜',
-'捆扎' => '綑紮',
-'經有云' => '經有云',
-'经有云' => '經有云',
-'综合征' => '綜合徵',
-'绿发' => '綠髮',
-'维系' => '維繫',
-'绾发' => '綰髮',
-'纲鉴' => '綱鑑',
-'網球台' => '網球台',
-'网球台' => '網球台',
-'网站里' => '網站裡',
-'网里' => '網裡',
-'网志' => '網誌',
-'网游' => '網遊',
-'紧致' => '緊緻',
-'紧追不舍' => '緊追不捨',
-'绪余' => '緒餘',
-'线图里' => '線圖裡',
-'缉凶' => '緝兇',
-'编制法' => '編制法',
-'编采' => '編採',
-'编码表' => '編碼表',
-'编钟' => '編鐘',
-'编余' => '編餘',
-'编发' => '編髮',
-'缓征' => '緩徵',
-'缓冲' => '緩衝',
-'致密' => '緻密',
-'萦回' => '縈迴',
-'缜致' => '縝緻',
-'县里' => '縣裡',
-'县志' => '縣誌',
-'缝里' => '縫裡',
-'缝制' => '縫製',
-'缩栗' => '縮慄',
-'缩短发' => '縮短發',
-'纵欲' => '縱慾',
-'纤夫' => '縴夫',
-'纤手' => '縴手',
-'纤绳' => '縴繩',
-'总数只' => '總數只',
-'总数里' => '總數裡',
-'总裁制' => '總裁制',
-'繁复' => '繁複',
-'繁钟' => '繁鐘',
-'绷扒吊拷' => '繃扒弔拷',
-'绕梁' => '繞樑',
-'绘制' => '繪製',
-'系上。' => '繫上。',
-'系上了' => '繫上了',
-'系上安全' => '繫上安全',
-'系上红' => '繫上紅',
-'系上丝' => '繫上絲',
-'系上绳' => '繫上繩',
-'系上头' => '繫上頭',
-'系上黑' => '繫上黑',
-'系上,' => '繫上,',
-'系世' => '繫世',
-'系到' => '繫到',
-'系囚' => '繫囚',
-'系心' => '繫心',
-'系念' => '繫念',
-'系怀' => '繫懷',
-'系恋' => '繫戀',
-'系于' => '繫於',
-'系于一发' => '繫於一髮',
-'系着' => '繫着',
-'系结' => '繫結',
-'系紧' => '繫緊',
-'系绳' => '繫繩',
-'系累' => '繫纍',
-'系舟' => '繫舟',
-'系船' => '繫船',
-'系辞' => '繫辭',
-'系鞋带' => '繫鞋帶',
-'系风捕影' => '繫風捕影',
-'累囚' => '纍囚',
-'累堆' => '纍堆',
-'累瓦结绳' => '纍瓦結繩',
-'累绁' => '纍紲',
-'累臣' => '纍臣',
-'缠斗' => '纏鬥',
-'坛子' => '罈子',
-'坛坛罐罐' => '罈罈罐罐',
-'坛騞' => '罈騞',
-'置于' => '置於',
-'置言成范' => '置言成範',
-'罢于' => '罷於',
-'罗马历' => '羅馬曆',
-'罗马历代' => '羅馬歷代',
-'罗马历史' => '羅馬歷史',
-'羁系' => '羈繫',
-'美容美发' => '美容美髮',
-'美于' => '美於',
-'美丑' => '美醜',
-'美发学' => '美髮學',
-'美发师' => '美髮師',
-'美发店' => '美髮店',
-'美发业' => '美髮業',
-'美发沙龙' => '美髮沙龍',
-'美发馆' => '美髮館',
-'群丑' => '群醜',
-'羡余' => '羨餘',
-'义仆' => '義僕',
-'義联' => '義联',
-'翁子里' => '翁子里',
-'翕辟' => '翕闢',
-'翱游' => '翱遊',
-'翻涌' => '翻湧',
-'翻松' => '翻鬆',
-'老么' => '老么',
-'老干' => '老乾',
-'老仆' => '老僕',
-'老干部' => '老幹部',
-'老懞' => '老懞',
-'老于' => '老於',
-'老爷钟' => '老爺鐘',
-'老白干' => '老白乾',
-'老姜' => '老薑',
-'老板' => '老闆',
-'老面皮' => '老面皮',
-'考征' => '考徵',
-'耍斗' => '耍鬥',
-'耕获' => '耕穫',
-'耳余' => '耳餘',
-'耿于' => '耿於',
-'聊斋志异' => '聊齋志異',
-'圣人历' => '聖人曆',
-'圣后' => '聖后',
-'圣马尔谷日' => '聖馬爾谷日',
-'聖馬爾谷日' => '聖馬爾谷日',
-'聘雇' => '聘僱',
-'聚药雄蕊' => '聚葯雄蕊',
-'闻风后' => '聞風後',
-'联系' => '聯繫',
-'声母后' => '聲母後',
-'听于' => '聽於',
-'肉干' => '肉乾',
-'肉欲' => '肉慾',
-'肉丝面' => '肉絲麵',
-'肉羹面' => '肉羹麵',
-'肉松' => '肉鬆',
-'肉面' => '肉麵',
-'肚里' => '肚裡',
-'肝脏' => '肝臟',
-'肝郁' => '肝鬱',
-'股栗' => '股慄',
-'肥筑方言' => '肥筑方言',
-'肴馔' => '肴饌',
-'肺脏' => '肺臟',
-'胃脏' => '胃臟',
-'胃里' => '胃裡',
-'背地里' => '背地裡',
-'胎发' => '胎髮',
-'胜肽' => '胜肽',
-'胜键' => '胜鍵',
-'胡云' => '胡云',
-'胡子婴' => '胡子嬰',
-'胡子昂' => '胡子昂',
-'胡杰' => '胡杰',
-'胡朴安' => '胡樸安',
-'胡里胡涂' => '胡裡胡塗',
-'胰脏' => '胰臟',
-'能干休' => '能干休',
-'能干戈' => '能干戈',
-'能干扰' => '能干擾',
-'能干政' => '能干政',
-'能干涉' => '能干涉',
-'能干预' => '能干預',
-'能干' => '能幹',
-'能自制' => '能自制',
-'脉冲' => '脈衝',
-'脊梁背' => '脊梁背',
-'脊梁骨' => '脊梁骨',
-'脊梁' => '脊樑',
-'脱谷机' => '脫穀機',
-'脱发' => '脫髮',
-'脺脏' => '脺臟',
-'脾脏' => '脾臟',
-'腊之以为饵' => '腊之以為餌',
-'腊味' => '腊味',
-'腊毒' => '腊毒',
-'腊笔' => '腊筆',
-'腌臜' => '腌臢',
-'肾脏' => '腎臟',
-'腐干' => '腐乾',
-'腐余' => '腐餘',
-'腑脏' => '腑臟',
-'腕表' => '腕錶',
-'脑干' => '腦幹',
-'腰里' => '腰裡',
-'脚注' => '腳註',
-'脚炼' => '腳鍊',
-'肠脏' => '腸臟',
-'胶卷' => '膠捲',
-'膨松' => '膨鬆',
-'膵脏' => '膵臟',
-'臊子面' => '臊子麵',
-'脏器' => '臟器',
-'脏胸' => '臟胸',
-'脏腑' => '臟腑',
-'臣仆' => '臣僕',
-'卧游' => '臥遊',
-'臧谷亡羊' => '臧穀亡羊',
-'临潼斗宝' => '臨潼鬥寶',
-'自干五' => '自乾五',
-'自制一下' => '自制一下',
-'自制下来' => '自制下來',
-'自制不' => '自制不',
-'自制之力' => '自制之力',
-'自制之能' => '自制之能',
-'自制他' => '自制他',
-'自制伏' => '自制伏',
-'自制你' => '自制你',
-'自制力' => '自制力',
-'自制地' => '自制地',
-'自制她' => '自制她',
-'自制情' => '自制情',
-'自制我' => '自制我',
-'自制服' => '自制服',
-'自制的能' => '自制的能',
-'自制能力' => '自制能力',
-'自于' => '自於',
-'自然数里' => '自然數裡',
-'自由钟' => '自由鐘',
-'自制' => '自製',
-'自觉自愿' => '自覺自愿',
-'自夸' => '自誇',
-'臭气冲天' => '臭氣衝天',
-'至多' => '至多',
-'至多只' => '至多只',
-'至于' => '至於',
-'致于' => '致於',
-'台佟' => '臺佟',
-'台静农' => '臺靜農',
-'臻于' => '臻於',
-'舂谷' => '舂穀',
-'举手表' => '舉手表',
-'舉手表' => '舉手表',
-'舊庄' => '舊庄',
-'旧历' => '舊曆',
-'旧历史' => '舊歷史',
-'旧游' => '舊遊',
-'旧表' => '舊錶',
-'旧钟' => '舊鐘',
-'旧钟表' => '舊鐘錶',
-'舌干唇焦' => '舌乾唇焦',
-'舍入口' => '舍入口',
-'舒卷' => '舒捲',
-'舞后' => '舞后',
-'航海历' => '航海曆',
-'航海历史' => '航海歷史',
-'船只得' => '船只得',
-'船只有' => '船只有',
-'船只能' => '船只能',
-'船钟' => '船鐘',
-'船只' => '船隻',
-'舰只' => '艦隻',
-'色欲' => '色慾',
-'色长发' => '色長髮',
-'艳后' => '艷后',
-'艷后' => '艷后',
-'艸木丰丰' => '艸木丰丰',
-'芒果干' => '芒果乾',
-'花不要采' => '花不要採',
-'花卷' => '花捲',
-'花盆里' => '花盆裡',
-'花菴词选' => '花菴詞選',
-'花药' => '花葯',
-'花钟' => '花鐘',
-'花马吊嘴' => '花馬弔嘴',
-'花哄' => '花鬨',
-'苑里' => '苑裡',
-'若干' => '若干',
-'苦干' => '苦幹',
-'苦于' => '苦於',
-'苦里' => '苦裡',
-'苦斗' => '苦鬥',
-'苧麻' => '苧麻',
-'茂都淀' => '茂都澱',
-'范文同' => '范文同',
-'范文正公' => '范文正公',
-'范文澜' => '范文瀾',
-'范文瀾' => '范文瀾',
-'范文照' => '范文照',
-'范文程' => '范文程',
-'范文芳' => '范文芳',
-'范文藤' => '范文藤',
-'范文虎' => '范文虎',
-'范登堡' => '范登堡',
-'范賢惠' => '范賢惠',
-'范贤惠' => '范賢惠',
-'茅于軾' => '茅于軾',
-'茅于轼' => '茅于軾',
-'茶几' => '茶几',
-'茶余' => '茶餘',
-'茶面' => '茶麵',
-'草丛里' => '草叢裡',
-'草荐' => '草荐',
-'草席' => '草蓆',
-'荐居' => '荐居',
-'荐臻' => '荐臻',
-'荐饥' => '荐饑',
-'荷花淀' => '荷花澱',
-'庄里' => '莊裡',
-'茎干' => '莖幹',
-'莜面' => '莜麵',
-'莽荡' => '莽蕩',
-'菜干' => '菜乾',
-'菜坛' => '菜罈',
-'菜肴' => '菜餚',
-'菠棱菜' => '菠稜菜',
-'菠萝干' => '菠蘿乾',
-'华严钟' => '華嚴鐘',
-'万一只' => '萬一只',
-'萬一只' => '萬一只',
-'万个' => '萬個',
-'万周后' => '萬周後',
-'万天后' => '萬天後',
-'万年' => '萬年',
-'万年历' => '萬年曆',
-'万年历表' => '萬年曆錶',
-'万历' => '萬曆',
-'万历史' => '萬歷史',
-'万签插架' => '萬籤插架',
-'万扎' => '萬紮',
-'万象' => '萬象',
-'万只' => '萬隻',
-'万余' => '萬餘',
-'落于' => '落於',
-'落腮胡' => '落腮鬍',
-'落发' => '落髮',
-'叶叶琴' => '葉叶琴',
-'叶叶琹' => '葉叶琹',
-'叶阳后' => '葉陽后',
-'葉陽后' => '葉陽后',
-'葡萄干' => '葡萄乾',
-'董氏封发' => '董氏封髮',
-'葫芦里卖甚么药' => '葫蘆裡賣甚麼藥',
-'葬于' => '葬於',
-'蒙雾露' => '蒙霧露',
-'蒜发' => '蒜髮',
-'蒲席' => '蒲蓆',
-'蒸干' => '蒸乾',
-'蒸制' => '蒸製',
-'苍术' => '蒼朮',
-'苍发' => '蒼髮',
-'苍郁' => '蒼鬱',
-'蓄发' => '蓄髮',
-'蓄胡' => '蓄鬍',
-'蓄须' => '蓄鬚',
-'席子' => '蓆子',
-'蓊郁' => '蓊鬱',
-'蓬发' => '蓬髮',
-'蓬松' => '蓬鬆',
-'蓬松松' => '蓬鬆鬆',
-'参绥' => '蔘綏',
-'葱郁' => '蔥鬱',
-'荞麦面' => '蕎麥麵',
-'芸薹' => '蕓薹',
-'荡来荡去' => '蕩來蕩去',
-'荡女' => '蕩女',
-'荡妇' => '蕩婦',
-'荡寇' => '蕩寇',
-'荡平' => '蕩平',
-'荡气' => '蕩氣',
-'荡涤' => '蕩滌',
-'荡漾' => '蕩漾',
-'荡然' => '蕩然',
-'荡产' => '蕩產',
-'荡舟' => '蕩舟',
-'荡船' => '蕩船',
-'荡荡' => '蕩蕩',
-'萧参' => '蕭蔘',
-'薄幸' => '薄倖',
-'薄干' => '薄幹',
-'姜啤' => '薑啤',
-'姜是老的辣' => '薑是老的辣',
-'姜末' => '薑末',
-'姜桂' => '薑桂',
-'姜母' => '薑母',
-'姜汁' => '薑汁',
-'姜汤' => '薑湯',
-'姜片' => '薑片',
-'姜糖' => '薑糖',
-'姜丝' => '薑絲',
-'姜老辣' => '薑老辣',
-'姜茶' => '薑茶',
-'姜蓉' => '薑蓉',
-'姜饼' => '薑餅',
-'姜黄' => '薑黃',
-'薙发' => '薙髮',
-'薝卜' => '薝蔔',
-'熏心' => '薰心',
-'熏染' => '薰染',
-'熏沐' => '薰沐',
-'熏习' => '薰習',
-'熏陶' => '薰陶',
-'熏风' => '薰風',
-'熏香' => '薰香',
-'苧悴' => '薴悴',
-'苧烯' => '薴烯',
-'薴烯' => '薴烯',
-'借以' => '藉以',
-'借助' => '藉助',
-'借口' => '藉口',
-'借寇兵' => '藉寇兵',
-'借手' => '藉手',
-'借故' => '藉故',
-'借机' => '藉機',
-'借此' => '藉此',
-'借由' => '藉由',
-'借箸代筹' => '藉箸代籌',
-'借资' => '藉資',
-'蓝淀' => '藍澱',
-'藏于' => '藏於',
-'藏历' => '藏曆',
-'藏历史' => '藏歷史',
-'藏蒙歌儿' => '藏矇歌兒',
-'藤席' => '藤蓆',
-'藤制' => '藤製',
-'药签' => '藥籤',
-'药面儿' => '藥麵兒',
-'苏崑' => '蘇崑',
-'苏昆' => '蘇崑',
-'苹果' => '蘋果',
-'苹果干' => '蘋果乾',
-'兰溪市' => '蘭谿市',
-'萝卜' => '蘿蔔',
-'萝卜干' => '蘿蔔乾',
-'虎须' => '虎鬚',
-'虎斗' => '虎鬥',
-'处于' => '處於',
-'虚夸' => '虛誇',
-'号志' => '號誌',
-'虫部' => '虫部',
-'蚊动牛斗' => '蚊動牛鬥',
-'蛇发女妖' => '蛇髮女妖',
-'蜂后' => '蜂后',
-'蜂涌' => '蜂湧',
-'蜂准' => '蜂準',
-'蜜里调油' => '蜜裡調油',
-'蜡月' => '蜡月',
-'蜡祭' => '蜡祭',
-'蝎虎' => '蝎虎',
-'蝎蝎螫螫' => '蝎蝎螫螫',
-'蝎谮' => '蝎譖',
-'虾面' => '蝦麵',
-'虮虱相吊' => '蟣蝨相弔',
-'蛏干' => '蟶乾',
-'蚁后' => '蟻后',
-'蟻后' => '蟻后',
-'蚃干' => '蠁幹',
-'蛮干' => '蠻幹',
-'血拼' => '血拚',
-'血余' => '血餘',
-'行事历' => '行事曆',
-'行事历史' => '行事歷史',
-'行凶' => '行兇',
-'行家里手' => '行家裡手',
-'行于' => '行於',
-'卫后庄公' => '衛後莊公',
-'卫星钟' => '衛星鐘',
-'冲上' => '衝上',
-'冲下' => '衝下',
-'冲来' => '衝來',
-'冲倒' => '衝倒',
-'冲冠' => '衝冠',
-'冲出' => '衝出',
-'冲到' => '衝到',
-'冲刺' => '衝刺',
-'冲克' => '衝剋',
-'冲力' => '衝力',
-'冲劲' => '衝勁',
-'冲动' => '衝動',
-'冲去' => '衝去',
-'冲口' => '衝口',
-'冲垮' => '衝垮',
-'冲堂' => '衝堂',
-'冲坚陷阵' => '衝堅陷陣',
-'冲压' => '衝壓',
-'冲天炮' => '衝天炮',
-'冲州撞府' => '衝州撞府',
-'冲心' => '衝心',
-'冲掉' => '衝掉',
-'冲撞' => '衝撞',
-'冲击' => '衝擊',
-'冲散' => '衝散',
-'冲杀' => '衝殺',
-'冲决' => '衝決',
-'冲波' => '衝波',
-'冲浪' => '衝浪',
-'冲激' => '衝激',
-'冲然' => '衝然',
-'冲盹' => '衝盹',
-'冲着' => '衝着',
-'冲破' => '衝破',
-'冲程' => '衝程',
-'冲突' => '衝突',
-'冲线' => '衝線',
-'冲要' => '衝要',
-'冲起' => '衝起',
-'冲车' => '衝車',
-'冲进' => '衝進',
-'冲过' => '衝過',
-'冲量' => '衝量',
-'冲锋' => '衝鋒',
-'冲锋枪' => '衝鋒鎗',
-'冲陷' => '衝陷',
-'冲头阵' => '衝頭陣',
-'冲风' => '衝風',
-'衡鉴' => '衡鑑',
-'表面包' => '表面包',
-'衷于' => '衷於',
-'袋杆' => '袋桿',
-'袋里' => '袋裡',
-'袋表' => '袋錶',
-'袖里' => '袖裡',
-'被废后' => '被廢後',
-'被系上' => '被繫上',
-'被里' => '被裡',
-'被夸' => '被誇',
-'被发佯狂' => '被髮佯狂',
-'被发入山' => '被髮入山',
-'被发左衽' => '被髮左衽',
-'被发缨冠' => '被髮纓冠',
-'被发阳狂' => '被髮陽狂',
-'夹衣' => '袷衣',
-'夹裙' => '袷裙',
-'裁并' => '裁併',
-'裁制' => '裁製',
-'里水镇' => '裏水鎮',
-'里海' => '裏海',
-'里白' => '裏白',
-'里运河' => '裏運河',
-'补于' => '補於',
-'补注' => '補註',
-'装折' => '裝摺',
-'里勾外连' => '裡勾外連',
-'里屋' => '裡屋',
-'里层' => '裡層',
-'里带' => '裡帶',
-'里弦' => '裡弦',
-'里应外合' => '裡應外合',
-'里脊' => '裡脊',
-'里衣' => '裡衣',
-'里通外国' => '裡通外國',
-'里通外敌' => '裡通外敵',
-'里边' => '裡邊',
-'里间' => '裡間',
-'里面' => '裡面',
-'里面包' => '裡面包',
-'里头' => '裡頭',
-'制件' => '製件',
-'制作' => '製作',
-'制做' => '製做',
-'制备' => '製備',
-'制冰' => '製冰',
-'制冷' => '製冷',
-'制剂' => '製劑',
-'制取' => '製取',
-'制品' => '製品',
-'制图' => '製圖',
-'制得' => '製得',
-'制成' => '製成',
-'制毒' => '製毒',
-'制法' => '製法',
-'制浆' => '製漿',
-'制片' => '製片',
-'制版' => '製版',
-'制程' => '製程',
-'制糖' => '製糖',
-'制纸' => '製紙',
-'制药' => '製藥',
-'制衣' => '製衣',
-'制表键' => '製表鍵',
-'制贩' => '製販',
-'制造' => '製造',
-'制革' => '製革',
-'制鞋' => '製鞋',
-'制盐' => '製鹽',
-'复元音' => '複元音',
-'复函数' => '複函數',
-'复分数' => '複分數',
-'复分析' => '複分析',
-'复分解' => '複分解',
-'复列' => '複列',
-'复利' => '複利',
-'复印' => '複印',
-'复句' => '複句',
-'复合' => '複合',
-'复壁' => '複壁',
-'复姓' => '複姓',
-'复字键' => '複字鍵',
-'复审' => '複審',
-'复写' => '複寫',
-'复对数' => '複對數',
-'复平面' => '複平面',
-'复式' => '複式',
-'复数' => '複數',
-'复方' => '複方',
-'复本' => '複本',
-'复查' => '複查',
-'复次' => '複次',
-'复比' => '複比',
-'复决' => '複決',
-'复流' => '複流',
-'复测' => '複測',
-'复目' => '複目',
-'复眼' => '複眼',
-'复种' => '複種',
-'复线' => '複線',
-'复习' => '複習',
-'复色' => '複色',
-'复叶' => '複葉',
-'复制' => '複製',
-'复诊' => '複診',
-'复评' => '複評',
-'复词' => '複詞',
-'复试' => '複試',
-'复课' => '複課',
-'复议' => '複議',
-'复变函数' => '複變函數',
-'复赛' => '複賽',
-'复辅音' => '複輔音',
-'复述' => '複述',
-'复选' => '複選',
-'复钱' => '複錢',
-'复阅' => '複閱',
-'复杂' => '複雜',
-'复音' => '複音',
-'复韵' => '複韻',
-'褒赞' => '褒讚',
-'衬里' => '襯裡',
-'西井里' => '西井里',
-'西周钟' => '西周鐘',
-'西昆' => '西崑',
-'西岳' => '西嶽',
-'西历' => '西曆',
-'西历史' => '西歷史',
-'西湖里' => '西湖里',
-'西米谷' => '西米谷',
-'西西里' => '西西里',
-'西谷米' => '西谷米',
-'西游' => '西遊',
-'要自制' => '要自制',
-'要冲' => '要衝',
-'复信' => '覆信',
-'复核' => '覆核',
-'见于' => '見於',
-'见棱见角' => '見稜見角',
-'见素抱朴' => '見素抱樸',
-'见钟不打' => '見鐘不打',
-'规范' => '規範',
-'视于' => '視於',
-'观采' => '觀採',
-'角抵' => '角牴',
-'角落发' => '角落發',
-'角落里' => '角落裡',
-'觚棱' => '觚稜',
-'解雇' => '解僱',
-'解封后' => '解封後',
-'解铃仍须系铃人' => '解鈴仍須繫鈴人',
-'解铃还须系铃人' => '解鈴還須繫鈴人',
-'解发佯狂' => '解髮佯狂',
-'触须' => '觸鬚',
-'言云' => '言云',
-'言大而夸' => '言大而夸',
-'言里' => '言裡',
-'言辩而确' => '言辯而确',
-'订制' => '訂製',
-'计划' => '計劃',
-'计时表' => '計時錶',
-'托了' => '託了',
-'托事' => '託事',
-'托交' => '託交',
-'托人' => '託人',
-'托付' => '託付',
-'托克逊' => '託克遜',
-'托儿' => '託兒',
-'托古讽今' => '託古諷今',
-'托名' => '託名',
-'托命' => '託命',
-'托咎' => '託咎',
-'托梦' => '託夢',
-'托孤' => '託孤',
-'托庇' => '託庇',
-'托故' => '託故',
-'托疾' => '託疾',
-'托病' => '託病',
-'托管' => '託管',
-'托言' => '託言',
-'托词' => '託詞',
-'托买' => '託買',
-'托卖' => '託賣',
-'托身' => '託身',
-'托辞' => '託辭',
-'托运' => '託運',
-'托过' => '託過',
-'托里县' => '託里縣',
-'托附' => '託附',
-'许愿起经' => '許愿起經',
-'許聖杰' => '許聖杰',
-'注上' => '註上',
-'注册' => '註冊',
-'注失' => '註失',
-'注定' => '註定',
-'注明' => '註明',
-'注标' => '註標',
-'注生娘娘' => '註生娘娘',
-'注疏' => '註疏',
-'注脚' => '註腳',
-'注解' => '註解',
-'注记' => '註記',
-'注译' => '註譯',
-'注销' => '註銷',
-'注:' => '註:',
-'证谏' => '証諫',
-'评断发' => '評斷發',
-'评注' => '評註',
-'评鉴' => '評鑑',
-'词干' => '詞幹',
-'词汇' => '詞彙',
-'词余' => '詞餘',
-'询于' => '詢於',
-'试制' => '試製',
-'詩云' => '詩云',
-'诗云' => '詩云',
-'诗赞' => '詩讚',
-'诗钟' => '詩鐘',
-'诗余' => '詩餘',
-'话里有话' => '話裡有話',
-'该钟' => '該鐘',
-'详征博引' => '詳徵博引',
-'详注' => '詳註',
-'诔赞' => '誄讚',
-'夸下海口' => '誇下海口',
-'夸了' => '誇了',
-'夸人' => '誇人',
-'夸他' => '誇他',
-'夸你' => '誇你',
-'夸来夸去' => '誇來誇去',
-'夸别' => '誇別',
-'夸功' => '誇功',
-'夸胜道强' => '誇勝道強',
-'夸口' => '誇口',
-'夸嘴' => '誇嘴',
-'夸多斗靡' => '誇多鬥靡',
-'夸大' => '誇大',
-'夸她' => '誇她',
-'夸姣' => '誇姣',
-'夸官' => '誇官',
-'夸容' => '誇容',
-'夸张' => '誇張',
-'夸强说会' => '誇強說會',
-'夸得' => '誇得',
-'夸成' => '誇成',
-'夸我' => '誇我',
-'夸才' => '誇才',
-'夸毗' => '誇毗',
-'夸海口' => '誇海口',
-'夸奖' => '誇獎',
-'夸示' => '誇示',
-'夸称' => '誇稱',
-'夸耀' => '誇耀',
-'夸能' => '誇能',
-'夸能斗智' => '誇能鬥智',
-'夸诩' => '誇詡',
-'夸夸' => '誇誇',
-'夸夸其谈' => '誇誇其談',
-'夸诞' => '誇誕',
-'夸说' => '誇說',
-'夸赞' => '誇讚',
-'夸起' => '誇起',
-'夸辩' => '誇辯',
-'夸过' => '誇過',
-'夸饰' => '誇飾',
-'夸丽' => '誇麗',
-'志哀' => '誌哀',
-'志喜' => '誌喜',
-'志庆' => '誌慶',
-'志异' => '誌異',
-'认准' => '認準',
-'诱奸' => '誘姦',
-'语云' => '語云',
-'语汇' => '語彙',
-'語有云' => '語有云',
-'语有云' => '語有云',
-'语法里' => '語法裡',
-'语里' => '語裡',
-'诚征' => '誠徵',
-'诚朴' => '誠樸',
-'诬蔑' => '誣衊',
-'说不准' => '說不準',
-'谁干的' => '誰幹的',
-'课征' => '課徵',
-'课余' => '課餘',
-'调准' => '調準',
-'调制' => '調製',
-'调表' => '調錶',
-'调钟表' => '調鐘錶',
-'谈征' => '談徵',
-'请君入瓮' => '請君入甕',
-'请托' => '請託',
-'咨询' => '諮詢',
-'诸余' => '諸餘',
-'谋干' => '謀幹',
-'謝杰' => '謝杰',
-'谢杰' => '謝杰',
-'谢华后' => '謝華后',
-'谬采虚声' => '謬採虛聲',
-'谬赞' => '謬讚',
-'謷丑' => '謷醜',
-'謹愿' => '謹愿',
-'谨愿' => '謹愿',
-'哗噪' => '譁噪',
-'哗嚣' => '譁囂',
-'哗然' => '譁然',
-'哗众' => '譁眾',
-'哗笑' => '譁笑',
-'哗变' => '譁變',
-'噪诈' => '譟詐',
-'警世钟' => '警世鐘',
-'警报钟' => '警報鐘',
-'警示钟' => '警示鐘',
-'警钟' => '警鐘',
-'译制' => '譯製',
-'译注' => '譯註',
-'护发' => '護髮',
-'变征' => '變徵',
-'变丑' => '變醜',
-'仇隙' => '讎隙',
-'赞一个' => '讚一個',
-'赞不绝口' => '讚不絕口',
-'赞佩' => '讚佩',
-'赞呗' => '讚唄',
-'赞叹' => '讚嘆',
-'赞扬' => '讚揚',
-'赞乐' => '讚樂',
-'赞歌' => '讚歌',
-'赞美' => '讚美',
-'赞羡' => '讚羨',
-'赞许' => '讚許',
-'赞词' => '讚詞',
-'赞誉' => '讚譽',
-'赞赏' => '讚賞',
-'赞辞' => '讚辭',
-'赞颂' => '讚頌',
-'谷子敬' => '谷子敬',
-'豆干' => '豆乾',
-'豆腐干' => '豆腐乾',
-'竖起脊梁' => '豎起脊梁',
-'丰度' => '豐度',
-'丰滨' => '豐濱',
-'丰滨乡' => '豐濱鄉',
-'丰台' => '豐臺',
-'豔后' => '豔后',
-'象征' => '象徵',
-'贪欲' => '貪慾',
-'贵价' => '貴价',
-'貴子里' => '貴子里',
-'贵干' => '貴幹',
-'贵征' => '貴徵',
-'买凶' => '買兇',
-'买断发' => '買斷發',
-'費米面' => '費米面',
-'费米面' => '費米面',
-'贻范' => '貽範',
-'賈后' => '賈后',
-'贾后' => '賈后',
-'赈饥' => '賑饑',
-'赏赞' => '賞讚',
-'賢后' => '賢后',
-'贤后' => '賢后',
-'卖断发' => '賣斷發',
-'賦范' => '賦范',
-'赋范' => '賦范',
-'质数里' => '質數裡',
-'质朴' => '質樸',
-'赌后' => '賭后',
-'赌台' => '賭檯',
-'赌斗' => '賭鬥',
-'购并' => '購併',
-'购买欲' => '購買慾',
-'赢余' => '贏餘',
-'赤术' => '赤朮',
-'赤绳系足' => '赤繩繫足',
-'走回路' => '走回路',
-'起哄' => '起鬨',
-'超级杯' => '超級盃',
-'超赞' => '超讚',
-'赶制' => '趕製',
-'赶面棍' => '趕麵棍',
-'赵威后' => '趙威后',
-'赵惠后' => '趙惠后',
-'赵治勋' => '趙治勳',
-'趱干' => '趲幹',
-'足于' => '足於',
-'足球台' => '足球台',
-'跌扑' => '跌扑',
-'路图里' => '路圖裡',
-'路签' => '路籤',
-'路面' => '路面',
-'跳梁小丑' => '跳樑小丑',
-'跳荡' => '跳蕩',
-'局蹐' => '跼蹐',
-'局躅' => '跼躅',
-'踡局' => '踡跼',
-'逾闲' => '踰閑',
-'蹒局' => '蹣跼',
-'蹪于' => '蹪於',
-'蹭棱子' => '蹭稜子',
-'躁郁' => '躁鬱',
-'身于' => '身於',
-'身体发肤' => '身體髮膚',
-'躯干' => '軀幹',
-'车库里' => '車庫裡',
-'车站里' => '車站裡',
-'车里' => '車裡',
-'车里雅宾斯克' => '車里雅賓斯克',
-'轨范' => '軌範',
-'轩辟' => '軒闢',
-'较于' => '較於',
-'挽曲' => '輓曲',
-'挽歌' => '輓歌',
-'挽联' => '輓聯',
-'挽词' => '輓詞',
-'挽诗' => '輓詩',
-'挽车' => '輓車',
-'挽输' => '輓輸',
-'挽辞' => '輓辭',
-'轻于' => '輕於',
-'轻松' => '輕鬆',
-'轻松松' => '輕鬆鬆',
-'轮奸' => '輪姦',
-'轮回' => '輪迴',
-'转向往' => '轉向往',
-'转托' => '轉託',
-'转斗千里' => '轉鬥千里',
-'辛丑' => '辛丑',
-'辟谷' => '辟穀',
-'辣面' => '辣麵',
-'办公台' => '辦公檯',
-'辞汇' => '辭彙',
-'辫发' => '辮髮',
-'辩斗' => '辯鬥',
-'辰溪县' => '辰谿縣',
-'农历' => '農曆',
-'农历史' => '農歷史',
-'农民历' => '農民曆',
-'农民历史' => '農民歷史',
-'迂回' => '迂迴',
-'近日无仇' => '近日無讎',
-'返朴' => '返樸',
-'迥然回异' => '迥然迴異',
-'迫于' => '迫於',
-'回光返照' => '迴光返照',
-'回圈' => '迴圈',
-'回廊' => '迴廊',
-'回形夹' => '迴形夾',
-'回文序列' => '迴文序列',
-'回文数' => '迴文數',
-'回文构词' => '迴文構詞',
-'回文结构' => '迴文結構',
-'回文联' => '迴文聯',
-'回文诗' => '迴文詩',
-'回文锦' => '迴文錦',
-'回旋' => '迴旋',
-'回环' => '迴環',
-'回纹针' => '迴紋針',
-'回绕' => '迴繞',
-'回翔' => '迴翔',
-'回肠' => '迴腸',
-'回肠荡气' => '迴腸盪氣',
-'回荡' => '迴蕩',
-'回诵' => '迴誦',
-'回路' => '迴路',
-'回转' => '迴轉',
-'回递性' => '迴遞性',
-'回避' => '迴避',
-'回銮' => '迴鑾',
-'回响' => '迴響',
-'回风' => '迴風',
-'迷于' => '迷於',
-'迷蒙' => '迷濛',
-'追凶' => '追兇',
-'退伙' => '退夥',
-'逆钟' => '逆鐘',
-'逆钟向' => '逆鐘向',
-'逆风后' => '逆風後',
-'逋发' => '逋髮',
-'逍遥游' => '逍遙遊',
-'透辟' => '透闢',
-'这出世' => '這出世',
-'这出乎' => '這出乎',
-'这出人' => '這出人',
-'这出版' => '這出版',
-'这出现' => '這出現',
-'这出生' => '這出生',
-'这出色' => '這出色',
-'这出身' => '這出身',
-'这出道' => '這出道',
-'这只不' => '這只不',
-'这只不过' => '這只不過',
-'这只允' => '這只允',
-'这只包括' => '這只包括',
-'这只可' => '這只可',
-'这只在' => '這只在',
-'这只容' => '這只容',
-'这只应' => '這只應',
-'这只采' => '這只採',
-'这只是' => '這只是',
-'这只会' => '這只會',
-'这只比' => '這只比',
-'这只用' => '這只用',
-'这只能' => '這只能',
-'这只限' => '這只限',
-'这只需' => '這只需',
-'这只须' => '這只須',
-'这伙人' => '這夥人',
-'这里' => '這裡',
-'这钟' => '這鐘',
-'这只' => '這隻',
-'这么干' => '這麼幹',
-'这出' => '這齣',
-'通奸' => '通姦',
-'通心面' => '通心麵',
-'通于' => '通於',
-'通历' => '通曆',
-'通历史' => '通歷史',
-'通鉴' => '通鑑',
-'逞凶斗狠' => '逞兇鬥狠',
-'造钟' => '造鐘',
-'连三并四' => '連三併四',
-'连采' => '連採',
-'连发式' => '連發式',
-'连系' => '連繫',
-'周游' => '週遊',
-'进两出' => '進兩出',
-'进制' => '進制',
-'進制' => '進制',
-'逼并' => '逼併',
-'遇风后' => '遇風後',
-'游了' => '遊了',
-'游人' => '遊人',
-'游仙' => '遊仙',
-'游伴' => '遊伴',
-'游侠' => '遊俠',
-'游冶' => '遊冶',
-'游刃' => '遊刃',
-'游动' => '遊動',
-'游园' => '遊園',
-'游子' => '遊子',
-'游学' => '遊學',
-'游客' => '遊客',
-'游宦' => '遊宦',
-'游山玩水' => '遊山玩水',
-'游必有方' => '遊必有方',
-'游憩' => '遊憩',
-'游戏' => '遊戲',
-'游戏里' => '遊戲裡',
-'游手好闲' => '遊手好閒',
-'游方' => '遊方',
-'游星' => '遊星',
-'游乐' => '遊樂',
-'游标卡尺' => '遊標卡尺',
-'游历' => '遊歷',
-'游民' => '遊民',
-'游河' => '遊河',
-'游牧' => '遊牧',
-'游猎' => '遊獵',
-'游玩' => '遊玩',
-'游目骋怀' => '遊目騁懷',
-'游程' => '遊程',
-'游丝' => '遊絲',
-'游美学务' => '遊美學務',
-'游兴' => '遊興',
-'游船' => '遊船',
-'游艇' => '遊艇',
-'游荡' => '遊蕩',
-'游艺' => '遊藝',
-'游行' => '遊行',
-'游街' => '遊街',
-'游览' => '遊覽',
-'游记' => '遊記',
-'游说' => '遊說',
-'游资' => '遊資',
-'游走' => '遊走',
-'游踪' => '遊蹤',
-'游轮' => '遊輪',
-'游逛' => '遊逛',
-'游错' => '遊錯',
-'游骑兵' => '遊騎兵',
-'游魂' => '遊魂',
-'过于' => '過於',
-'过水面' => '過水麵',
-'遏制' => '遏制',
-'道范' => '道範',
-'逊于' => '遜於',
-'递回' => '遞迴',
-'远游' => '遠遊',
-'遨游' => '遨遊',
-'适于' => '適於',
-'遮丑' => '遮醜',
-'迁于' => '遷於',
-'选手表明' => '選手表明',
-'选手表决' => '選手表決',
-'选手表现' => '選手表現',
-'选手表示' => '選手表示',
-'选手表达' => '選手表達',
-'遗传钟' => '遺傳鐘',
-'遗范' => '遺範',
-'遗迹' => '遺蹟',
-'辽沈' => '遼瀋',
-'邀天之幸' => '邀天之倖',
-'还采' => '還採',
-'还冲' => '還衝',
-'邋里邋遢' => '邋裡邋遢',
-'那只不过' => '那只不過',
-'那只包括' => '那只包括',
-'那只可' => '那只可',
-'那只在' => '那只在',
-'那只怕' => '那只怕',
-'那只应' => '那只應',
-'那只是' => '那只是',
-'那只会' => '那只會',
-'那只有' => '那只有',
-'那只比' => '那只比',
-'那只用' => '那只用',
-'那只能' => '那只能',
-'那只限' => '那只限',
-'那只需' => '那只需',
-'那只须' => '那只須',
-'那卷' => '那捲',
-'那里' => '那裡',
-'那只' => '那隻',
-'邱于庭' => '邱于庭',
-'郁朴' => '郁樸',
-'郁郁菲菲' => '郁郁菲菲',
-'郁郁青青' => '郁郁青青',
-'郊游' => '郊遊',
-'郘钟' => '郘鐘',
-'部子里' => '部子里',
-'部落发' => '部落發',
-'郭后' => '郭后',
-'都市里' => '都市裡',
-'都于' => '都於',
-'乡愿' => '鄉愿',
-'鄉愿' => '鄉愿',
-'郑凯云' => '鄭凱云',
-'鄭凱云' => '鄭凱云',
-'配制饲料' => '配制飼料',
-'配图里' => '配圖裡',
-'配制' => '配製',
-'酒帘' => '酒帘',
-'酒气冲天' => '酒氣衝天',
-'酒坛' => '酒罈',
-'酒肴' => '酒肴',
-'酒曲' => '酒麴',
-'酒麹' => '酒麴',
-'酥松' => '酥鬆',
-'酸姜' => '酸薑',
-'腌制' => '醃製',
-'醇朴' => '醇樸',
-'醉于' => '醉於',
-'醋坛' => '醋罈',
-'丑丫头' => '醜丫頭',
-'丑事' => '醜事',
-'丑人' => '醜人',
-'丑侪' => '醜儕',
-'丑八怪' => '醜八怪',
-'丑剌剌' => '醜剌剌',
-'丑剧' => '醜劇',
-'丑化' => '醜化',
-'丑史' => '醜史',
-'丑名' => '醜名',
-'丑吒' => '醜吒',
-'丑地' => '醜地',
-'丑夷' => '醜夷',
-'丑女' => '醜女',
-'丑女效颦' => '醜女效顰',
-'丑奴儿' => '醜奴兒',
-'丑妇' => '醜婦',
-'丑媳' => '醜媳',
-'丑媳妇' => '醜媳婦',
-'丑小鸭' => '醜小鴨',
-'丑巴怪' => '醜巴怪',
-'丑徒' => '醜徒',
-'丑恶' => '醜惡',
-'丑态' => '醜態',
-'丑毙了' => '醜斃了',
-'丑于' => '醜於',
-'丑末' => '醜末',
-'丑样' => '醜樣',
-'丑死' => '醜死',
-'丑比' => '醜比',
-'丑沮' => '醜沮',
-'丑男' => '醜男',
-'丑闻' => '醜聞',
-'丑声' => '醜聲',
-'丑声远播' => '醜聲遠播',
-'丑脸' => '醜臉',
-'丑虏' => '醜虜',
-'丑行' => '醜行',
-'丑言' => '醜言',
-'丑诋' => '醜詆',
-'丑话' => '醜話',
-'丑语' => '醜語',
-'丑贼生' => '醜賊生',
-'丑辞' => '醜辭',
-'丑辱' => '醜辱',
-'丑逆' => '醜逆',
-'丑丑' => '醜醜',
-'丑陋' => '醜陋',
-'丑杂' => '醜雜',
-'丑头怪脸' => '醜頭怪臉',
-'丑类' => '醜類',
-'酿制' => '釀製',
-'衅钟' => '釁鐘',
-'采石之役' => '采石之役',
-'采石之战' => '采石之戰',
-'采石之戰' => '采石之戰',
-'采石矶' => '采石磯',
-'采石磯' => '采石磯',
-'里海大学' => '里海大學',
-'里海大學' => '里海大學',
-'里海崖' => '里海崖',
-'里海茨' => '里海茨',
-'里铺' => '里舖',
-'重回' => '重回',
-'重折' => '重摺',
-'重于' => '重於',
-'重罗面' => '重羅麵',
-'重制' => '重製',
-'重复' => '重複',
-'重托' => '重託',
-'重游' => '重遊',
-'野姜' => '野薑',
-'野游' => '野遊',
-'量不准' => '量不準',
-'厘改' => '釐改',
-'厘整' => '釐整',
-'厘正' => '釐正',
-'厘毫' => '釐毫',
-'厘清' => '釐清',
-'厘订' => '釐訂',
-'厘革' => '釐革',
-'金仆姑' => '金僕姑',
-'金城里' => '金城里',
-'金范' => '金範',
-'金圣叹' => '金聖歎',
-'金表情' => '金表情',
-'金表态' => '金表態',
-'金表扬' => '金表揚',
-'金表明' => '金表明',
-'金表演' => '金表演',
-'金表现' => '金表現',
-'金表示' => '金表示',
-'金表达' => '金表達',
-'金表露' => '金表露',
-'金表面' => '金表面',
-'金装玉里' => '金裝玉裡',
-'金溪县' => '金谿縣',
-'金链' => '金鍊',
-'金钟' => '金鐘',
-'金发' => '金髮',
-'钩心斗角' => '鈎心鬥角',
-'银朱' => '銀硃',
-'银发' => '銀髮',
-'铜范' => '銅範',
-'铜制' => '銅製',
-'铜钟' => '銅鐘',
-'铯钟' => '銫鐘',
-'铝制' => '鋁製',
-'钢之炼金术师' => '鋼之鍊金術師',
-'钢梁' => '鋼樑',
-'钢制' => '鋼製',
-'录制' => '錄製',
-'锤炼' => '錘鍊',
-'钱谷' => '錢穀',
-'钱范' => '錢範',
-'锦卤' => '錦滷',
-'锦绣花园' => '錦綉花園',
-'表停' => '錶停',
-'表冠' => '錶冠',
-'表带' => '錶帶',
-'表快' => '錶快',
-'表慢' => '錶慢',
-'表板' => '錶板',
-'表王' => '錶王',
-'表盘' => '錶盤',
-'表蒙子' => '錶蒙子',
-'表转' => '錶轉',
-'表速' => '錶速',
-'表针' => '錶針',
-'炼冶' => '鍊冶',
-'炼句' => '鍊句',
-'炼字' => '鍊字',
-'炼师' => '鍊師',
-'炼度' => '鍊度',
-'炼形' => '鍊形',
-'炼气' => '鍊氣',
-'炼汞' => '鍊汞',
-'炼石' => '鍊石',
-'链表' => '鍊表',
-'炼贫' => '鍊貧',
-'炼金术' => '鍊金術',
-'锲而不舍' => '鍥而不捨',
-'镰仓' => '鎌倉',
-'镜图里' => '鏡圖裡',
-'锈病' => '鏽病',
-'锈菌' => '鏽菌',
-'锈蚀' => '鏽蝕',
-'钟上' => '鐘上',
-'钟下' => '鐘下',
-'钟不' => '鐘不',
-'钟不扣不鸣' => '鐘不扣不鳴',
-'钟不撞不鸣' => '鐘不撞不鳴',
-'钟不敲不响' => '鐘不敲不響',
-'钟不空则哑' => '鐘不空則啞',
-'钟乳洞' => '鐘乳洞',
-'钟乳石' => '鐘乳石',
-'钟停' => '鐘停',
-'钟匠' => '鐘匠',
-'钟口' => '鐘口',
-'钟在寺里' => '鐘在寺裡',
-'钟塔' => '鐘塔',
-'钟壁' => '鐘壁',
-'钟太' => '鐘太',
-'钟好' => '鐘好',
-'钟山' => '鐘山',
-'钟左右' => '鐘左右',
-'钟差' => '鐘差',
-'钟座' => '鐘座',
-'钟形' => '鐘形',
-'钟形虫' => '鐘形蟲',
-'钟律' => '鐘律',
-'钟快' => '鐘快',
-'钟慢' => '鐘慢',
-'钟摆' => '鐘擺',
-'钟敲' => '鐘敲',
-'钟有' => '鐘有',
-'钟楼' => '鐘樓',
-'钟模' => '鐘模',
-'钟没' => '鐘沒',
-'钟漏' => '鐘漏',
-'钟王' => '鐘王',
-'钟琴' => '鐘琴',
-'钟发音' => '鐘發音',
-'钟的' => '鐘的',
-'钟盘' => '鐘盤',
-'钟相' => '鐘相',
-'钟磬' => '鐘磬',
-'钟纽' => '鐘紐',
-'钟罩' => '鐘罩',
-'钟声' => '鐘聲',
-'钟腰' => '鐘腰',
-'钟花' => '鐘花',
-'钟螺' => '鐘螺',
-'钟行' => '鐘行',
-'钟表面' => '鐘表面',
-'钟被' => '鐘被',
-'钟调' => '鐘調',
-'钟身' => '鐘身',
-'钟速' => '鐘速',
-'钟表' => '鐘錶',
-'钟表停' => '鐘錶停',
-'钟表快' => '鐘錶快',
-'钟表慢' => '鐘錶慢',
-'钟表王' => '鐘錶王',
-'钟表盘' => '鐘錶盤',
-'钟表速' => '鐘錶速',
-'钟关' => '鐘關',
-'钟陈列' => '鐘陳列',
-'钟面' => '鐘面',
-'钟响' => '鐘響',
-'钟顶' => '鐘頂',
-'钟头' => '鐘頭',
-'钟体' => '鐘體',
-'钟鸣' => '鐘鳴',
-'钟点' => '鐘點',
-'钟鼎' => '鐘鼎',
-'钟鼓' => '鐘鼓',
-'铁锈' => '鐵鏽',
-'铁钟' => '鐵鐘',
-'铸钟' => '鑄鐘',
-'鉴别' => '鑑別',
-'鉴古' => '鑑古',
-'鉴定' => '鑑定',
-'鉴察' => '鑑察',
-'鉴往知来' => '鑑往知來',
-'鉴戒' => '鑑戒',
-'鉴湖' => '鑑湖',
-'鉴藏' => '鑑藏',
-'鉴谅' => '鑑諒',
-'鉴证' => '鑑證',
-'鉴识' => '鑑識',
-'鉴赏' => '鑑賞',
-'鉴于' => '鑒於',
-'长几' => '長几',
-'长于' => '長於',
-'长历' => '長曆',
-'长历史' => '長歷史',
-'长发公主' => '長髮公主',
-'长发妹' => '長髮妹',
-'长发姑娘' => '長髮姑娘',
-'长胡' => '長鬍',
-'门帘' => '門帘',
-'门吊儿' => '門弔兒',
-'门里' => '門裡',
-'闫怀礼' => '閆懷禮',
-'開山辟谷' => '開山辟谷',
-'开山辟谷' => '開山闢谷',
-'开吊' => '開弔',
-'开征' => '開徵',
-'开采' => '開採',
-'开发' => '開發',
-'开辟' => '開闢',
-'开哄' => '開鬨',
-'闲邪' => '閑邪',
-'闲情逸致' => '閒情逸緻',
-'闲荡' => '閒蕩',
-'闲游' => '閒遊',
-'间不容发' => '間不容髮',
-'间里' => '間裡',
-'闵采尔' => '閔採爾',
-'阁府' => '閤府',
-'闺范' => '閨範',
-'阃范' => '閫範',
-'闯荡' => '闖蕩',
-'闯炼' => '闖鍊',
-'关系' => '關係',
-'关弓与我确' => '關弓與我确',
-'关于' => '關於',
-'辟佛' => '闢佛',
-'辟作' => '闢作',
-'辟划' => '闢劃',
-'辟土' => '闢土',
-'辟地' => '闢地',
-'辟室' => '闢室',
-'辟建' => '闢建',
-'辟为' => '闢為',
-'辟田' => '闢田',
-'辟筑' => '闢築',
-'辟谣' => '闢謠',
-'辟辟' => '闢辟',
-'辟邪以律' => '闢邪以律',
-'防水表' => '防水錶',
-'防御' => '防禦',
-'防范' => '防範',
-'防锈' => '防鏽',
-'阻于' => '阻於',
-'阿里' => '阿里',
-'附于' => '附於',
-'附注' => '附註',
-'限制' => '限制',
-'院里' => '院裡',
-'陪吊' => '陪弔',
-'阴干' => '陰乾',
-'阴历' => '陰曆',
-'阴历史' => '陰歷史',
-'阴沟里翻船' => '陰溝裡翻船',
-'阴郁' => '陰鬱',
-'陳冲' => '陳冲',
-'陳士杰' => '陳士杰',
-'陈升' => '陳昇',
-'陈有后' => '陳有后',
-'陳有后' => '陳有后',
-'陈杰' => '陳杰',
-'陳杰' => '陳杰',
-'陈炼' => '陳鍊',
-'陆游' => '陸遊',
-'阳春面' => '陽春麵',
-'阳历' => '陽曆',
-'阳历史' => '陽歷史',
-'阳谷' => '陽穀',
-'隆准许' => '隆准許',
-'隆准' => '隆準',
-'随于' => '隨於',
-'隐占' => '隱佔',
-'隐几' => '隱几',
-'隐于' => '隱於',
-'只字' => '隻字',
-'只影' => '隻影',
-'只手遮天' => '隻手遮天',
-'只眼' => '隻眼',
-'只言片语' => '隻言片語',
-'只身' => '隻身',
-'雄斗斗' => '雄斗斗',
-'雅范' => '雅範',
-'集数里' => '集數裡',
-'集于' => '集於',
-'集里' => '集裡',
-'集游法' => '集遊法',
-'雕梁画栋' => '雕樑畫棟',
-'双折射' => '雙折射',
-'双折' => '雙摺',
-'双胜类' => '雙胜類',
-'双雕' => '雙鵰',
-'杂合面儿' => '雜合麵兒',
-'杂志' => '雜誌',
-'杂面' => '雜麵',
-'鸡吵鹅斗' => '雞吵鵝鬥',
-'鸡奸' => '雞姦',
-'鸡争鹅斗' => '雞爭鵝鬥',
-'鸡丝' => '雞絲',
-'鸡丝面' => '雞絲麵',
-'鸡腿面' => '雞腿麵',
-'鸡蛋里挑骨头' => '雞蛋裡挑骨頭',
-'鸡只' => '雞隻',
-'离于' => '離於',
-'难舍' => '難捨',
-'难于' => '難於',
-'雨蒙蒙' => '雨濛濛',
-'雪窗萤几' => '雪窗螢几',
-'雪里' => '雪裡',
-'雪里红' => '雪裡紅',
-'雪里蕻' => '雪裡蕻',
-'云吞' => '雲吞',
-'云笈七签' => '雲笈七籤',
-'云里雾里' => '雲裡霧裡',
-'云游' => '雲遊',
-'云须' => '雲鬚',
-'零个' => '零個',
-'零周后' => '零周後',
-'零天后' => '零天後',
-'零年' => '零年',
-'零只' => '零隻',
-'零余' => '零餘',
-'电子表格' => '電子表格',
-'电子制表' => '電子製表',
-'电子钟' => '電子鐘',
-'电子钟表' => '電子鐘錶',
-'电影后' => '電影後',
-'电影里' => '電影裡',
-'电梯里' => '電梯裡',
-'电波钟' => '電波鐘',
-'电码表' => '電碼表',
-'电冲' => '電衝',
-'电视台风' => '電視台風',
-'电视里' => '電視裡',
-'电表' => '電錶',
-'电钟' => '電鐘',
-'震栗' => '震慄',
-'霉气冲天' => '霉氣衝天',
-'沾化' => '霑化',
-'沾益' => '霑益',
-'雾里' => '霧裡',
-'露丑' => '露醜',
-'霁范' => '霽範',
-'灵昆' => '靈崑',
-'青山一发' => '青山一髮',
-'青霉' => '青黴',
-'非常准' => '非常準',
-'面包住' => '面包住',
-'面包含' => '面包含',
-'面包围' => '面包圍',
-'面包容' => '面包容',
-'面包庇' => '面包庇',
-'面包厢' => '面包廂',
-'面包抄' => '面包抄',
-'面包括' => '面包括',
-'面包揽' => '面包攬',
-'面包涵' => '面包涵',
-'面包管' => '面包管',
-'面包扎' => '面包紮',
-'面包罗' => '面包羅',
-'面包着' => '面包著',
-'面包藏' => '面包藏',
-'面包装' => '面包裝',
-'面包裹' => '面包裹',
-'面包起' => '面包起',
-'面包办' => '面包辦',
-'面店铺' => '面店鋪',
-'面条目' => '面條目',
-'面條目' => '面條目',
-'面粉碎' => '面粉碎',
-'面粉红' => '面粉紅',
-'面食饭' => '面食飯',
-'鞋里' => '鞋裡',
-'鞣制' => '鞣製',
-'秋千' => '鞦韆',
-'鞭辟入里' => '鞭辟入裡',
-'韦席' => '韋蓆',
-'韩国制' => '韓國製',
-'韩制' => '韓製',
-'音不准' => '音不準',
-'音准' => '音準',
-'音声如钟' => '音聲如鐘',
-'韶山冲' => '韶山沖',
-'响钟' => '響鐘',
-'頁面' => '頁面',
-'页面' => '頁面',
-'顶凶' => '頂兇',
-'頂多' => '頂多',
-'顶多' => '頂多',
-'项链' => '項鍊',
-'顺于' => '順於',
-'顺钟向' => '順鐘向',
-'顺风后' => '順風後',
-'须根据' => '須根據',
-'颂系' => '頌繫',
-'颂赞' => '頌讚',
-'预报不准' => '預報不準',
-'预制' => '預製',
-'领袖欲' => '領袖慾',
-'头里' => '頭裡',
-'头长发' => '頭長髮',
-'头发' => '頭髮',
-'颊须' => '頰鬚',
-'额征' => '額徵',
-'额我略历' => '額我略曆',
-'额我略历史' => '額我略歷史',
-'颜范' => '顏範',
-'颠干倒坤' => '顛乾倒坤',
-'顛顛仆仆' => '顛顛仆仆',
-'颠颠仆仆' => '顛顛仆仆',
-'颤栗' => '顫慄',
-'显示表明' => '顯示表明',
-'显示表格' => '顯示表格',
-'显示表现' => '顯示表現',
-'显示表示' => '顯示表示',
-'显示表达' => '顯示表達',
-'显示表面' => '顯示表面',
-'显示表头' => '顯示表頭',
-'显示表' => '顯示錶',
-'显示钟' => '顯示鐘',
-'显示钟表' => '顯示鐘錶',
-'风干' => '風乾',
-'风后' => '風后',
-'风土志' => '風土誌',
-'风后,' => '風後,',
-'风卷残云' => '風捲殘雲',
-'风物志' => '風物誌',
-'风范' => '風範',
-'风里' => '風裡',
-'风起云涌' => '風起雲湧',
-'風采' => '風采',
-'风采' => '風采',
-'风刮' => '風颳',
-'台风' => '颱風',
-'台风后' => '颱風後',
-'刮了' => '颳了',
-'刮倒' => '颳倒',
-'刮去' => '颳去',
-'刮大风' => '颳大風',
-'刮得' => '颳得',
-'刮走' => '颳走',
-'刮起' => '颳起',
-'刮雪' => '颳雪',
-'刮风' => '颳風',
-'刮风后' => '颳風後',
-'飘荡' => '飄蕩',
-'飘游' => '飄遊',
-'飘飘荡荡' => '飄飄蕩蕩',
-'飘发自由女神' => '飄髮自由女神',
-'飞扎' => '飛紮',
-'飞刍挽粟' => '飛芻輓粟',
-'飞行钟' => '飛行鐘',
-'食欲' => '食慾',
-'食欲不振' => '食欲不振',
-'食面' => '食麵',
-'饭后钟' => '飯後鐘',
-'饭团' => '飯糰',
-'饼干' => '餅乾',
-'养脏' => '養臟',
-'餐台' => '餐檯',
-'馂余' => '餕餘',
-'余0' => '餘0',
-'余1' => '餘1',
-'余2' => '餘2',
-'余3' => '餘3',
-'余4' => '餘4',
-'余5' => '餘5',
-'余6' => '餘6',
-'余7' => '餘7',
-'余8' => '餘8',
-'余9' => '餘9',
-'余〇' => '餘〇',
-'余一' => '餘一',
-'余七' => '餘七',
-'余三' => '餘三',
-'余下' => '餘下',
-'余九' => '餘九',
-'余事' => '餘事',
-'余二' => '餘二',
-'余五' => '餘五',
-'余人' => '餘人',
-'余俗' => '餘俗',
-'余倍' => '餘倍',
-'余僇' => '餘僇',
-'余光' => '餘光',
-'余八' => '餘八',
-'余六' => '餘六',
-'余刃' => '餘刃',
-'余切' => '餘切',
-'余利' => '餘利',
-'余割' => '餘割',
-'余力' => '餘力',
-'余勇' => '餘勇',
-'余十' => '餘十',
-'余味' => '餘味',
-'余喘' => '餘喘',
-'余四' => '餘四',
-'余地' => '餘地',
-'余墨' => '餘墨',
-'余外' => '餘外',
-'余妙' => '餘妙',
-'余姚' => '餘姚',
-'余威' => '餘威',
-'余子' => '餘子',
-'余存' => '餘存',
-'余孽' => '餘孽',
-'余干' => '餘干',
-'余年' => '餘年',
-'余式' => '餘式',
-'余弦' => '餘弦',
-'余思' => '餘思',
-'余悸' => '餘悸',
-'余庆' => '餘慶',
-'余数' => '餘數',
-'余明' => '餘明',
-'余映' => '餘映',
-'余暇' => '餘暇',
-'余晖' => '餘暉',
-'余杭' => '餘杭',
-'余杯' => '餘杯',
-'余桃' => '餘桃',
-'余桶' => '餘桶',
-'余业' => '餘業',
-'余款' => '餘款',
-'余欢' => '餘歡',
-'余步' => '餘步',
-'余殃' => '餘殃',
-'余毒' => '餘毒',
-'余气' => '餘氣',
-'余江' => '餘江',
-'余波' => '餘波',
-'余温' => '餘溫',
-'余泽' => '餘澤',
-'余沥' => '餘瀝',
-'余烈' => '餘烈',
-'余热' => '餘熱',
-'余烬' => '餘燼',
-'余珍' => '餘珍',
-'余生' => '餘生',
-'余留' => '餘留',
-'余众' => '餘眾',
-'余窍' => '餘竅',
-'余粮' => '餘糧',
-'余绪' => '餘緒',
-'余缺' => '餘缺',
-'余罪' => '餘罪',
-'余羡' => '餘羨',
-'余声' => '餘聲',
-'余膏' => '餘膏',
-'余兴' => '餘興',
-'余蓄' => '餘蓄',
-'余荫' => '餘蔭',
-'余裕' => '餘裕',
-'余角' => '餘角',
-'余论' => '餘論',
-'余责' => '餘責',
-'余貾' => '餘貾',
-'余辉' => '餘輝',
-'余辜' => '餘辜',
-'余部' => '餘部',
-'余酲' => '餘酲',
-'余量' => '餘量',
-'余闰' => '餘閏',
-'余闲' => '餘閒',
-'余零' => '餘零',
-'余震' => '餘震',
-'余霞' => '餘霞',
-'余音' => '餘音',
-'余韵' => '餘韻',
-'余响' => '餘響',
-'余项' => '餘項',
-'余额' => '餘額',
-'余风' => '餘風',
-'余食' => '餘食',
-'余党' => '餘黨',
-'馄饨面' => '餛飩麵',
-'馆谷' => '館穀',
-'馆里' => '館裡',
-'饥寒' => '饑寒',
-'饥民' => '饑民',
-'饥渴' => '饑渴',
-'饥溺' => '饑溺',
-'饥荒' => '饑荒',
-'饥饱' => '饑飽',
-'饥馑' => '饑饉',
-'首当其冲' => '首當其衝',
-'首发' => '首發',
-'首只' => '首隻',
-'首出电影' => '首齣電影',
-'香干' => '香乾',
-'香山庄' => '香山庄',
-'马干' => '馬乾',
-'馬占山' => '馬占山',
-'马德钟' => '馬德鐘',
-'马斯垂克期' => '馬斯垂克期',
-'馬格里布' => '馬格里布',
-'马格里布' => '馬格里布',
-'驻扎' => '駐紮',
-'骀荡' => '駘蕩',
-'腾格里' => '騰格里',
-'騰格里' => '騰格里',
-'腾涌' => '騰湧',
-'腾冲' => '騰衝',
-'惊栗' => '驚慄',
-'惊赞' => '驚讚',
-'惊钟' => '驚鐘',
-'骨干' => '骨幹',
-'骨灰坛' => '骨灰罈',
-'骨坛' => '骨罈',
-'体征' => '體徵',
-'体范' => '體範',
-'体系' => '體系',
-'体里' => '體裡',
-'高几' => '高几',
-'高后' => '高后',
-'高干扰' => '高干擾',
-'高干预' => '高干預',
-'高干' => '高幹',
-'高度自制' => '高度自制',
-'高涌泉' => '高涌泉',
-'高清愿' => '高清愿',
-'髡发' => '髡髮',
-'髭胡' => '髭鬍',
-'髭须' => '髭鬚',
-'发上指冠' => '髮上指冠',
-'发上冲冠' => '髮上沖冠',
-'发乳' => '髮乳',
-'发光可鉴' => '髮光可鑑',
-'发匪' => '髮匪',
-'发及腰' => '髮及腰',
-'发型' => '髮型',
-'发夹' => '髮夾',
-'发妻' => '髮妻',
-'发姐' => '髮姐',
-'发屋' => '髮屋',
-'发已霜白' => '髮已霜白',
-'发带' => '髮帶',
-'发廊' => '髮廊',
-'发式' => '髮式',
-'发引千钧' => '髮引千鈞',
-'发披肩' => '髮披肩',
-'发卷' => '髮捲',
-'发根' => '髮根',
-'发油' => '髮油',
-'发漂' => '髮漂',
-'发为血之本' => '髮為血之本',
-'发状' => '髮狀',
-'发癣' => '髮癬',
-'发短心长' => '髮短心長',
-'发禁' => '髮禁',
-'发笺' => '髮箋',
-'发纱' => '髮紗',
-'发结' => '髮結',
-'发丝' => '髮絲',
-'发网' => '髮網',
-'发脚' => '髮腳',
-'发肤' => '髮膚',
-'发胶' => '髮膠',
-'发菜' => '髮菜',
-'发蜡' => '髮蠟',
-'发踊冲冠' => '髮踴沖冠',
-'发辫' => '髮辮',
-'发针' => '髮針',
-'发钗' => '髮釵',
-'发长' => '髮長',
-'发际' => '髮際',
-'发雕' => '髮雕',
-'发霜' => '髮霜',
-'发饰' => '髮飾',
-'发髻' => '髮髻',
-'发鬓' => '髮鬢',
-'髯胡' => '髯鬍',
-'髼松' => '髼鬆',
-'鬅松' => '鬅鬆',
-'松一口气' => '鬆一口氣',
-'松了' => '鬆了',
-'松些' => '鬆些',
-'松元音' => '鬆元音',
-'松劲' => '鬆勁',
-'松动' => '鬆動',
-'松化' => '鬆化',
-'松口' => '鬆口',
-'松喉' => '鬆喉',
-'松土' => '鬆土',
-'松宽' => '鬆寬',
-'松弛' => '鬆弛',
-'松快' => '鬆快',
-'松懈' => '鬆懈',
-'松手' => '鬆手',
-'松掉' => '鬆掉',
-'松散' => '鬆散',
-'松柔' => '鬆柔',
-'松气' => '鬆氣',
-'松浮' => '鬆浮',
-'松绑' => '鬆綁',
-'松紧' => '鬆緊',
-'松缓' => '鬆緩',
-'松脆' => '鬆脆',
-'松脱' => '鬆脫',
-'松蛋' => '鬆蛋',
-'松起' => '鬆起',
-'松软' => '鬆軟',
-'松通' => '鬆通',
-'松开' => '鬆開',
-'松饼' => '鬆餅',
-'松松地' => '鬆鬆地',
-'鬈发' => '鬈髮',
-'胡子' => '鬍子',
-'胡梢' => '鬍梢',
-'胡渣' => '鬍渣',
-'胡髭' => '鬍髭',
-'胡髯' => '鬍髯',
-'胡须' => '鬍鬚',
-'鬒发' => '鬒髮',
-'须根' => '鬚根',
-'须毛' => '鬚毛',
-'须生' => '鬚生',
-'须眉' => '鬚眉',
-'须发' => '鬚髮',
-'须胡' => '鬚鬍',
-'须须' => '鬚鬚',
-'须鲨' => '鬚鯊',
-'须鲸' => '鬚鯨',
-'鬓发' => '鬢髮',
-'斗不过' => '鬥不過',
-'斗了' => '鬥了',
-'斗来斗去' => '鬥來鬥去',
-'斗倒' => '鬥倒',
-'斗分子' => '鬥分子',
-'斗剑' => '鬥劍',
-'斗力' => '鬥力',
-'斗劲' => '鬥勁',
-'斗勇' => '鬥勇',
-'斗胜' => '鬥勝',
-'斗口' => '鬥口',
-'斗合' => '鬥合',
-'斗嘴' => '鬥嘴',
-'斗地主' => '鬥地主',
-'斗垮' => '鬥垮',
-'斗士' => '鬥士',
-'斗富' => '鬥富',
-'斗巧' => '鬥巧',
-'斗幌子' => '鬥幌子',
-'斗弄' => '鬥弄',
-'斗引' => '鬥引',
-'斗别气' => '鬥彆氣',
-'斗彩' => '鬥彩',
-'斗心眼' => '鬥心眼',
-'斗志' => '鬥志',
-'斗闷' => '鬥悶',
-'斗成' => '鬥成',
-'斗战' => '鬥戰',
-'斗打' => '鬥打',
-'斗批改' => '鬥批改',
-'斗技' => '鬥技',
-'斗败' => '鬥敗',
-'斗文' => '鬥文',
-'斗智' => '鬥智',
-'斗暴' => '鬥暴',
-'斗武' => '鬥武',
-'斗殴' => '鬥毆',
-'斗气' => '鬥氣',
-'斗法' => '鬥法',
-'斗争' => '鬥爭',
-'斗争斗合' => '鬥爭鬥合',
-'斗牌' => '鬥牌',
-'斗牙拌齿' => '鬥牙拌齒',
-'斗牙斗齿' => '鬥牙鬥齒',
-'斗牛' => '鬥牛',
-'斗犀台' => '鬥犀臺',
-'斗犬' => '鬥犬',
-'斗狗' => '鬥狗',
-'斗狠' => '鬥狠',
-'斗兽' => '鬥獸',
-'斗叠' => '鬥疊',
-'斗百草' => '鬥百草',
-'斗眼' => '鬥眼',
-'斗私批修' => '鬥私批修',
-'斗而铸兵' => '鬥而鑄兵',
-'斗而铸锥' => '鬥而鑄錐',
-'斗脚' => '鬥腳',
-'斗舰' => '鬥艦',
-'斗茶' => '鬥茶',
-'斗草' => '鬥草',
-'斗叶儿' => '鬥葉兒',
-'斗叶子' => '鬥葉子',
-'斗蛐' => '鬥蛐',
-'斗蟋蟀' => '鬥蟋蟀',
-'斗话' => '鬥話',
-'斗艳' => '鬥豔',
-'斗起' => '鬥起',
-'斗趣' => '鬥趣',
-'斗闲气' => '鬥閒氣',
-'斗鸡' => '鬥雞',
-'斗雪红' => '鬥雪紅',
-'斗头' => '鬥頭',
-'斗风' => '鬥風',
-'斗饤' => '鬥飣',
-'斗斗' => '鬥鬥',
-'斗哄' => '鬥鬨',
-'斗鱼' => '鬥魚',
-'斗鸭' => '鬥鴨',
-'斗鹌鹑' => '鬥鵪鶉',
-'斗丽' => '鬥麗',
-'斗龙' => '鬥龍',
-'闹表' => '鬧錶',
-'闹钟' => '鬧鐘',
-'哄动' => '鬨動',
-'哄堂' => '鬨堂',
-'哄笑' => '鬨笑',
-'郁伊' => '鬱伊',
-'郁勃' => '鬱勃',
-'郁卒' => '鬱卒',
-'郁南' => '鬱南',
-'郁堙不偶' => '鬱堙不偶',
-'郁塞' => '鬱塞',
-'郁垒' => '鬱壘',
-'郁律' => '鬱律',
-'郁悒' => '鬱悒',
-'郁闷' => '鬱悶',
-'郁愤' => '鬱憤',
-'郁抑' => '鬱抑',
-'郁挹' => '鬱挹',
-'郁林' => '鬱林',
-'郁气' => '鬱氣',
-'郁江' => '鬱江',
-'郁沉沉' => '鬱沉沉',
-'郁泱' => '鬱泱',
-'郁火' => '鬱火',
-'郁热' => '鬱熱',
-'郁燠' => '鬱燠',
-'郁症' => '鬱症',
-'郁积' => '鬱積',
-'郁纡' => '鬱紆',
-'郁结' => '鬱結',
-'郁蒸' => '鬱蒸',
-'郁蓊' => '鬱蓊',
-'郁血' => '鬱血',
-'郁邑' => '鬱邑',
-'郁郁' => '鬱郁',
-'郁金' => '鬱金',
-'郁闭' => '鬱閉',
-'郁陶' => '鬱陶',
-'郁郁不平' => '鬱鬱不平',
-'郁郁不乐' => '鬱鬱不樂',
-'郁郁寡欢' => '鬱鬱寡歡',
-'郁郁而终' => '鬱鬱而終',
-'郁郁苍苍' => '鬱鬱蒼蒼',
-'郁郁葱葱' => '鬱鬱蔥蔥',
-'郁黑' => '鬱黑',
-'鬼气冲天' => '鬼氣衝天',
-'鬼谷子' => '鬼谷子',
-'魂牵梦系' => '魂牽夢繫',
-'魏征' => '魏徵',
-'魔表' => '魔錶',
-'鱼干' => '魚乾',
-'鱼松' => '魚鬆',
-'鮮于' => '鮮于',
-'鲜于' => '鮮于',
-'鲸须' => '鯨鬚',
-'鳥栖' => '鳥栖',
-'鸟栖市' => '鳥栖市',
-'凤梨干' => '鳳梨乾',
-'鸣钟' => '鳴鐘',
-'鸿范' => '鴻範',
-'鹅准' => '鵝準',
-'鹄发' => '鵠髮',
-'雕心雁爪' => '鵰心雁爪',
-'雕悍' => '鵰悍',
-'雕翎' => '鵰翎',
-'雕鹗' => '鵰鶚',
-'鹤峰县' => '鶴峯縣',
-'鹤吊' => '鶴弔',
-'鹤发' => '鶴髮',
-'鸾鉴' => '鸞鑑',
-'鹰雕' => '鹰鵰',
-'咸味' => '鹹味',
-'咸嘴淡舌' => '鹹嘴淡舌',
-'咸土' => '鹹土',
-'咸度' => '鹹度',
-'咸得' => '鹹得',
-'咸批' => '鹹批',
-'咸水' => '鹹水',
-'咸派' => '鹹派',
-'咸海' => '鹹海',
-'咸淡' => '鹹淡',
-'咸湖' => '鹹湖',
-'咸汤' => '鹹湯',
-'咸潟' => '鹹潟',
-'咸湿' => '鹹濕',
-'咸的' => '鹹的',
-'咸粥' => '鹹粥',
-'咸肉' => '鹹肉',
-'咸菜' => '鹹菜',
-'咸菜干' => '鹹菜乾',
-'咸蛋' => '鹹蛋',
-'咸猪' => '鹹豬',
-'咸类' => '鹹類',
-'咸食' => '鹹食',
-'咸鱼' => '鹹魚',
-'咸鸭蛋' => '鹹鴨蛋',
-'咸卤' => '鹹鹵',
-'咸咸' => '鹹鹹',
-'盐打怎么咸' => '鹽打怎麼鹹',
-'盐卤' => '鹽滷',
-'盐余' => '鹽餘',
-'鹿場里' => '鹿場里',
-'丽于' => '麗於',
-'麟游' => '麟遊',
-'曲酒' => '麯酒',
-'曲尘' => '麴塵',
-'曲櫱' => '麴櫱',
-'曲秀才' => '麴秀才',
-'曲车' => '麴車',
-'曲道士' => '麴道士',
-'曲钱' => '麴錢',
-'曲霉' => '麴黴',
-'麹霉' => '麴黴',
-'面人儿' => '麵人兒',
-'面包' => '麵包',
-'面坊' => '麵坊',
-'面坯儿' => '麵坯兒',
-'面塑' => '麵塑',
-'面店' => '麵店',
-'面厂' => '麵廠',
-'面摊' => '麵攤',
-'面杖' => '麵杖',
-'面条' => '麵條',
-'面汤' => '麵湯',
-'面浆' => '麵漿',
-'面疙瘩' => '麵疙瘩',
-'面皮' => '麵皮',
-'面码儿' => '麵碼兒',
-'面筋' => '麵筋',
-'面粉' => '麵粉',
-'面糊' => '麵糊',
-'面团' => '麵糰',
-'面缸' => '麵缸',
-'面茶' => '麵茶',
-'面制品' => '麵製品',
-'面食' => '麵食',
-'面饺' => '麵餃',
-'面饼' => '麵餅',
-'面馆' => '麵館',
-'面点、' => '麵點、',
-'面点师' => '麵點師',
-'麻将席' => '麻將蓆',
-'麻酱面' => '麻醬麵',
-'黄干黑瘦' => '黃乾黑瘦',
-'黄岩区' => '黃巖區',
-'黄岩县' => '黃巖縣',
-'黄历' => '黃曆',
-'黃杰' => '黃杰',
-'黄杰' => '黃杰',
-'黄历史' => '黃歷史',
-'黄白术' => '黃白術',
-'黃詩杰' => '黃詩杰',
-'黄诗杰' => '黃詩杰',
-'黄金表' => '黃金表',
-'黃鈺筑' => '黃鈺筑',
-'黄钰筑' => '黃鈺筑',
-'黄钟' => '黃鐘',
-'黄发' => '黃髮',
-'黄曲毒素' => '黃麴毒素',
-'黎克特制' => '黎克特制',
-'黎吉云' => '黎吉雲',
-'黎吉雲' => '黎吉雲',
-'黑奴吁天录' => '黑奴籲天錄',
-'黑干将' => '黑幹將',
-'黑长发' => '黑長髮',
-'黑发' => '黑髮',
-'点个赞' => '點個讚',
-'点札' => '點劄',
-'点半钟' => '點半鐘',
-'点多钟' => '點多鐘',
-'点里' => '點裡',
-'点赞' => '點讚',
-'点里程' => '點里程',
-'点钟' => '點鐘',
-'霉毒' => '黴毒',
-'霉素' => '黴素',
-'霉菌' => '黴菌',
-'霉黑' => '黴黑',
-'霉黧' => '黴黧',
-'鼓里' => '鼓裡',
-'鼓噪' => '鼓譟',
-'冬冬鼓' => '鼕鼕鼓',
-'咚咚鼓' => '鼕鼕鼓',
-'鼠曲草' => '鼠麴草',
-'鼻梁儿' => '鼻梁兒',
-'鼻梁' => '鼻樑',
-'鼻准' => '鼻準',
-'齐王舍牛' => '齊王捨牛',
-'齿危发秀' => '齒危髮秀',
-'齿落发白' => '齒落髮白',
-'齿发' => '齒髮',
-'龙岩' => '龍巖',
-'龙卷' => '龍捲',
-'龙眼干' => '龍眼乾',
-'龙须' => '龍鬚',
-'龙须面' => '龍鬚麵',
-'龙斗虎伤' => '龍鬥虎傷',
-'龜山庄' => '龜山庄',
-'龟鉴' => '龜鑑',
-',并力' => ',並力',
-',并力攻' => ',并力攻',
-',并力討' => ',并力討',
-',并力讨' => ',并力討',
-',个中' => ',箇中',
-);
-
-$zh2Hans = array(
-'㑯' => '㑔',
-'㑳' => '㑇',
-'㑶' => '㐹',
-'㒓' => '𠉂',
-'㒺' => '罔',
-'㓂' => '寇',
-'㓨' => '刾',
-'㕁' => '却',
-'㕑' => '厨',
-'㕘' => '参',
-'㕥' => '以',
-'㗲' => '𠵾',
-'㘚' => '㘎',
-'㘭' => '坳',
-'㜄' => '㚯',
-'㜏' => '㛣',
-'㜢' => '𡞱',
-'㜷' => '𡝠',
-'㝛' => '宿',
-'㝠' => '冥',
-'㞞' => '𪨊',
-'㠀' => '岛',
-'㠏' => '㟆',
-'㠯' => '以',
-'㠶' => '帆',
-'㡌' => '帽',
-'㢘' => '廉',
-'㢝' => '𢋈',
-'㤙' => '恩',
-'㥦' => '惬',
-'㥮' => '㤘',
-'㦎' => '𢛯',
-'㨗' => '捷',
-'㨪' => '晃',
-'㨿' => '据',
-'㩗' => '携',
-'㩜' => '㨫',
-'㩦' => '携',
-'㩳' => '㧐',
-'㪚' => '散',
-'㪟' => '敦',
-'㬉' => '暖',
-'㬪' => '叠',
-'㯭' => '橹',
-'㱃' => '饮',
-'㳒' => '法',
-'㴱' => '深',
-'㷿' => '𤈷',
-'㺏' => '𤠋',
-'㼝' => '碗',
-'㽞' => '留',
-'㿜' => '瘪',
-'㿧' => '𤽯',
-'䀹' => '𥅴',
-'䁪' => '𥇢',
-'䁻' => '䀥',
-'䈰' => '筲',
-'䉙' => '𥬀',
-'䉬' => '𫂈',
-'䉲' => '𥮜',
-'䊀' => '糊',
-'䊭' => '𥺅',
-'䊷' => '䌶',
-'䋙' => '䌺',
-'䋚' => '䌻',
-'䋹' => '䌿',
-'䋻' => '䌾',
-'䋿' => '𦈓',
-'䌈' => '𦈖',
-'䌋' => '𦈘',
-'䌖' => '𦈜',
-'䌝' => '𦈟',
-'䌟' => '𦈞',
-'䌥' => '𦈠',
-'䌰' => '𦈙',
-'䎱' => '䎬',
-'䕳' => '𦰴',
-'䗬' => '蜂',
-'䗿' => '𧉞',
-'䘏' => '恤',
-'䘑' => '脉',
-'䘚' => '卒',
-'䙡' => '䙌',
-'䛐' => '词',
-'䛡' => '话',
-'䜀' => '䜧',
-'䝔' => '獾',
-'䝻' => '𧹕',
-'䝼' => '䞍',
-'䞈' => '𧹑',
-'䠀' => '蹚',
-'䠶' => '射',
-'䢨' => '𨑹',
-'䥇' => '䦂',
-'䥥' => '镰',
-'䥩' => '𨱖',
-'䥱' => '䥾',
-'䦘' => '𨸄',
-'䦛' => '䦶',
-'䦟' => '䦷',
-'䦳' => '𨷿',
-'䧢' => '𨸟',
-'䪏' => '𩏼',
-'䪗' => '𩐀',
-'䪘' => '𩏿',
-'䫴' => '𩖗',
-'䬃' => '飒',
-'䬘' => '𩙮',
-'䬝' => '𩙯',
-'䬞' => '𩙧',
-'䭀' => '𩠇',
-'䭃' => '𩠈',
-'䭾' => '驮',
-'䭿' => '𩧭',
-'䮝' => '𩧰',
-'䮞' => '𩨁',
-'䮠' => '𩧿',
-'䮫' => '𩨇',
-'䮳' => '𩨏',
-'䮾' => '𩧪',
-'䯀' => '䯅',
-'䰟' => '魂',
-'䰾' => '鲃',
-'䱙' => '𩾈',
-'䱬' => '𩾊',
-'䱰' => '𩾋',
-'䱷' => '䲣',
-'䱽' => '䲝',
-'䲁' => '鳚',
-'䲖' => '𩾂',
-'䲘' => '鳤',
-'䲰' => '𪉂',
-'䳘' => '鹅',
-'䴉' => '鹮',
-'䴬' => '𪎈',
-'䴴' => '𪎋',
-'䶊' => '衄',
-'丟' => '丢',
-'丣' => '卯',
-'並' => '并',
-'乗' => '乘',
-'乹' => '干',
-'乾' => '干',
-'亁' => '干',
-'亂' => '乱',
-'亙' => '亘',
-'亝' => '斋',
-'亞' => '亚',
-'亱' => '夜',
-'亷' => '廉',
-'亾' => '亡',
-'佇' => '伫',
-'佈' => '布',
-'佔' => '占',
-'併' => '并',
-'來' => '来',
-'侖' => '仑',
-'侶' => '侣',
-'俁' => '俣',
-'係' => '系',
-'俔' => '伣',
-'俠' => '侠',
-'俥' => '伡',
-'俻' => '备',
-'倀' => '伥',
-'倆' => '俩',
-'倈' => '俫',
-'倉' => '仓',
-'個' => '个',
-'倐' => '倏',
-'們' => '们',
-'倖' => '幸',
-'倣' => '仿',
-'倫' => '伦',
-'倲' => '㑈',
-'倸' => '睬',
-'偉' => '伟',
-'偑' => '㐽',
-'側' => '侧',
-'偵' => '侦',
-'偽' => '伪',
-'傌' => '㐷',
-'傑' => '杰',
-'傖' => '伧',
-'傘' => '伞',
-'備' => '备',
-'傚' => '效',
-'傢' => '家',
-'傭' => '佣',
-'傯' => '偬',
-'傳' => '传',
-'傴' => '伛',
-'債' => '债',
-'傷' => '伤',
-'傾' => '倾',
-'僂' => '偻',
-'僅' => '仅',
-'僉' => '佥',
-'僊' => '仙',
-'働' => '动',
-'僑' => '侨',
-'僕' => '仆',
-'僞' => '伪',
-'僥' => '侥',
-'僨' => '偾',
-'僱' => '雇',
-'價' => '价',
-'儀' => '仪',
-'儂' => '侬',
-'億' => '亿',
-'儈' => '侩',
-'儉' => '俭',
-'儌' => '侥',
-'儐' => '傧',
-'儔' => '俦',
-'儕' => '侪',
-'儘' => '尽',
-'償' => '偿',
-'儣' => '𠆲',
-'優' => '优',
-'儲' => '储',
-'儷' => '俪',
-'儸' => '㑩',
-'儺' => '傩',
-'儻' => '傥',
-'儼' => '俨',
-'兇' => '凶',
-'兌' => '兑',
-'兎' => '兔',
-'兒' => '儿',
-'兗' => '兖',
-'兠' => '兜',
-'內' => '内',
-'兩' => '两',
-'冄' => '冉',
-'冊' => '册',
-'冐' => '冒',
-'冑' => '胄',
-'冪' => '幂',
-'冺' => '泯',
-'凈' => '净',
-'凍' => '冻',
-'凙' => '𪞝',
-'凜' => '凛',
-'凢' => '凡',
-'凱' => '凯',
-'凴' => '凭',
-'別' => '别',
-'刦' => '劫',
-'刧' => '劫',
-'刪' => '删',
-'刼' => '劫',
-'剄' => '刭',
-'則' => '则',
-'剉' => '锉',
-'剋' => '克',
-'剎' => '刹',
-'剏' => '创',
-'剗' => '刬',
-'剙' => '创',
-'剛' => '刚',
-'剝' => '剥',
-'剮' => '剐',
-'剳' => '札',
-'剴' => '剀',
-'創' => '创',
-'剷' => '铲',
-'剹' => '戮',
-'剾' => '𠛅',
-'劃' => '划',
-'劄' => '札',
-'劇' => '剧',
-'劉' => '刘',
-'劊' => '刽',
-'劌' => '刿',
-'劍' => '剑',
-'劏' => '㓥',
-'劑' => '剂',
-'劒' => '剑',
-'劚' => '㔉',
-'効' => '效',
-'勁' => '劲',
-'勅' => '敕',
-'勌' => '倦',
-'勑' => '敕',
-'動' => '动',
-'務' => '务',
-'勛' => '勋',
-'勝' => '胜',
-'勞' => '劳',
-'勢' => '势',
-'勦' => '剿',
-'勩' => '勚',
-'勱' => '劢',
-'勳' => '勋',
-'勵' => '励',
-'勸' => '劝',
-'勻' => '匀',
-'匟' => '炕',
-'匭' => '匦',
-'匯' => '汇',
-'匱' => '匮',
-'匲' => '奁',
-'匳' => '奁',
-'區' => '区',
-'協' => '协',
-'卹' => '恤',
-'卻' => '却',
-'卽' => '即',
-'厀' => '膝',
-'厙' => '厍',
-'厠' => '厕',
-'厤' => '历',
-'厭' => '厌',
-'厰' => '厂',
-'厲' => '厉',
-'厴' => '厣',
-'參' => '参',
-'叄' => '叁',
-'叢' => '丛',
-'吚' => '咿',
-'吳' => '吴',
-'吶' => '呐',
-'呂' => '吕',
-'呌' => '叫',
-'呪' => '咒',
-'咊' => '和',
-'咼' => '呙',
-'員' => '员',
-'哯' => '𠯟',
-'哶' => '咩',
-'唄' => '呗',
-'唕' => '唣',
-'唘' => '启',
-'唚' => '吣',
-'唸' => '念',
-'啎' => '忤',
-'問' => '问',
-'啑' => '喋',
-'啓' => '启',
-'啗' => '啖',
-'啞' => '哑',
-'啟' => '启',
-'啢' => '唡',
-'啣' => '衔',
-'喎' => '㖞',
-'喚' => '唤',
-'喪' => '丧',
-'喫' => '吃',
-'喬' => '乔',
-'單' => '单',
-'喲' => '哟',
-'嗁' => '啼',
-'嗆' => '呛',
-'嗇' => '啬',
-'嗊' => '唝',
-'嗎' => '吗',
-'嗚' => '呜',
-'嗩' => '唢',
-'嗶' => '哔',
-'嗹' => '𪡏',
-'嘅' => '慨',
-'嘆' => '叹',
-'嘍' => '喽',
-'嘑' => '呼',
-'嘓' => '啯',
-'嘔' => '呕',
-'嘖' => '啧',
-'嘗' => '尝',
-'嘜' => '唛',
-'嘠' => '嘎',
-'嘩' => '哗',
-'嘮' => '唠',
-'嘯' => '啸',
-'嘰' => '叽',
-'嘵' => '哓',
-'嘷' => '嗥',
-'嘸' => '呒',
-'嘽' => '啴',
-'噅' => '𠯠',
-'噉' => '啖',
-'噓' => '嘘',
-'噚' => '㖊',
-'噝' => '咝',
-'噠' => '哒',
-'噥' => '哝',
-'噦' => '哕',
-'噯' => '嗳',
-'噲' => '哙',
-'噴' => '喷',
-'噸' => '吨',
-'噹' => '当',
-'嚀' => '咛',
-'嚇' => '吓',
-'嚌' => '哜',
-'嚐' => '尝',
-'嚕' => '噜',
-'嚙' => '啮',
-'嚥' => '咽',
-'嚦' => '呖',
-'嚨' => '咙',
-'嚮' => '向',
-'嚲' => '亸',
-'嚳' => '喾',
-'嚴' => '严',
-'嚶' => '嘤',
-'囀' => '啭',
-'囁' => '嗫',
-'囂' => '嚣',
-'囅' => '冁',
-'囈' => '呓',
-'囉' => '啰',
-'囌' => '苏',
-'囑' => '嘱',
-'囓' => '啮',
-'囙' => '因',
-'囪' => '囱',
-'圅' => '函',
-'圇' => '囵',
-'國' => '国',
-'圍' => '围',
-'園' => '园',
-'圓' => '圆',
-'圖' => '图',
-'團' => '团',
-'圞' => '𪢮',
-'坿' => '附',
-'垜' => '垛',
-'垵' => '埯',
-'埡' => '垭',
-'埰' => '采',
-'執' => '执',
-'堅' => '坚',
-'堊' => '垩',
-'堝' => '埚',
-'堯' => '尧',
-'報' => '报',
-'場' => '场',
-'塊' => '块',
-'塋' => '茔',
-'塏' => '垲',
-'塒' => '埘',
-'塗' => '涂',
-'塟' => '葬',
-'塢' => '坞',
-'塤' => '埙',
-'塲' => '场',
-'塵' => '尘',
-'塹' => '堑',
-'墊' => '垫',
-'墖' => '塔',
-'墜' => '坠',
-'墮' => '堕',
-'墰' => '坛',
-'墳' => '坟',
-'墻' => '墙',
-'墾' => '垦',
-'壇' => '坛',
-'壈' => '𡒄',
-'壋' => '垱',
-'壎' => '埙',
-'壓' => '压',
-'壘' => '垒',
-'壙' => '圹',
-'壚' => '垆',
-'壜' => '坛',
-'壞' => '坏',
-'壟' => '垄',
-'壠' => '垅',
-'壢' => '坜',
-'壩' => '坝',
-'壯' => '壮',
-'壺' => '壶',
-'壻' => '婿',
-'壼' => '壸',
-'壽' => '寿',
-'夘' => '卯',
-'夠' => '够',
-'夢' => '梦',
-'夥' => '伙',
-'夾' => '夹',
-'奐' => '奂',
-'奧' => '奥',
-'奩' => '奁',
-'奪' => '夺',
-'奬' => '奖',
-'奮' => '奋',
-'奼' => '姹',
-'妝' => '妆',
-'妬' => '妒',
-'妳' => '你',
-'妷' => '侄',
-'姉' => '姊',
-'姍' => '姗',
-'姙' => '妊',
-'姦' => '奸',
-'姪' => '侄',
-'姸' => '妍',
-'娛' => '娱',
-'婁' => '娄',
-'婣' => '姻',
-'婦' => '妇',
-'婬' => '淫',
-'婭' => '娅',
-'媍' => '妇',
-'媧' => '娲',
-'媯' => '妫',
-'媰' => '㛀',
-'媼' => '媪',
-'媽' => '妈',
-'媿' => '愧',
-'嫋' => '袅',
-'嫗' => '妪',
-'嫰' => '嫩',
-'嫵' => '妩',
-'嫺' => '娴',
-'嫻' => '娴',
-'嫿' => '婳',
-'嬀' => '妫',
-'嬃' => '媭',
-'嬈' => '娆',
-'嬋' => '婵',
-'嬌' => '娇',
-'嬙' => '嫱',
-'嬝' => '袅',
-'嬡' => '嫒',
-'嬤' => '嬷',
-'嬪' => '嫔',
-'嬭' => '奶',
-'嬰' => '婴',
-'嬸' => '婶',
-'嬾' => '懒',
-'孃' => '娘',
-'孋' => '㛤',
-'孌' => '娈',
-'孫' => '孙',
-'學' => '学',
-'孼' => '孽',
-'孿' => '孪',
-'宂' => '冗',
-'宮' => '宫',
-'寀' => '采',
-'寃' => '冤',
-'寑' => '寝',
-'寢' => '寝',
-'實' => '实',
-'寧' => '宁',
-'審' => '审',
-'寫' => '写',
-'寬' => '宽',
-'寳' => '宝',
-'寵' => '宠',
-'寶' => '宝',
-'尅' => '克',
-'將' => '将',
-'專' => '专',
-'尋' => '寻',
-'對' => '对',
-'導' => '导',
-'尒' => '尔',
-'尙' => '尚',
-'尟' => '鲜',
-'尠' => '鲜',
-'尷' => '尴',
-'屆' => '届',
-'屍' => '尸',
-'屓' => '屃',
-'屛' => '屏',
-'屜' => '屉',
-'屢' => '屡',
-'層' => '层',
-'屨' => '屦',
-'屩' => '𪨗',
-'屬' => '属',
-'屭' => '屃',
-'岅' => '坂',
-'岡' => '冈',
-'峝' => '峒',
-'峴' => '岘',
-'島' => '岛',
-'峽' => '峡',
-'崍' => '崃',
-'崗' => '岗',
-'崢' => '峥',
-'崬' => '岽',
-'嵐' => '岚',
-'嵗' => '岁',
-'嵼' => '𡶴',
-'嶁' => '嵝',
-'嶃' => '崭',
-'嶄' => '崭',
-'嶇' => '岖',
-'嶔' => '嵚',
-'嶗' => '崂',
-'嶠' => '峤',
-'嶢' => '峣',
-'嶧' => '峄',
-'嶨' => '峃',
-'嶮' => '崄',
-'嶸' => '嵘',
-'嶺' => '岭',
-'嶼' => '屿',
-'嶽' => '岳',
-'巋' => '岿',
-'巒' => '峦',
-'巔' => '巅',
-'巖' => '岩',
-'巗' => '岩',
-'巰' => '巯',
-'巵' => '卮',
-'帀' => '匝',
-'帋' => '纸',
-'帥' => '帅',
-'師' => '师',
-'帬' => '裙',
-'帳' => '帐',
-'帶' => '带',
-'幀' => '帧',
-'幃' => '帏',
-'幇' => '帮',
-'幑' => '徽',
-'幗' => '帼',
-'幘' => '帻',
-'幙' => '幕',
-'幚' => '帮',
-'幟' => '帜',
-'幣' => '币',
-'幫' => '帮',
-'幬' => '帱',
-'幹' => '干',
-'幾' => '几',
-'庫' => '库',
-'庻' => '庶',
-'庽' => '寓',
-'廁' => '厕',
-'廂' => '厢',
-'廄' => '厩',
-'廈' => '厦',
-'廎' => '庼',
-'廐' => '厩',
-'廕' => '荫',
-'廚' => '厨',
-'廝' => '厮',
-'廟' => '庙',
-'廠' => '厂',
-'廡' => '庑',
-'廢' => '废',
-'廣' => '广',
-'廩' => '廪',
-'廬' => '庐',
-'廳' => '厅',
-'廵' => '巡',
-'廹' => '迫',
-'廻' => '回',
-'廼' => '乃',
-'弒' => '弑',
-'弔' => '吊',
-'弳' => '弪',
-'張' => '张',
-'強' => '强',
-'彆' => '别',
-'彈' => '弹',
-'彌' => '弥',
-'彎' => '弯',
-'彙' => '汇',
-'彞' => '彝',
-'彠' => '彟',
-'彥' => '彦',
-'彫' => '雕',
-'彲' => '彨',
-'徃' => '往',
-'後' => '后',
-'徑' => '径',
-'從' => '从',
-'徠' => '徕',
-'徧' => '遍',
-'復' => '复',
-'徵' => '征',
-'徹' => '彻',
-'怱' => '匆',
-'怳' => '恍',
-'恆' => '恒',
-'恠' => '怪',
-'恡' => '吝',
-'恥' => '耻',
-'悅' => '悦',
-'悞' => '悮',
-'悤' => '匆',
-'悵' => '怅',
-'悶' => '闷',
-'悽' => '凄',
-'惏' => '婪',
-'惡' => '恶',
-'惥' => '恿',
-'惱' => '恼',
-'惲' => '恽',
-'惷' => '蠢',
-'惻' => '恻',
-'愛' => '爱',
-'愜' => '惬',
-'愨' => '悫',
-'愴' => '怆',
-'愷' => '恺',
-'愽' => '博',
-'愾' => '忾',
-'慄' => '栗',
-'態' => '态',
-'慍' => '愠',
-'慘' => '惨',
-'慙' => '惭',
-'慚' => '惭',
-'慟' => '恸',
-'慣' => '惯',
-'慤' => '悫',
-'慪' => '怄',
-'慫' => '怂',
-'慮' => '虑',
-'慳' => '悭',
-'慴' => '慑',
-'慶' => '庆',
-'慼' => '戚',
-'慽' => '戚',
-'慾' => '欲',
-'憂' => '忧',
-'憇' => '憩',
-'憊' => '惫',
-'憐' => '怜',
-'憑' => '凭',
-'憒' => '愦',
-'憚' => '惮',
-'憤' => '愤',
-'憫' => '悯',
-'憮' => '怃',
-'憲' => '宪',
-'憶' => '忆',
-'懀' => '𢙓',
-'懇' => '恳',
-'應' => '应',
-'懌' => '怿',
-'懍' => '懔',
-'懟' => '怼',
-'懣' => '懑',
-'懨' => '恹',
-'懲' => '惩',
-'懶' => '懒',
-'懷' => '怀',
-'懸' => '悬',
-'懺' => '忏',
-'懼' => '惧',
-'懾' => '慑',
-'戀' => '恋',
-'戇' => '戆',
-'戔' => '戋',
-'戞' => '戛',
-'戧' => '戗',
-'戩' => '戬',
-'戯' => '戏',
-'戰' => '战',
-'戱' => '戯',
-'戲' => '戏',
-'戶' => '户',
-'戹' => '厄',
-'扞' => '捍',
-'抝' => '拗',
-'拋' => '抛',
-'拚' => '拼',
-'挩' => '捝',
-'挱' => '挲',
-'挵' => '弄',
-'挾' => '挟',
-'捄' => '救',
-'捨' => '舍',
-'捫' => '扪',
-'捲' => '卷',
-'掃' => '扫',
-'掄' => '抡',
-'掆' => '㧏',
-'掗' => '挜',
-'掙' => '挣',
-'掛' => '挂',
-'採' => '采',
-'掽' => '碰',
-'揀' => '拣',
-'揑' => '捏',
-'揚' => '扬',
-'換' => '换',
-'揫' => '揪',
-'揮' => '挥',
-'揷' => '插',
-'揹' => '背',
-'搆' => '构',
-'搇' => '揿',
-'搉' => '榷',
-'損' => '损',
-'搖' => '摇',
-'搗' => '捣',
-'搤' => '扼',
-'搥' => '捶',
-'搨' => '拓',
-'搯' => '掏',
-'搵' => '揾',
-'搶' => '抢',
-'搾' => '榨',
-'摃' => '扛',
-'摋' => '𢫬',
-'摑' => '掴',
-'摜' => '掼',
-'摟' => '搂',
-'摯' => '挚',
-'摳' => '抠',
-'摶' => '抟',
-'摺' => '折',
-'摻' => '掺',
-'撈' => '捞',
-'撏' => '挦',
-'撐' => '撑',
-'撓' => '挠',
-'撝' => '㧑',
-'撟' => '挢',
-'撡' => '操',
-'撣' => '掸',
-'撥' => '拨',
-'撦' => '扯',
-'撫' => '抚',
-'撲' => '扑',
-'撳' => '揿',
-'撻' => '挞',
-'撾' => '挝',
-'撿' => '捡',
-'擁' => '拥',
-'擄' => '掳',
-'擇' => '择',
-'擊' => '击',
-'擋' => '挡',
-'擓' => '㧟',
-'擔' => '担',
-'擕' => '携',
-'據' => '据',
-'擠' => '挤',
-'擣' => '𢭏',
-'擧' => '举',
-'擬' => '拟',
-'擯' => '摈',
-'擰' => '拧',
-'擱' => '搁',
-'擲' => '掷',
-'擴' => '扩',
-'擷' => '撷',
-'擺' => '摆',
-'擻' => '擞',
-'擼' => '撸',
-'擽' => '㧰',
-'擾' => '扰',
-'攄' => '摅',
-'攆' => '撵',
-'攏' => '拢',
-'攔' => '拦',
-'攖' => '撄',
-'攙' => '搀',
-'攛' => '撺',
-'攜' => '携',
-'攝' => '摄',
-'攢' => '攒',
-'攣' => '挛',
-'攤' => '摊',
-'攩' => '挡',
-'攪' => '搅',
-'攬' => '揽',
-'攷' => '考',
-'敂' => '叩',
-'敍' => '叙',
-'敗' => '败',
-'敘' => '叙',
-'敵' => '敌',
-'數' => '数',
-'敺' => '驱',
-'斂' => '敛',
-'斃' => '毙',
-'斅' => '𢽾',
-'斆' => '敩',
-'斕' => '斓',
-'斬' => '斩',
-'斷' => '断',
-'於' => '于',
-'旂' => '旗',
-'旣' => '既',
-'旤' => '祸',
-'旹' => '时',
-'旾' => '春',
-'昬' => '昏',
-'時' => '时',
-'晉' => '晋',
-'晝' => '昼',
-'暈' => '晕',
-'暉' => '晖',
-'暘' => '旸',
-'暢' => '畅',
-'暫' => '暂',
-'暱' => '昵',
-'曄' => '晔',
-'曆' => '历',
-'曇' => '昙',
-'曉' => '晓',
-'曖' => '暧',
-'曠' => '旷',
-'曡' => '叠',
-'曥' => '𣆐',
-'曨' => '昽',
-'曬' => '晒',
-'書' => '书',
-'會' => '会',
-'朞' => '期',
-'朢' => '望',
-'朥' => '𦛨',
-'朧' => '胧',
-'朮' => '术',
-'朶' => '朵',
-'東' => '东',
-'杴' => '锨',
-'枱' => '台',
-'柵' => '栅',
-'柺' => '拐',
-'査' => '查',
-'栁' => '柳',
-'栞' => '刊',
-'栢' => '柏',
-'栰' => '筏',
-'桒' => '桑',
-'桮' => '杯',
-'桺' => '柳',
-'桿' => '杆',
-'梔' => '栀',
-'梘' => '枧',
-'條' => '条',
-'梟' => '枭',
-'梲' => '棁',
-'棄' => '弃',
-'棊' => '棋',
-'棖' => '枨',
-'棗' => '枣',
-'棟' => '栋',
-'棡' => '㭎',
-'棧' => '栈',
-'棲' => '栖',
-'棶' => '梾',
-'椏' => '桠',
-'椗' => '碇',
-'椲' => '㭏',
-'椶' => '棕',
-'椷' => '缄',
-'椾' => '笺',
-'楊' => '杨',
-'楓' => '枫',
-'楥' => '楦',
-'楨' => '桢',
-'業' => '业',
-'極' => '极',
-'榦' => '干',
-'榪' => '杩',
-'榮' => '荣',
-'榲' => '榅',
-'榿' => '桤',
-'構' => '构',
-'槍' => '枪',
-'槓' => '杠',
-'槕' => '桌',
-'槤' => '梿',
-'槧' => '椠',
-'槨' => '椁',
-'槮' => '椮',
-'槳' => '桨',
-'槶' => '椢',
-'槼' => '椝',
-'樁' => '桩',
-'樂' => '乐',
-'樅' => '枞',
-'樑' => '梁',
-'樓' => '楼',
-'標' => '标',
-'樞' => '枢',
-'樢' => '㭤',
-'樣' => '样',
-'樫' => '㭴',
-'樳' => '桪',
-'樸' => '朴',
-'樹' => '树',
-'樺' => '桦',
-'樿' => '椫',
-'橈' => '桡',
-'橋' => '桥',
-'橜' => '橛',
-'機' => '机',
-'橢' => '椭',
-'橫' => '横',
-'檁' => '檩',
-'檉' => '柽',
-'檔' => '档',
-'檜' => '桧',
-'檟' => '槚',
-'檢' => '检',
-'檣' => '樯',
-'檭' => '𣘴',
-'檮' => '梼',
-'檯' => '台',
-'檳' => '槟',
-'檸' => '柠',
-'檻' => '槛',
-'櫃' => '柜',
-'櫈' => '凳',
-'櫓' => '橹',
-'櫚' => '榈',
-'櫛' => '栉',
-'櫝' => '椟',
-'櫞' => '橼',
-'櫟' => '栎',
-'櫥' => '橱',
-'櫧' => '槠',
-'櫨' => '栌',
-'櫪' => '枥',
-'櫫' => '橥',
-'櫬' => '榇',
-'櫱' => '蘖',
-'櫳' => '栊',
-'櫸' => '榉',
-'櫻' => '樱',
-'欄' => '栏',
-'欅' => '榉',
-'權' => '权',
-'欍' => '𣐤',
-'欏' => '椤',
-'欒' => '栾',
-'欓' => '𣗋',
-'欖' => '榄',
-'欝' => '郁',
-'欞' => '棂',
-'欵' => '款',
-'欽' => '钦',
-'歎' => '叹',
-'歐' => '欧',
-'歛' => '敛',
-'歟' => '欤',
-'歡' => '欢',
-'歲' => '岁',
-'歴' => '历',
-'歷' => '历',
-'歸' => '归',
-'歿' => '殁',
-'殀' => '夭',
-'殘' => '残',
-'殞' => '殒',
-'殤' => '殇',
-'殨' => '㱮',
-'殫' => '殚',
-'殭' => '僵',
-'殮' => '殓',
-'殯' => '殡',
-'殰' => '㱩',
-'殲' => '歼',
-'殺' => '杀',
-'殻' => '壳',
-'殼' => '壳',
-'毀' => '毁',
-'毆' => '殴',
-'毧' => '绒',
-'毬' => '球',
-'毿' => '毵',
-'氂' => '牦',
-'氈' => '毡',
-'氊' => '毡',
-'氌' => '氇',
-'氣' => '气',
-'氫' => '氢',
-'氬' => '氩',
-'氳' => '氲',
-'氷' => '冰',
-'汙' => '污',
-'汚' => '污',
-'決' => '决',
-'沒' => '没',
-'沖' => '冲',
-'況' => '况',
-'泝' => '溯',
-'洩' => '泄',
-'洶' => '汹',
-'浹' => '浃',
-'涇' => '泾',
-'涖' => '莅',
-'涼' => '凉',
-'淒' => '凄',
-'淚' => '泪',
-'淛' => '浙',
-'淥' => '渌',
-'淨' => '净',
-'淩' => '凌',
-'淪' => '沦',
-'淵' => '渊',
-'淶' => '涞',
-'淺' => '浅',
-'渙' => '涣',
-'減' => '减',
-'渢' => '沨',
-'渦' => '涡',
-'測' => '测',
-'渾' => '浑',
-'湊' => '凑',
-'湞' => '浈',
-'湧' => '涌',
-'湯' => '汤',
-'湼' => '涅',
-'溈' => '沩',
-'準' => '准',
-'溝' => '沟',
-'溫' => '温',
-'溮' => '浉',
-'溳' => '涢',
-'溼' => '湿',
-'滄' => '沧',
-'滅' => '灭',
-'滌' => '涤',
-'滎' => '荥',
-'滙' => '汇',
-'滛' => '淫',
-'滬' => '沪',
-'滯' => '滞',
-'滲' => '渗',
-'滷' => '卤',
-'滸' => '浒',
-'滻' => '浐',
-'滾' => '滚',
-'滿' => '满',
-'漁' => '渔',
-'漊' => '溇',
-'漚' => '沤',
-'漢' => '汉',
-'漣' => '涟',
-'漬' => '渍',
-'漲' => '涨',
-'漵' => '溆',
-'漸' => '渐',
-'漿' => '浆',
-'潁' => '颍',
-'潄' => '漱',
-'潑' => '泼',
-'潔' => '洁',
-'潙' => '沩',
-'潛' => '潜',
-'潤' => '润',
-'潯' => '浔',
-'潰' => '溃',
-'潷' => '滗',
-'潿' => '涠',
-'澀' => '涩',
-'澁' => '涩',
-'澅' => '𣶩',
-'澆' => '浇',
-'澇' => '涝',
-'澐' => '沄',
-'澗' => '涧',
-'澠' => '渑',
-'澤' => '泽',
-'澦' => '滪',
-'澩' => '泶',
-'澮' => '浍',
-'澱' => '淀',
-'澾' => '㳠',
-'濁' => '浊',
-'濃' => '浓',
-'濄' => '㳡',
-'濆' => '𣸣',
-'濇' => '涩',
-'濕' => '湿',
-'濘' => '泞',
-'濜' => '浕',
-'濟' => '济',
-'濤' => '涛',
-'濧' => '㳔',
-'濫' => '滥',
-'濰' => '潍',
-'濱' => '滨',
-'濶' => '阔',
-'濺' => '溅',
-'濼' => '泺',
-'濾' => '滤',
-'瀂' => '澛',
-'瀃' => '𣽷',
-'瀅' => '滢',
-'瀆' => '渎',
-'瀇' => '㲿',
-'瀉' => '泻',
-'瀋' => '沈',
-'瀏' => '浏',
-'瀕' => '濒',
-'瀘' => '泸',
-'瀝' => '沥',
-'瀟' => '潇',
-'瀠' => '潆',
-'瀦' => '潴',
-'瀧' => '泷',
-'瀨' => '濑',
-'瀰' => '弥',
-'瀲' => '潋',
-'瀾' => '澜',
-'灃' => '沣',
-'灄' => '滠',
-'灋' => '法',
-'灑' => '洒',
-'灕' => '漓',
-'灘' => '滩',
-'灙' => '𣺼',
-'灝' => '灏',
-'灠' => '漤',
-'灣' => '湾',
-'灤' => '滦',
-'灧' => '滟',
-'灩' => '滟',
-'災' => '灾',
-'為' => '为',
-'烏' => '乌',
-'烖' => '灾',
-'烴' => '烃',
-'無' => '无',
-'煉' => '炼',
-'煑' => '煮',
-'煒' => '炜',
-'煗' => '暖',
-'煙' => '烟',
-'煢' => '茕',
-'煥' => '焕',
-'煩' => '烦',
-'煬' => '炀',
-'煱' => '㶽',
-'熅' => '煴',
-'熈' => '熙',
-'熉' => '𤈶',
-'熌' => '𤇄',
-'熒' => '荧',
-'熓' => '𤆡',
-'熗' => '炝',
-'熡' => '𤋏',
-'熱' => '热',
-'熲' => '颎',
-'熾' => '炽',
-'燁' => '烨',
-'燄' => '焰',
-'燈' => '灯',
-'燉' => '炖',
-'燒' => '烧',
-'燙' => '烫',
-'燜' => '焖',
-'營' => '营',
-'燦' => '灿',
-'燬' => '毁',
-'燭' => '烛',
-'燴' => '烩',
-'燶' => '㶶',
-'燻' => '熏',
-'燼' => '烬',
-'燾' => '焘',
-'爄' => '𤇃',
-'爍' => '烁',
-'爐' => '炉',
-'爗' => '烨',
-'爛' => '烂',
-'爭' => '争',
-'爲' => '为',
-'爺' => '爷',
-'爾' => '尔',
-'牀' => '床',
-'牆' => '墙',
-'牋' => '笺',
-'牎' => '窗',
-'牐' => '闸',
-'牓' => '榜',
-'牕' => '窗',
-'牘' => '牍',
-'牠' => '它',
-'牴' => '抵',
-'牽' => '牵',
-'犖' => '荦',
-'犢' => '犊',
-'犧' => '牺',
-'狀' => '状',
-'狥' => '徇',
-'狹' => '狭',
-'狽' => '狈',
-'猂' => '悍',
-'猙' => '狰',
-'猨' => '猿',
-'猶' => '犹',
-'猻' => '狲',
-'獁' => '犸',
-'獃' => '呆',
-'獄' => '狱',
-'獅' => '狮',
-'獎' => '奖',
-'獘' => '毙',
-'獧' => '狷',
-'獨' => '独',
-'獪' => '狯',
-'獫' => '猃',
-'獮' => '狝',
-'獰' => '狞',
-'獱' => '㺍',
-'獲' => '获',
-'獵' => '猎',
-'獷' => '犷',
-'獸' => '兽',
-'獺' => '獭',
-'獻' => '献',
-'獼' => '猕',
-'玀' => '猡',
-'玁' => '𤞤',
-'玅' => '妙',
-'現' => '现',
-'琖' => '盏',
-'琱' => '雕',
-'琺' => '珐',
-'琿' => '珲',
-'瑇' => '玳',
-'瑋' => '玮',
-'瑒' => '玚',
-'瑣' => '琐',
-'瑤' => '瑶',
-'瑩' => '莹',
-'瑪' => '玛',
-'瑯' => '琅',
-'瑲' => '玱',
-'瑽' => '𪻐',
-'璉' => '琏',
-'璡' => '琎',
-'璢' => '瑠',
-'璣' => '玑',
-'璦' => '瑷',
-'璫' => '珰',
-'璯' => '㻅',
-'環' => '环',
-'璵' => '玙',
-'璸' => '瑸',
-'璽' => '玺',
-'瓊' => '琼',
-'瓏' => '珑',
-'瓔' => '璎',
-'瓕' => '𤦀',
-'瓚' => '瓒',
-'甌' => '瓯',
-'甎' => '砖',
-'甕' => '瓮',
-'甖' => '罂',
-'甞' => '尝',
-'產' => '产',
-'産' => '产',
-'畂' => '亩',
-'畆' => '亩',
-'畝' => '亩',
-'畢' => '毕',
-'畧' => '略',
-'畫' => '画',
-'畮' => '亩',
-'異' => '异',
-'畱' => '留',
-'畵' => '画',
-'當' => '当',
-'疇' => '畴',
-'疊' => '叠',
-'疎' => '疏',
-'疘' => '肛',
-'疿' => '痱',
-'痐' => '蛔',
-'痙' => '痉',
-'痠' => '酸',
-'痲' => '痳',
-'痺' => '痹',
-'瘂' => '痖',
-'瘉' => '愈',
-'瘋' => '疯',
-'瘍' => '疡',
-'瘓' => '痪',
-'瘖' => '喑',
-'瘞' => '瘗',
-'瘡' => '疮',
-'瘧' => '疟',
-'瘮' => '瘆',
-'瘲' => '疭',
-'瘺' => '瘘',
-'瘻' => '瘘',
-'療' => '疗',
-'癄' => '憔',
-'癅' => '瘤',
-'癆' => '痨',
-'癇' => '痫',
-'癈' => '废',
-'癉' => '瘅',
-'癒' => '愈',
-'癘' => '疠',
-'癟' => '瘪',
-'癡' => '痴',
-'癢' => '痒',
-'癤' => '疖',
-'癥' => '症',
-'癧' => '疬',
-'癩' => '癞',
-'癬' => '癣',
-'癭' => '瘿',
-'癮' => '瘾',
-'癰' => '痈',
-'癱' => '瘫',
-'癲' => '癫',
-'發' => '发',
-'皁' => '皂',
-'皐' => '皋',
-'皚' => '皑',
-'皜' => '皓',
-'皟' => '𤾀',
-'皰' => '疱',
-'皷' => '鼓',
-'皸' => '皲',
-'皺' => '皱',
-'盃' => '杯',
-'盇' => '盍',
-'盌' => '碗',
-'盜' => '盗',
-'盞' => '盏',
-'盡' => '尽',
-'監' => '监',
-'盤' => '盘',
-'盧' => '卢',
-'盪' => '荡',
-'眎' => '视',
-'眞' => '真',
-'眡' => '视',
-'眥' => '眦',
-'眾' => '众',
-'睍' => '𪾢',
-'睏' => '困',
-'睜' => '睁',
-'睞' => '睐',
-'睠' => '眷',
-'睪' => '睾',
-'瞇' => '眯',
-'瞖' => '翳',
-'瞘' => '眍',
-'瞜' => '䁖',
-'瞞' => '瞒',
-'瞤' => '𥆧',
-'瞭' => '了',
-'瞶' => '瞆',
-'瞼' => '睑',
-'矁' => '瞅',
-'矇' => '蒙',
-'矓' => '眬',
-'矙' => '瞰',
-'矚' => '瞩',
-'矯' => '矫',
-'砲' => '炮',
-'硜' => '硁',
-'硤' => '硖',
-'硨' => '砗',
-'硯' => '砚',
-'碙' => '𥐻',
-'碩' => '硕',
-'碪' => '砧',
-'碭' => '砀',
-'碸' => '砜',
-'確' => '确',
-'碼' => '码',
-'碽' => '䂵',
-'磑' => '硙',
-'磚' => '砖',
-'磟' => '碌',
-'磠' => '硵',
-'磣' => '碜',
-'磧' => '碛',
-'磯' => '矶',
-'磽' => '硗',
-'礄' => '硚',
-'礆' => '碱',
-'礎' => '础',
-'礒' => '𥐟',
-'礙' => '碍',
-'礦' => '矿',
-'礪' => '砺',
-'礫' => '砾',
-'礬' => '矾',
-'礮' => '炮',
-'礱' => '砻',
-'祕' => '秘',
-'祘' => '算',
-'祿' => '禄',
-'禍' => '祸',
-'禎' => '祯',
-'禕' => '祎',
-'禡' => '祃',
-'禦' => '御',
-'禪' => '禅',
-'禮' => '礼',
-'禰' => '祢',
-'禱' => '祷',
-'禿' => '秃',
-'秈' => '籼',
-'秊' => '年',
-'秌' => '秋',
-'秖' => '只',
-'稅' => '税',
-'稈' => '秆',
-'稉' => '粳',
-'稏' => '䅉',
-'稜' => '棱',
-'稟' => '禀',
-'稬' => '糯',
-'稭' => '秸',
-'種' => '种',
-'稱' => '称',
-'稾' => '稿',
-'穀' => '谷',
-'穌' => '稣',
-'積' => '积',
-'穎' => '颖',
-'穠' => '秾',
-'穡' => '穑',
-'穢' => '秽',
-'穤' => '糯',
-'穨' => '颓',
-'穩' => '稳',
-'穫' => '获',
-'穭' => '稆',
-'穽' => '阱',
-'窓' => '窗',
-'窩' => '窝',
-'窪' => '洼',
-'窮' => '穷',
-'窯' => '窑',
-'窰' => '窑',
-'窵' => '窎',
-'窶' => '窭',
-'窺' => '窥',
-'窻' => '窗',
-'竄' => '窜',
-'竅' => '窍',
-'竇' => '窦',
-'竈' => '灶',
-'竊' => '窃',
-'竚' => '伫',
-'竝' => '并',
-'竢' => '俟',
-'竪' => '竖',
-'競' => '竞',
-'筆' => '笔',
-'筍' => '笋',
-'筞' => '策',
-'筧' => '笕',
-'筩' => '筒',
-'筯' => '箸',
-'筴' => '䇲',
-'箇' => '个',
-'箋' => '笺',
-'箏' => '筝',
-'箒' => '帚',
-'箠' => '棰',
-'節' => '节',
-'範' => '范',
-'築' => '筑',
-'篋' => '箧',
-'篔' => '筼',
-'篘' => '𥬠',
-'篛' => '箬',
-'篤' => '笃',
-'篩' => '筛',
-'篳' => '筚',
-'簀' => '箦',
-'簍' => '篓',
-'簑' => '蓑',
-'簒' => '篡',
-'簞' => '箪',
-'簡' => '简',
-'簣' => '篑',
-'簫' => '箫',
-'簮' => '簪',
-'簷' => '檐',
-'簹' => '筜',
-'簽' => '签',
-'簾' => '帘',
-'籃' => '篮',
-'籋' => '𥬞',
-'籌' => '筹',
-'籐' => '藤',
-'籔' => '䉤',
-'籙' => '箓',
-'籛' => '篯',
-'籜' => '箨',
-'籟' => '籁',
-'籠' => '笼',
-'籤' => '签',
-'籩' => '笾',
-'籪' => '簖',
-'籬' => '篱',
-'籮' => '箩',
-'籲' => '吁',
-'粃' => '秕',
-'粧' => '妆',
-'粵' => '粤',
-'糉' => '粽',
-'糝' => '糁',
-'糞' => '粪',
-'糧' => '粮',
-'糰' => '团',
-'糲' => '粝',
-'糴' => '籴',
-'糶' => '粜',
-'糹' => '纟',
-'糾' => '纠',
-'紀' => '纪',
-'紂' => '纣',
-'約' => '约',
-'紅' => '红',
-'紆' => '纡',
-'紇' => '纥',
-'紈' => '纨',
-'紉' => '纫',
-'紋' => '纹',
-'納' => '纳',
-'紐' => '纽',
-'紓' => '纾',
-'純' => '纯',
-'紕' => '纰',
-'紖' => '纼',
-'紗' => '纱',
-'紘' => '纮',
-'紙' => '纸',
-'級' => '级',
-'紛' => '纷',
-'紜' => '纭',
-'紝' => '纴',
-'紡' => '纺',
-'紥' => '扎',
-'紬' => '䌷',
-'紮' => '扎',
-'細' => '细',
-'紱' => '绂',
-'紲' => '绁',
-'紳' => '绅',
-'紵' => '纻',
-'紹' => '绍',
-'紺' => '绀',
-'紼' => '绋',
-'紿' => '绐',
-'絀' => '绌',
-'終' => '终',
-'絃' => '弦',
-'組' => '组',
-'絅' => '䌹',
-'絆' => '绊',
-'絎' => '绗',
-'絏' => '绁',
-'結' => '结',
-'絕' => '绝',
-'絛' => '绦',
-'絝' => '绔',
-'絞' => '绞',
-'絡' => '络',
-'絢' => '绚',
-'給' => '给',
-'絨' => '绒',
-'絰' => '绖',
-'統' => '统',
-'絲' => '丝',
-'絳' => '绛',
-'絶' => '绝',
-'絹' => '绢',
-'絺' => '𫄨',
-'綀' => '𦈌',
-'綁' => '绑',
-'綃' => '绡',
-'綆' => '绠',
-'綇' => '𦈋',
-'綈' => '绨',
-'綉' => '绣',
-'綌' => '绤',
-'綏' => '绥',
-'綐' => '䌼',
-'綑' => '捆',
-'經' => '经',
-'綜' => '综',
-'綞' => '缍',
-'綠' => '绿',
-'綢' => '绸',
-'綣' => '绻',
-'綫' => '线',
-'綬' => '绶',
-'維' => '维',
-'綯' => '绹',
-'綰' => '绾',
-'綱' => '纲',
-'網' => '网',
-'綴' => '缀',
-'綵' => '彩',
-'綸' => '纶',
-'綹' => '绺',
-'綺' => '绮',
-'綻' => '绽',
-'綽' => '绰',
-'綾' => '绫',
-'綿' => '绵',
-'緄' => '绲',
-'緇' => '缁',
-'緊' => '紧',
-'緋' => '绯',
-'緍' => '𦈏',
-'緐' => '繁',
-'緑' => '绿',
-'緒' => '绪',
-'緓' => '绬',
-'緔' => '绱',
-'緗' => '缃',
-'緘' => '缄',
-'緙' => '缂',
-'線' => '线',
-'緜' => '绵',
-'緝' => '缉',
-'緞' => '缎',
-'締' => '缔',
-'緡' => '缗',
-'緣' => '缘',
-'緥' => '褓',
-'緦' => '缌',
-'編' => '编',
-'緩' => '缓',
-'緬' => '缅',
-'緯' => '纬',
-'緰' => '𦈕',
-'緱' => '缑',
-'緲' => '缈',
-'練' => '练',
-'緶' => '缏',
-'緷' => '𦈉',
-'緸' => '𦈑',
-'緹' => '缇',
-'緻' => '致',
-'緼' => '缊',
-'縈' => '萦',
-'縉' => '缙',
-'縊' => '缢',
-'縋' => '缒',
-'縎' => '𦈔',
-'縐' => '绉',
-'縑' => '缣',
-'縕' => '缊',
-'縗' => '缞',
-'縛' => '缚',
-'縝' => '缜',
-'縞' => '缟',
-'縟' => '缛',
-'縣' => '县',
-'縧' => '绦',
-'縫' => '缝',
-'縬' => '𦈚',
-'縭' => '缡',
-'縮' => '缩',
-'縱' => '纵',
-'縲' => '缧',
-'縳' => '䌸',
-'縴' => '纤',
-'縵' => '缦',
-'縶' => '絷',
-'縷' => '缕',
-'縹' => '缥',
-'縺' => '𦈐',
-'總' => '总',
-'績' => '绩',
-'繃' => '绷',
-'繅' => '缫',
-'繆' => '缪',
-'繏' => '𦈝',
-'繐' => '穗',
-'繒' => '缯',
-'繓' => '𦈛',
-'織' => '织',
-'繕' => '缮',
-'繖' => '伞',
-'繙' => '翻',
-'繚' => '缭',
-'繞' => '绕',
-'繟' => '𦈎',
-'繡' => '绣',
-'繢' => '缋',
-'繦' => '襁',
-'繩' => '绳',
-'繪' => '绘',
-'繫' => '系',
-'繭' => '茧',
-'繮' => '缰',
-'繯' => '缳',
-'繰' => '缲',
-'繳' => '缴',
-'繸' => '䍁',
-'繹' => '绎',
-'繻' => '𦈡',
-'繼' => '继',
-'繽' => '缤',
-'繾' => '缱',
-'繿' => '䍀',
-'纁' => '𫄸',
-'纇' => '颣',
-'纈' => '缬',
-'纊' => '纩',
-'續' => '续',
-'纍' => '累',
-'纏' => '缠',
-'纓' => '缨',
-'纔' => '才',
-'纖' => '纤',
-'纘' => '缵',
-'纜' => '缆',
-'缽' => '钵',
-'罇' => '樽',
-'罈' => '坛',
-'罋' => '瓮',
-'罌' => '罂',
-'罎' => '坛',
-'罰' => '罚',
-'罵' => '骂',
-'罷' => '罢',
-'罸' => '罚',
-'羅' => '罗',
-'羆' => '罴',
-'羈' => '羁',
-'羋' => '芈',
-'羗' => '羌',
-'羢' => '绒',
-'羣' => '群',
-'羥' => '羟',
-'羨' => '羡',
-'義' => '义',
-'羶' => '膻',
-'翄' => '翅',
-'習' => '习',
-'翫' => '玩',
-'翬' => '翚',
-'翶' => '翱',
-'翹' => '翘',
-'翽' => '翙',
-'耡' => '锄',
-'耬' => '耧',
-'耮' => '耢',
-'聖' => '圣',
-'聞' => '闻',
-'聯' => '联',
-'聰' => '聪',
-'聲' => '声',
-'聳' => '耸',
-'聵' => '聩',
-'聶' => '聂',
-'職' => '职',
-'聹' => '聍',
-'聽' => '听',
-'聾' => '聋',
-'肅' => '肃',
-'肎' => '肯',
-'肐' => '胳',
-'肧' => '胚',
-'胷' => '胸',
-'脃' => '脆',
-'脅' => '胁',
-'脇' => '胁',
-'脈' => '脉',
-'脗' => '吻',
-'脛' => '胫',
-'脣' => '唇',
-'脥' => '𣍰',
-'脫' => '脱',
-'脹' => '胀',
-'腁' => '胼',
-'腎' => '肾',
-'腖' => '胨',
-'腡' => '脶',
-'腦' => '脑',
-'腪' => '𣍯',
-'腫' => '肿',
-'腳' => '脚',
-'腸' => '肠',
-'膃' => '腽',
-'膓' => '肠',
-'膕' => '腘',
-'膚' => '肤',
-'膞' => '䏝',
-'膠' => '胶',
-'膢' => '𦝼',
-'膩' => '腻',
-'膽' => '胆',
-'膾' => '脍',
-'膿' => '脓',
-'臈' => '腊',
-'臉' => '脸',
-'臋' => '臀',
-'臍' => '脐',
-'臏' => '膑',
-'臕' => '膘',
-'臗' => '𣎑',
-'臘' => '腊',
-'臙' => '胭',
-'臚' => '胪',
-'臝' => '裸',
-'臟' => '脏',
-'臠' => '脔',
-'臢' => '臜',
-'臥' => '卧',
-'臨' => '临',
-'臯' => '皋',
-'臺' => '台',
-'與' => '与',
-'興' => '兴',
-'舉' => '举',
-'舊' => '旧',
-'舖' => '铺',
-'舘' => '馆',
-'舩' => '船',
-'艙' => '舱',
-'艢' => '樯',
-'艣' => '橹',
-'艤' => '舣',
-'艦' => '舰',
-'艪' => '橹',
-'艫' => '舻',
-'艱' => '艰',
-'艷' => '艳',
-'芲' => '花',
-'芻' => '刍',
-'苧' => '苎',
-'茘' => '荔',
-'茲' => '兹',
-'荊' => '荆',
-'荳' => '豆',
-'莊' => '庄',
-'莖' => '茎',
-'莢' => '荚',
-'莧' => '苋',
-'華' => '华',
-'菸' => '烟',
-'萇' => '苌',
-'萊' => '莱',
-'萬' => '万',
-'萲' => '萱',
-'萴' => '荝',
-'萵' => '莴',
-'葉' => '叶',
-'葒' => '荭',
-'葠' => '参',
-'葤' => '荮',
-'葦' => '苇',
-'葯' => '药',
-'葷' => '荤',
-'蒓' => '莼',
-'蒔' => '莳',
-'蒞' => '莅',
-'蒼' => '苍',
-'蓀' => '荪',
-'蓆' => '席',
-'蓋' => '盖',
-'蓡' => '参',
-'蓮' => '莲',
-'蓯' => '苁',
-'蓴' => '莼',
-'蓽' => '荜',
-'蔔' => '卜',
-'蔕' => '蒂',
-'蔘' => '参',
-'蔞' => '蒌',
-'蔣' => '蒋',
-'蔥' => '葱',
-'蔦' => '茑',
-'蔭' => '荫',
-'蕁' => '荨',
-'蕆' => '蒇',
-'蕎' => '荞',
-'蕒' => '荬',
-'蕓' => '芸',
-'蕕' => '莸',
-'蕘' => '荛',
-'蕚' => '萼',
-'蕢' => '蒉',
-'蕩' => '荡',
-'蕪' => '芜',
-'蕭' => '萧',
-'蕷' => '蓣',
-'蕿' => '萱',
-'薀' => '蕰',
-'薈' => '荟',
-'薊' => '蓟',
-'薌' => '芗',
-'薑' => '姜',
-'薔' => '蔷',
-'薘' => '荙',
-'薟' => '莶',
-'薦' => '荐',
-'薩' => '萨',
-'薴' => '苧',
-'薺' => '荠',
-'藍' => '蓝',
-'藎' => '荩',
-'藝' => '艺',
-'藥' => '药',
-'藪' => '薮',
-'藭' => '䓖',
-'藴' => '蕴',
-'藶' => '苈',
-'藷' => '薯',
-'藹' => '蔼',
-'藺' => '蔺',
-'藼' => '萱',
-'蘀' => '萚',
-'蘄' => '蕲',
-'蘆' => '芦',
-'蘇' => '苏',
-'蘊' => '蕴',
-'蘐' => '萱',
-'蘓' => '苏',
-'蘚' => '藓',
-'蘞' => '蔹',
-'蘢' => '茏',
-'蘤' => '花',
-'蘭' => '兰',
-'蘺' => '蓠',
-'蘿' => '萝',
-'虆' => '蔂',
-'處' => '处',
-'虛' => '虚',
-'虜' => '虏',
-'號' => '号',
-'虧' => '亏',
-'虯' => '虬',
-'蚘' => '蛔',
-'蛕' => '蛔',
-'蛺' => '蛱',
-'蛻' => '蜕',
-'蜆' => '蚬',
-'蜋' => '螂',
-'蜖' => '蛔',
-'蜨' => '蝶',
-'蝕' => '蚀',
-'蝟' => '猬',
-'蝦' => '虾',
-'蝨' => '虱',
-'蝯' => '猿',
-'蝱' => '虻',
-'蝸' => '蜗',
-'螄' => '蛳',
-'螎' => '融',
-'螞' => '蚂',
-'螡' => '蚊',
-'螢' => '萤',
-'螮' => '䗖',
-'螻' => '蝼',
-'螿' => '螀',
-'蟁' => '蚊',
-'蟄' => '蛰',
-'蟇' => '蟆',
-'蟈' => '蝈',
-'蟎' => '螨',
-'蟣' => '虮',
-'蟬' => '蝉',
-'蟯' => '蛲',
-'蟲' => '虫',
-'蟶' => '蛏',
-'蟻' => '蚁',
-'蠁' => '蚃',
-'蠅' => '蝇',
-'蠆' => '虿',
-'蠍' => '蝎',
-'蠏' => '蟹',
-'蠐' => '蛴',
-'蠑' => '蝾',
-'蠒' => '茧',
-'蠔' => '蚝',
-'蠟' => '蜡',
-'蠣' => '蛎',
-'蠨' => '蟏',
-'蠭' => '蜂',
-'蠱' => '蛊',
-'蠶' => '蚕',
-'蠻' => '蛮',
-'衂' => '衄',
-'衆' => '众',
-'衇' => '脉',
-'衊' => '蔑',
-'術' => '术',
-'衕' => '同',
-'衚' => '胡',
-'衛' => '卫',
-'衝' => '冲',
-'衞' => '卫',
-'衺' => '邪',
-'袞' => '衮',
-'袟' => '帙',
-'袵' => '衽',
-'裊' => '袅',
-'裌' => '袷',
-'裏' => '里',
-'補' => '补',
-'裝' => '装',
-'裠' => '裙',
-'裡' => '里',
-'製' => '制',
-'複' => '复',
-'褌' => '裈',
-'褘' => '袆',
-'褭' => '袅',
-'褲' => '裤',
-'褳' => '裢',
-'褸' => '褛',
-'褻' => '亵',
-'襀' => '𫌀',
-'襃' => '褒',
-'襉' => '裥',
-'襍' => '杂',
-'襏' => '袯',
-'襖' => '袄',
-'襝' => '裣',
-'襠' => '裆',
-'襤' => '褴',
-'襪' => '袜',
-'襬' => '䙓',
-'襯' => '衬',
-'襲' => '袭',
-'襴' => '襕',
-'覇' => '霸',
-'覈' => '核',
-'覊' => '羁',
-'見' => '见',
-'覎' => '觃',
-'規' => '规',
-'覓' => '觅',
-'覔' => '觅',
-'視' => '视',
-'覘' => '觇',
-'覡' => '觋',
-'覥' => '觍',
-'覦' => '觎',
-'覩' => '睹',
-'親' => '亲',
-'覬' => '觊',
-'覯' => '觏',
-'覲' => '觐',
-'覷' => '觑',
-'覺' => '觉',
-'覼' => '𫌨',
-'覽' => '览',
-'覿' => '觌',
-'觀' => '观',
-'觝' => '抵',
-'觴' => '觞',
-'觶' => '觯',
-'觸' => '触',
-'訁' => '讠',
-'訂' => '订',
-'訃' => '讣',
-'計' => '计',
-'訊' => '讯',
-'訌' => '讧',
-'討' => '讨',
-'訐' => '讦',
-'訑' => '𫍙',
-'訒' => '讱',
-'訓' => '训',
-'訕' => '讪',
-'訖' => '讫',
-'託' => '托',
-'記' => '记',
-'訛' => '讹',
-'訝' => '讶',
-'訟' => '讼',
-'訢' => '䜣',
-'訣' => '诀',
-'訥' => '讷',
-'訩' => '讻',
-'訪' => '访',
-'設' => '设',
-'許' => '许',
-'訴' => '诉',
-'訶' => '诃',
-'診' => '诊',
-'註' => '注',
-'証' => '证',
-'詀' => '𧮪',
-'詁' => '诂',
-'詆' => '诋',
-'詎' => '讵',
-'詐' => '诈',
-'詒' => '诒',
-'詔' => '诏',
-'評' => '评',
-'詖' => '诐',
-'詗' => '诇',
-'詘' => '诎',
-'詛' => '诅',
-'詞' => '词',
-'詠' => '咏',
-'詡' => '诩',
-'詢' => '询',
-'詣' => '诣',
-'試' => '试',
-'詩' => '诗',
-'詫' => '诧',
-'詬' => '诟',
-'詭' => '诡',
-'詮' => '诠',
-'詰' => '诘',
-'話' => '话',
-'該' => '该',
-'詳' => '详',
-'詵' => '诜',
-'詶' => '酬',
-'詼' => '诙',
-'詿' => '诖',
-'誄' => '诔',
-'誅' => '诛',
-'誆' => '诓',
-'誇' => '夸',
-'誌' => '志',
-'認' => '认',
-'誑' => '诳',
-'誒' => '诶',
-'誕' => '诞',
-'誖' => '悖',
-'誘' => '诱',
-'誚' => '诮',
-'語' => '语',
-'誠' => '诚',
-'誡' => '诫',
-'誣' => '诬',
-'誤' => '误',
-'誥' => '诰',
-'誦' => '诵',
-'誨' => '诲',
-'說' => '说',
-'説' => '说',
-'誰' => '谁',
-'課' => '课',
-'誶' => '谇',
-'誹' => '诽',
-'誼' => '谊',
-'誾' => '訚',
-'調' => '调',
-'諂' => '谄',
-'諄' => '谆',
-'談' => '谈',
-'諉' => '诿',
-'請' => '请',
-'諍' => '诤',
-'諏' => '诹',
-'諑' => '诼',
-'諒' => '谅',
-'論' => '论',
-'諗' => '谂',
-'諛' => '谀',
-'諜' => '谍',
-'諝' => '谞',
-'諞' => '谝',
-'諡' => '谥',
-'諢' => '诨',
-'諤' => '谔',
-'諦' => '谛',
-'諧' => '谐',
-'諫' => '谏',
-'諭' => '谕',
-'諮' => '谘',
-'諰' => '𫍰',
-'諱' => '讳',
-'諳' => '谙',
-'諶' => '谌',
-'諷' => '讽',
-'諸' => '诸',
-'諺' => '谚',
-'諼' => '谖',
-'諾' => '诺',
-'謀' => '谋',
-'謁' => '谒',
-'謂' => '谓',
-'謄' => '誊',
-'謅' => '诌',
-'謊' => '谎',
-'謌' => '歌',
-'謎' => '谜',
-'謏' => '𫍲',
-'謐' => '谧',
-'謔' => '谑',
-'謖' => '谡',
-'謗' => '谤',
-'謙' => '谦',
-'謚' => '谥',
-'講' => '讲',
-'謝' => '谢',
-'謠' => '谣',
-'謡' => '谣',
-'謨' => '谟',
-'謫' => '谪',
-'謬' => '谬',
-'謭' => '谫',
-'謳' => '讴',
-'謹' => '谨',
-'謾' => '谩',
-'譁' => '哗',
-'譆' => '嘻',
-'證' => '证',
-'譊' => '𫍢',
-'譌' => '讹',
-'譎' => '谲',
-'譏' => '讥',
-'譔' => '撰',
-'譖' => '谮',
-'識' => '识',
-'譙' => '谯',
-'譚' => '谭',
-'譜' => '谱',
-'譟' => '噪',
-'譫' => '谵',
-'譭' => '毁',
-'譯' => '译',
-'議' => '议',
-'譴' => '谴',
-'護' => '护',
-'譸' => '诪',
-'譽' => '誉',
-'譾' => '谫',
-'讀' => '读',
-'讁' => '谪',
-'變' => '变',
-'讋' => '詟',
-'讌' => '䜩',
-'讎' => '仇',
-'讐' => '雠',
-'讒' => '谗',
-'讓' => '让',
-'讕' => '谰',
-'讖' => '谶',
-'讚' => '赞',
-'讜' => '谠',
-'讞' => '谳',
-'豈' => '岂',
-'豎' => '竖',
-'豐' => '丰',
-'豓' => '艳',
-'豔' => '艳',
-'豬' => '猪',
-'豶' => '豮',
-'貍' => '狸',
-'貓' => '猫',
-'貙' => '䝙',
-'貛' => '獾',
-'貝' => '贝',
-'貞' => '贞',
-'貟' => '贠',
-'負' => '负',
-'財' => '财',
-'貢' => '贡',
-'貧' => '贫',
-'貨' => '货',
-'販' => '贩',
-'貪' => '贪',
-'貫' => '贯',
-'責' => '责',
-'貯' => '贮',
-'貰' => '贳',
-'貲' => '赀',
-'貳' => '贰',
-'貴' => '贵',
-'貶' => '贬',
-'買' => '买',
-'貸' => '贷',
-'貺' => '贶',
-'費' => '费',
-'貼' => '贴',
-'貽' => '贻',
-'貿' => '贸',
-'賀' => '贺',
-'賁' => '贲',
-'賂' => '赂',
-'賃' => '赁',
-'賄' => '贿',
-'賅' => '赅',
-'資' => '资',
-'賈' => '贾',
-'賉' => '恤',
-'賊' => '贼',
-'賑' => '赈',
-'賒' => '赊',
-'賓' => '宾',
-'賕' => '赇',
-'賙' => '赒',
-'賚' => '赉',
-'賛' => '赞',
-'賜' => '赐',
-'賞' => '赏',
-'賟' => '𧹖',
-'賠' => '赔',
-'賡' => '赓',
-'賢' => '贤',
-'賣' => '卖',
-'賤' => '贱',
-'賦' => '赋',
-'賧' => '赕',
-'質' => '质',
-'賫' => '赍',
-'賬' => '账',
-'賭' => '赌',
-'賰' => '䞐',
-'賴' => '赖',
-'賵' => '赗',
-'賷' => '赍',
-'賺' => '赚',
-'賻' => '赙',
-'購' => '购',
-'賽' => '赛',
-'賾' => '赜',
-'贃' => '𧹗',
-'贄' => '贽',
-'贅' => '赘',
-'贇' => '赟',
-'贈' => '赠',
-'贊' => '赞',
-'贋' => '赝',
-'贍' => '赡',
-'贏' => '赢',
-'贐' => '赆',
-'贑' => '赣',
-'贓' => '赃',
-'贔' => '赑',
-'贖' => '赎',
-'贗' => '赝',
-'贛' => '赣',
-'贜' => '赃',
-'赬' => '赪',
-'趂' => '趁',
-'趕' => '赶',
-'趙' => '赵',
-'趨' => '趋',
-'趲' => '趱',
-'跡' => '迹',
-'跥' => '跺',
-'跴' => '踩',
-'踁' => '胫',
-'踐' => '践',
-'踫' => '碰',
-'踰' => '逾',
-'踴' => '踊',
-'蹌' => '跄',
-'蹏' => '蹄',
-'蹔' => '暂',
-'蹕' => '跸',
-'蹟' => '迹',
-'蹠' => '跖',
-'蹣' => '蹒',
-'蹤' => '踪',
-'蹧' => '糟',
-'蹵' => '蹴',
-'蹺' => '跷',
-'蹻' => '𫏋',
-'躂' => '跶',
-'躉' => '趸',
-'躊' => '踌',
-'躋' => '跻',
-'躍' => '跃',
-'躎' => '䟢',
-'躑' => '踯',
-'躒' => '跞',
-'躓' => '踬',
-'躕' => '蹰',
-'躚' => '跹',
-'躝' => '𨅬',
-'躡' => '蹑',
-'躥' => '蹿',
-'躦' => '躜',
-'躪' => '躏',
-'躭' => '耽',
-'躳' => '躬',
-'躶' => '裸',
-'軀' => '躯',
-'軉' => '𨉗',
-'車' => '车',
-'軋' => '轧',
-'軌' => '轨',
-'軍' => '军',
-'軏' => '𫐄',
-'軑' => '轪',
-'軒' => '轩',
-'軔' => '轫',
-'軗' => '𨐅',
-'軛' => '轭',
-'軟' => '软',
-'軤' => '轷',
-'軨' => '𫐉',
-'軫' => '轸',
-'軲' => '轱',
-'軸' => '轴',
-'軹' => '轵',
-'軺' => '轺',
-'軻' => '轲',
-'軼' => '轶',
-'軾' => '轼',
-'較' => '较',
-'輄' => '𨐈',
-'輅' => '辂',
-'輇' => '辁',
-'輈' => '辀',
-'載' => '载',
-'輊' => '轾',
-'輒' => '辄',
-'輓' => '挽',
-'輔' => '辅',
-'輕' => '轻',
-'輗' => '𫐐',
-'輙' => '辄',
-'輛' => '辆',
-'輜' => '辎',
-'輝' => '辉',
-'輞' => '辋',
-'輟' => '辍',
-'輥' => '辊',
-'輦' => '辇',
-'輩' => '辈',
-'輪' => '轮',
-'輬' => '辌',
-'輭' => '软',
-'輮' => '𫐓',
-'輯' => '辑',
-'輳' => '辏',
-'輸' => '输',
-'輻' => '辐',
-'輼' => '辒',
-'輾' => '辗',
-'輿' => '舆',
-'轀' => '辒',
-'轂' => '毂',
-'轄' => '辖',
-'轅' => '辕',
-'轆' => '辘',
-'轉' => '转',
-'轍' => '辙',
-'轎' => '轿',
-'轔' => '辚',
-'轟' => '轰',
-'轡' => '辔',
-'轢' => '轹',
-'轣' => '𫐆',
-'轤' => '轳',
-'辠' => '罪',
-'辢' => '辣',
-'辤' => '辞',
-'辦' => '办',
-'辭' => '辞',
-'辮' => '辫',
-'辯' => '辩',
-'農' => '农',
-'辳' => '农',
-'迴' => '回',
-'迻' => '移',
-'逈' => '迥',
-'逕' => '迳',
-'這' => '这',
-'連' => '连',
-'逥' => '回',
-'逩' => '奔',
-'逬' => '迸',
-'週' => '周',
-'進' => '进',
-'遉' => '侦',
-'遊' => '游',
-'運' => '运',
-'過' => '过',
-'達' => '达',
-'違' => '违',
-'遙' => '遥',
-'遜' => '逊',
-'遞' => '递',
-'遠' => '远',
-'遡' => '溯',
-'適' => '适',
-'遯' => '遁',
-'遲' => '迟',
-'遷' => '迁',
-'選' => '选',
-'遺' => '遗',
-'遼' => '辽',
-'邁' => '迈',
-'還' => '还',
-'邇' => '迩',
-'邊' => '边',
-'邏' => '逻',
-'邐' => '逦',
-'郟' => '郏',
-'郵' => '邮',
-'鄆' => '郓',
-'鄉' => '乡',
-'鄒' => '邹',
-'鄔' => '邬',
-'鄖' => '郧',
-'鄧' => '邓',
-'鄭' => '郑',
-'鄰' => '邻',
-'鄲' => '郸',
-'鄴' => '邺',
-'鄶' => '郐',
-'鄺' => '邝',
-'酇' => '酂',
-'酈' => '郦',
-'酖' => '鸩',
-'酧' => '酬',
-'醃' => '腌',
-'醆' => '盏',
-'醕' => '醇',
-'醜' => '丑',
-'醞' => '酝',
-'醣' => '糖',
-'醫' => '医',
-'醬' => '酱',
-'醯' => '酰',
-'醱' => '酦',
-'醻' => '酬',
-'醼' => '宴',
-'釀' => '酿',
-'釁' => '衅',
-'釃' => '酾',
-'釅' => '酽',
-'釋' => '释',
-'釒' => '钅',
-'釓' => '钆',
-'釔' => '钇',
-'釕' => '钌',
-'釗' => '钊',
-'釘' => '钉',
-'釙' => '钋',
-'針' => '针',
-'釣' => '钓',
-'釤' => '钐',
-'釦' => '扣',
-'釧' => '钏',
-'釩' => '钒',
-'釬' => '焊',
-'釳' => '𨰿',
-'釵' => '钗',
-'釷' => '钍',
-'釹' => '钕',
-'釺' => '钎',
-'釾' => '䥺',
-'鈀' => '钯',
-'鈁' => '钫',
-'鈃' => '钘',
-'鈄' => '钭',
-'鈅' => '钥',
-'鈇' => '𫓧',
-'鈈' => '钚',
-'鈉' => '钠',
-'鈋' => '𨱂',
-'鈍' => '钝',
-'鈎' => '钩',
-'鈐' => '钤',
-'鈑' => '钣',
-'鈒' => '钑',
-'鈔' => '钞',
-'鈕' => '钮',
-'鈞' => '钧',
-'鈠' => '𨱁',
-'鈣' => '钙',
-'鈥' => '钬',
-'鈦' => '钛',
-'鈧' => '钪',
-'鈮' => '铌',
-'鈯' => '𨱄',
-'鈰' => '铈',
-'鈲' => '𨱃',
-'鈳' => '钶',
-'鈴' => '铃',
-'鈷' => '钴',
-'鈸' => '钹',
-'鈹' => '铍',
-'鈺' => '钰',
-'鈽' => '钸',
-'鈾' => '铀',
-'鈿' => '钿',
-'鉀' => '钾',
-'鉁' => '𨱅',
-'鉄' => '铁',
-'鉅' => '钜',
-'鉆' => '钻',
-'鉈' => '铊',
-'鉉' => '铉',
-'鉋' => '铇',
-'鉍' => '铋',
-'鉑' => '铂',
-'鉕' => '钷',
-'鉗' => '钳',
-'鉚' => '铆',
-'鉛' => '铅',
-'鉞' => '钺',
-'鉢' => '钵',
-'鉤' => '钩',
-'鉦' => '钲',
-'鉬' => '钼',
-'鉭' => '钽',
-'鉶' => '铏',
-'鉸' => '铰',
-'鉺' => '铒',
-'鉻' => '铬',
-'鉿' => '铪',
-'銀' => '银',
-'銃' => '铳',
-'銅' => '铜',
-'銍' => '铚',
-'銑' => '铣',
-'銓' => '铨',
-'銖' => '铢',
-'銘' => '铭',
-'銚' => '铫',
-'銛' => '铦',
-'銜' => '衔',
-'銠' => '铑',
-'銣' => '铷',
-'銥' => '铱',
-'銦' => '铟',
-'銨' => '铵',
-'銩' => '铥',
-'銪' => '铕',
-'銫' => '铯',
-'銬' => '铐',
-'銱' => '铞',
-'銲' => '焊',
-'銳' => '锐',
-'銶' => '𨱇',
-'銷' => '销',
-'銻' => '锑',
-'銼' => '锉',
-'鋁' => '铝',
-'鋃' => '锒',
-'鋅' => '锌',
-'鋇' => '钡',
-'鋉' => '𨱈',
-'鋌' => '铤',
-'鋏' => '铗',
-'鋒' => '锋',
-'鋙' => '铻',
-'鋝' => '锊',
-'鋟' => '锓',
-'鋣' => '铘',
-'鋤' => '锄',
-'鋥' => '锃',
-'鋦' => '锔',
-'鋨' => '锇',
-'鋩' => '铓',
-'鋪' => '铺',
-'鋭' => '锐',
-'鋮' => '铖',
-'鋯' => '锆',
-'鋰' => '锂',
-'鋱' => '铽',
-'鋶' => '锍',
-'鋸' => '锯',
-'鋼' => '钢',
-'錁' => '锞',
-'錂' => '𨱋',
-'錄' => '录',
-'錆' => '锖',
-'錇' => '锫',
-'錈' => '锩',
-'錏' => '铔',
-'錐' => '锥',
-'錒' => '锕',
-'錕' => '锟',
-'錘' => '锤',
-'錙' => '锱',
-'錚' => '铮',
-'錛' => '锛',
-'錟' => '锬',
-'錠' => '锭',
-'錡' => '锜',
-'錢' => '钱',
-'錦' => '锦',
-'錨' => '锚',
-'錩' => '锠',
-'錫' => '锡',
-'錮' => '锢',
-'錯' => '错',
-'録' => '录',
-'錳' => '锰',
-'錶' => '表',
-'錸' => '铼',
-'鍀' => '锝',
-'鍁' => '锨',
-'鍃' => '锪',
-'鍄' => '𨱉',
-'鍆' => '钔',
-'鍇' => '锴',
-'鍈' => '锳',
-'鍊' => '炼',
-'鍋' => '锅',
-'鍍' => '镀',
-'鍔' => '锷',
-'鍘' => '铡',
-'鍚' => '钖',
-'鍛' => '锻',
-'鍠' => '锽',
-'鍤' => '锸',
-'鍥' => '锲',
-'鍩' => '锘',
-'鍫' => '锹',
-'鍬' => '锹',
-'鍮' => '𨱎',
-'鍰' => '锾',
-'鍳' => '鉴',
-'鍵' => '键',
-'鍶' => '锶',
-'鍺' => '锗',
-'鍾' => '锺',
-'鎂' => '镁',
-'鎄' => '锿',
-'鎇' => '镅',
-'鎊' => '镑',
-'鎌' => '镰',
-'鎔' => '镕',
-'鎖' => '锁',
-'鎗' => '枪',
-'鎘' => '镉',
-'鎚' => '锤',
-'鎛' => '镈',
-'鎝' => '𨱏',
-'鎡' => '镃',
-'鎢' => '钨',
-'鎣' => '蓥',
-'鎦' => '镏',
-'鎧' => '铠',
-'鎩' => '铩',
-'鎪' => '锼',
-'鎬' => '镐',
-'鎭' => '镇',
-'鎮' => '镇',
-'鎯' => '𨱍',
-'鎰' => '镒',
-'鎲' => '镋',
-'鎳' => '镍',
-'鎵' => '镓',
-'鎷' => '𨰾',
-'鎸' => '镌',
-'鎻' => '锁',
-'鎿' => '镎',
-'鏃' => '镞',
-'鏆' => '𨱌',
-'鏇' => '镟',
-'鏈' => '链',
-'鏉' => '𨱒',
-'鏌' => '镆',
-'鏍' => '镙',
-'鏐' => '镠',
-'鏑' => '镝',
-'鏗' => '铿',
-'鏘' => '锵',
-'鏚' => '戚',
-'鏜' => '镗',
-'鏝' => '镘',
-'鏞' => '镛',
-'鏟' => '铲',
-'鏡' => '镜',
-'鏢' => '镖',
-'鏤' => '镂',
-'鏦' => '𫓩',
-'鏨' => '錾',
-'鏰' => '镚',
-'鏵' => '铧',
-'鏷' => '镤',
-'鏹' => '镪',
-'鏺' => '䥽',
-'鏽' => '锈',
-'鐃' => '铙',
-'鐄' => '𨱑',
-'鐋' => '铴',
-'鐍' => '𫔎',
-'鐎' => '𨱓',
-'鐏' => '𨱔',
-'鐐' => '镣',
-'鐒' => '铹',
-'鐓' => '镦',
-'鐔' => '镡',
-'鐘' => '钟',
-'鐙' => '镫',
-'鐝' => '镢',
-'鐠' => '镨',
-'鐥' => '䦅',
-'鐦' => '锎',
-'鐧' => '锏',
-'鐨' => '镄',
-'鐫' => '镌',
-'鐮' => '镰',
-'鐯' => '䦃',
-'鐲' => '镯',
-'鐳' => '镭',
-'鐵' => '铁',
-'鐶' => '镮',
-'鐸' => '铎',
-'鐺' => '铛',
-'鐿' => '镱',
-'鑄' => '铸',
-'鑊' => '镬',
-'鑌' => '镔',
-'鑑' => '鉴',
-'鑒' => '鉴',
-'鑔' => '镲',
-'鑕' => '锧',
-'鑚' => '钻',
-'鑛' => '矿',
-'鑞' => '镴',
-'鑠' => '铄',
-'鑣' => '镳',
-'鑤' => '刨',
-'鑥' => '镥',
-'鑭' => '镧',
-'鑰' => '钥',
-'鑱' => '镵',
-'鑲' => '镶',
-'鑵' => '罐',
-'鑷' => '镊',
-'鑹' => '镩',
-'鑼' => '锣',
-'鑽' => '钻',
-'鑾' => '銮',
-'鑿' => '凿',
-'钁' => '镢',
-'钂' => '镋',
-'長' => '长',
-'門' => '门',
-'閂' => '闩',
-'閃' => '闪',
-'閆' => '闫',
-'閈' => '闬',
-'閉' => '闭',
-'開' => '开',
-'閌' => '闶',
-'閍' => '𨸂',
-'閎' => '闳',
-'閏' => '闰',
-'閐' => '𨸃',
-'閑' => '闲',
-'閒' => '闲',
-'間' => '间',
-'閔' => '闵',
-'閘' => '闸',
-'閙' => '闹',
-'閡' => '阂',
-'閣' => '阁',
-'閤' => '阁',
-'閥' => '阀',
-'閧' => '哄',
-'閨' => '闺',
-'閩' => '闽',
-'閫' => '阃',
-'閬' => '阆',
-'閭' => '闾',
-'閱' => '阅',
-'閲' => '阅',
-'閶' => '阊',
-'閹' => '阉',
-'閻' => '阎',
-'閼' => '阏',
-'閽' => '阍',
-'閾' => '阈',
-'閿' => '阌',
-'闃' => '阒',
-'闆' => '板',
-'闇' => '暗',
-'闈' => '闱',
-'闊' => '阔',
-'闋' => '阕',
-'闌' => '阑',
-'闍' => '阇',
-'闐' => '阗',
-'闒' => '阘',
-'闓' => '闿',
-'闔' => '阖',
-'闕' => '阙',
-'闖' => '闯',
-'闚' => '窥',
-'關' => '关',
-'闞' => '阚',
-'闠' => '阓',
-'闡' => '阐',
-'闢' => '辟',
-'闤' => '阛',
-'闥' => '闼',
-'阨' => '厄',
-'阬' => '坑',
-'陗' => '峭',
-'陘' => '陉',
-'陜' => '陕',
-'陝' => '陕',
-'陣' => '阵',
-'陰' => '阴',
-'陳' => '陈',
-'陸' => '陆',
-'陻' => '堙',
-'陽' => '阳',
-'陿' => '狭',
-'隂' => '阴',
-'隄' => '堤',
-'隉' => '陧',
-'隊' => '队',
-'階' => '阶',
-'隕' => '陨',
-'隖' => '坞',
-'際' => '际',
-'隣' => '邻',
-'隨' => '随',
-'險' => '险',
-'隱' => '隐',
-'隴' => '陇',
-'隷' => '隶',
-'隸' => '隶',
-'隻' => '只',
-'雋' => '隽',
-'雖' => '虽',
-'雙' => '双',
-'雛' => '雏',
-'雜' => '杂',
-'雞' => '鸡',
-'離' => '离',
-'難' => '难',
-'雲' => '云',
-'電' => '电',
-'霢' => '霡',
-'霧' => '雾',
-'霽' => '霁',
-'靂' => '雳',
-'靄' => '霭',
-'靆' => '叇',
-'靈' => '灵',
-'靉' => '叆',
-'靚' => '靓',
-'靜' => '静',
-'靦' => '腼',
-'靨' => '靥',
-'靭' => '韧',
-'靱' => '韧',
-'鞀' => '鼗',
-'鞏' => '巩',
-'鞝' => '绱',
-'鞦' => '秋',
-'鞵' => '鞋',
-'鞽' => '鞒',
-'鞾' => '靴',
-'韁' => '缰',
-'韃' => '鞑',
-'韆' => '千',
-'韈' => '袜',
-'韉' => '鞯',
-'韋' => '韦',
-'韌' => '韧',
-'韍' => '韨',
-'韓' => '韩',
-'韙' => '韪',
-'韜' => '韬',
-'韞' => '韫',
-'韤' => '袜',
-'韮' => '韭',
-'韻' => '韵',
-'響' => '响',
-'頁' => '页',
-'頂' => '顶',
-'頃' => '顷',
-'項' => '项',
-'順' => '顺',
-'頇' => '顸',
-'須' => '须',
-'頊' => '顼',
-'頌' => '颂',
-'頎' => '颀',
-'頏' => '颃',
-'預' => '预',
-'頑' => '顽',
-'頒' => '颁',
-'頓' => '顿',
-'頗' => '颇',
-'領' => '领',
-'頜' => '颌',
-'頟' => '额',
-'頡' => '颉',
-'頤' => '颐',
-'頦' => '颏',
-'頭' => '头',
-'頮' => '颒',
-'頰' => '颊',
-'頲' => '颋',
-'頴' => '颕',
-'頷' => '颔',
-'頸' => '颈',
-'頹' => '颓',
-'頻' => '频',
-'頼' => '赖',
-'頽' => '颓',
-'顃' => '𩖖',
-'顆' => '颗',
-'顇' => '悴',
-'顋' => '腮',
-'題' => '题',
-'額' => '额',
-'顎' => '颚',
-'顏' => '颜',
-'顒' => '颙',
-'顓' => '颛',
-'顔' => '颜',
-'願' => '愿',
-'顙' => '颡',
-'顛' => '颠',
-'類' => '类',
-'顢' => '颟',
-'顥' => '颢',
-'顦' => '憔',
-'顧' => '顾',
-'顫' => '颤',
-'顬' => '颥',
-'顯' => '显',
-'顰' => '颦',
-'顱' => '颅',
-'顳' => '颞',
-'顴' => '颧',
-'風' => '风',
-'颭' => '飐',
-'颮' => '飑',
-'颯' => '飒',
-'颰' => '𩙥',
-'颱' => '台',
-'颳' => '刮',
-'颶' => '飓',
-'颷' => '𩙪',
-'颸' => '飔',
-'颺' => '飏',
-'颻' => '飖',
-'颼' => '飕',
-'颾' => '𩙫',
-'飀' => '飗',
-'飃' => '飘',
-'飄' => '飘',
-'飆' => '飙',
-'飈' => '飚',
-'飛' => '飞',
-'飜' => '翻',
-'飠' => '饣',
-'飢' => '饥',
-'飣' => '饤',
-'飤' => '饲',
-'飥' => '饦',
-'飩' => '饨',
-'飪' => '饪',
-'飫' => '饫',
-'飭' => '饬',
-'飯' => '饭',
-'飱' => '飧',
-'飲' => '饮',
-'飴' => '饴',
-'飼' => '饲',
-'飽' => '饱',
-'飾' => '饰',
-'飿' => '饳',
-'餁' => '饪',
-'餃' => '饺',
-'餄' => '饸',
-'餅' => '饼',
-'餈' => '糍',
-'餉' => '饷',
-'養' => '养',
-'餌' => '饵',
-'餎' => '饹',
-'餏' => '饻',
-'餑' => '饽',
-'餒' => '馁',
-'餓' => '饿',
-'餔' => '𫗦',
-'餕' => '馂',
-'餖' => '饾',
-'餗' => '𫗧',
-'餘' => '馀',
-'餚' => '肴',
-'餛' => '馄',
-'餜' => '馃',
-'餞' => '饯',
-'餡' => '馅',
-'餦' => '𫗠',
-'館' => '馆',
-'餭' => '𫗮',
-'餱' => '糇',
-'餳' => '饧',
-'餵' => '喂',
-'餶' => '馉',
-'餷' => '馇',
-'餸' => '𩠌',
-'餹' => '糖',
-'餺' => '馎',
-'餻' => '糕',
-'餼' => '饩',
-'餽' => '馈',
-'餾' => '馏',
-'餿' => '馊',
-'饁' => '馌',
-'饃' => '馍',
-'饅' => '馒',
-'饈' => '馐',
-'饉' => '馑',
-'饊' => '馓',
-'饋' => '馈',
-'饌' => '馔',
-'饍' => '膳',
-'饑' => '饥',
-'饒' => '饶',
-'饗' => '飨',
-'饘' => '𫗴',
-'饜' => '餍',
-'饝' => '馍',
-'饞' => '馋',
-'饢' => '馕',
-'馬' => '马',
-'馭' => '驭',
-'馮' => '冯',
-'馱' => '驮',
-'馳' => '驰',
-'馴' => '驯',
-'馹' => '驲',
-'駁' => '驳',
-'駃' => '𫘝',
-'駈' => '驱',
-'駎' => '𩧨',
-'駐' => '驻',
-'駑' => '驽',
-'駒' => '驹',
-'駔' => '驵',
-'駕' => '驾',
-'駘' => '骀',
-'駙' => '驸',
-'駚' => '𩧫',
-'駛' => '驶',
-'駝' => '驼',
-'駟' => '驷',
-'駡' => '骂',
-'駢' => '骈',
-'駧' => '𩧲',
-'駩' => '𩧴',
-'駭' => '骇',
-'駰' => '骃',
-'駱' => '骆',
-'駶' => '𩧺',
-'駸' => '骎',
-'駻' => '𫘣',
-'駿' => '骏',
-'騁' => '骋',
-'騂' => '骍',
-'騃' => '𫘤',
-'騅' => '骓',
-'騌' => '骔',
-'騍' => '骒',
-'騎' => '骑',
-'騏' => '骐',
-'騐' => '验',
-'騔' => '𩨀',
-'騖' => '骛',
-'騙' => '骗',
-'騚' => '𩨊',
-'騝' => '𩨃',
-'騟' => '𩨈',
-'騠' => '𫘨',
-'騣' => '鬃',
-'騤' => '骙',
-'騧' => '䯄',
-'騪' => '𩨄',
-'騫' => '骞',
-'騭' => '骘',
-'騮' => '骝',
-'騰' => '腾',
-'騶' => '驺',
-'騷' => '骚',
-'騸' => '骟',
-'騾' => '骡',
-'驀' => '蓦',
-'驁' => '骜',
-'驂' => '骖',
-'驃' => '骠',
-'驄' => '骢',
-'驅' => '驱',
-'驊' => '骅',
-'驋' => '𩧯',
-'驌' => '骕',
-'驍' => '骁',
-'驏' => '骣',
-'驕' => '骄',
-'驗' => '验',
-'驘' => '骡',
-'驚' => '惊',
-'驛' => '驿',
-'驟' => '骤',
-'驢' => '驴',
-'驤' => '骧',
-'驥' => '骥',
-'驦' => '骦',
-'驪' => '骊',
-'驫' => '骉',
-'骯' => '肮',
-'骽' => '腿',
-'骾' => '鲠',
-'髈' => '膀',
-'髏' => '髅',
-'髒' => '脏',
-'體' => '体',
-'髕' => '髌',
-'髖' => '髋',
-'髥' => '髯',
-'髮' => '发',
-'鬀' => '剃',
-'鬆' => '松',
-'鬉' => '鬃',
-'鬍' => '胡',
-'鬚' => '须',
-'鬢' => '鬓',
-'鬥' => '斗',
-'鬦' => '斗',
-'鬧' => '闹',
-'鬨' => '哄',
-'鬩' => '阋',
-'鬪' => '斗',
-'鬮' => '阄',
-'鬰' => '郁',
-'鬱' => '郁',
-'鬹' => '鬶',
-'魎' => '魉',
-'魘' => '魇',
-'魚' => '鱼',
-'魛' => '鱽',
-'魟' => '𫚉',
-'魢' => '鱾',
-'魥' => '𩽹',
-'魨' => '鲀',
-'魯' => '鲁',
-'魴' => '鲂',
-'魷' => '鱿',
-'魺' => '鲄',
-'鮁' => '鲅',
-'鮃' => '鲆',
-'鮄' => '𫚒',
-'鮊' => '鲌',
-'鮋' => '鲉',
-'鮍' => '鲏',
-'鮎' => '鲇',
-'鮐' => '鲐',
-'鮑' => '鲍',
-'鮒' => '鲋',
-'鮓' => '鲊',
-'鮚' => '鲒',
-'鮜' => '鲘',
-'鮝' => '鲞',
-'鮞' => '鲕',
-'鮟' => '𩽾',
-'鮣' => '䲟',
-'鮦' => '鲖',
-'鮪' => '鲔',
-'鮫' => '鲛',
-'鮭' => '鲑',
-'鮮' => '鲜',
-'鮰' => '𫚔',
-'鮳' => '鲓',
-'鮶' => '鲪',
-'鮸' => '𩾃',
-'鮺' => '鲝',
-'鯀' => '鲧',
-'鯁' => '鲠',
-'鯄' => '𩾁',
-'鯆' => '𫚙',
-'鯇' => '鲩',
-'鯉' => '鲤',
-'鯊' => '鲨',
-'鯒' => '鲬',
-'鯔' => '鲻',
-'鯕' => '鲯',
-'鯖' => '鲭',
-'鯗' => '鲞',
-'鯛' => '鲷',
-'鯝' => '鲴',
-'鯡' => '鲱',
-'鯢' => '鲵',
-'鯤' => '鲲',
-'鯧' => '鲳',
-'鯨' => '鲸',
-'鯪' => '鲮',
-'鯫' => '鲰',
-'鯰' => '鲶',
-'鯱' => '𩾇',
-'鯴' => '鲺',
-'鯶' => '𩽼',
-'鯷' => '鳀',
-'鯽' => '鲫',
-'鯿' => '鳊',
-'鰁' => '鳈',
-'鰂' => '鲗',
-'鰃' => '鳂',
-'鰆' => '䲠',
-'鰈' => '鲽',
-'鰉' => '鳇',
-'鰌' => '䲡',
-'鰍' => '鳅',
-'鰏' => '鲾',
-'鰐' => '鳄',
-'鰒' => '鳆',
-'鰓' => '鳃',
-'鰛' => '鳁',
-'鰜' => '鳒',
-'鰟' => '鳑',
-'鰠' => '鳋',
-'鰣' => '鲥',
-'鰤' => '𫚕',
-'鰥' => '鳏',
-'鰧' => '䲢',
-'鰨' => '鳎',
-'鰩' => '鳐',
-'鰭' => '鳍',
-'鰮' => '鳁',
-'鰱' => '鲢',
-'鰲' => '鳌',
-'鰳' => '鳓',
-'鰵' => '鳘',
-'鰷' => '鲦',
-'鰹' => '鲣',
-'鰺' => '鲹',
-'鰻' => '鳗',
-'鰼' => '鳛',
-'鰾' => '鳔',
-'鱂' => '鳉',
-'鱅' => '鳙',
-'鱇' => '𩾌',
-'鱈' => '鳕',
-'鱉' => '鳖',
-'鱒' => '鳟',
-'鱔' => '鳝',
-'鱖' => '鳜',
-'鱗' => '鳞',
-'鱘' => '鲟',
-'鱝' => '鲼',
-'鱟' => '鲎',
-'鱠' => '鲙',
-'鱣' => '鳣',
-'鱤' => '鳡',
-'鱧' => '鳢',
-'鱨' => '鲿',
-'鱭' => '鲚',
-'鱮' => '𫚈',
-'鱯' => '鳠',
-'鱷' => '鳄',
-'鱸' => '鲈',
-'鱺' => '鲡',
-'鳥' => '鸟',
-'鳧' => '凫',
-'鳩' => '鸠',
-'鳬' => '凫',
-'鳲' => '鸤',
-'鳳' => '凤',
-'鳴' => '鸣',
-'鳶' => '鸢',
-'鳷' => '𫛛',
-'鳼' => '𪉃',
-'鳾' => '䴓',
-'鴃' => '𫛞',
-'鴆' => '鸩',
-'鴇' => '鸨',
-'鴈' => '雁',
-'鴉' => '鸦',
-'鴒' => '鸰',
-'鴕' => '鸵',
-'鴗' => '𫁡',
-'鴛' => '鸳',
-'鴜' => '𪉈',
-'鴝' => '鸲',
-'鴞' => '鸮',
-'鴟' => '鸱',
-'鴣' => '鸪',
-'鴦' => '鸯',
-'鴨' => '鸭',
-'鴯' => '鸸',
-'鴰' => '鸹',
-'鴲' => '𪉆',
-'鴴' => '鸻',
-'鴷' => '䴕',
-'鴻' => '鸿',
-'鴿' => '鸽',
-'鵁' => '䴔',
-'鵂' => '鸺',
-'鵃' => '鸼',
-'鵐' => '鹀',
-'鵑' => '鹃',
-'鵒' => '鹆',
-'鵓' => '鹁',
-'鵚' => '𪉍',
-'鵜' => '鹈',
-'鵝' => '鹅',
-'鵞' => '鹅',
-'鵠' => '鹄',
-'鵡' => '鹉',
-'鵪' => '鹌',
-'鵬' => '鹏',
-'鵮' => '鹐',
-'鵯' => '鹎',
-'鵰' => '雕',
-'鵲' => '鹊',
-'鵶' => '鸦',
-'鵷' => '鹓',
-'鵾' => '鹍',
-'鶄' => '䴖',
-'鶇' => '鸫',
-'鶉' => '鹑',
-'鶊' => '鹒',
-'鶒' => '𫛶',
-'鶓' => '鹋',
-'鶖' => '鹙',
-'鶗' => '𫛸',
-'鶘' => '鹕',
-'鶚' => '鹗',
-'鶡' => '鹖',
-'鶥' => '鹛',
-'鶩' => '鹜',
-'鶪' => '䴗',
-'鶬' => '鸧',
-'鶯' => '莺',
-'鶲' => '鹟',
-'鶴' => '鹤',
-'鶹' => '鹠',
-'鶺' => '鹡',
-'鶻' => '鹘',
-'鶼' => '鹣',
-'鶿' => '鹚',
-'鷀' => '鹚',
-'鷁' => '鹢',
-'鷂' => '鹞',
-'鷄' => '鸡',
-'鷈' => '䴘',
-'鷊' => '鹝',
-'鷓' => '鹧',
-'鷔' => '𪉑',
-'鷖' => '鹥',
-'鷗' => '鸥',
-'鷙' => '鸷',
-'鷚' => '鹨',
-'鷥' => '鸶',
-'鷦' => '鹪',
-'鷨' => '𪉊',
-'鷫' => '鹔',
-'鷯' => '鹩',
-'鷰' => '燕',
-'鷲' => '鹫',
-'鷳' => '鹇',
-'鷴' => '鹇',
-'鷸' => '鹬',
-'鷹' => '鹰',
-'鷺' => '鹭',
-'鷽' => '鸴',
-'鷿' => '䴙',
-'鸂' => '㶉',
-'鸇' => '鹯',
-'鸋' => '𫛢',
-'鸌' => '鹱',
-'鸎' => '莺',
-'鸏' => '鹲',
-'鸕' => '鸬',
-'鸘' => '鹴',
-'鸚' => '鹦',
-'鸛' => '鹳',
-'鸝' => '鹂',
-'鸞' => '鸾',
-'鹵' => '卤',
-'鹹' => '咸',
-'鹺' => '鹾',
-'鹻' => '碱',
-'鹼' => '碱',
-'鹽' => '盐',
-'麗' => '丽',
-'麥' => '麦',
-'麨' => '𪎊',
-'麩' => '麸',
-'麪' => '面',
-'麫' => '面',
-'麯' => '曲',
-'麲' => '𪎉',
-'麳' => '𪎌',
-'麴' => '麹',
-'麵' => '面',
-'麼' => '么',
-'麽' => '么',
-'黃' => '黄',
-'黌' => '黉',
-'點' => '点',
-'黨' => '党',
-'黲' => '黪',
-'黴' => '霉',
-'黶' => '黡',
-'黷' => '黩',
-'黽' => '黾',
-'黿' => '鼋',
-'鼃' => '蛙',
-'鼇' => '鳌',
-'鼈' => '鳖',
-'鼉' => '鼍',
-'鼕' => '咚',
-'鼴' => '鼹',
-'齊' => '齐',
-'齋' => '斋',
-'齎' => '赍',
-'齏' => '齑',
-'齒' => '齿',
-'齔' => '龀',
-'齕' => '龁',
-'齗' => '龂',
-'齙' => '龅',
-'齜' => '龇',
-'齟' => '龃',
-'齠' => '龆',
-'齡' => '龄',
-'齣' => '出',
-'齦' => '龈',
-'齧' => '啮',
-'齩' => '咬',
-'齪' => '龊',
-'齬' => '龉',
-'齲' => '龋',
-'齶' => '腭',
-'齷' => '龌',
-'龍' => '龙',
-'龎' => '厐',
-'龐' => '庞',
-'龑' => '䶮',
-'龔' => '龚',
-'龕' => '龛',
-'龜' => '龟',
-'龭' => '𩨎',
-'龯' => '𨱆',
-'𠌥' => '𠆿',
-'𠏢' => '𠉗',
-'𠕂' => '再',
-'𠕅' => '再',
-'𠞆' => '𠛆',
-'𠞰' => '剿',
-'𠠎' => '𠚳',
-'𡄔' => '𠴢',
-'𡄣' => '𠵸',
-'𡅏' => '𠲥',
-'𡑭' => '𡋗',
-'𡓾' => '𡋀',
-'𡚁' => '弊',
-'𡞵' => '㛟',
-'𡠹' => '㛿',
-'𡢃' => '㛠',
-'𡨥' => '寇',
-'𡮉' => '𡭜',
-'𡮣' => '𡭬',
-'𡻕' => '岁',
-'𡾱' => '㟜',
-'𢣚' => '𢘝',
-'𢣭' => '𢘞',
-'𢶫' => '𢫞',
-'𢷮' => '𢫊',
-'𢹿' => '𢬦',
-'𣙎' => '㭣',
-'𣙜' => '榷',
-'𣝕' => '𣘷',
-'𣞻' => '𣘓',
-'𣠲' => '𣑶',
-'𣯴' => '𣭤',
-'𣾷' => '㳢',
-'𣿉' => '𣶫',
-'𤁣' => '𣺽',
-'𤋮' => '熙',
-'𤒎' => '𤊀',
-'𤨏' => '琐',
-'𤪺' => '㻘',
-'𤫩' => '㻏',
-'𤱈' => '亩',
-'𤳸' => '𤳄',
-'𤸫' => '𤶧',
-'𤺥' => '瘩',
-'𥌃' => '𥅘',
-'𥕥' => '𥐰',
-'𥖅' => '𥐯',
-'𥢢' => '䅪',
-'𥨐' => '𥧂',
-'𥵃' => '𥱔',
-'𥵊' => '𥭉',
-'𥸠' => '𥮋',
-'𥼽' => '𥹥',
-'𥽖' => '𥺇',
-'𥿊' => '𦈈',
-'𦂅' => '𦈒',
-'𦃄' => '𦈗',
-'𦊱' => '挂',
-'𦍑' => '羌',
-'𦕈' => '眇',
-'𦢈' => '𣍨',
-'𦣎' => '𦟗',
-'𦪽' => '𦨩',
-'𦵏' => '葬',
-'𧔥' => '𧒭',
-'𧜗' => '䘞',
-'𧜵' => '䙊',
-'𧝞' => '䘛',
-'𧩙' => '䜥',
-'𧳟' => '𧳕',
-'𧵳' => '䞌',
-'𧶔' => '𧹓',
-'𧶧' => '䞎',
-'𨄣' => '𨀱',
-'𨅍' => '𨁴',
-'𨇁' => '𧿈',
-'𨇞' => '𨅫',
-'𨈊' => '𨂺',
-'𨈌' => '𨄄',
-'𨊰' => '䢀',
-'𨊸' => '䢁',
-'𨊻' => '𨐆',
-'𨋢' => '䢂',
-'𨎮' => '𨐉',
-'𨏠' => '𨐇',
-'𨏥' => '𨐊',
-'𨤻' => '𨤰',
-'𨥛' => '𨱀',
-'𨦫' => '䦀',
-'𨧜' => '䦁',
-'𨧱' => '𨱊',
-'𨫒' => '𨱐',
-'𨮂' => '𨱕',
-'𨯅' => '䥿',
-'𨳑' => '𨸁',
-'𨳕' => '𨸀',
-'𨴗' => '𨸅',
-'𨵩' => '𨸆',
-'𨵸' => '𨸇',
-'𨶀' => '𨸉',
-'𨶏' => '𨸊',
-'𨶮' => '𨸌',
-'𨶲' => '𨸋',
-'𨷲' => '𨸎',
-'𨽏' => '𨸘',
-'𨽻' => '隶',
-'𩎢' => '𩏾',
-'𩏪' => '𩏽',
-'𩓐' => '脖',
-'𩓣' => '𩖕',
-'𩗀' => '𩙦',
-'𩗗' => '飓',
-'𩗡' => '𩙧',
-'𩘀' => '𩙩',
-'𩘝' => '𩙭',
-'𩘹' => '𩙨',
-'𩘺' => '𩙬',
-'𩙈' => '𩙰',
-'𩚛' => '𩟿',
-'𩚥' => '𩠀',
-'𩚵' => '𩠁',
-'𩛆' => '𩠂',
-'𩛩' => '𩠃',
-'𩜇' => '𩠉',
-'𩜦' => '𩠆',
-'𩜵' => '𩠊',
-'𩝔' => '𩠋',
-'𩞄' => '𩠎',
-'𩞦' => '𩠏',
-'𩞯' => '䭪',
-'𩟐' => '𩠅',
-'𩠴' => '𩠠',
-'𩡺' => '𩧦',
-'𩢡' => '𩧬',
-'𩢴' => '𩧵',
-'𩢸' => '𩧳',
-'𩢾' => '𩧮',
-'𩣏' => '𩧶',
-'𩣑' => '䯃',
-'𩣵' => '𩧻',
-'𩣺' => '𩧼',
-'𩤊' => '𩧩',
-'𩤙' => '𩨆',
-'𩤲' => '𩨉',
-'𩤸' => '𩨅',
-'𩥄' => '𩨋',
-'𩥇' => '𩨍',
-'𩥉' => '𩧱',
-'𩥑' => '𩨌',
-'𩧆' => '𩨐',
-'𩭙' => '𩬣',
-'𩯳' => '𩯒',
-'𩰀' => '𩬤',
-'𩳤' => '𩲒',
-'𩵩' => '𩽺',
-'𩵹' => '𩽻',
-'𩶘' => '䲞',
-'𩶰' => '𩽿',
-'𩶱' => '𩽽',
-'𩷰' => '𩾄',
-'𩸃' => '𩾅',
-'𩸦' => '𩾆',
-'𩽇' => '𩾎',
-'𩿪' => '𪉄',
-'𪀦' => '𪉅',
-'𪀾' => '𪉋',
-'𪁈' => '𪉉',
-'𪁖' => '𪉌',
-'𪂆' => '𪉎',
-'𪃍' => '𪉐',
-'𪃏' => '𪉏',
-'𪄆' => '𪉔',
-'𪄕' => '𪉒',
-'𪇳' => '𪉕',
-'𪈼' => '𪉓',
-'𪋿' => '𪎍',
-'𪔵' => '𪔭',
-'𪘀' => '𪚏',
-'𪘯' => '𪚐',
-'『' => '‘',
-'』' => '’',
-'「' => '“',
-'「' => '“',
-'」' => '”',
-'」' => '”',
-'。陞' => '。升',
-'《易乾' => '《易乾',
-'一釐' => '一厘',
-'上昇' => '上升',
-'不穀' => '不穀',
-'專著' => '专著',
-'乾一坛' => '乾一坛',
-'乾一壇' => '乾一坛',
-'乾一組' => '乾一组',
-'乾一组' => '乾一组',
-'乾上乾下' => '乾上乾下',
-'乾东' => '乾东',
-'乾東' => '乾东',
-'乾為天' => '乾为天',
-'乾為陽' => '乾为阳',
-'乾九' => '乾九',
-'乾乾' => '乾乾',
-'乾亨' => '乾亨',
-'乾仪' => '乾仪',
-'乾儀' => '乾仪',
-'乾位' => '乾位',
-'乾健' => '乾健',
-'乾健也' => '乾健也',
-'乾元' => '乾元',
-'乾光' => '乾光',
-'乾兴' => '乾兴',
-'乾興' => '乾兴',
-'乾冈' => '乾冈',
-'乾岡' => '乾冈',
-'乾刘' => '乾刘',
-'乾劉' => '乾刘',
-'乾刚' => '乾刚',
-'乾剛' => '乾刚',
-'乾务' => '乾务',
-'乾務' => '乾务',
-'乾化' => '乾化',
-'乾卦' => '乾卦',
-'乾县' => '乾县',
-'乾縣' => '乾县',
-'乾台' => '乾台',
-'乾吉' => '乾吉',
-'乾启' => '乾启',
-'乾啟' => '乾启',
-'乾命' => '乾命',
-'乾和' => '乾和',
-'乾嘉' => '乾嘉',
-'乾图' => '乾图',
-'乾圖' => '乾图',
-'乾坤' => '乾坤',
-'乾城' => '乾城',
-'乾基' => '乾基',
-'乾天也' => '乾天也',
-'乾始' => '乾始',
-'乾姓' => '乾姓',
-'乾宁' => '乾宁',
-'乾寧' => '乾宁',
-'乾宅' => '乾宅',
-'乾宇' => '乾宇',
-'乾安' => '乾安',
-'乾定' => '乾定',
-'乾封' => '乾封',
-'乾居' => '乾居',
-'乾岗' => '乾岗',
-'乾崗' => '乾岗',
-'乾巛' => '乾巛',
-'乾州' => '乾州',
-'乾录' => '乾录',
-'乾錄' => '乾录',
-'乾律' => '乾律',
-'乾德' => '乾德',
-'乾心' => '乾心',
-'乾忠' => '乾忠',
-'乾文' => '乾文',
-'乾断' => '乾断',
-'乾斷' => '乾断',
-'乾方' => '乾方',
-'乾施' => '乾施',
-'乾旦' => '乾旦',
-'乾明' => '乾明',
-'乾昧' => '乾昧',
-'乾晖' => '乾晖',
-'乾暉' => '乾晖',
-'乾景' => '乾景',
-'乾晷' => '乾晷',
-'乾曜' => '乾曜',
-'乾构' => '乾构',
-'乾構' => '乾构',
-'乾枢' => '乾枢',
-'乾樞' => '乾枢',
-'乾栋' => '乾栋',
-'乾棟' => '乾栋',
-'乾步' => '乾步',
-'乾氏' => '乾氏',
-'乾沓和' => '乾沓和',
-'乾沓婆' => '乾沓婆',
-'乾泉' => '乾泉',
-'乾淳' => '乾淳',
-'乾清' => '乾清',
-'乾渥' => '乾渥',
-'乾潭' => '乾潭',
-'乾灵' => '乾灵',
-'乾靈' => '乾灵',
-'乾生元' => '乾生元',
-'乾男' => '乾男',
-'乾皋' => '乾皋',
-'乾盛世' => '乾盛世',
-'乾矢' => '乾矢',
-'乾祐' => '乾祐',
-'乾神' => '乾神',
-'乾穹' => '乾穹',
-'乾窦' => '乾窦',
-'乾竇' => '乾窦',
-'乾竺' => '乾竺',
-'乾笃' => '乾笃',
-'乾篤' => '乾笃',
-'乾符' => '乾符',
-'乾策' => '乾策',
-'乾精' => '乾精',
-'乾紅' => '乾红',
-'乾红' => '乾红',
-'乾綱' => '乾纲',
-'乾纲' => '乾纲',
-'乾紐' => '乾纽',
-'乾纽' => '乾纽',
-'乾絡' => '乾络',
-'乾络' => '乾络',
-'乾統' => '乾统',
-'乾统' => '乾统',
-'乾維' => '乾维',
-'乾维' => '乾维',
-'乾罗' => '乾罗',
-'乾羅' => '乾罗',
-'乾花' => '乾花',
-'乾荫' => '乾荫',
-'乾蔭' => '乾荫',
-'乾行' => '乾行',
-'乾衡' => '乾衡',
-'乾西' => '乾西',
-'乾覆' => '乾覆',
-'乾象' => '乾象',
-'乾象历' => '乾象历',
-'乾象歷' => '乾象历',
-'乾貞' => '乾贞',
-'乾贞' => '乾贞',
-'乾貴士' => '乾贵士',
-'乾贵士' => '乾贵士',
-'乾貺' => '乾贶',
-'乾贶' => '乾贶',
-'乾車' => '乾车',
-'乾车' => '乾车',
-'乾軸' => '乾轴',
-'乾轴' => '乾轴',
-'乾通' => '乾通',
-'乾造' => '乾造',
-'乾道' => '乾道',
-'乾鉴' => '乾鉴',
-'乾鑒' => '乾鉴',
-'乾鈞' => '乾钧',
-'乾钧' => '乾钧',
-'乾闥' => '乾闼',
-'乾闼' => '乾闼',
-'乾陀' => '乾陀',
-'乾陵' => '乾陵',
-'乾隆' => '乾隆',
-'乾音' => '乾音',
-'乾顧' => '乾顾',
-'乾顾' => '乾顾',
-'乾風' => '乾风',
-'乾风' => '乾风',
-'乾首' => '乾首',
-'乾馬' => '乾马',
-'乾马' => '乾马',
-'乾鵠' => '乾鹄',
-'乾鹄' => '乾鹄',
-'乾鵲' => '乾鹊',
-'乾鹊' => '乾鹊',
-'乾龍' => '乾龙',
-'乾龙' => '乾龙',
-'乾,健也' => '乾,健也',
-'乾,天也' => '乾,天也',
-'五箇山' => '五箇山',
-'什么' => '什么',
-'仇讎' => '仇雠',
-'以微知著' => '以微知著',
-'仰屋著書' => '仰屋著书',
-'彷彿' => '仿佛',
-'夥計' => '伙计',
-'佛頭著糞' => '佛头著粪',
-'偵蒐' => '侦搜',
-'倖一郎' => '倖一郎',
-'倖田' => '倖田',
-'候覆' => '候复',
-'藉助' => '借助',
-'藉口' => '借口',
-'藉手' => '借手',
-'藉故' => '借故',
-'藉機' => '借机',
-'藉此' => '借此',
-'藉由' => '借由',
-'藉端' => '借端',
-'藉詞' => '借词',
-'傒倖' => '傒倖',
-'先名後姓' => '先名后姓',
-'兒寬' => '兒宽',
-'六么' => '六幺',
-'蘭質薰心' => '兰质薰心',
-'內聯陞' => '内联升',
-'憑藉' => '凭借',
-'初昇' => '初升',
-'利欲薰心' => '利欲薰心',
-'剋了' => '剋了',
-'剋架' => '剋架',
-'剖釐' => '剖厘',
-'陞為' => '升为',
-'陞了' => '升了',
-'昇仙' => '升仙',
-'陞任' => '升任',
-'昇華' => '升华',
-'昇天' => '升天',
-'陞官' => '升官',
-'昇平' => '升平',
-'昇汞' => '升汞',
-'陞用' => '升用',
-'陞補' => '升补',
-'陞遷' => '升迁',
-'昇降' => '升降',
-'卓著' => '卓著',
-'博和託' => '博和讬',
-'歷陞' => '历升',
-'釐改' => '厘改',
-'釐整' => '厘整',
-'釐正' => '厘正',
-'釐毫' => '厘毫',
-'釐清' => '厘清',
-'釐訂' => '厘订',
-'釐革' => '厘革',
-'原著' => '原著',
-'又陞' => '又升',
-'反反覆覆' => '反反复复',
-'反覆' => '反复',
-'可穿著' => '可穿著',
-'吃衣著飯' => '吃衣著饭',
-'合著' => '合著',
-'同陞和' => '同升和',
-'名著' => '名著',
-'吳克羣' => '吴克羣',
-'周易乾' => '周易乾',
-'諠譁' => '喧哗',
-'回覆' => '回复',
-'土著' => '土著',
-'坤乾' => '坤乾',
-'墨瀋' => '墨渖',
-'覆查' => '复查',
-'覆核' => '复核',
-'覆检' => '复检',
-'復甦' => '复苏',
-'多么' => '多么',
-'大麴' => '大曲',
-'天道为乾' => '天道为乾',
-'天道為乾' => '天道为乾',
-'奧區' => '奧区',
-'如瀋' => '如渖',
-'姓么' => '姓幺',
-'子餘' => '子馀',
-'字乾生' => '字乾生',
-'孙乾' => '孙乾',
-'孫乾' => '孙乾',
-'宏碁' => '宏碁',
-'官陞' => '官升',
-'將軍抽俥' => '将军抽俥',
-'將軍抽車' => '将军抽車',
-'爾冬陞' => '尔冬升',
-'尼乾陀' => '尼乾陀',
-'侷促' => '局促',
-'跼促' => '局促',
-'侷限' => '局限',
-'跼限' => '局限',
-'山崎闇齋' => '山崎闇斋',
-'岳託' => '岳讬',
-'巨著' => '巨著',
-'乾乾淨淨' => '干干净净',
-'乾乾脆脆' => '干干脆脆',
-'乾泉水' => '干泉水',
-'年陞' => '年升',
-'么九' => '幺九',
-'么二三' => '幺二三',
-'么元' => '幺元',
-'么鳳' => '幺凤',
-'么半' => '幺半',
-'么半群' => '幺半群',
-'么廝' => '幺厮',
-'幺厮' => '幺厮',
-'么叔' => '幺叔',
-'么女' => '幺女',
-'么媽' => '幺妈',
-'么妹' => '幺妹',
-'么姓' => '幺姓',
-'么姨' => '幺姨',
-'么娘' => '幺娘',
-'么孃' => '幺娘',
-'幺孃' => '幺娘',
-'么子' => '幺子',
-'么小' => '幺小',
-'么弟' => '幺弟',
-'么正' => '幺正',
-'么氏' => '幺氏',
-'么爸' => '幺爸',
-'么爹' => '幺爹',
-'么篇' => '幺篇',
-'么舅' => '幺舅',
-'么蛾子' => '幺蛾子',
-'么謙' => '幺谦',
-'么麼' => '幺麽',
-'么麽' => '幺麽',
-'么麽小丑' => '幺麽小丑',
-'慶餘' => '庆馀',
-'康乾' => '康乾',
-'张法乾' => '张法乾',
-'張法乾' => '张法乾',
-'彰明較著' => '彰明较著',
-'待覆' => '待复',
-'後姓' => '後姓',
-'慫慂' => '怂恿',
-'怎么' => '怎么',
-'恩威並著' => '恩威并著',
-'噁心' => '恶心',
-'情蒐' => '情搜',
-'情鍾' => '情钟',
-'惏悷' => '惏悷',
-'惏慄' => '惏慄',
-'慘澹' => '惨淡',
-'成效顯著' => '成效显著',
-'成績顯著' => '成绩显著',
-'所鍾' => '所钟',
-'手鍊' => '手链',
-'扞格' => '扞格',
-'執著' => '执著',
-'批覆' => '批复',
-'承乾' => '承乾',
-'拉鍊' => '拉链',
-'拙著' => '拙著',
-'拚命' => '拚命',
-'拚搏' => '拚搏',
-'拚死' => '拚死',
-'拾瀋' => '拾渖',
-'拿破崙' => '拿破仑',
-'挨剋' => '挨剋',
-'提昇' => '提升',
-'蒐錄' => '搜录',
-'蒐索' => '搜索',
-'蒐羅' => '搜罗',
-'蒐藏' => '搜藏',
-'蒐證' => '搜证',
-'蒐購' => '搜购',
-'蒐輯' => '搜辑',
-'蒐採' => '搜采',
-'蒐采' => '搜采',
-'蒐集' => '搜集',
-'搥打' => '搥打',
-'搥胸頓足' => '搥胸顿足',
-'撰著' => '撰著',
-'效果顯著' => '效果显著',
-'文徵明' => '文徵明',
-'觔斗' => '斤斗',
-'新著' => '新著',
-'於世成' => '於世成',
-'於之瑩' => '於之莹',
-'於之莹' => '於之莹',
-'於乎' => '於乎',
-'於乙于同' => '於乙于同',
-'於乙宇同' => '於乙宇同',
-'於于同' => '於于同',
-'於哲' => '於哲',
-'於夫罗' => '於夫罗',
-'於夫羅' => '於夫罗',
-'於姓' => '於姓',
-'於宇同' => '於宇同',
-'於崇文' => '於崇文',
-'於志賀' => '於志贺',
-'於志贺' => '於志贺',
-'於戲' => '於戏',
-'於梨华' => '於梨华',
-'於梨華' => '於梨华',
-'於氏' => '於氏',
-'於潜' => '於潜',
-'於潛縣' => '於潜县',
-'於祥玉' => '於祥玉',
-'於菟' => '於菟',
-'於賢德' => '於贤德',
-'於除鞬' => '於除鞬',
-'施讎' => '施雠',
-'旋乾轉坤' => '旋乾转坤',
-'旋乾转坤' => '旋乾转坤',
-'無言不讎' => '无言不雠',
-'曠若發矇' => '旷若发矇',
-'崑崙' => '昆仑',
-'崑劇' => '昆剧',
-'崑山' => '昆山',
-'崑曲' => '昆曲',
-'崑腔' => '昆腔',
-'崑蘇' => '昆苏',
-'崑調' => '昆调',
-'易·乾' => '易·乾',
-'易經·乾' => '易经·乾',
-'易经·乾' => '易经·乾',
-'易經乾' => '易经乾',
-'易经乾' => '易经乾',
-'昭著' => '昭著',
-'顯著' => '显著',
-'顯著地' => '显著地',
-'顯著地位' => '显著地位',
-'顯著性' => '显著性',
-'顯著成績' => '显著成绩',
-'顯著效果' => '显著效果',
-'顯著特點' => '显著特点',
-'晉陞' => '晋升',
-'暗闇' => '暗闇',
-'麴黴' => '曲霉',
-'曾运乾' => '曾运乾',
-'曾運乾' => '曾运乾',
-'月陞' => '月升',
-'朝乾夕惕' => '朝乾夕惕',
-'朱有燉' => '朱有燉',
-'朱淛' => '朱淛',
-'硃砂' => '朱砂',
-'硃紅' => '朱红',
-'硃色' => '朱色',
-'朴於宇同' => '朴於宇同',
-'李乾德' => '李乾德',
-'李乾順' => '李乾顺',
-'李乾顺' => '李乾顺',
-'李澤鉅' => '李泽钜',
-'李祕' => '李祕',
-'李譔' => '李譔',
-'柳詒徵' => '柳诒徵',
-'柳诒徵' => '柳诒徵',
-'校讎' => '校雠',
-'楈枒' => '楈枒',
-'樊於期' => '樊於期',
-'殘瀋' => '残渖',
-'慇勤' => '殷勤',
-'慇懃' => '殷勤',
-'比較顯著' => '比较显著',
-'毫釐' => '毫厘',
-'氆氌' => '氆氌',
-'沈沒' => '沉没',
-'沈澱' => '沉淀',
-'沈積' => '沉积',
-'沈船' => '沉船',
-'沈重' => '沉重',
-'沈默' => '沉默',
-'氾濫' => '泛滥',
-'洗鍊' => '洗练',
-'瀋液' => '渖液',
-'薰習' => '熏习',
-'薰心' => '熏心',
-'薰沐' => '熏沐',
-'薰陶' => '熏陶',
-'薰香' => '熏香',
-'爨翫' => '爨翫',
-'獨鍾' => '独钟',
-'王道乾' => '王道乾',
-'王餘魚' => '王馀鱼',
-'甚夥' => '甚夥',
-'男为乾' => '男为乾',
-'男為乾' => '男为乾',
-'男性为乾' => '男性为乾',
-'男性為乾' => '男性为乾',
-'療效顯著' => '疗效显著',
-'白瀋' => '白渖',
-'皁保' => '皁保',
-'目劄' => '目劄',
-'直昇' => '直升',
-'睹微知著' => '睹微知著',
-'瞭台' => '瞭台',
-'瞭臺' => '瞭台',
-'瞭望' => '瞭望',
-'矇眬' => '矇眬',
-'矇矓' => '矇眬',
-'石碁' => '石碁',
-'石碁鎮' => '石碁镇',
-'碩託' => '硕讬',
-'鹼菜' => '硷菜',
-'碁圣' => '碁圣',
-'碁聖' => '碁圣',
-'碁所' => '碁所',
-'祕宜' => '祕宜',
-'穀旦' => '穀旦',
-'穀梁' => '穀梁',
-'穀水' => '穀水',
-'穀阳' => '穀阳',
-'穀陽' => '穀阳',
-'穿著者' => '穿着者',
-'竹昇' => '竹升',
-'答覆' => '答复',
-'米泽瑠美' => '米泽瑠美',
-'米瀋' => '米渖',
-'餬口' => '糊口',
-'繙㠾' => '繙㠾',
-'遶境' => '绕境',
-'線國安' => '缐国安',
-'線姓' => '缐姓',
-'編著' => '编著',
-'老么' => '老幺',
-'肉乾乾' => '肉干干',
-'肘手鍊足' => '肘手链足',
-'甦醒' => '苏醒',
-'苧烯' => '苧烯',
-'薴烯' => '苧烯',
-'蘋果' => '苹果',
-'荠苧' => '荠苧',
-'榮陞' => '荣升',
-'萧乾' => '萧乾',
-'蕭乾' => '萧乾',
-'著書' => '著书',
-'著書立說' => '著书立说',
-'著作' => '著作',
-'著名' => '著名',
-'著錄' => '著录',
-'著錄規則' => '著录规则',
-'著文' => '著文',
-'著有' => '著有',
-'著稱' => '著称',
-'著者' => '著者',
-'著身' => '著身',
-'著述' => '著述',
-'蔡孝乾' => '蔡孝乾',
-'蔡絛' => '蔡絛',
-'行餘' => '行馀',
-'覆蓋' => '覆盖',
-'見微知著' => '见微知著',
-'見著' => '见著',
-'視微知著' => '视微知著',
-'言幾析理' => '言幾析理',
-'諲譔' => '諲譔',
-'譩譆' => '譩譆',
-'託庸' => '讬庸',
-'託恩多' => '讬恩多',
-'託麻' => '讬麻',
-'論著' => '论著',
-'譯著' => '译著',
-'謝肇淛' => '谢肇淛',
-'象乾' => '象乾',
-'躊躇滿志' => '踌躇滿志',
-'較著' => '较著',
-'近角聪信' => '近角聪信',
-'这么' => '这么',
-'造麴' => '造曲',
-'遺著' => '遗著',
-'那么' => '那么',
-'那麽' => '那麽',
-'郭子乾' => '郭子乾',
-'酒麴' => '酒曲',
-'醉瀋' => '醉渖',
-'醯壶' => '醯壶',
-'醯壺' => '醯壶',
-'醯酱' => '醯酱',
-'醯醬' => '醯酱',
-'醯醋' => '醯醋',
-'醯醢' => '醯醢',
-'醯雞' => '醯鸡',
-'醯鸡' => '醯鸡',
-'重覆' => '重复',
-'金鍊' => '金链',
-'鍾情' => '钟情',
-'鍾意' => '钟意',
-'鍾靈' => '钟灵',
-'鍾愛' => '钟爱',
-'鐵鍊' => '铁链',
-'鉸鍊' => '铰链',
-'銀硃' => '银朱',
-'銀鍊' => '银链',
-'鍊子' => '链子',
-'鍊條' => '链条',
-'鍊表' => '链表',
-'鍊鎖' => '链锁',
-'鍊錘' => '链锤',
-'鎖鍊' => '锁链',
-'闇公' => '闇公',
-'閻懷禮' => '闫怀礼',
-'阳为乾' => '阳为乾',
-'陽為乾' => '阳为乾',
-'阿部正瞭' => '阿部正瞭',
-'陆徵祥' => '陆徵祥',
-'陸徵祥' => '陆徵祥',
-'陈乾生' => '陈乾生',
-'陳乾生' => '陈乾生',
-'陈元扞' => '陈元扞',
-'陳元扞' => '陈元扞',
-'陈公乾生' => '陈公乾生',
-'陳公乾生' => '陈公乾生',
-'陈遇乾' => '陈遇乾',
-'陳遇乾' => '陈遇乾',
-'陳堵' => '陳堵',
-'陳禕' => '陳禕',
-'雍乾' => '雍乾',
-'讎夷' => '雠夷',
-'讎定' => '雠定',
-'讎校' => '雠校',
-'讎正' => '雠正',
-'讎問' => '雠问',
-'項鍊' => '项链',
-'飛昇' => '飞升',
-'飭令' => '飭令',
-'飽託' => '饱讬',
-'餘慶' => '馀庆',
-'餘瀋' => '馀渖',
-'馬鞌' => '马鞍',
-'高昇' => '高升',
-'高陞' => '高升',
-'鬱姓' => '鬱姓',
-'鬱氏' => '鬱氏',
-'魏徵' => '魏徵',
-'魚乾乾' => '鱼干干',
-'麽氏' => '麽氏',
-'麼麼' => '麽麽',
-'麽麽' => '麽麽',
-'黃麴毒素' => '黄曲毒素',
-'黃潤乾' => '黄润乾',
-'黄润乾' => '黄润乾',
-'龍鍾' => '龙钟',
-',陞' => ',升',
-);
-
-$zh2TW = array(
-'0字节' => '0位元組',
-'0杆' => '0桿',
-'1字节' => '1位元組',
-'1杆' => '1桿',
-'2字节' => '2位元組',
-'2杆' => '2桿',
-'3字节' => '3位元組',
-'3杆' => '3桿',
-'4字节' => '4位元組',
-'4杆' => '4桿',
-'5字节' => '5位元組',
-'5杆' => '5桿',
-'6字节' => '6位元組',
-'6杆' => '6桿',
-'7字节' => '7位元組',
-'7杆' => '7桿',
-'8字节' => '8位元組',
-'8杆' => '8桿',
-'9字节' => '9位元組',
-'9杆' => '9桿',
-'甲型肝炎' => 'A型肝炎',
-'甲肝' => 'A肝',
-'乙型肝炎' => 'B型肝炎',
-'乙肝' => 'B肝',
-'丙型肝炎' => 'C型肝炎',
-'丙肝' => 'C肝',
-'IP地址' => 'IP位址',
-'乔戈里峰' => 'K2',
-'·威尔士' => '·威爾士',
-'·威爾士' => '·威爾士',
-'一杆' => '一桿',
-'七杆' => '七桿',
-'三杆' => '三桿',
-'三极管' => '三極體',
-'三極管' => '三極體',
-'达累斯萨拉姆' => '三蘭港',
-'上落客' => '上下客',
-'落車' => '下車',
-'不來梅' => '不萊梅',
-'不来梅' => '不萊梅',
-'以太网' => '乙太網',
-'九杆' => '九桿',
-'了結他' => '了結他',
-'二手烟' => '二手菸',
-'二手煙' => '二手菸',
-'二杆' => '二桿',
-'二极管' => '二極體',
-'二極管' => '二極體',
-'交互设计' => '互動設計',
-'五杆' => '五桿',
-'阿塞拜疆' => '亞塞拜然',
-'阿斯旺' => '亞斯文',
-'人工智能' => '人工智慧',
-'人机交互' => '人機互動',
-'行人路' => '人行道',
-'石勒苏益格' => '什勒斯維希',
-'石勒蘇益格' => '什勒斯維希',
-'界面' => '介面',
-'伊利诺伊州' => '伊利諾州',
-'伊斯坦布尔' => '伊斯坦堡',
-'伊斯坦布爾' => '伊斯坦堡',
-'伊斯兰堡' => '伊斯蘭瑪巴德',
-'伊斯蘭堡' => '伊斯蘭瑪巴德',
-'埃博拉' => '伊波拉',
-'伊丽莎白' => '伊莉莎白',
-'俯卧撑' => '伏地挺身',
-'掌上壓' => '伏地挺身',
-'伯明翰' => '伯明罕',
-'服务器' => '伺服器',
-'佛罗伦萨' => '佛羅倫斯',
-'操作系统' => '作業系統',
-'系数' => '係數',
-'避孕套' => '保險套',
-'傅里叶' => '傅立葉',
-'光盘' => '光碟',
-'光驱' => '光碟機',
-'开普勒' => '克卜勒',
-'開普勒' => '克卜勒',
-'克罗地亚' => '克羅埃西亞',
-'克羅地亞' => '克羅埃西亞',
-'克里斯托弗' => '克里斯多福',
-'万维网' => '全球資訊網',
-'八杆' => '八桿',
-'公共交通' => '公共運輸',
-'六杆' => '六桿',
-'凯瑟琳' => '凱薩琳',
-'嘉芙蓮' => '凱薩琳',
-'划着独木舟' => '划著獨木舟',
-'划着竹筏' => '划著竹筏',
-'划着船' => '划著船',
-'打印' => '列印',
-'列支敦士登' => '列支敦斯登',
-'前波美拉尼亚' => '前波莫瑞',
-'前波美拉尼亞' => '前波莫瑞',
-'加蓬' => '加彭',
-'加沙地带' => '加薩走廊',
-'加沙地帶' => '加薩走廊',
-'包豪斯' => '包浩斯',
-'北朝鲜' => '北韓',
-'局域网' => '區域網',
-'局域网络' => '區域網路',
-'十杆' => '十桿',
-'特立尼达和托巴哥' => '千里達托貝哥',
-'特立尼達和多巴哥' => '千里達托貝哥',
-'南朝鲜' => '南韓',
-'卡斯特罗' => '卡斯楚',
-'卡塔尔' => '卡達',
-'卡塔爾' => '卡達',
-'铆足' => '卯足',
-'打印机' => '印表機',
-'打印機' => '印表機',
-'厄利垂亚' => '厄利垂亞',
-'厄立特里亚' => '厄利垂亞',
-'厄立特里亞' => '厄利垂亞',
-'厄瓜多' => '厄瓜多',
-'厄瓜多尔' => '厄瓜多',
-'厄瓜多爾' => '厄瓜多',
-'源代码' => '原始碼',
-'圆珠笔' => '原子筆',
-'反烟' => '反菸',
-'反煙' => '反菸',
-'可卡因' => '古柯鹼',
-'便携式' => '可攜式',
-'叱咤' => '叱吒',
-'叱咤9' => '叱咤9',
-'叱咤M' => '叱咤M',
-'叱咤叱' => '叱咤叱',
-'叱咤咤' => '叱咤咤',
-'叱咤樂壇' => '叱咤樂壇',
-'斯坦福大学' => '史丹福大學',
-'斯皮尔伯格' => '史匹柏',
-'斯特劳斯' => '史特勞斯',
-'斯威士兰' => '史瓦濟蘭',
-'斯威士蘭' => '史瓦濟蘭',
-'斯蒂芬' => '史蒂芬',
-'斯大林' => '史達林',
-'結他' => '吉他',
-'乞力馬札羅' => '吉力馬札羅',
-'乞力马扎罗' => '吉力馬札羅',
-'吉布堤' => '吉布地',
-'吉布提' => '吉布地',
-'基里巴斯' => '吉里巴斯',
-'图瓦卢' => '吐瓦魯',
-'圖瓦盧' => '吐瓦魯',
-'吸烟' => '吸菸',
-'吸煙' => '吸菸',
-'吕宋烟' => '呂宋菸',
-'呂宋煙' => '呂宋菸',
-'格丁根' => '哥廷根',
-'哥特式' => '哥德式',
-'哥斯达黎加' => '哥斯大黎加',
-'哥斯達黎加' => '哥斯大黎加',
-'卡拉奇' => '喀拉蚩',
-'乔治·奥威尔' => '喬治·歐威爾',
-'佐治亚' => '喬治亞',
-'佐治亞' => '喬治亞',
-'格魯吉亞' => '喬治亞',
-'格鲁吉亚' => '喬治亞',
-'单反相机' => '單眼相機',
-'單鏡反光機' => '單眼相機',
-'嘯咤' => '嘯吒',
-'四杆' => '四桿',
-'图卢兹' => '土魯斯',
-'圖盧茲' => '土魯斯',
-'戛纳' => '坎城',
-'堪培拉' => '坎培拉',
-'坦桑尼亚' => '坦尚尼亞',
-'坦桑尼亞' => '坦尚尼亞',
-'端口' => '埠',
-'首席执行官' => '執行長',
-'报道' => '報導',
-'塑料袋' => '塑膠袋',
-'塞舌尔' => '塞席爾',
-'塞舌爾' => '塞席爾',
-'萨拉热窝' => '塞拉耶佛',
-'薩拉熱窩' => '塞拉耶佛',
-'塞尔维亚和黑山' => '塞爾維亞與蒙特內哥羅',
-'塞爾維亞和黑山' => '塞爾維亞與蒙特內哥羅',
-'塞爾維亞與蒙特內哥羅' => '塞爾維亞與蒙特內哥羅',
-'塞维利亚' => '塞維亞',
-'西維爾' => '塞維亞',
-'塞黑' => '塞蒙',
-'共和联邦' => '大英國協',
-'英联邦' => '大英國協',
-'英聯邦' => '大英國協',
-'太空飛行員' => '太空人',
-'宇航员' => '太空人',
-'穿梭機' => '太空梭',
-'航天飞机' => '太空梭',
-'宇航服' => '太空衣',
-'航天器' => '太空飛行器',
-'尼日利亚' => '奈及利亞',
-'尼日利亞' => '奈及利亞',
-'忌廉' => '奶油',
-'荷里活' => '好萊塢',
-'威廉姆斯' => '威廉士',
-'威斯特法伦' => '威斯伐倫',
-'威斯特法倫' => '威斯伐倫',
-'威士顿康星' => '威斯康辛',
-'威尔士' => '威爾斯',
-'威爾士' => '威爾斯',
-'字库' => '字型檔',
-'存盘' => '存檔',
-'孟德爾遜' => '孟德爾頌',
-'门德尔松' => '孟德爾頌',
-'安哈尔特' => '安哈特',
-'安哈爾特' => '安哈特',
-'安提瓜和巴布达' => '安地卡及巴布達',
-'安提瓜和巴布達' => '安地卡及巴布達',
-'洪都拉斯' => '宏都拉斯',
-'密歇根' => '密西根',
-'宽带' => '寬頻',
-'老挝人民民主共和国' => '寮人民民主共和國',
-'老撾人民民主共和國' => '寮人民民主共和國',
-'老挝' => '寮國',
-'老撾' => '寮國',
-'老挝语' => '寮語',
-'老撾語' => '寮語',
-'波里活' => '寶萊塢',
-'对着干' => '對著幹',
-'高峰时段' => '尖峰時段',
-'高峰时间' => '尖峰時間',
-'贊比亞' => '尚比亞',
-'赞比亚' => '尚比亞',
-'尼克松' => '尼克森',
-'尼日尔' => '尼日',
-'尼日爾' => '尼日',
-'雅马哈' => '山葉',
-'机床' => '工具機',
-'機床' => '工具機',
-'珍寶客機' => '巨無霸客機',
-'发达国家' => '已開發國家',
-'巴塞罗那' => '巴塞隆納',
-'巴塞隆拿' => '巴塞隆納',
-'巴布亚新几内亚' => '巴布亞紐幾內亞',
-'巴布亞新畿內亞' => '巴布亞紐幾內亞',
-'巴士拉' => '巴斯拉',
-'巴巴多斯' => '巴貝多',
-'佈' => '布',
-'布基納法索' => '布吉納法索',
-'布基纳法索' => '布吉納法索',
-'布什' => '布希',
-'布殊' => '布希',
-'勃兰登堡' => '布蘭登堡',
-'勃蘭登堡' => '布蘭登堡',
-'布里斯托尔' => '布里斯托',
-'布隆方丹' => '布隆泉',
-'希拉莉' => '希拉蕊',
-'希拉里' => '希拉蕊',
-'希特拉' => '希特勒',
-'巴尔米拉环礁' => '帕邁拉環礁',
-'帕劳' => '帛琉',
-'希拉克' => '席哈克',
-'账' => '帳',
-'干着急' => '干著急',
-'干着' => '幹著',
-'畿內亞' => '幾內亞',
-'几内亚比绍' => '幾內亞比索',
-'幾內亞比紹' => '幾內亞比索',
-'比利牛斯' => '庇里牛斯',
-'库尔德人' => '庫德人',
-'库尔德族' => '庫德族',
-'康涅狄格' => '康乃狄克',
-'约翰斯顿岛' => '強斯頓環礁',
-'汇编' => '彙編',
-'形而上学' => '形上學',
-'形而上學' => '形上學',
-'得克萨斯' => '德克薩斯',
-'得克薩斯' => '德克薩斯',
-'德累斯頓' => '德勒斯登',
-'德累斯顿' => '德勒斯登',
-'德里达' => '德希達',
-'特拉华' => '德拉瓦',
-'特拉華' => '德拉瓦',
-'快闪存储器' => '快閃記憶體',
-'闪存' => '快閃記憶體',
-'想象' => '想像',
-'愛德文' => '愛德溫',
-'艾滋' => '愛滋',
-'艾奧瓦' => '愛荷華',
-'爱德华州' => '愛達荷州',
-'应用程序' => '應用程式',
-'戈尔巴乔夫' => '戈巴契夫',
-'戈爾巴喬夫' => '戈巴契夫',
-'戒烟' => '戒菸',
-'戒煙' => '戒菸',
-'戴克里先' => '戴克里先',
-'打印度' => '打印度',
-'抽烟' => '抽菸',
-'抽煙' => '抽菸',
-'拉普兰' => '拉布蘭',
-'拒烟' => '拒菸',
-'拒煙' => '拒菸',
-'卷烟' => '捲菸',
-'捲煙' => '捲菸',
-'積架' => '捷豹',
-'控件' => '控制項',
-'推杆' => '推桿',
-'第比利斯' => '提比里西',
-'挥杆' => '揮桿',
-'揮杆' => '揮桿',
-'搜索引擎' => '搜尋引擎',
-'摩根士丹利' => '摩根史坦利',
-'台球' => '撞球',
-'攻打' => '攻打',
-'数字化' => '數位化',
-'數碼化' => '數位化',
-'数字技术' => '數位技術',
-'數碼技術' => '數位技術',
-'数字照相机' => '數位照相機',
-'数码照相机' => '數位照相機',
-'數碼照相機' => '數位照相機',
-'数码相机' => '數位相機',
-'數碼相機' => '數位相機',
-'数字信号' => '數位訊號',
-'數碼訊號' => '數位訊號',
-'数字电视' => '數位電視',
-'數碼電視' => '數位電視',
-'調制解調器' => '數據機',
-'调制解调器' => '數據機',
-'斯洛文尼亚' => '斯洛維尼亞',
-'斯洛文尼亞' => '斯洛維尼亞',
-'新罕布什尔' => '新罕布夏',
-'施罗德' => '施洛德',
-'旱烟' => '旱菸',
-'旱煙' => '旱菸',
-'普利策' => '普利茲',
-'芯片' => '晶片',
-'智能卡' => '智慧卡',
-'智能手机' => '智慧型手機',
-'智能手機' => '智慧型手機',
-'智能电话' => '智慧型電話',
-'智能電話' => '智慧型電話',
-'知識產權' => '智慧財產權',
-'知识产权' => '智慧財產權',
-'萌島' => '曼島',
-'马恩岛' => '曼島',
-'木杆' => '木桿',
-'列奥纳多' => '李奧納多',
-'杜塞尔多夫' => '杜塞道夫',
-'杜塞爾多夫' => '杜塞道夫',
-'迪拜' => '杜拜',
-'东盟' => '東協',
-'亚细安' => '東協',
-'東盟' => '東協',
-'东南亚国家联盟' => '東南亞國家協會',
-'東南亞國家聯盟' => '東南亞國家協會',
-'柏林墙' => '柏林圍牆',
-'柏林牆' => '柏林圍牆',
-'乍得' => '查德',
-'查韦斯' => '查維茲',
-'克林頓' => '柯林頓',
-'克林顿' => '柯林頓',
-'戴卓爾' => '柴契爾',
-'撒切尔' => '柴契爾',
-'格林納達' => '格瑞那達',
-'格林纳达' => '格瑞那達',
-'桃金娘' => '桃金孃',
-'台式电脑' => '桌上型電腦',
-'乒乓' => '桌球',
-'乒乓球' => '桌球',
-'杆弟' => '桿弟',
-'杆身' => '桿身',
-'杆头' => '桿頭',
-'杆頭' => '桿頭',
-'梅尔·吉布森' => '梅爾·吉勃遜',
-'梵高' => '梵谷',
-'桑巴舞' => '森巴舞',
-'榴莲' => '榴槤',
-'榴蓮' => '榴槤',
-'枪支' => '槍枝',
-'标准杆' => '標準桿',
-'標準杆' => '標準桿',
-'毛里求斯' => '模里西斯',
-'毛里裘斯' => '模里西斯',
-'机器人' => '機器人',
-'機械人' => '機器人',
-'概率' => '機率',
-'電單車' => '機車',
-'枱' => '檯',
-'字段' => '欄位',
-'奥巴马' => '歐巴馬',
-'奧巴馬' => '歐巴馬',
-'正在叱咤' => '正在叱咤',
-'文莱' => '汶萊',
-'沙律' => '沙拉',
-'沙地阿拉伯' => '沙烏地阿拉伯',
-'沙特阿拉伯' => '沙烏地阿拉伯',
-'法属圭亚那' => '法屬蓋亞那',
-'波斯尼亚' => '波士尼亞',
-'波斯尼亞' => '波士尼亞',
-'波斯尼亚和黑塞哥维那' => '波士尼亞赫塞哥維納',
-'波斯尼亞黑塞哥維那' => '波士尼亞赫塞哥維納',
-'博茨瓦納' => '波札那',
-'博茨瓦纳' => '波札那',
-'波黑' => '波赫',
-'洋烟' => '洋菸',
-'洋煙' => '洋菸',
-'帕特里克' => '派屈克',
-'海洛英' => '海洛因',
-'侯賽因' => '海珊',
-'侯赛因' => '海珊',
-'鼠标' => '滑鼠',
-'汉诺威' => '漢諾瓦',
-'漢诺威' => '漢諾瓦',
-'烤烟' => '烤菸',
-'烤煙' => '烤菸',
-'无烟日' => '無菸日',
-'無煙日' => '無菸日',
-'无烟环境' => '無菸環境',
-'無煙環境' => '無菸環境',
-'烟熏' => '煙燻',
-'首席运营官' => '營運長',
-'熏烤' => '燻烤',
-'熏肉' => '燻肉',
-'熏黑' => '燻黑',
-'版权信息' => '版權資訊',
-'疯牛症' => '狂牛症',
-'鐵托' => '狄托',
-'铁托' => '狄托',
-'塞拉利昂' => '獅子山',
-'独联体' => '獨立國協',
-'獨聯體' => '獨立國協',
-'独立国家联合体' => '獨立國家國協',
-'獨立國家聯合體' => '獨立國家國協',
-'波利尼西亚' => '玻里尼西亞',
-'波利尼西亞' => '玻里尼西亞',
-'本傑明' => '班傑明',
-'本杰明' => '班傑明',
-'球杆' => '球桿',
-'理查德' => '理察',
-'卢塞恩' => '琉森',
-'危地馬拉' => '瓜地馬拉',
-'危地马拉' => '瓜地馬拉',
-'巴伦西亚' => '瓦倫西亞',
-'華倫西亞' => '瓦倫西亞',
-'冈比亚' => '甘比亞',
-'岡比亞' => '甘比亞',
-'肯尼迪' => '甘迺迪',
-'留尼汪' => '留尼旺',
-'毕加索' => '畢卡索',
-'迭代' => '疊代',
-'徵狀' => '症狀',
-'勃朗宁' => '白朗寧',
-'百慕大' => '百慕達',
-'卢旺达' => '盧安達',
-'盧旺達' => '盧安達',
-'睾' => '睪',
-'知识产权局' => '知識產權局',
-'知識產權局' => '知識產權署',
-'知識產權署' => '知識產權署',
-'知识产权署' => '知識產權署',
-'硅' => '矽',
-'硅藻' => '硅藻',
-'硬盘' => '硬碟',
-'硬件' => '硬體',
-'盘片' => '碟片',
-'磁盘' => '磁碟',
-'磁道' => '磁軌',
-'禁烟' => '禁菸',
-'禁煙' => '禁菸',
-'福尔马林' => '福馬林',
-'福爾馬林' => '福馬林',
-'私烟' => '私菸',
-'私煙' => '私菸',
-'程序员' => '程式設計師',
-'编程语言' => '程式語言',
-'空气质量' => '空氣品質',
-'空氣質素' => '空氣品質',
-'突尼斯' => '突尼西亞',
-'绑紧跳' => '笨豬跳',
-'蹦极跳' => '笨豬跳',
-'短信' => '簡訊',
-'纽黑文' => '紐哈芬',
-'新奥尔良' => '紐奧良',
-'新奧爾良' => '紐奧良',
-'新几内亚' => '紐幾內亞',
-'新西兰' => '紐西蘭',
-'新西蘭' => '紐西蘭',
-'紙煙' => '紙菸',
-'纸烟' => '紙菸',
-'索尔仁尼琴' => '索忍尼辛',
-'索贊尼辛' => '索忍尼辛',
-'所罗门群岛' => '索羅門群島',
-'所羅門群島' => '索羅門群島',
-'索馬里' => '索馬利亞',
-'索马里' => '索馬利亞',
-'索馬里蘭' => '索馬利蘭',
-'索马里兰' => '索馬利蘭',
-'維爾京群島' => '維京群島',
-'维尔京群岛' => '維京群島',
-'弗吉尼亚' => '維吉尼亞',
-'佛得角' => '維德角',
-'维特根斯坦' => '維根斯坦',
-'網絡遊戲' => '網路遊戲',
-'网络游戏' => '網路遊戲',
-'互联网' => '網際網路',
-'互联网络' => '網際網路',
-'互聯網' => '網際網路',
-'互聯網絡' => '網際網路',
-'因特网' => '網際網路',
-'系着' => '繫著',
-'卢瓦尔' => '羅亞爾',
-'盧瓦爾' => '羅亞爾',
-'卢浮宫' => '羅浮宮',
-'樂行童軍' => '羅浮童軍',
-'意大利' => '義大利',
-'昂山素姬' => '翁山蘇姬',
-'昂山素季' => '翁山蘇姬',
-'圣基茨和尼维斯' => '聖克里斯多福及尼維斯',
-'聖吉斯納域斯' => '聖克里斯多福及尼維斯',
-'圣文森特和格林纳丁斯' => '聖文森及格瑞那丁',
-'聖文森特和格林納丁斯' => '聖文森及格瑞那丁',
-'圣赫勒拿' => '聖赫倫那',
-'圣卢西亚' => '聖露西亞',
-'聖盧西亞' => '聖露西亞',
-'圣马力诺' => '聖馬利諾',
-'聖馬力諾' => '聖馬利諾',
-'肯尼亚' => '肯亞',
-'氨基酸' => '胺基酸',
-'自由泳' => '自由式',
-'三藩市' => '舊金山',
-'艾森豪威尔' => '艾森豪',
-'埃菲尔' => '艾菲爾',
-'阿里埃勒·沙龍' => '艾里爾·夏隆',
-'阿里埃勒·沙龙' => '艾里爾·夏隆',
-'帕塔亚' => '芭達亞',
-'黎克特制' => '芮氏',
-'里氏0' => '芮氏0',
-'里氏1' => '芮氏1',
-'里氏2' => '芮氏2',
-'里氏3' => '芮氏3',
-'里氏4' => '芮氏4',
-'里氏5' => '芮氏5',
-'里氏6' => '芮氏6',
-'里氏7' => '芮氏7',
-'里氏8' => '芮氏8',
-'里氏9' => '芮氏9',
-'里氏地震规模' => '芮氏地震規模',
-'里氏规模' => '芮氏規模',
-'里氏震级' => '芮氏規模',
-'当且仅当' => '若且唯若',
-'味美思' => '苦艾酒',
-'毛里塔尼亚' => '茅利塔尼亞',
-'毛里塔尼亞' => '茅利塔尼亞',
-'霍尔木兹' => '荷姆茲',
-'霍爾木茲' => '荷姆茲',
-'荷李活道' => '荷李活道',
-'莫桑比克' => '莫三比克',
-'瓦文萨' => '華勒沙',
-'華里沙' => '華勒沙',
-'瓦格纳' => '華格納',
-'烟具' => '菸具',
-'煙具' => '菸具',
-'烟品' => '菸品',
-'煙品' => '菸品',
-'烟嘴' => '菸嘴',
-'煙嘴' => '菸嘴',
-'烟卷' => '菸捲',
-'煙捲' => '菸捲',
-'烟斗' => '菸斗',
-'煙斗' => '菸斗',
-'烟民' => '菸民',
-'煙民' => '菸民',
-'烟灰' => '菸灰',
-'煙灰' => '菸灰',
-'烟瘾' => '菸癮',
-'煙癮' => '菸癮',
-'烟丝' => '菸絲',
-'煙絲' => '菸絲',
-'烟草' => '菸草',
-'煙草' => '菸草',
-'烟叶' => '菸葉',
-'煙葉' => '菸葉',
-'烟蒂' => '菸蒂',
-'煙蒂' => '菸蒂',
-'烟袋' => '菸袋',
-'煙袋' => '菸袋',
-'烟农' => '菸農',
-'煙農' => '菸農',
-'烟酒' => '菸酒',
-'煙酒' => '菸酒',
-'烟头' => '菸頭',
-'煙頭' => '菸頭',
-'烟鬼' => '菸鬼',
-'煙鬼' => '菸鬼',
-'烟碱' => '菸鹼',
-'煙鹼' => '菸鹼',
-'万历朝鲜战争' => '萬曆朝鮮戰爭',
-'瓦努阿图' => '萬那杜',
-'瓦努阿圖' => '萬那杜',
-'叶利钦' => '葉爾欽',
-'葉利欽' => '葉爾欽',
-'埃里温' => '葉里溫',
-'埃里溫' => '葉里溫',
-'也門' => '葉門',
-'也门' => '葉門',
-'着' => '著',
-'着眼于' => '著眼於',
-'科摩罗' => '葛摩',
-'科摩羅' => '葛摩',
-'格林美獎' => '葛萊美獎',
-'格莱美奖' => '葛萊美獎',
-'黑山共和国' => '蒙特內哥羅共和國',
-'黑山共和國' => '蒙特內哥羅共和國',
-'滿地可' => '蒙特婁',
-'蒙特利尔' => '蒙特婁',
-'蒙特利爾' => '蒙特婁',
-'普密蓬' => '蒲美蓬',
-'布隆迪' => '蒲隆地',
-'圭亚那' => '蓋亞那',
-'肖斯塔科维奇' => '蕭士塔高維奇',
-'蕭士達高維契' => '蕭士塔高維奇',
-'肖邦' => '蕭邦',
-'薛定谔' => '薛丁格',
-'扎伊尔' => '薩伊',
-'扎伊爾' => '薩伊',
-'素檀' => '蘇丹',
-'苏里南' => '蘇利南',
-'浮罗交怡' => '蘭卡威',
-'浮羅交怡' => '蘭卡威',
-'劳拉' => '蘿拉',
-'荧光' => '螢光',
-'荧屏' => '螢屏',
-'屏幕' => '螢幕',
-'行人路权' => '行人路權',
-'行人路權' => '行人路權',
-'流動網絡' => '行動網路',
-'移动网络' => '行動網路',
-'流動電話' => '行動電話',
-'移动电话' => '行動電話',
-'冲着' => '衝著',
-'埃塞俄比亚' => '衣索比亞',
-'埃塞俄比亞' => '衣索比亞',
-'克隆人' => '複製人',
-'国际象棋' => '西洋棋',
-'國際象棋' => '西洋棋',
-'赫梯' => '西臺',
-'分辨率' => '解析度',
-'解像度' => '解析度',
-'译码' => '解碼',
-'出租车' => '計程車',
-'约翰逊' => '詹森',
-'诺曼底' => '諾曼第',
-'瑙魯' => '諾魯',
-'瑙鲁' => '諾魯',
-'科特迪瓦' => '象牙海岸',
-'碧咸' => '貝克漢',
-'貝爾格萊德' => '貝爾格勒',
-'贝尔格莱德' => '貝爾格勒',
-'伯利兹' => '貝里斯',
-'伯利茲' => '貝里斯',
-'首席财务官' => '財務長',
-'集装箱' => '貨櫃',
-'数据库' => '資料庫',
-'數據庫' => '資料庫',
-'信息时代' => '資訊時代',
-'信息论' => '資訊理論',
-'乔布斯' => '賈伯斯',
-'本·拉登' => '賓·拉登',
-'宾西法尼亚' => '賓夕法尼亞',
-'本拉登' => '賓拉登',
-'利比里亚' => '賴比瑞亞',
-'利比里亞' => '賴比瑞亞',
-'莱索托' => '賴索托',
-'萊索托' => '賴索托',
-'塞浦路斯' => '賽普勒斯',
-'赫丘勒·波洛' => '赫丘勒·白羅',
-'赫鲁晓夫' => '赫魯雪夫',
-'切尔诺贝利' => '車諾比',
-'软驱' => '軟碟機',
-'軟件' => '軟體',
-'软件' => '軟體',
-'津巴布韋' => '辛巴威',
-'津巴布韦' => '辛巴威',
-'径入' => '逕入',
-'径到' => '逕到',
-'径取' => '逕取',
-'径启' => '逕啟',
-'径寄' => '逕寄',
-'径庭' => '逕庭',
-'径往' => '逕往',
-'径自' => '逕自',
-'径行' => '逕行',
-'径迎' => '逕迎',
-'链接' => '連結',
-'連結他' => '連結他',
-'进制' => '進位',
-'达·芬奇' => '達·文西',
-'达芬奇' => '達文西',
-'溫納圖萬' => '那杜',
-'丘吉尔' => '邱吉爾',
-'多普勒' => '都卜勒',
-'酰' => '醯',
-'里士满' => '里奇蒙',
-'金沙萨' => '金夏沙',
-'金沙薩' => '金夏沙',
-'健力士世界紀錄' => '金氏世界紀錄',
-'健力士世界纪录' => '金氏世界紀錄',
-'吉尼斯世界纪录' => '金氏世界紀錄',
-'钚' => '鈽',
-'鈎' => '鉤',
-'钩' => '鉤',
-'锎' => '鉲',
-'锫' => '鉳',
-'镅' => '鋂',
-'镎' => '錼',
-'钫' => '鍅',
-'炼金' => '鍊金',
-'锻炼' => '鍛鍊',
-'锝' => '鎝',
-'鐵杆' => '鐵桿',
-'铁杆' => '鐵桿',
-'泰坦尼克号' => '鐵達尼號',
-'锿' => '鑀',
-'关系着' => '關係著',
-'写保护' => '防寫',
-'阿布扎比' => '阿布達比',
-'阿拉伯联合酋长国' => '阿拉伯聯合大公國',
-'阿拉伯聯合酋長國' => '阿拉伯聯合大公國',
-'亚拉巴马' => '阿拉巴馬',
-'阿联酋' => '阿聯',
-'阿聯酋' => '阿聯',
-'罗纳德·里根' => '隆納·雷根',
-'私隱' => '隱私',
-'耶加達' => '雅加達',
-'雅尔塔' => '雅爾達',
-'雅爾塔' => '雅爾達',
-'雅穆苏克雷' => '雅穆索戈',
-'雅穆蘇克雷' => '雅穆索戈',
-'悉尼' => '雪梨',
-'雪茄烟' => '雪茄菸',
-'雪茄煙' => '雪茄菸',
-'莱特湾' => '雷伊泰灣',
-'萊特灣' => '雷伊泰灣',
-'激光' => '雷射',
-'雷诺阿' => '雷諾瓦',
-'电子烟' => '電子菸',
-'電子煙' => '電子菸',
-'晶体管' => '電晶體',
-'晶體管' => '電晶體',
-'电杆' => '電桿',
-'电线杆' => '電線桿',
-'电脑程序' => '電腦程式',
-'计算机程序' => '電腦程式',
-'荷尔斯泰因' => '霍爾斯坦',
-'荷爾斯泰因' => '霍爾斯坦',
-'面包着' => '面包著',
-'朝鲜战争' => '韓戰',
-'声卡' => '音效卡',
-'缺省' => '預設',
-'导弹' => '飛彈',
-'糊口' => '餬口',
-'香烟' => '香菸',
-'香煙' => '香菸',
-'馬里共和國' => '馬利共和國',
-'马里共和国' => '馬利共和國',
-'马拉维' => '馬拉威',
-'馬斯特里赫特' => '馬斯垂克',
-'马斯特里赫特' => '馬斯垂克',
-'马耳他' => '馬爾他',
-'馬爾代夫' => '馬爾地夫',
-'马尔代夫' => '馬爾地夫',
-'馬利蘭' => '馬里蘭',
-'高清电视' => '高畫質電視',
-'斗着' => '鬥著',
-'魯賓斯·巴里切羅' => '魯本·巴瑞切羅',
-'咪高峰' => '麥克風',
-'迈克尔' => '麥可',
-'麦克尔' => '麥可',
-'迈凯轮' => '麥拿輪',
-'邁凱輪' => '麥拿輪',
-'马萨诸塞' => '麻薩諸塞',
-'戴安娜' => '黛安娜',
-'狄安娜' => '黛安娜',
-'点烟' => '點菸',
-'點煙' => '點菸',
-'霉素' => '黴素',
-);
-
-$zh2HK = array(
-'0字节' => '0位元組',
-'1字节' => '1位元組',
-'2字节' => '2位元組',
-'3字节' => '3位元組',
-'4字节' => '4位元組',
-'5字节' => '5位元組',
-'6字节' => '6位元組',
-'7字节' => '7位元組',
-'8字节' => '8位元組',
-'9字节' => '9位元組',
-'IP地址' => 'IP位址',
-'·威尔士' => '·威爾士',
-'·威爾士' => '·威爾士',
-'一地里' => '一地裏',
-'一年里' => '一年裏',
-'三十六著' => '三十六着',
-'三極體' => '三極管',
-'旧金山' => '三藩市',
-'舊金山' => '三藩市',
-'上台面' => '上枱面',
-'下著' => '下着',
-'下著作' => '下著作',
-'下著名' => '下著名',
-'下著有' => '下著有',
-'下著称' => '下著稱',
-'下著稱' => '下著稱',
-'下著者' => '下著者',
-'下著述' => '下著述',
-'下著录' => '下著錄',
-'下著錄' => '下著錄',
-'不占' => '不佔',
-'不萊梅' => '不來梅',
-'不著痕跡' => '不着痕跡',
-'不著邊際' => '不着邊際',
-'世纪里' => '世紀裏',
-'C型肝炎' => '丙型肝炎',
-'C肝' => '丙肝',
-'并发布' => '並發佈',
-'中文里' => '中文裏',
-'乘著' => '乘着',
-'乘著作' => '乘著作',
-'乘著名' => '乘著名',
-'乘著書' => '乘著書',
-'乘著称' => '乘著稱',
-'乘著稱' => '乘著稱',
-'乘著者' => '乘著者',
-'乘著述' => '乘著述',
-'乘著錄' => '乘著錄',
-'B型肝炎' => '乙型肝炎',
-'B肝' => '乙肝',
-'吉力馬札羅' => '乞力馬札羅',
-'葉門' => '也門',
-'事里' => '事裏',
-'二極體' => '二極管',
-'因特网' => '互聯網',
-'網際網路' => '互聯網',
-'井里' => '井裏',
-'亮著' => '亮着',
-'亮著作' => '亮著作',
-'亮著名' => '亮著名',
-'亮著書' => '亮著書',
-'亮著称' => '亮著稱',
-'亮著稱' => '亮著稱',
-'亮著者' => '亮著者',
-'亮著述' => '亮著述',
-'亮著錄' => '亮著錄',
-'人工智慧' => '人工智能',
-'人数里' => '人數裏',
-'仗著' => '仗着',
-'仗著作' => '仗著作',
-'仗著名' => '仗著名',
-'仗著書' => '仗著書',
-'仗著稱' => '仗著稱',
-'仗著者' => '仗著者',
-'仗著述' => '仗著述',
-'仗著錄' => '仗著錄',
-'代表著' => '代表着',
-'代表著作' => '代表著作',
-'代表著名' => '代表著名',
-'代表著書' => '代表著書',
-'代表著稱' => '代表著稱',
-'代表著者' => '代表著者',
-'代表著述' => '代表著述',
-'代表著錄' => '代表著錄',
-'伊斯蘭瑪巴德' => '伊斯蘭堡',
-'埃博拉' => '伊波拉',
-'伏著' => '伏着',
-'貝里斯' => '伯利茲',
-'伯明罕' => '伯明翰',
-'伴著' => '伴着',
-'伴著作' => '伴著作',
-'伴著名' => '伴著名',
-'伴著書' => '伴著書',
-'伴著稱' => '伴著稱',
-'伴著者' => '伴著者',
-'伴著述' => '伴著述',
-'伴著錄' => '伴著錄',
-'布下了' => '佈下了',
-'布下的' => '佈下的',
-'布光' => '佈光',
-'布告' => '佈告',
-'布局' => '佈局',
-'布展' => '佈展',
-'布控' => '佈控',
-'布于' => '佈於',
-'布於' => '佈於',
-'布施' => '佈施',
-'布景' => '佈景',
-'布满' => '佈滿',
-'布滿' => '佈滿',
-'布置' => '佈置',
-'布設' => '佈設',
-'布设' => '佈設',
-'布警' => '佈警',
-'布道' => '佈道',
-'布防' => '佈防',
-'布阵' => '佈陣',
-'布陣' => '佈陣',
-'布雷、' => '佈雷、',
-'布雷。' => '佈雷。',
-'布雷封鎖' => '佈雷封鎖',
-'布雷封锁' => '佈雷封鎖',
-'布雷的' => '佈雷的',
-'布雷艇' => '佈雷艇',
-'布雷舰' => '佈雷艦',
-'布雷艦' => '佈雷艦',
-'布雷速度' => '佈雷速度',
-'布雷,' => '佈雷,',
-'布雷;' => '佈雷;',
-'布点' => '佈點',
-'布點' => '佈點',
-'低著' => '低着',
-'低著作' => '低著作',
-'低著名' => '低著名',
-'低著書' => '低著書',
-'低著称' => '低著稱',
-'低著稱' => '低著稱',
-'低著者' => '低著者',
-'低著述' => '低著述',
-'低著錄' => '低著錄',
-'住著' => '住着',
-'住著作' => '住著作',
-'住著名' => '住著名',
-'住著書' => '住著書',
-'住著稱' => '住著稱',
-'住著者' => '住著者',
-'住著述' => '住著述',
-'住著錄' => '住著錄',
-'占0' => '佔0',
-'占1' => '佔1',
-'占2' => '佔2',
-'占3' => '佔3',
-'占4' => '佔4',
-'占5' => '佔5',
-'占6' => '佔6',
-'占7' => '佔7',
-'占8' => '佔8',
-'占9' => '佔9',
-'占A' => '佔A',
-'占B' => '佔B',
-'占C' => '佔C',
-'占D' => '佔D',
-'占E' => '佔E',
-'占F' => '佔F',
-'占G' => '佔G',
-'占H' => '佔H',
-'占I' => '佔I',
-'占J' => '佔J',
-'占K' => '佔K',
-'占L' => '佔L',
-'占M' => '佔M',
-'占N' => '佔N',
-'占O' => '佔O',
-'占P' => '佔P',
-'占Q' => '佔Q',
-'占R' => '佔R',
-'占S' => '佔S',
-'占T' => '佔T',
-'占U' => '佔U',
-'占V' => '佔V',
-'占W' => '佔W',
-'占X' => '佔X',
-'占Y' => '佔Y',
-'占Z' => '佔Z',
-'占〇' => '佔〇',
-'占一' => '佔一',
-'占七' => '佔七',
-'占三' => '佔三',
-'占上風' => '佔上風',
-'占上风' => '佔上風',
-'占下' => '佔下',
-'占下風' => '佔下風',
-'占下风' => '佔下風',
-'占不占' => '佔不佔',
-'占不足' => '佔不足',
-'占世界' => '佔世界',
-'占中' => '佔中',
-'占主' => '佔主',
-'占主要' => '佔主要',
-'占九' => '佔九',
-'占了' => '佔了',
-'占二' => '佔二',
-'占五' => '佔五',
-'占人便宜' => '佔人便宜',
-'占位' => '佔位',
-'占住' => '佔住',
-'占占' => '佔佔',
-'占便宜' => '佔便宜',
-'占俄' => '佔俄',
-'占个' => '佔個',
-'占個' => '佔個',
-'占个位' => '佔個位',
-'占個位' => '佔個位',
-'占亿' => '佔億',
-'占億' => '佔億',
-'占优' => '佔優',
-'占優' => '佔優',
-'占先' => '佔先',
-'占光' => '佔光',
-'占全' => '佔全',
-'占两' => '佔兩',
-'占兩' => '佔兩',
-'占八' => '佔八',
-'占六' => '佔六',
-'占分' => '佔分',
-'占到' => '佔到',
-'占加' => '佔加',
-'占劣' => '佔劣',
-'占北' => '佔北',
-'占十' => '佔十',
-'占千' => '佔千',
-'占半' => '佔半',
-'占南' => '佔南',
-'占印' => '佔印',
-'占去' => '佔去',
-'占取' => '佔取',
-'占台' => '佔台',
-'占囁' => '佔囁',
-'占四' => '佔四',
-'占国' => '佔國',
-'占國' => '佔國',
-'占在' => '佔在',
-'占地' => '佔地',
-'占场' => '佔場',
-'占場' => '佔場',
-'占压' => '佔壓',
-'占壓' => '佔壓',
-'占多' => '佔多',
-'占大' => '佔大',
-'占好' => '佔好',
-'占小' => '佔小',
-'占少' => '佔少',
-'占局部' => '佔局部',
-'占屋' => '佔屋',
-'占山为' => '佔山為',
-'占山為' => '佔山為',
-'占市' => '佔市',
-'占平均' => '佔平均',
-'占床' => '佔床',
-'占座' => '佔座',
-'占後' => '佔後',
-'占得' => '佔得',
-'占德' => '佔德',
-'占所有' => '佔所有',
-'占掉' => '佔掉',
-'占据' => '佔據',
-'占據' => '佔據',
-'占整' => '佔整',
-'占新' => '佔新',
-'占有' => '佔有',
-'占东' => '佔東',
-'占東' => '佔東',
-'占查' => '佔查',
-'占次' => '佔次',
-'占比' => '佔比',
-'占法' => '佔法',
-'占满' => '佔滿',
-'占滿' => '佔滿',
-'占澳' => '佔澳',
-'占为' => '佔為',
-'占為' => '佔為',
-'占率' => '佔率',
-'占用' => '佔用',
-'占毕' => '佔畢',
-'占畢' => '佔畢',
-'占百' => '佔百',
-'占尽' => '佔盡',
-'占盡' => '佔盡',
-'占着' => '佔着',
-'占著' => '佔着',
-'占網' => '佔網',
-'占网' => '佔網',
-'占線' => '佔線',
-'占线' => '佔線',
-'占总' => '佔總',
-'占總' => '佔總',
-'占缺' => '佔缺',
-'占美国' => '佔美國',
-'占美國' => '佔美國',
-'占耕' => '佔耕',
-'占至多' => '佔至多',
-'占至少' => '佔至少',
-'占臺' => '佔臺',
-'占英' => '佔英',
-'占万' => '佔萬',
-'占萬' => '佔萬',
-'占著名' => '佔著名',
-'占著者' => '佔著者',
-'占葡' => '佔葡',
-'占苏' => '佔蘇',
-'占蘇' => '佔蘇',
-'占西' => '佔西',
-'占資' => '佔資',
-'占资' => '佔資',
-'占起' => '佔起',
-'占超过' => '佔超過',
-'占超過' => '佔超過',
-'占过' => '佔過',
-'占過' => '佔過',
-'占道' => '佔道',
-'占零' => '佔零',
-'占領' => '佔領',
-'占领' => '佔領',
-'占头' => '佔頭',
-'占頭' => '佔頭',
-'占头筹' => '佔頭籌',
-'占頭籌' => '佔頭籌',
-'占香' => '佔香',
-'占馬' => '佔馬',
-'占马' => '佔馬',
-'占高枝' => '佔高枝',
-'維德角' => '佛得角',
-'作品里' => '作品裏',
-'來著' => '來着',
-'來著作' => '來著作',
-'來著名' => '來著名',
-'來著書' => '來著書',
-'來著稱' => '來著稱',
-'來著者' => '來著者',
-'來著述' => '來著述',
-'來著錄' => '來著錄',
-'侵占' => '侵佔',
-'俄占' => '俄佔',
-'保障著' => '保障着',
-'保障著作' => '保障著作',
-'保障著名' => '保障著名',
-'保障著書' => '保障著書',
-'保障著稱' => '保障著稱',
-'保障著者' => '保障著者',
-'保障著述' => '保障著述',
-'保障著錄' => '保障著錄',
-'信著' => '信着',
-'信著作' => '信著作',
-'信著名' => '信著名',
-'信著書' => '信著書',
-'信著称' => '信著稱',
-'信著稱' => '信著稱',
-'信著者' => '信著者',
-'信著述' => '信著述',
-'信著錄' => '信著錄',
-'个月里' => '個月裏',
-'个里' => '個裏',
-'倒楣' => '倒霉',
-'候著' => '候着',
-'候著作' => '候著作',
-'候著名' => '候著名',
-'候著書' => '候著書',
-'候著稱' => '候著稱',
-'候著者' => '候著者',
-'候著述' => '候著述',
-'候著錄' => '候著錄',
-'借著' => '借着',
-'借著作' => '借著作',
-'借著名' => '借著名',
-'借著書' => '借著書',
-'借著稱' => '借著稱',
-'借著者' => '借著者',
-'借著述' => '借著述',
-'借著錄' => '借著錄',
-'假里' => '假裏',
-'做著' => '做着',
-'做著作' => '做著作',
-'做著名' => '做著名',
-'做著書' => '做著書',
-'做著稱' => '做著稱',
-'做著者' => '做著者',
-'做著述' => '做著述',
-'做著錄' => '做著錄',
-'吉尼斯世界纪录' => '健力士世界紀錄',
-'金氏世界紀錄' => '健力士世界紀錄',
-'側著' => '側着',
-'側著作' => '側著作',
-'側著名' => '側著名',
-'側著書' => '側著書',
-'側著稱' => '側著稱',
-'側著者' => '側著者',
-'側著述' => '側著述',
-'側著錄' => '側著錄',
-'偷著' => '偷着',
-'偷著作' => '偷著作',
-'偷著名' => '偷著名',
-'偷著書' => '偷著書',
-'偷著稱' => '偷著稱',
-'偷著者' => '偷著者',
-'偷著述' => '偷著述',
-'偷著錄' => '偷著錄',
-'備著' => '備着',
-'備著作' => '備著作',
-'備著名' => '備著名',
-'備著書' => '備著書',
-'備著稱' => '備著稱',
-'備著者' => '備著者',
-'備著述' => '備著述',
-'備著錄' => '備著錄',
-'傻里傻气' => '傻裏傻氣',
-'雇员' => '僱員',
-'雇用' => '僱用',
-'凶惡' => '兇惡',
-'凶殘' => '兇殘',
-'凶殺' => '兇殺',
-'先占' => '先佔',
-'雪鐵龍' => '先進',
-'雪铁龙' => '先進',
-'光著' => '光着',
-'光著作' => '光著作',
-'光著名' => '光著名',
-'光著書' => '光著書',
-'光著称' => '光著稱',
-'光著稱' => '光著稱',
-'光著者' => '光著者',
-'光著述' => '光著述',
-'光著錄' => '光著錄',
-'柯林頓' => '克林頓',
-'克羅埃西亞' => '克羅地亞',
-'公布' => '公佈',
-'冒著' => '冒着',
-'冒著作' => '冒著作',
-'冒著名' => '冒著名',
-'冒著書' => '冒著書',
-'冒著稱' => '冒著稱',
-'冒著者' => '冒著者',
-'冒著述' => '冒著述',
-'冒著錄' => '冒著錄',
-'冰山里' => '冰山裏',
-'恺撒' => '凱撒',
-'函数里' => '函數裏',
-'分布' => '分佈',
-'分布于' => '分佈於',
-'分佈著' => '分佈着',
-'分布著' => '分佈着',
-'分占' => '分佔',
-'分钟里' => '分鐘裏',
-'錢尼' => '切尼',
-'切尔诺贝利' => '切爾諾貝爾',
-'列支敦斯登' => '列支敦士登',
-'別著' => '別着',
-'賴比瑞亞' => '利比里亞',
-'刮著' => '刮着',
-'到山里' => '到山裏',
-'制著' => '制着',
-'制著作' => '制著作',
-'制著名' => '制著名',
-'制著書' => '制著書',
-'制著稱' => '制著稱',
-'制著者' => '制著者',
-'制著述' => '制著述',
-'制著錄' => '制著錄',
-'刻著' => '刻着',
-'刻著作' => '刻著作',
-'刻著名' => '刻著名',
-'刻著書' => '刻著書',
-'刻著称' => '刻著稱',
-'刻著稱' => '刻著稱',
-'刻著者' => '刻著者',
-'刻著述' => '刻著述',
-'刻著錄' => '刻著錄',
-'前波莫瑞' => '前波美拉尼亞',
-'剪彩' => '剪綵',
-'割占' => '割佔',
-'劃著' => '劃着',
-'击剑' => '劍擊',
-'擊劍' => '劍擊',
-'加薩走廊' => '加沙地帶',
-'迦納' => '加納',
-'加彭' => '加蓬',
-'努力著' => '努力着',
-'努力著作' => '努力著作',
-'努力著名' => '努力著名',
-'努力著書' => '努力著書',
-'努力著称' => '努力著稱',
-'努力著稱' => '努力著稱',
-'努力著者' => '努力著者',
-'努力著述' => '努力著述',
-'努力著錄' => '努力著錄',
-'布蘭登堡' => '勃蘭登堡',
-'動著' => '動着',
-'動著作' => '動著作',
-'動著名' => '動著名',
-'動著書' => '動著書',
-'動著稱' => '動著稱',
-'動著者' => '動著者',
-'動著述' => '動著述',
-'動著錄' => '動著錄',
-'包著' => '包着',
-'北朝鲜' => '北韓',
-'南朝鲜' => '南韓',
-'波札那' => '博茨瓦納',
-'占卜' => '占卜',
-'占国桥' => '占國橋',
-'占國橋' => '占國橋',
-'占有五不' => '占有五不',
-'占著作' => '占著作',
-'占著稱' => '占著稱',
-'占著述' => '占著述',
-'占著錄' => '占著錄',
-'卡普里亚蒂' => '卡佩雅蒂',
-'喀拉蚩' => '卡拉奇',
-'卡斯楚' => '卡斯特羅',
-'印著' => '印着',
-'印著作' => '印著作',
-'印著名' => '印著名',
-'印著書' => '印著書',
-'印著稱' => '印著稱',
-'印著者' => '印著者',
-'印著述' => '印著述',
-'印著錄' => '印著錄',
-'瓜地馬拉' => '危地馬拉',
-'厄瓜多' => '厄瓜多爾',
-'厄瓜多尔' => '厄瓜多爾',
-'厄瓜多爾' => '厄瓜多爾',
-'厄利垂亚' => '厄立特里亞',
-'厄利垂亞' => '厄立特里亞',
-'源代码' => '原始碼',
-'去山里' => '去山裏',
-'参数里' => '參數裏',
-'受著' => '受着',
-'受著作' => '受著作',
-'受著名' => '受著名',
-'受著書' => '受著書',
-'受著稱' => '受著稱',
-'受著者' => '受著者',
-'受著述' => '受著述',
-'受著錄' => '受著錄',
-'丛林里' => '叢林裏',
-'口里' => '口裏',
-'只占' => '只佔',
-'叫著' => '叫着',
-'叫著作' => '叫著作',
-'叫著名' => '叫著名',
-'叫著書' => '叫著書',
-'叫著稱' => '叫著稱',
-'叫著者' => '叫著者',
-'叫著述' => '叫著述',
-'叫著錄' => '叫著錄',
-'古柯鹼' => '可卡因',
-'叱吒' => '叱咤',
-'斯坦福大学' => '史丹福大學',
-'史匹柏' => '史匹堡',
-'斯皮尔伯格' => '史匹堡',
-'史蒂芬·史匹柏' => '史提芬·史匹堡',
-'斯蒂芬·斯皮尔伯格' => '史提芬·史匹堡',
-'吃不著' => '吃不着',
-'吃得著' => '吃得着',
-'吃著' => '吃着',
-'吃里扒外' => '吃裏扒外',
-'吃里爬外' => '吃裏爬外',
-'吉布地' => '吉布堤',
-'吊著' => '吊着',
-'向著' => '向着',
-'向著作' => '向著作',
-'向著名' => '向著名',
-'向著書' => '向著書',
-'向著稱' => '向著稱',
-'向著者' => '向著者',
-'向著述' => '向著述',
-'向著錄' => '向著錄',
-'吞占' => '吞佔',
-'吧台' => '吧枱',
-'含著' => '含着',
-'含著作' => '含著作',
-'含著名' => '含著名',
-'含著書' => '含著書',
-'含著稱' => '含著稱',
-'含著者' => '含著者',
-'含著述' => '含著述',
-'含著錄' => '含著錄',
-'吹著' => '吹着',
-'吹著作' => '吹著作',
-'吹著名' => '吹著名',
-'吹著書' => '吹著書',
-'吹著稱' => '吹著稱',
-'吹著者' => '吹著者',
-'吹著述' => '吹著述',
-'吹著錄' => '吹著錄',
-'呆著' => '呆着',
-'呆里呆气' => '呆裏呆氣',
-'味著' => '味着',
-'味著作' => '味著作',
-'味著名' => '味著名',
-'味著書' => '味著書',
-'味著称' => '味著稱',
-'味著稱' => '味著稱',
-'味著者' => '味著者',
-'味著述' => '味著述',
-'味著錄' => '味著錄',
-'咖哩' => '咖喱',
-'麥克風' => '咪高峰',
-'麦克风' => '咪高峰',
-'哥特式' => '哥德式',
-'哥斯大黎加' => '哥斯達黎加',
-'哪里' => '哪裏',
-'哭著' => '哭着',
-'哭著作' => '哭著作',
-'哭著名' => '哭著名',
-'哭著書' => '哭著書',
-'哭著稱' => '哭著稱',
-'哭著者' => '哭著者',
-'哭著述' => '哭著述',
-'哭著錄' => '哭著錄',
-'唱著' => '唱着',
-'唱著作' => '唱著作',
-'唱著名' => '唱著名',
-'唱著書' => '唱著書',
-'唱著稱' => '唱著稱',
-'唱著者' => '唱著者',
-'唱著述' => '唱著述',
-'唱著錄' => '唱著錄',
-'喝著' => '喝着',
-'喝著作' => '喝著作',
-'喝著名' => '喝著名',
-'喝著書' => '喝著書',
-'喝著稱' => '喝著稱',
-'喝著者' => '喝著者',
-'喝著述' => '喝著述',
-'喝著錄' => '喝著錄',
-'賈伯斯' => '喬布斯',
-'乔治·奥威尔' => '喬治·歐威爾',
-'单反相机' => '單鏡反光機',
-'單眼相機' => '單鏡反光機',
-'嗅不著' => '嗅不着',
-'嗅得著' => '嗅得着',
-'嗅著' => '嗅着',
-'凯瑟琳' => '嘉芙蓮',
-'凱薩琳' => '嘉芙蓮',
-'嘯吒' => '嘯咤',
-'嘴里' => '嘴裏',
-'嚷著' => '嚷着',
-'嚷著作' => '嚷著作',
-'嚷著名' => '嚷著名',
-'嚷著書' => '嚷著書',
-'嚷著稱' => '嚷著稱',
-'嚷著者' => '嚷著者',
-'嚷著述' => '嚷著述',
-'嚷著錄' => '嚷著錄',
-'回著' => '回着',
-'回著名' => '回著名',
-'因著' => '因着',
-'因著〈' => '因著〈',
-'因著《' => '因著《',
-'因著作' => '因著作',
-'因著名' => '因著名',
-'因著書' => '因著書',
-'因著稱' => '因著稱',
-'因著者' => '因著者',
-'因著述' => '因著述',
-'因著錄' => '因著錄',
-'困著' => '困着',
-'困著作' => '困著作',
-'困著名' => '困著名',
-'困著書' => '困著書',
-'困著稱' => '困著稱',
-'困著者' => '困著者',
-'困著述' => '困著述',
-'困著錄' => '困著錄',
-'固著' => '固着',
-'圈占' => '圈佔',
-'圈里' => '圈裏',
-'西洋棋' => '國際象棋',
-'圍著' => '圍着',
-'圍著作' => '圍著作',
-'圍著名' => '圍著名',
-'圍著書' => '圍著書',
-'圍著稱' => '圍著稱',
-'圍著者' => '圍著者',
-'圍著述' => '圍著述',
-'圍著錄' => '圍著錄',
-'园里' => '園裏',
-'吐瓦魯' => '圖瓦盧',
-'土魯斯' => '圖盧茲',
-'图里的' => '圖裏的',
-'图里,' => '圖裏,',
-'土里' => '土裏',
-'在山里' => '在山裏',
-'蓋亞那' => '圭亞那',
-'地占' => '地佔',
-'地图里' => '地圖裏',
-'堪培拉' => '坎培拉',
-'坐台' => '坐枱',
-'坐著' => '坐着',
-'坐著作' => '坐著作',
-'坐著名' => '坐著名',
-'坐著書' => '坐著書',
-'坐著稱' => '坐著稱',
-'坐著者' => '坐著者',
-'坐著述' => '坐著述',
-'坐著錄' => '坐著錄',
-'坑里' => '坑裏',
-'坦尚尼亞' => '坦桑尼亞',
-'衣索匹亞' => '埃塞俄比亚',
-'衣索比亞' => '埃塞俄比亞',
-'葉里溫' => '埃里溫',
-'城市里' => '城市裏',
-'城里' => '城裏',
-'域里' => '域裏',
-'吉里巴斯' => '基里巴斯',
-'堅貞著' => '堅貞着',
-'场里' => '場裏',
-'塗著' => '塗着',
-'塞普勒斯' => '塞浦路斯',
-'賽普勒斯' => '塞浦路斯',
-'塞爾維亞與蒙特內哥羅' => '塞爾維亞和黑山',
-'塞席爾' => '塞舌爾',
-'境里' => '境裏',
-'壓著' => '壓着',
-'壓著作' => '壓著作',
-'壓著名' => '壓著名',
-'壓著書' => '壓著書',
-'壓著稱' => '壓著稱',
-'壓著者' => '壓著者',
-'壓著述' => '壓著述',
-'壓著錄' => '壓著錄',
-'壶里' => '壺裏',
-'多占' => '多佔',
-'夜晚里' => '夜晚裏',
-'夜里' => '夜裏',
-'夢有五不占' => '夢有五不占',
-'梦有五不占' => '夢有五不占',
-'夢著' => '夢着',
-'夢著作' => '夢著作',
-'夢著名' => '夢著名',
-'夢著書' => '夢著書',
-'夢著稱' => '夢著稱',
-'夢著者' => '夢著者',
-'夢著述' => '夢著述',
-'夢著錄' => '夢著錄',
-'梦里' => '夢裏',
-'天里' => '天裏',
-'宇航员' => '太空人',
-'夾著' => '夾着',
-'夾著作' => '夾著作',
-'夾著名' => '夾著名',
-'夾著書' => '夾著書',
-'夾著稱' => '夾著稱',
-'夾著者' => '夾著者',
-'夾著述' => '夾著述',
-'夾著錄' => '夾著錄',
-'奥占' => '奧佔',
-'奧占' => '奧佔',
-'歐巴馬' => '奧巴馬',
-'妆台' => '妝枱',
-'威斯伐倫' => '威斯特法倫',
-'威尔士' => '威爾斯',
-'威爾士' => '威爾斯',
-'子里' => '子裏',
-'字里行间' => '字裏行間',
-'存在著' => '存在着',
-'存著' => '存着',
-'存著作' => '存著作',
-'存著名' => '存著名',
-'孟德爾頌' => '孟德爾遜',
-'门德尔松' => '孟德爾遜',
-'學著' => '學着',
-'學著作' => '學著作',
-'學著名' => '學著名',
-'學著書' => '學著書',
-'學著稱' => '學著稱',
-'學著者' => '學著者',
-'學著述' => '學著述',
-'學著錄' => '學著錄',
-'学里' => '學裏',
-'守著' => '守着',
-'守著作' => '守著作',
-'守著名' => '守著名',
-'守著書' => '守著書',
-'守著称' => '守著稱',
-'守著稱' => '守著稱',
-'守著者' => '守著者',
-'守著述' => '守著述',
-'守著錄' => '守著錄',
-'安哈特' => '安哈爾特',
-'安地卡及巴布達' => '安提瓜和巴布達',
-'定著' => '定着',
-'定著作' => '定著作',
-'定著名' => '定著名',
-'定著書' => '定著書',
-'定著称' => '定著稱',
-'定著稱' => '定著稱',
-'定著者' => '定著者',
-'定著述' => '定著述',
-'定著錄' => '定著錄',
-'宣布' => '宣佈',
-'宫里' => '宮裏',
-'家里' => '家裏',
-'密布' => '密佈',
-'密西根' => '密歇根',
-'沃尓沃' => '富豪',
-'寡占' => '寡佔',
-'写字台' => '寫字枱',
-'寫著' => '寫着',
-'寫著作' => '寫著作',
-'寫著名' => '寫著名',
-'寫著書' => '寫著書',
-'寫著稱' => '寫著稱',
-'寫著者' => '寫著者',
-'寫著述' => '寫著述',
-'寫著錄' => '寫著錄',
-'宝里宝气' => '寶裏寶氣',
-'封面里' => '封面裏',
-'将占' => '將佔',
-'將占' => '將佔',
-'将占卜' => '將占卜',
-'將占卜' => '將占卜',
-'专辑里' => '專輯裏',
-'尋著' => '尋着',
-'尋著作' => '尋著作',
-'尋著名' => '尋著名',
-'尋著書' => '尋著書',
-'尋著稱' => '尋著稱',
-'尋著者' => '尋著者',
-'尋著述' => '尋著述',
-'尋著錄' => '尋著錄',
-'對著' => '對着',
-'對著作' => '對著作',
-'對著名' => '對著名',
-'對著書' => '對著書',
-'對著稱' => '對著稱',
-'對著者' => '對著者',
-'對著述' => '對著述',
-'對著錄' => '對著錄',
-'小时里' => '小時裏',
-'少占' => '少佔',
-'就里' => '就裏',
-'尼克松' => '尼克遜',
-'奈及利亞' => '尼日利亞',
-'局里' => '局裏',
-'屋里' => '屋裏',
-'展著' => '展着',
-'展著作' => '展著作',
-'展著名' => '展著名',
-'展著書' => '展著書',
-'展著稱' => '展著稱',
-'展著者' => '展著者',
-'展著述' => '展著述',
-'展著錄' => '展著錄',
-'屯里' => '屯裏',
-'山里有' => '山裏有',
-'山里的' => '山裏的',
-'甘比亞' => '岡比亞',
-'岸裡' => '岸裡',
-'工作台' => '工作枱',
-'已占' => '已佔',
-'巴塞罗那' => '巴塞隆拿',
-'巴塞隆納' => '巴塞隆拿',
-'巴貝多' => '巴巴多斯',
-'巴布亞紐幾內亞' => '巴布亞新畿內亞',
-'巴士拉' => '巴斯拉',
-'巷里' => '巷裏',
-'市占' => '市佔',
-'市里的' => '市裏的',
-'布吉納法索' => '布基納法索',
-'布什' => '布殊',
-'布里斯托尔' => '布里斯托',
-'蒲隆地' => '布隆迪',
-'希冀著' => '希冀着',
-'席哈克' => '希拉克',
-'希拉蕊' => '希拉莉',
-'希特勒' => '希特拉',
-'帛琉' => '帕勞',
-'巴尔米拉环礁' => '帕邁拉環礁',
-'帕劳' => '帛琉',
-'帶著' => '帶着',
-'帶著作' => '帶著作',
-'帶著名' => '帶著名',
-'帶著書' => '帶著書',
-'帶著稱' => '帶著稱',
-'帶著者' => '帶著者',
-'帶著述' => '帶著述',
-'帶著錄' => '帶著錄',
-'幅图里' => '幅圖裏',
-'幫著' => '幫着',
-'幫著作' => '幫著作',
-'幫著名' => '幫著名',
-'幫著書' => '幫著書',
-'幫著稱' => '幫著稱',
-'幫著者' => '幫著者',
-'幫著述' => '幫著述',
-'幫著錄' => '幫著錄',
-'干着急' => '干着急',
-'賓士' => '平治',
-'年代里' => '年代裏',
-'年里' => '年裏',
-'干着' => '幹着',
-'幹著' => '幹着',
-'幹著名' => '幹著名',
-'幹著稱' => '幹著稱',
-'幾內亞比索' => '幾內亞比紹',
-'店里' => '店裏',
-'庫德人' => '庫爾德人',
-'庫德族' => '庫爾德族',
-'坎城' => '康城',
-'戛纳' => '康城',
-'庙里' => '廟裏',
-'广播里' => '廣播裏',
-'強占' => '強佔',
-'强占' => '強佔',
-'约翰斯顿岛' => '強斯頓環礁',
-'弹子台' => '彈子枱',
-'蹦床' => '彈床',
-'弹珠台' => '彈珠枱',
-'形上學' => '形而上學',
-'谢丽·布莱尔' => '彭雪玲',
-'往里' => '往裏',
-'待著' => '待着',
-'待著作' => '待著作',
-'待著名' => '待著名',
-'待著書' => '待著書',
-'待著稱' => '待著稱',
-'待著者' => '待著者',
-'待著述' => '待著述',
-'待著錄' => '待著錄',
-'得著' => '得着',
-'得著作' => '得著作',
-'得著名' => '得著名',
-'得著書' => '得著書',
-'得著稱' => '得著稱',
-'得著者' => '得著者',
-'得著述' => '得著述',
-'得著錄' => '得著錄',
-'从图里' => '從圖裏',
-'从山里' => '從山裏',
-'从里到外' => '從裏到外',
-'从里向外' => '從裏向外',
-'循著' => '循着',
-'循著作' => '循著作',
-'循著名' => '循著名',
-'循著書' => '循著書',
-'循著稱' => '循著稱',
-'循著者' => '循著者',
-'循著述' => '循著述',
-'循著錄' => '循著錄',
-'征占' => '徵佔',
-'徵占' => '徵佔',
-'德占' => '德佔',
-'得克萨斯' => '德克薩斯',
-'德勒斯登' => '德累斯頓',
-'澈底' => '徹底',
-'心著' => '心着',
-'心著作' => '心著作',
-'心著名' => '心著名',
-'心著書' => '心著書',
-'心著称' => '心著稱',
-'心著稱' => '心著稱',
-'心著者' => '心著者',
-'心著述' => '心著述',
-'心著錄' => '心著錄',
-'心里' => '心裏',
-'心里面' => '心裏面',
-'忍著' => '忍着',
-'忍著作' => '忍著作',
-'忍著名' => '忍著名',
-'忍著書' => '忍著書',
-'忍著稱' => '忍著稱',
-'忍著者' => '忍著者',
-'忍著述' => '忍著述',
-'忍著錄' => '忍著錄',
-'忙著' => '忙着',
-'忙著作' => '忙著作',
-'忙著名' => '忙著名',
-'忙著書' => '忙著書',
-'忙著稱' => '忙著稱',
-'忙著者' => '忙著者',
-'忙著述' => '忙著述',
-'忙著錄' => '忙著錄',
-'忙里' => '忙裏',
-'忠貞著' => '忠貞着',
-'急著' => '急着',
-'急著作' => '急著作',
-'急著名' => '急著名',
-'急著書' => '急著書',
-'急著稱' => '急著稱',
-'急著者' => '急著者',
-'急著述' => '急著述',
-'急著錄' => '急著錄',
-'怪里怪气' => '怪裏怪氣',
-'悠著' => '悠着',
-'悠著作' => '悠著作',
-'悠著名' => '悠著名',
-'悠著書' => '悠著書',
-'悠著稱' => '悠著稱',
-'悠著者' => '悠著者',
-'悠著述' => '悠著述',
-'悠著錄' => '悠著錄',
-'悶著' => '悶着',
-'想象' => '想像',
-'想著' => '想着',
-'想著作' => '想著作',
-'想著名' => '想著名',
-'想著書' => '想著書',
-'想著称' => '想著稱',
-'想著稱' => '想著稱',
-'想著者' => '想著者',
-'想著述' => '想著述',
-'想著錄' => '想著錄',
-'意占' => '意佔',
-'義占' => '意佔',
-'義大利' => '意大利',
-'艾滋' => '愛滋',
-'愛著' => '愛着',
-'愛著作' => '愛著作',
-'愛著名' => '愛著名',
-'愛著書' => '愛著書',
-'愛著稱' => '愛著稱',
-'愛著者' => '愛著者',
-'愛著述' => '愛著述',
-'愛著錄' => '愛著錄',
-'慌里慌张' => '慌裏慌張',
-'慣著' => '慣着',
-'慣著作' => '慣著作',
-'慣著名' => '慣著名',
-'慣著書' => '慣著書',
-'慣著稱' => '慣著稱',
-'慣著者' => '慣著者',
-'慣著述' => '慣著述',
-'慣著錄' => '慣著錄',
-'宪法里' => '憲法裏',
-'应用程序' => '應用程式',
-'應著' => '應着',
-'應著作' => '應著作',
-'應著名' => '應著名',
-'應著書' => '應著書',
-'應著稱' => '應著稱',
-'應著者' => '應著者',
-'應著述' => '應著述',
-'應著錄' => '應著錄',
-'懷著' => '懷着',
-'懷著作' => '懷著作',
-'懷著名' => '懷著名',
-'懷著書' => '懷著書',
-'懷著稱' => '懷著稱',
-'懷著者' => '懷著者',
-'懷著述' => '懷著述',
-'懷著錄' => '懷著錄',
-'怀里' => '懷裏',
-'戀著' => '戀着',
-'戀著作' => '戀著作',
-'戀著名' => '戀著名',
-'戀著書' => '戀著書',
-'戀著稱' => '戀著稱',
-'戀著者' => '戀著者',
-'戀著述' => '戀著述',
-'戀著錄' => '戀著錄',
-'戈巴契夫' => '戈爾巴喬夫',
-'戰著' => '戰着',
-'戰著作' => '戰著作',
-'戰著名' => '戰著名',
-'戰著書' => '戰著書',
-'戰著稱' => '戰著稱',
-'戰著者' => '戰著者',
-'戰著述' => '戰著述',
-'戰著錄' => '戰著錄',
-'戏彩娱亲' => '戲綵娛親',
-'戲彩娛親' => '戲綵娛親',
-'戏里' => '戲裏',
-'撒切尔' => '戴卓爾',
-'柴契爾' => '戴卓爾',
-'狄安娜' => '戴安娜',
-'黛安娜' => '戴安娜',
-'戴著' => '戴着',
-'戴著作' => '戴著作',
-'戴著名' => '戴著名',
-'戴著書' => '戴著書',
-'戴著稱' => '戴著稱',
-'戴著者' => '戴著者',
-'戴著述' => '戴著述',
-'戴著錄' => '戴著錄',
-'房里' => '房裏',
-'所占' => '所佔',
-'索羅門群島' => '所羅門群島',
-'手里' => '手裏',
-'手里剑' => '手裏劍',
-'列印' => '打印',
-'印表機' => '打印機',
-'打著' => '打着',
-'打著作' => '打著作',
-'打著名' => '打著名',
-'打著書' => '打著書',
-'打著稱' => '打著稱',
-'打著者' => '打著者',
-'打著述' => '打著述',
-'打著錄' => '打著錄',
-'扛著' => '扛着',
-'扛著作' => '扛著作',
-'扛著名' => '扛著名',
-'扛著書' => '扛著書',
-'扛著稱' => '扛著稱',
-'扛著者' => '扛著者',
-'扛著述' => '扛著述',
-'扛著錄' => '扛著錄',
-'找不著' => '找不着',
-'找得著' => '找得着',
-'承宣布政' => '承宣布政',
-'抓著' => '抓着',
-'抓著作' => '抓著作',
-'抓著名' => '抓著名',
-'抓著稱' => '抓著稱',
-'抓著者' => '抓著者',
-'抓著述' => '抓著述',
-'抓著錄' => '抓著錄',
-'披著' => '披着',
-'披著作' => '披著作',
-'披著名' => '披著名',
-'披著書' => '披著書',
-'披著稱' => '披著稱',
-'披著者' => '披著者',
-'披著述' => '披著述',
-'披著錄' => '披著錄',
-'抬著' => '抬着',
-'抬著作' => '抬著作',
-'抬著名' => '抬著名',
-'抬著稱' => '抬著稱',
-'抬著者' => '抬著者',
-'抬著述' => '抬著述',
-'抬著錄' => '抬著錄',
-'抱著' => '抱着',
-'抱著作' => '抱著作',
-'抱著名' => '抱著名',
-'抱著稱' => '抱著稱',
-'抱著者' => '抱著者',
-'抱著述' => '抱著述',
-'抱著錄' => '抱著錄',
-'拉著' => '拉着',
-'拉著作' => '拉著作',
-'拉著名' => '拉著名',
-'拉著書' => '拉著書',
-'拉著稱' => '拉著稱',
-'拉著者' => '拉著者',
-'拉著述' => '拉著述',
-'拉著錄' => '拉著錄',
-'拎著' => '拎着',
-'拎著作' => '拎著作',
-'拎著名' => '拎著名',
-'拎著稱' => '拎著稱',
-'拎著者' => '拎著者',
-'拎著述' => '拎著述',
-'拎著錄' => '拎著錄',
-'拖著' => '拖着',
-'拖著作' => '拖著作',
-'拖著名' => '拖著名',
-'拖著稱' => '拖著稱',
-'拖著者' => '拖著者',
-'拖著述' => '拖著述',
-'拖著錄' => '拖著錄',
-'拼著' => '拼着',
-'拼著作' => '拼著作',
-'拼著名' => '拼著名',
-'拼著稱' => '拼著稱',
-'拼著者' => '拼著者',
-'拼著述' => '拼著述',
-'拼著錄' => '拼著錄',
-'拿著' => '拿着',
-'拿著作' => '拿著作',
-'拿著名' => '拿著名',
-'拿著稱' => '拿著稱',
-'拿著者' => '拿著者',
-'拿著述' => '拿著述',
-'拿著錄' => '拿著錄',
-'持著' => '持着',
-'持著作' => '持著作',
-'持著名' => '持著名',
-'持著稱' => '持著稱',
-'持著者' => '持著者',
-'持著述' => '持著述',
-'持著錄' => '持著錄',
-'挑著' => '挑着',
-'挑著作' => '挑著作',
-'挑著名' => '挑著名',
-'挑著稱' => '挑著稱',
-'挑著者' => '挑著者',
-'挑著述' => '挑著述',
-'挑著錄' => '挑著錄',
-'挨著' => '挨着',
-'挨著作' => '挨著作',
-'挨著名' => '挨著名',
-'挨著稱' => '挨著稱',
-'挨著者' => '挨著者',
-'挨著述' => '挨著述',
-'挨著錄' => '挨著錄',
-'捆著' => '捆着',
-'捆著作' => '捆著作',
-'捆著名' => '捆著名',
-'捆著稱' => '捆著稱',
-'捆著者' => '捆著者',
-'捆著述' => '捆著述',
-'捆著錄' => '捆著錄',
-'伏地挺身' => '掌上壓',
-'俯卧撑' => '掌上壓',
-'掖著' => '掖着',
-'掖著作' => '掖著作',
-'掖著名' => '掖著名',
-'掖著稱' => '掖著稱',
-'掖著者' => '掖著者',
-'掖著述' => '掖著述',
-'掖著錄' => '掖著錄',
-'掙著' => '掙着',
-'掙著作' => '掙著作',
-'掙著名' => '掙著名',
-'掙著書' => '掙著書',
-'掙著稱' => '掙著稱',
-'掙著者' => '掙著者',
-'掙著述' => '掙著述',
-'掙著錄' => '掙著錄',
-'掛著' => '掛着',
-'接著' => '接着',
-'接著作' => '接著作',
-'接著名' => '接著名',
-'接著稱' => '接著稱',
-'接著者' => '接著者',
-'接著述' => '接著述',
-'接著錄' => '接著錄',
-'揉著' => '揉着',
-'揉著作' => '揉著作',
-'揉著名' => '揉著名',
-'揉著書' => '揉著書',
-'揉著稱' => '揉著稱',
-'揉著者' => '揉著者',
-'揉著述' => '揉著述',
-'揉著錄' => '揉著錄',
-'提著' => '提着',
-'提著作' => '提著作',
-'提著名' => '提著名',
-'提著稱' => '提著稱',
-'提著者' => '提著者',
-'提著述' => '提著述',
-'提著錄' => '提著錄',
-'揮著' => '揮着',
-'揮著作' => '揮著作',
-'揮著名' => '揮著名',
-'揮著稱' => '揮著稱',
-'揮著者' => '揮著者',
-'揮著述' => '揮著述',
-'揮著錄' => '揮著錄',
-'搜索引擎' => '搜尋引擎',
-'抢占' => '搶佔',
-'搶占' => '搶佔',
-'摟著' => '摟着',
-'摟著作' => '摟著作',
-'摟著名' => '摟著名',
-'摟著稱' => '摟著稱',
-'摟著者' => '摟著者',
-'摟著述' => '摟著述',
-'摟著錄' => '摟著錄',
-'折台' => '摺枱',
-'撒马尔罕' => '撒馬爾罕',
-'撼著' => '撼着',
-'撼著作' => '撼著作',
-'撼著名' => '撼著名',
-'撼著書' => '撼著書',
-'撼著稱' => '撼著稱',
-'撼著者' => '撼著者',
-'撼著述' => '撼著述',
-'撼著錄' => '撼著錄',
-'擋著' => '擋着',
-'擋著作' => '擋著作',
-'擋著名' => '擋著名',
-'擋著稱' => '擋著稱',
-'擋著者' => '擋著者',
-'擋著述' => '擋著述',
-'擋著錄' => '擋著錄',
-'擔著' => '擔着',
-'據著' => '據着',
-'據著作' => '據著作',
-'據著名' => '據著名',
-'據著書' => '據著書',
-'據著稱' => '據著稱',
-'據著者' => '據著者',
-'據著述' => '據著述',
-'據著錄' => '據著錄',
-'擡著' => '擡着',
-'摆布' => '擺佈',
-'擺布' => '擺佈',
-'擺著' => '擺着',
-'擺著作' => '擺著作',
-'擺著名' => '擺著名',
-'擺著稱' => '擺著稱',
-'擺著者' => '擺著者',
-'擺著述' => '擺著述',
-'擺著錄' => '擺著錄',
-'攻占' => '攻佔',
-'放著' => '放着',
-'放著作' => '放著作',
-'放著名' => '放著名',
-'放著称' => '放著稱',
-'放著稱' => '放著稱',
-'敞著' => '敞着',
-'敞著作' => '敞著作',
-'敞著名' => '敞著名',
-'敞著稱' => '敞著稱',
-'敞著者' => '敞著者',
-'敞著述' => '敞著述',
-'敞著錄' => '敞著錄',
-'散布' => '散佈',
-'散佈著' => '散佈着',
-'散布著' => '散佈着',
-'数字照相机' => '数碼照相機',
-'數位照相機' => '数碼照相機',
-'數著' => '數着',
-'数字化' => '數碼化',
-'數位化' => '數碼化',
-'数字技术' => '數碼技術',
-'數位技術' => '數碼技術',
-'數位相機' => '數碼相機',
-'数字信号' => '數碼訊號',
-'數碼訊號' => '數碼訊號',
-'数字电视' => '數碼電視',
-'數位電視' => '數碼電視',
-'數著作' => '數著作',
-'數著名' => '數著名',
-'數著稱' => '數著稱',
-'數著者' => '數著者',
-'數著述' => '數著述',
-'數著錄' => '數著錄',
-'斥著' => '斥着',
-'斥著作' => '斥著作',
-'斥著名' => '斥著名',
-'斥著書' => '斥著書',
-'斥著稱' => '斥著稱',
-'斥著者' => '斥著者',
-'斥著述' => '斥著述',
-'斥著錄' => '斥著錄',
-'史瓦濟蘭' => '斯威士蘭',
-'斯洛維尼亞' => '斯洛文尼亞',
-'紐澳良' => '新奧爾良',
-'紐西蘭' => '新西蘭',
-'方法里' => '方法裏',
-'族里' => '族裏',
-'日占' => '日佔',
-'日里' => '日裏',
-'昂山素季' => '昂山素姬',
-'翁山蘇姬' => '昂山素姬',
-'昂著' => '昂着',
-'昂著作' => '昂著作',
-'昂著名' => '昂著名',
-'昂著書' => '昂著書',
-'昂著稱' => '昂著稱',
-'昂著者' => '昂著者',
-'昂著述' => '昂著述',
-'昂著錄' => '昂著錄',
-'星罗棋布' => '星羅棋佈',
-'星羅棋布' => '星羅棋佈',
-'映著' => '映着',
-'映著作' => '映著作',
-'映著名' => '映著名',
-'映著書' => '映著書',
-'映著稱' => '映著稱',
-'映著者' => '映著者',
-'映著述' => '映著述',
-'映著錄' => '映著錄',
-'晃著' => '晃着',
-'晃著作' => '晃著作',
-'晃著名' => '晃著名',
-'晃著稱' => '晃著稱',
-'晃著者' => '晃著者',
-'晃著述' => '晃著述',
-'晃著錄' => '晃著錄',
-'晶元' => '晶片',
-'芯片' => '晶片',
-'智慧型' => '智能',
-'智慧卡' => '智能卡',
-'智慧手機' => '智能手機',
-'暗地里' => '暗地裏',
-'暗沟里' => '暗溝裏',
-'暗著' => '暗着',
-'暗著作' => '暗著作',
-'暗著名' => '暗著名',
-'暗著書' => '暗著書',
-'暗著稱' => '暗著稱',
-'暗著者' => '暗著者',
-'暗著述' => '暗著述',
-'暗著錄' => '暗著錄',
-'暗里' => '暗裏',
-'会占' => '會佔',
-'會占' => '會佔',
-'会占卜' => '會占卜',
-'會占卜' => '會占卜',
-'会里' => '會裏',
-'月裡来' => '月裏來',
-'有著' => '有着',
-'有著作' => '有著作',
-'有著名' => '有著名',
-'有著書' => '有著書',
-'有著稱' => '有著稱',
-'有著者' => '有著者',
-'有著述' => '有著述',
-'有著錄' => '有著錄',
-'罗纳德·里根' => '朗奴·列根',
-'罗纳尔多' => '朗拿度',
-'罗纳尔迪尼奥' => '朗拿甸奴',
-'望著' => '望着',
-'望著作' => '望著作',
-'望著名' => '望著名',
-'望著書' => '望著書',
-'望著稱' => '望著稱',
-'望著者' => '望著者',
-'望著述' => '望著述',
-'望著錄' => '望著錄',
-'朝著' => '朝着',
-'朝著作' => '朝著作',
-'朝著名' => '朝著名',
-'朝著稱' => '朝著稱',
-'朝著者' => '朝著者',
-'朝著述' => '朝著述',
-'朝著錄' => '朝著錄',
-'板球' => '木球',
-'賓·拉登' => '本·拉登',
-'班傑明' => '本傑明',
-'賓拉登' => '本拉登',
-'本著' => '本着',
-'本著作' => '本著作',
-'本著名' => '本著名',
-'本著書' => '本著書',
-'本著稱' => '本著稱',
-'本著者' => '本著者',
-'本著述' => '本著述',
-'本著錄' => '本著錄',
-'里瓦尔多' => '李華度',
-'村里' => '村裏',
-'杜塞道夫' => '杜塞爾多夫',
-'迪拜' => '杜拜',
-'東協助' => '東協助',
-'東協會' => '東協會',
-'東協議' => '東協議',
-'東南亞國家協會' => '東南亞國家聯盟',
-'亚细安' => '東盟',
-'東協' => '東盟',
-'板著臉' => '板着臉',
-'枕著' => '枕着',
-'枕著作' => '枕著作',
-'枕著名' => '枕著名',
-'枕著稱' => '枕著稱',
-'枕著者' => '枕著者',
-'枕著述' => '枕著述',
-'枕著錄' => '枕著錄',
-'檯' => '枱',
-'台布' => '枱布',
-'台历' => '枱曆',
-'台灯' => '枱燈',
-'台面上' => '枱面上',
-'台面化' => '枱面化',
-'柏林墙' => '柏林圍牆',
-'奧黛莉·朵杜' => '柯德莉·塔圖',
-'奥黛丽·赫本' => '柯德莉·夏萍',
-'奧黛麗·赫本' => '柯德莉·夏萍',
-'哥廷根' => '格丁根',
-'格瑞那達' => '格林納達',
-'格莱美奖' => '格林美獎',
-'葛萊美獎' => '格林美獎',
-'格鲁吉亚' => '格魯吉亞',
-'框里' => '框裏',
-'台式电脑' => '桌上型電腦',
-'台球' => '桌球',
-'撞球' => '桌球',
-'梅鐸' => '梅鐸',
-'默多克' => '梅鐸',
-'梳著' => '梳着',
-'梳著作' => '梳著作',
-'梳著名' => '梳著名',
-'梳著稱' => '梳著稱',
-'梳著者' => '梳著者',
-'梳著述' => '梳著述',
-'梳著錄' => '梳著錄',
-'棉里' => '棉裏',
-'桑巴舞' => '森巴舞',
-'森林里' => '森林裏',
-'棺材里' => '棺材裏',
-'榴莲' => '榴槤',
-'榴蓮' => '榴槤',
-'樂著' => '樂着',
-'樂著作' => '樂著作',
-'樂著名' => '樂著名',
-'樂著書' => '樂著書',
-'樂著稱' => '樂著稱',
-'樂著者' => '樂著者',
-'樂著述' => '樂著述',
-'樂著錄' => '樂著錄',
-'標志著' => '標志着',
-'寶獅' => '標致',
-'標誌著' => '標誌着',
-'树林里' => '樹林裏',
-'工具機' => '機床',
-'机器人' => '機械人',
-'機器人' => '機械人',
-'柜台' => '櫃枱',
-'柜里' => '櫃裏',
-'历史里' => '歷史裏',
-'死里求生' => '死裏求生',
-'死里逃生' => '死裏逃生',
-'殺著' => '殺着',
-'殺著作' => '殺著作',
-'殺著名' => '殺著名',
-'殺著書' => '殺著書',
-'殺著稱' => '殺著稱',
-'殺著者' => '殺著者',
-'殺著述' => '殺著述',
-'殺著錄' => '殺著錄',
-'壳里' => '殼裏',
-'茅利塔尼亞' => '毛里塔尼亞',
-'模里西斯' => '毛里裘斯',
-'毛里求斯' => '毛里裘斯',
-'公厘' => '毫米',
-'公釐' => '毫米',
-'水来汤里去' => '水來湯裏去',
-'水里' => '水裏',
-'求著' => '求着',
-'求著作' => '求著作',
-'求著名' => '求著名',
-'求著書' => '求著書',
-'求著稱' => '求著稱',
-'求著者' => '求著者',
-'求著述' => '求著述',
-'求著錄' => '求著錄',
-'池里' => '池裏',
-'汙' => '污',
-'文莱' => '汶萊',
-'沈著' => '沈着',
-'沉著' => '沉着',
-'沉著作' => '沉著作',
-'沉著名' => '沉著名',
-'沉著書' => '沉著書',
-'沉著稱' => '沉著稱',
-'沉著者' => '沉著者',
-'沉著述' => '沉著述',
-'沉著錄' => '沉著錄',
-'沖著' => '沖着',
-'沖著。' => '沖著。',
-'沖著《' => '沖著《',
-'沖著,' => '沖著,',
-'沙地阿拉伯' => '沙特阿拉伯',
-'沙烏地阿拉伯' => '沙特阿拉伯',
-'沙里淘金' => '沙裏淘金',
-'河里' => '河裏',
-'沿著' => '沿着',
-'沿著作' => '沿著作',
-'沿著名' => '沿著名',
-'沿著書' => '沿著書',
-'沿著稱' => '沿著稱',
-'沿著者' => '沿著者',
-'沿著述' => '沿著述',
-'沿著錄' => '沿著錄',
-'法占' => '法佔',
-'法里,' => '法裏,',
-'玻里尼西亞' => '波利尼西亞',
-'波士尼亞' => '波斯尼亞',
-'波士尼亞赫塞哥維納' => '波斯尼亞黑塞哥維那',
-'宝莱坞' => '波里活',
-'寶萊塢' => '波里活',
-'幫浦' => '泵',
-'洞里' => '洞裏',
-'辛巴威' => '津巴布韋',
-'宏都拉斯' => '洪都拉斯',
-'活著' => '活着',
-'活著作' => '活著作',
-'活著名' => '活著名',
-'活著書' => '活著書',
-'活著稱' => '活著稱',
-'活著者' => '活著者',
-'活著述' => '活著述',
-'活著錄' => '活著錄',
-'移动网络' => '流動網絡',
-'行動網路' => '流動網絡',
-'移动电话' => '流動電話',
-'行動電話' => '流動電話',
-'流著' => '流着',
-'流著作' => '流著作',
-'流著名' => '流著名',
-'流著書' => '流著書',
-'流著稱' => '流著稱',
-'流著者' => '流著者',
-'流著述' => '流著述',
-'流著錄' => '流著錄',
-'流露著' => '流露着',
-'浮著' => '浮着',
-'蘭卡威' => '浮羅交怡',
-'浮著作' => '浮著作',
-'浮著名' => '浮著名',
-'浮著書' => '浮著書',
-'浮著稱' => '浮著稱',
-'浮著者' => '浮著者',
-'浮著述' => '浮著述',
-'浮著錄' => '浮著錄',
-'海上布雷' => '海上佈雷',
-'海洛因' => '海洛英',
-'海湾布雷' => '海灣佈雷',
-'海灣布雷' => '海灣佈雷',
-'涼著' => '涼着',
-'涼著作' => '涼著作',
-'涼著名' => '涼著名',
-'涼著書' => '涼著書',
-'涼著稱' => '涼著稱',
-'涼著者' => '涼著者',
-'涼著述' => '涼著述',
-'涼著錄' => '涼著錄',
-'深山里' => '深山裏',
-'渊里' => '淵裏',
-'渴著' => '渴着',
-'渴著作' => '渴著作',
-'渴著名' => '渴著名',
-'渴著書' => '渴著書',
-'渴著稱' => '渴著稱',
-'渴著者' => '渴著者',
-'渴著述' => '渴著述',
-'渴著錄' => '渴著錄',
-'湊合著' => '湊合着',
-'湖里' => '湖裏',
-'准将' => '準將',
-'准將' => '準將',
-'准尉' => '準尉',
-'溢著' => '溢着',
-'溢著作' => '溢著作',
-'溢著名' => '溢著名',
-'溢著書' => '溢著書',
-'溢著稱' => '溢著稱',
-'溢著者' => '溢著者',
-'溢著述' => '溢著述',
-'溢著錄' => '溢著錄',
-'演著' => '演着',
-'演著作' => '演著作',
-'演著名' => '演著名',
-'演著書' => '演著書',
-'演著稱' => '演著稱',
-'演著者' => '演著者',
-'演著述' => '演著述',
-'演著錄' => '演著錄',
-'漠里' => '漠裏',
-'漢諾瓦' => '漢諾威',
-'漫著' => '漫着',
-'漫著作' => '漫著作',
-'漫著名' => '漫著名',
-'漫著書' => '漫著書',
-'漫著稱' => '漫著稱',
-'漫著者' => '漫著者',
-'漫著述' => '漫著述',
-'漫著錄' => '漫著錄',
-'潜意识里' => '潛意識裏',
-'潤著' => '潤着',
-'潤著作' => '潤著作',
-'潤著名' => '潤著名',
-'潤著書' => '潤著書',
-'潤著稱' => '潤著稱',
-'潤著者' => '潤著者',
-'潤著述' => '潤著述',
-'潤著錄' => '潤著錄',
-'潭里' => '潭裏',
-'溼' => '濕',
-'火山里' => '火山裏',
-'火箭布雷' => '火箭佈雷',
-'為著' => '為着',
-'為著《' => '為著《',
-'為著作' => '為著作',
-'為著名' => '為著名',
-'為著稱' => '為著稱',
-'為著者' => '為著者',
-'為著述' => '為著述',
-'為著錄' => '為著錄',
-'菸' => '煙',
-'照占' => '照佔',
-'照著' => '照着',
-'照著作' => '照著作',
-'照著名' => '照著名',
-'照著書' => '照著書',
-'照著稱' => '照著稱',
-'照著者' => '照著者',
-'照著述' => '照著述',
-'照著錄' => '照著錄',
-'燒著' => '燒着',
-'燒著作' => '燒著作',
-'燒著名' => '燒著名',
-'燒著書' => '燒著書',
-'燒著稱' => '燒著稱',
-'燒著者' => '燒著者',
-'燒著述' => '燒著述',
-'燒著錄' => '燒著錄',
-'爭著' => '爭着',
-'爭著作' => '爭著作',
-'爭著名' => '爭著名',
-'爭著書' => '爭著書',
-'爭著稱' => '爭著稱',
-'爭著者' => '爭著者',
-'爭著述' => '爭著述',
-'爭著錄' => '爭著錄',
-'墙里' => '牆裏',
-'版图里' => '版圖裏',
-'版权信息' => '版權資訊',
-'千里達托貝哥' => '特立尼達和多巴哥',
-'牽著' => '牽着',
-'牽著作' => '牽著作',
-'牽著名' => '牽著名',
-'牽著書' => '牽著書',
-'牽著稱' => '牽著稱',
-'牽著者' => '牽著者',
-'牽著述' => '牽著述',
-'牽著錄' => '牽著錄',
-'犯不著' => '犯不着',
-'犯不著作' => '犯不著作',
-'犯不著名' => '犯不著名',
-'犯不著書' => '犯不著書',
-'犯不著稱' => '犯不著稱',
-'犯不著者' => '犯不著者',
-'犯不著述' => '犯不著述',
-'犯不著錄' => '犯不著錄',
-'犯得著' => '犯得着',
-'狂占' => '狂佔',
-'猜著' => '猜着',
-'猜著作' => '猜著作',
-'猜著名' => '猜著名',
-'猜著書' => '猜著書',
-'猜著稱' => '猜著稱',
-'猜著者' => '猜著者',
-'猜著述' => '猜著述',
-'猜著錄' => '猜著錄',
-'猶豫著' => '猶豫着',
-'狱里' => '獄裏',
-'独占' => '獨佔',
-'獨占' => '獨佔',
-'獨立國家國協' => '獨立國家聯合體',
-'獨立國協' => '獨聯體',
-'獲著' => '獲着',
-'獲著作' => '獲著作',
-'獲著名' => '獲著名',
-'獲著書' => '獲著書',
-'獲著稱' => '獲著稱',
-'獲著者' => '獲著者',
-'獲著述' => '獲著述',
-'獲著錄' => '獲著錄',
-'班固著' => '班固著',
-'班里' => '班裏',
-'球台' => '球枱',
-'卢塞恩' => '琉森',
-'諾鲁' => '瑙魯',
-'萬那杜' => '瓦努阿圖',
-'肯尼迪' => '甘迺迪',
-'甜著' => '甜着',
-'甜著作' => '甜著作',
-'甜著名' => '甜著名',
-'甜著書' => '甜著書',
-'甜著稱' => '甜著稱',
-'甜著者' => '甜著者',
-'甜著述' => '甜著述',
-'甜著錄' => '甜著錄',
-'用不著' => '用不着',
-'用得著' => '用得着',
-'用法里' => '用法裏',
-'用著' => '用着',
-'用著作' => '用著作',
-'用著名' => '用著名',
-'用著書' => '用著書',
-'用著稱' => '用著稱',
-'用著者' => '用著者',
-'用著述' => '用著述',
-'用著錄' => '用著錄',
-'田里' => '田裏',
-'由表及里' => '由表及裏',
-'A型肝炎' => '甲型肝炎',
-'A肝' => '甲肝',
-'界里' => '界裏',
-'留著' => '留着',
-'留著作' => '留著作',
-'留著名' => '留著名',
-'留著書' => '留著書',
-'留著稱' => '留著稱',
-'留著者' => '留著者',
-'留著述' => '留著述',
-'留著錄' => '留著錄',
-'畫著' => '畫着',
-'畫著作' => '畫著作',
-'畫著名' => '畫著名',
-'畫著稱' => '畫著稱',
-'畫著者' => '畫著者',
-'當著' => '當着',
-'當著作' => '當著作',
-'過著作' => '當著作',
-'當著名' => '當著名',
-'過著名' => '當著名',
-'當著書' => '當著書',
-'過著書' => '當著書',
-'當著稱' => '當著稱',
-'過著稱' => '當著稱',
-'當著者' => '當著者',
-'過著者' => '當著者',
-'當著述' => '當著述',
-'過著述' => '當著述',
-'當著錄' => '當著錄',
-'過著錄' => '當著錄',
-'几内亚' => '畿內亞',
-'幾內亞' => '畿內亞',
-'迭代' => '疊代',
-'疑著' => '疑着',
-'疑著作' => '疑著作',
-'疑著名' => '疑著名',
-'疑著書' => '疑著書',
-'疑著稱' => '疑著稱',
-'疑著者' => '疑著者',
-'疑著述' => '疑著述',
-'疑著錄' => '疑著錄',
-'狂牛症' => '瘋牛症',
-'发布' => '發佈',
-'發布' => '發佈',
-'發著' => '發着',
-'發著《' => '發著《',
-'發著作' => '發著作',
-'發著名' => '發著名',
-'發著稱' => '發著稱',
-'發著者' => '發著者',
-'白里透红' => '白裏透紅',
-'戈登·布朗' => '白高敦',
-'百科里' => '百科裏',
-'的图里' => '的圖裏',
-'的山里' => '的山裏',
-'皮里春秋' => '皮裏春秋',
-'皮里阳秋' => '皮裏陽秋',
-'皺著' => '皺着',
-'皺著作' => '皺著作',
-'皺著名' => '皺著名',
-'皺著書' => '皺著書',
-'皺著稱' => '皺著稱',
-'皺著者' => '皺著者',
-'皺著述' => '皺著述',
-'皺著錄' => '皺著錄',
-'盒里' => '盒裏',
-'盛著' => '盛着',
-'盛著作' => '盛著作',
-'盛著名' => '盛著名',
-'盛著書' => '盛著書',
-'盛著稱' => '盛著稱',
-'盛著者' => '盛著者',
-'盛著述' => '盛著述',
-'盛著錄' => '盛著錄',
-'盘里' => '盤裏',
-'盧安達' => '盧旺達',
-'羅亞爾' => '盧瓦爾',
-'盯著' => '盯着',
-'盯著作' => '盯著作',
-'盯著名' => '盯著名',
-'盯著書' => '盯著書',
-'盯著稱' => '盯著稱',
-'盯著者' => '盯著者',
-'盯著述' => '盯著述',
-'盯著錄' => '盯著錄',
-'看不著' => '看不着',
-'看得著' => '看得着',
-'看法里' => '看法裏',
-'看著' => '看着',
-'看著作' => '看著作',
-'看著名' => '看著名',
-'看著書' => '看著書',
-'看著稱' => '看著稱',
-'看著者' => '看著者',
-'看著述' => '看著述',
-'看著錄' => '看著錄',
-'眼眶里' => '眼眶裏',
-'眼睛里' => '眼睛裏',
-'眼里' => '眼裏',
-'著什' => '着什',
-'著他' => '着他',
-'著你' => '着你',
-'著力' => '着力',
-'著地' => '着地',
-'著墨' => '着墨',
-'著她' => '着她',
-'著妳' => '着妳',
-'著它' => '着它',
-'著實' => '着實',
-'著忙' => '着忙',
-'著急' => '着急',
-'著想' => '着想',
-'著意' => '着意',
-'著我' => '着我',
-'著手' => '着手',
-'著數' => '着數',
-'著法' => '着法',
-'著涼' => '着涼',
-'著火' => '着火',
-'著甚麽' => '着甚麽',
-'著眼' => '着眼',
-'著祂' => '着祂',
-'著筆' => '着筆',
-'著絲' => '着絲',
-'著緊' => '着緊',
-'著腳' => '着腳',
-'著艦' => '着艦',
-'著色' => '着色',
-'著落' => '着落',
-'著衣' => '着衣',
-'著裝' => '着裝',
-'著迷' => '着迷',
-'著重' => '着重',
-'著錄' => '着錄',
-'著陸' => '着陸',
-'著鞭' => '着鞭',
-'睡不著' => '睡不着',
-'睡得著' => '睡得着',
-'睡著' => '睡着',
-'睡著作' => '睡著作',
-'睡著名' => '睡著名',
-'睡著書' => '睡著書',
-'睡著稱' => '睡著稱',
-'睡著者' => '睡著者',
-'睡著述' => '睡著述',
-'睡著錄' => '睡著錄',
-'瞞著' => '瞞着',
-'瞞著作' => '瞞著作',
-'瞞著名' => '瞞著名',
-'瞞著書' => '瞞著書',
-'瞞著稱' => '瞞著稱',
-'瞞著者' => '瞞著者',
-'瞞著述' => '瞞著述',
-'瞞著錄' => '瞞著錄',
-'瞪著' => '瞪着',
-'瞪著作' => '瞪著作',
-'瞪著名' => '瞪著名',
-'瞪著書' => '瞪著書',
-'瞪著稱' => '瞪著稱',
-'瞪著者' => '瞪著者',
-'瞪著述' => '瞪著述',
-'瞪著錄' => '瞪著錄',
-'矛盾著' => '矛盾着',
-'智慧財產權' => '知識產權',
-'智財權' => '知識產權',
-'短信' => '短訊',
-'簡訊' => '短訊',
-'什勒斯維希' => '石勒蘇益格',
-'硅' => '矽',
-'硅藻' => '硅藻',
-'硬件' => '硬件',
-'硬體' => '硬件',
-'碗里' => '碗裏',
-'貝克漢' => '碧咸',
-'贝克汉姆' => '碧咸',
-'社里' => '社裏',
-'福馬林' => '福爾馬林',
-'福著' => '福着',
-'福著作' => '福著作',
-'福著名' => '福著名',
-'福著書' => '福著書',
-'福著稱' => '福著稱',
-'福著者' => '福著者',
-'福著述' => '福著述',
-'福著錄' => '福著錄',
-'秀发布' => '秀發佈',
-'私下里' => '私下裏',
-'隐私' => '私隱',
-'隱私' => '私隱',
-'葛摩' => '科摩羅',
-'程序员' => '程式設計師',
-'捷豹' => '積架',
-'稳占' => '穩佔',
-'穩占' => '穩佔',
-'穫著' => '穫着',
-'空中布雷' => '空中佈雷',
-'空投布雷' => '空投佈雷',
-'空气质量' => '空氣質素',
-'空氣品質' => '空氣質素',
-'空著' => '空着',
-'空著作' => '空著作',
-'空著名' => '空著名',
-'空著書' => '空著書',
-'空著稱' => '空著稱',
-'空著者' => '空著者',
-'空著述' => '空著述',
-'空著錄' => '空著錄',
-'太空梭' => '穿梭機',
-'航天飞机' => '穿梭機',
-'穿著' => '穿着',
-'穿著作' => '穿著作',
-'穿著名' => '穿著名',
-'穿著書' => '穿著書',
-'穿著稱' => '穿著稱',
-'穿著者' => '穿著者',
-'穿著述' => '穿著述',
-'穿著錄' => '穿著錄',
-'窝里' => '窩裏',
-'窝里斗' => '窩裏鬥',
-'立著' => '立着',
-'立著《' => '立著《',
-'立著作' => '立著作',
-'立著名' => '立著名',
-'立著有' => '立著有',
-'立著称' => '立著稱',
-'立著稱' => '立著稱',
-'立著者' => '立著者',
-'立著(' => '立著(',
-'站著' => '站着',
-'站著作' => '站著作',
-'站著名' => '站著名',
-'站著書' => '站著書',
-'站著稱' => '站著稱',
-'站著者' => '站著者',
-'站著述' => '站著述',
-'站著錄' => '站著錄',
-'竪著' => '竪着',
-'笑著' => '笑着',
-'笑著作' => '笑著作',
-'笑著名' => '笑著名',
-'笑著書' => '笑著書',
-'笑著稱' => '笑著稱',
-'笑著者' => '笑著者',
-'笑著述' => '笑著述',
-'笑著錄' => '笑著錄',
-'笑里藏刀' => '笑裏藏刀',
-'提比里西' => '第比利斯',
-'管著' => '管着',
-'管著作' => '管著作',
-'管著名' => '管著名',
-'管著書' => '管著書',
-'管著稱' => '管著稱',
-'管著者' => '管著者',
-'管著述' => '管著述',
-'管著錄' => '管著錄',
-'箱里' => '箱裏',
-'节目里' => '節目裏',
-'簽著' => '簽着',
-'篮板球' => '籃板球',
-'籃板球' => '籃板球',
-'迈克尔' => '米高',
-'麦克尔' => '米高',
-'迈克尔·欧文' => '米高·奧雲',
-'糊里糊涂' => '糊裏糊塗',
-'系列里' => '系列裏',
-'係數' => '系數',
-'系里' => '系裏',
-'約占' => '約佔',
-'约占' => '約佔',
-'紐賓士域' => '紐賓士域',
-'索尔仁尼琴' => '索贊尼辛',
-'索忍尼辛' => '索贊尼辛',
-'索馬利亞' => '索馬里',
-'索馬利里' => '索馬里',
-'紮著' => '紮着',
-'紮著作' => '紮著作',
-'紮著名' => '紮著名',
-'紮著書' => '紮著書',
-'紮著稱' => '紮著稱',
-'紮著者' => '紮著者',
-'紮著述' => '紮著述',
-'紮著錄' => '紮著錄',
-'组里' => '組裏',
-'吉他' => '結他',
-'結彩' => '結綵',
-'结彩' => '結綵',
-'綁著' => '綁着',
-'綁著作' => '綁著作',
-'綁著名' => '綁著名',
-'綁著書' => '綁著書',
-'綁著稱' => '綁著稱',
-'綁著者' => '綁著者',
-'綁著述' => '綁著述',
-'綁著錄' => '綁著錄',
-'网站里' => '網站裏',
-'網路' => '網絡',
-'网里' => '網裏',
-'彩带' => '綵帶',
-'彩帶' => '綵帶',
-'彩排' => '綵排',
-'彩楼' => '綵樓',
-'彩樓' => '綵樓',
-'彩牌楼' => '綵牌樓',
-'彩牌樓' => '綵牌樓',
-'彩球' => '綵球',
-'彩綢' => '綵綢',
-'彩绸' => '綵綢',
-'彩线' => '綵綫',
-'彩線' => '綵線',
-'彩船' => '綵船',
-'彩衣' => '綵衣',
-'线图里' => '線圖裏',
-'緝凶' => '緝兇',
-'县里' => '縣裏',
-'缝里' => '縫裏',
-'縱著' => '縱着',
-'总数里' => '總數裏',
-'尖峰時段' => '繁忙時段',
-'尖峰時間' => '繁忙時間',
-'正體中文' => '繁體中文',
-'繃著' => '繃着',
-'繞著' => '繞着',
-'繞著作' => '繞著作',
-'繞著名' => '繞著名',
-'繞著書' => '繞著書',
-'繞著稱' => '繞著稱',
-'繞著者' => '繞著者',
-'繞著述' => '繞著述',
-'繞著錄' => '繞著錄',
-'系着' => '繫着',
-'繫著' => '繫着',
-'纏著' => '纏着',
-'纏著作' => '纏著作',
-'纏著名' => '纏著名',
-'纏著書' => '纏著書',
-'纏著稱' => '纏著稱',
-'纏著者' => '纏著者',
-'纏著述' => '纏著述',
-'纏著錄' => '纏著錄',
-'罩著' => '罩着',
-'罩著作' => '罩著作',
-'罩著名' => '罩著名',
-'罩著書' => '罩著書',
-'罩著稱' => '罩著稱',
-'罩著者' => '罩著者',
-'罩著述' => '罩著述',
-'罩著錄' => '罩著錄',
-'罵著' => '罵着',
-'罵著作' => '罵著作',
-'罵著名' => '罵著名',
-'罵著書' => '罵著書',
-'罵著稱' => '罵著稱',
-'罵著者' => '罵著者',
-'罵著述' => '罵著述',
-'罵著錄' => '罵著錄',
-'卢浮宫' => '羅浮宮',
-'美占' => '美佔',
-'美著' => '美着',
-'美著作' => '美著作',
-'美著名' => '美著名',
-'美著書' => '美著書',
-'美著称' => '美著稱',
-'美著稱' => '美著稱',
-'美著者' => '美著者',
-'美著述' => '美著述',
-'美著錄' => '美著錄',
-'耀著' => '耀着',
-'耀著作' => '耀著作',
-'耀著名' => '耀著名',
-'耀著書' => '耀著書',
-'耀著稱' => '耀著稱',
-'耀著者' => '耀著者',
-'耀著述' => '耀著述',
-'耀著錄' => '耀著錄',
-'寮國' => '老撾',
-'寮人民民主共和國' => '老撾人民民主共和國',
-'寮語' => '老撾語',
-'考著' => '考着',
-'考著作' => '考著作',
-'考著名' => '考著名',
-'考著書' => '考著書',
-'考著稱' => '考著稱',
-'考著者' => '考著者',
-'考著述' => '考著述',
-'考著錄' => '考著錄',
-'圣基茨和尼维斯' => '聖吉斯納域斯',
-'聖克里斯多福及尼維斯' => '聖吉斯納域斯',
-'聖文森及格瑞那丁' => '聖文森特和格林納丁斯',
-'聖露西亞' => '聖盧西亞',
-'聖馬利諾' => '聖馬力諾',
-'聽不著' => '聽不着',
-'聽得著' => '聽得着',
-'聽著' => '聽着',
-'聽著作' => '聽著作',
-'聽著名' => '聽著名',
-'聽著書' => '聽著書',
-'聽著稱' => '聽著稱',
-'聽著者' => '聽著者',
-'聽著述' => '聽著述',
-'聽著錄' => '聽著錄',
-'肚里' => '肚裏',
-'肯尼亚' => '肯雅',
-'胃里' => '胃裏',
-'背地里' => '背地裏',
-'背著' => '背着',
-'背著作' => '背著作',
-'背著名' => '背著名',
-'背著書' => '背著書',
-'背著稱' => '背著稱',
-'背著者' => '背著者',
-'背著述' => '背著述',
-'背著錄' => '背著錄',
-'胡里胡涂' => '胡裏胡塗',
-'腰里' => '腰裏',
-'膠著' => '膠着',
-'膠著作' => '膠著作',
-'膠著名' => '膠著名',
-'膠著書' => '膠著書',
-'膠著稱' => '膠著稱',
-'膠著者' => '膠著者',
-'膠著述' => '膠著述',
-'膠著錄' => '膠著錄',
-'塑料袋' => '膠袋',
-'臨著' => '臨着',
-'臨著作' => '臨著作',
-'臨著名' => '臨著名',
-'臨著書' => '臨著書',
-'臨著稱' => '臨著稱',
-'臨著者' => '臨著者',
-'臨著述' => '臨著述',
-'臨著錄' => '臨著錄',
-'自行火炮' => '自走炮',
-'與著' => '與着',
-'與著作' => '與著作',
-'與著名' => '與著名',
-'與著書' => '與著書',
-'與著稱' => '與著稱',
-'與著者' => '與著者',
-'與著述' => '與著述',
-'與著錄' => '與著錄',
-'舒马赫' => '舒麥加',
-'愛荷華' => '艾奧瓦',
-'爱荷华' => '艾奧瓦',
-'埃菲尔' => '艾菲爾',
-'帕塔亚' => '芭達亞',
-'花盆里' => '花盆裏',
-'苑里' => '苑裏',
-'苑裡' => '苑裡',
-'苦著' => '苦着',
-'苦著作' => '苦著作',
-'苦著名' => '苦著名',
-'苦著書' => '苦著書',
-'苦著稱' => '苦著稱',
-'苦著者' => '苦著者',
-'苦著述' => '苦著述',
-'苦著錄' => '苦著錄',
-'苦里' => '苦裏',
-'英占' => '英佔',
-'共和联邦' => '英聯邦',
-'大英國協' => '英聯邦',
-'草丛里' => '草叢裏',
-'霍爾斯坦' => '荷爾斯泰因',
-'好莱坞' => '荷里活',
-'好萊塢' => '荷里活',
-'庄里' => '莊裏',
-'莫三比克' => '莫桑比克',
-'巴伦西亚' => '華倫西亞',
-'巴倫西亞' => '華倫西亞',
-'瓦倫西亞' => '華倫西亞',
-'瓦文萨' => '華里沙',
-'華勒沙' => '華里沙',
-'菲利普亲王' => '菲臘親王',
-'菲利普親王' => '菲臘親王',
-'賴索托' => '萊索托',
-'马恩岛' => '萌島',
-'馬自達' => '萬事得',
-'马自达' => '萬事得',
-'万历朝鲜战争' => '萬曆朝鮮戰爭',
-'落著' => '落着',
-'落著作' => '落著作',
-'落著名' => '落著名',
-'落著書' => '落著書',
-'落著稱' => '落著稱',
-'落著者' => '落著者',
-'落著述' => '落著述',
-'落著錄' => '落著錄',
-'葉爾欽' => '葉利欽',
-'葡占' => '葡佔',
-'葫芦里卖甚么药' => '葫蘆裏賣甚麼藥',
-'滿地可' => '蒙特利爾',
-'蒙特婁' => '蒙特利爾',
-'蒙著' => '蒙着',
-'蒙著作' => '蒙著作',
-'蒙著名' => '蒙著名',
-'蒙著書' => '蒙著書',
-'蒙著稱' => '蒙著稱',
-'蒙著者' => '蒙著者',
-'蒙著述' => '蒙著述',
-'蒙著錄' => '蒙著錄',
-'蓋著' => '蓋着',
-'蓋著作' => '蓋著作',
-'蓋著名' => '蓋著名',
-'蓋著稱' => '蓋著稱',
-'肖斯塔科维奇' => '蕭士達高維契',
-'蕭士塔高維奇' => '蕭士達高維契',
-'肖邦' => '蕭邦',
-'薛丁格' => '薛定諤',
-'塞拉耶佛' => '薩拉熱窩',
-'萨达姆' => '薩達姆',
-'藉著' => '藉着',
-'藏著' => '藏着',
-'藏著作' => '藏著作',
-'藏著名' => '藏著名',
-'藏著書' => '藏著書',
-'藏著稱' => '藏著稱',
-'藏著者' => '藏著者',
-'藏著述' => '藏著述',
-'藏著錄' => '藏著錄',
-'蘊涵著' => '蘊涵着',
-'蘸著' => '蘸着',
-'蘸著作' => '蘸著作',
-'蘸著名' => '蘸著名',
-'蘸著書' => '蘸著書',
-'蘸著稱' => '蘸著稱',
-'蘸著者' => '蘸著者',
-'蘸著述' => '蘸著述',
-'蘸著錄' => '蘸著錄',
-'蜜里调油' => '蜜裏調油',
-'荧屏' => '螢屏',
-'屏幕' => '螢幕',
-'人行道' => '行人路',
-'行家里手' => '行家裏手',
-'首席执行官' => '行政總裁',
-'行著' => '行着',
-'行著作' => '行著作',
-'行著名' => '行著名',
-'行著書' => '行著書',
-'行著稱' => '行著稱',
-'行著者' => '行著者',
-'行著述' => '行著述',
-'行著錄' => '行著錄',
-'衝著' => '衝着',
-'衣著' => '衣着',
-'衣著作' => '衣著作',
-'衣著名' => '衣著名',
-'衣著書' => '衣著書',
-'衣著稱' => '衣著稱',
-'衣著者' => '衣著者',
-'衣著述' => '衣著述',
-'衣著錄' => '衣著錄',
-'表里' => '表裏',
-'表里一致' => '表裏一致',
-'表里不一' => '表裏不一',
-'表里如一' => '表裏如一',
-'表里山河' => '表裏山河',
-'袋里' => '袋裏',
-'袖里' => '袖裏',
-'被里' => '被裏',
-'裡' => '裏',
-'里勾外连' => '裏勾外連',
-'里屋' => '裏屋',
-'里层' => '裏層',
-'里带' => '裏帶',
-'里弦' => '裏弦',
-'里应外合' => '裏應外合',
-'里海' => '裏海',
-'里脊' => '裏脊',
-'里衣' => '裏衣',
-'里通外国' => '裏通外國',
-'里通外敌' => '裏通外敵',
-'里边' => '裏邊',
-'里间' => '裏間',
-'里面' => '裏面',
-'里头' => '裏頭',
-'裝著' => '裝着',
-'裝著作' => '裝著作',
-'裝著名' => '裝著名',
-'裝著書' => '裝著書',
-'裝著稱' => '裝著稱',
-'裝著者' => '裝著者',
-'裝著述' => '裝著述',
-'裝著錄' => '裝著錄',
-'裡冷' => '裡冷',
-'裹著' => '裹着',
-'裹著作' => '裹著作',
-'裹著名' => '裹著名',
-'裹著書' => '裹著書',
-'裹著稱' => '裹著稱',
-'裹著者' => '裹著者',
-'裹著述' => '裹著述',
-'裹著錄' => '裹著錄',
-'衬里' => '襯裏',
-'西占' => '西佔',
-'塞維亞' => '西維爾',
-'塞维利亚' => '西維爾',
-'要占' => '要佔',
-'要占卜' => '要占卜',
-'覆著' => '覆着',
-'覆蓋著' => '覆蓋着',
-'見著' => '見着',
-'見著作' => '見著作',
-'見著名' => '見著名',
-'見著書' => '見著書',
-'見著稱' => '見著稱',
-'見著者' => '見著者',
-'見著述' => '見著述',
-'見著錄' => '見著錄',
-'視著' => '視着',
-'視著名' => '視著名',
-'角落里' => '角落裏',
-'分辨率' => '解像度',
-'解析度' => '解像度',
-'言里' => '言裏',
-'計畫' => '計劃',
-'記著' => '記着',
-'記著作' => '記著作',
-'記著名' => '記著名',
-'記著書' => '記著書',
-'記著稱' => '記著稱',
-'記著者' => '記著者',
-'記著述' => '記著述',
-'記著錄' => '記著錄',
-'試著' => '試着',
-'試著作' => '試著作',
-'試著名' => '試著名',
-'試著書' => '試著書',
-'試著稱' => '試著稱',
-'試著者' => '試著者',
-'試著述' => '試著述',
-'試著錄' => '試著錄',
-'话里有话' => '話裏有話',
-'语法里' => '語法裏',
-'語著' => '語着',
-'語著作' => '語著作',
-'語著名' => '語著名',
-'語著書' => '語著書',
-'語著稱' => '語著稱',
-'語著者' => '語著者',
-'語著述' => '語著述',
-'語著錄' => '語著錄',
-'语里' => '語裏',
-'說著' => '說着',
-'說著作' => '說著作',
-'說著稱' => '說著稱',
-'說著者' => '說著者',
-'說著述' => '說著述',
-'數據機' => '調制解調器',
-'诺曼底' => '諾曼第',
-'警戒著' => '警戒着',
-'變著' => '變着',
-'變著作' => '變著作',
-'變著名' => '變著名',
-'變著書' => '變著書',
-'變著稱' => '變著稱',
-'變著者' => '變著者',
-'變著述' => '變著述',
-'變著錄' => '變著錄',
-'豎著' => '豎着',
-'豎著作' => '豎著作',
-'豎著名' => '豎著名',
-'豎著書' => '豎著書',
-'豎著稱' => '豎著稱',
-'豎著者' => '豎著者',
-'豎著述' => '豎著述',
-'豎著錄' => '豎著錄',
-'象徵著名' => '象徵著名',
-'象徵著' => '象著着',
-'貝爾格勒' => '貝爾格萊德',
-'布莱尔' => '貝理雅',
-'負著' => '負着',
-'貢寮' => '貢寮',
-'買凶' => '買兇',
-'費占' => '費佔',
-'费占' => '費佔',
-'信息时代' => '資訊時代',
-'赌台' => '賭枱',
-'尚比亞' => '贊比亞',
-'西臺人' => '赫梯人',
-'西臺國' => '赫梯國',
-'西臺帝' => '赫梯帝',
-'西臺文' => '赫梯文',
-'西臺族' => '赫梯族',
-'西臺王' => '赫梯王',
-'西臺語' => '赫梯語',
-'赫魯雪夫' => '赫魯曉夫',
-'走為上著' => '走為上着',
-'走著' => '走着',
-'走著作' => '走著作',
-'走著名' => '走著名',
-'走著書' => '走著書',
-'走著稱' => '走著稱',
-'走著者' => '走著者',
-'走著述' => '走著述',
-'走著錄' => '走著錄',
-'趕著' => '趕着',
-'趕著作' => '趕著作',
-'趕著名' => '趕著名',
-'趕著書' => '趕著書',
-'趕著稱' => '趕著稱',
-'趕著者' => '趕著者',
-'趕著述' => '趕著述',
-'趕著錄' => '趕著錄',
-'趴著' => '趴着',
-'趴著作' => '趴著作',
-'趴著名' => '趴著名',
-'趴著書' => '趴著書',
-'趴著稱' => '趴著稱',
-'趴著者' => '趴著者',
-'趴著述' => '趴著述',
-'趴著錄' => '趴著錄',
-'跑著' => '跑着',
-'跑著作' => '跑著作',
-'跑著名' => '跑著名',
-'跑著書' => '跑著書',
-'跑著稱' => '跑著稱',
-'跑著者' => '跑著者',
-'跑著述' => '跑著述',
-'跑著錄' => '跑著錄',
-'跟著' => '跟着',
-'跟著作' => '跟著作',
-'跟著名' => '跟著名',
-'跟著書' => '跟著書',
-'跟著稱' => '跟著稱',
-'跟著者' => '跟著者',
-'跟著述' => '跟著述',
-'跟著錄' => '跟著錄',
-'跪著' => '跪着',
-'跪著作' => '跪著作',
-'跪著名' => '跪著名',
-'跪著書' => '跪著書',
-'跪著稱' => '跪著稱',
-'跪著者' => '跪著者',
-'跪著述' => '跪著述',
-'跪著錄' => '跪著錄',
-'路图里' => '路圖裏',
-'跳著' => '跳着',
-'跳著作' => '跳著作',
-'跳著名' => '跳著名',
-'跳著書' => '跳著書',
-'跳著稱' => '跳著稱',
-'跳著者' => '跳著者',
-'跳著述' => '跳著述',
-'跳著錄' => '跳著錄',
-'踏著' => '踏着',
-'踏著作' => '踏著作',
-'踏著名' => '踏著名',
-'踏著稱' => '踏著稱',
-'踏著者' => '踏著者',
-'踏著述' => '踏著述',
-'踏著錄' => '踏著錄',
-'踩著' => '踩着',
-'踩著作' => '踩著作',
-'踩著名' => '踩著名',
-'踩著書' => '踩著書',
-'踩著稱' => '踩著稱',
-'踩著者' => '踩著者',
-'踩著述' => '踩著述',
-'踩著錄' => '踩著錄',
-'躍著' => '躍着',
-'躍著作' => '躍著作',
-'躍著名' => '躍著名',
-'躍著書' => '躍著書',
-'躍著稱' => '躍著稱',
-'躍著者' => '躍著者',
-'躍著述' => '躍著述',
-'躍著錄' => '躍著錄',
-'身著' => '身着',
-'身著作' => '身著作',
-'身著名' => '身著名',
-'身著書' => '身著書',
-'身著稱' => '身著稱',
-'身著者' => '身著者',
-'身著述' => '身著述',
-'身著錄' => '身著錄',
-'躺著' => '躺着',
-'躺著作' => '躺著作',
-'躺著名' => '躺著名',
-'躺著書' => '躺著書',
-'躺著稱' => '躺著稱',
-'躺著者' => '躺著者',
-'躺著述' => '躺著述',
-'躺著錄' => '躺著錄',
-'车库里' => '車庫裏',
-'车站里' => '車站裏',
-'车里' => '車裏',
-'车里雅宾斯克' => '車里雅賓斯克',
-'軟體' => '軟件',
-'軟體動物' => '軟體動物',
-'軟體家具' => '軟體家具',
-'載著' => '載着',
-'載著作' => '載著作',
-'載著名' => '載著名',
-'載著書' => '載著書',
-'載著稱' => '載著稱',
-'載著者' => '載著者',
-'載著述' => '載著述',
-'載著錄' => '載著錄',
-'轉著' => '轉着',
-'轉著作' => '轉著作',
-'轉著名' => '轉著名',
-'轉著書' => '轉著書',
-'轉著稱' => '轉著稱',
-'轉著者' => '轉著者',
-'轉著述' => '轉著述',
-'轉著錄' => '轉著錄',
-'办公台' => '辦公枱',
-'辦著' => '辦着',
-'辦著作' => '辦著作',
-'辦著名' => '辦著名',
-'辦著書' => '辦著書',
-'辦著稱' => '辦著稱',
-'辦著者' => '辦著者',
-'辦著述' => '辦著述',
-'辦著錄' => '辦著錄',
-'迫著' => '迫着',
-'追著' => '追着',
-'追著作' => '追著作',
-'追著名' => '追著名',
-'追著書' => '追著書',
-'追著稱' => '追著稱',
-'追著者' => '追著者',
-'追著述' => '追著述',
-'追著錄' => '追著錄',
-'逆著' => '逆着',
-'逆著作' => '逆著作',
-'逆著名' => '逆著名',
-'逆著書' => '逆著書',
-'逆著稱' => '逆著稱',
-'逆著者' => '逆著者',
-'逆著述' => '逆著述',
-'逆著錄' => '逆著錄',
-'径入' => '逕入',
-'径到' => '逕到',
-'径取' => '逕取',
-'径启' => '逕啟',
-'径寄' => '逕寄',
-'径庭' => '逕庭',
-'径往' => '逕往',
-'径自' => '逕自',
-'径行' => '逕行',
-'径迎' => '逕迎',
-'这里' => '這裏',
-'连占' => '連佔',
-'連占' => '連佔',
-'連著' => '連着',
-'链接' => '連結',
-'連著作' => '連著作',
-'連著名' => '連著名',
-'連著書' => '連著書',
-'連著稱' => '連著稱',
-'連著者' => '連著者',
-'連著述' => '連著述',
-'連著錄' => '連著錄',
-'进占' => '進佔',
-'進占' => '進佔',
-'演化論' => '進化論',
-'逼著' => '逼着',
-'逼著作' => '逼著作',
-'逼著名' => '逼著名',
-'逼著書' => '逼著書',
-'逼著稱' => '逼著稱',
-'逼著者' => '逼著者',
-'逼著述' => '逼著述',
-'逼著錄' => '逼著錄',
-'遇著' => '遇着',
-'遇著作' => '遇著作',
-'遇著名' => '遇著名',
-'遇著書' => '遇著書',
-'遇著称' => '遇著稱',
-'遇著稱' => '遇著稱',
-'遇著者' => '遇著者',
-'遇著述' => '遇著述',
-'遇著錄' => '遇著錄',
-'游戏里' => '遊戲裏',
-'遍布' => '遍佈',
-'遍佈著' => '遍佈着',
-'遍布著' => '遍佈着',
-'過著' => '過着',
-'达·芬奇' => '達·文西',
-'达芬奇' => '達文西',
-'達著' => '達着',
-'達著作' => '達著作',
-'達著名' => '達著名',
-'達著書' => '達著書',
-'達著稱' => '達著稱',
-'達著者' => '達著者',
-'達著述' => '達著述',
-'達著錄' => '達著錄',
-'还占' => '還佔',
-'還占' => '還佔',
-'邋里邋遢' => '邋裏邋遢',
-'那里' => '那裏',
-'都市里' => '都市裏',
-'配合著' => '配合着',
-'配合著名' => '配合著名',
-'配图里' => '配圖裏',
-'配著' => '配着',
-'配著作' => '配著作',
-'配著名' => '配著名',
-'配著書' => '配著書',
-'配著稱' => '配著稱',
-'配著者' => '配著者',
-'配著述' => '配著述',
-'配著錄' => '配著錄',
-'醯' => '酰',
-'醜著' => '醜着',
-'醜著作' => '醜著作',
-'醜著名' => '醜著名',
-'醜著書' => '醜著書',
-'醜著稱' => '醜著稱',
-'醜著者' => '醜著者',
-'醜著述' => '醜著述',
-'醜著錄' => '醜著錄',
-'醯壶' => '醯壺',
-'醯壺' => '醯壺',
-'醯醋' => '醯醋',
-'醯醢' => '醯醢',
-'醯酱' => '醯醬',
-'醯醬' => '醯醬',
-'醯雞' => '醯雞',
-'醯鸡' => '醯雞',
-'釀著' => '釀着',
-'釀著作' => '釀著作',
-'釀著名' => '釀著名',
-'釀著書' => '釀著書',
-'釀著稱' => '釀著稱',
-'釀著者' => '釀著者',
-'釀著述' => '釀著述',
-'釀著錄' => '釀著錄',
-'金装玉里' => '金裝玉裏',
-'鉤' => '鈎',
-'鋪著' => '鋪着',
-'鋪著作' => '鋪著作',
-'鋪著名' => '鋪著名',
-'鋪著書' => '鋪著書',
-'鋪著稱' => '鋪著稱',
-'鋪著者' => '鋪著者',
-'鋪著述' => '鋪著述',
-'鋪著錄' => '鋪著錄',
-'镜图里' => '鏡圖裏',
-'钟在寺里' => '鐘在寺裏',
-'狄托' => '鐵托',
-'泰坦尼克号' => '鐵達尼號',
-'门里' => '門裏',
-'閉著' => '閉着',
-'閉著作' => '閉著作',
-'閉著名' => '閉著名',
-'閉著書' => '閉著書',
-'閉著稱' => '閉著稱',
-'閉著者' => '閉著者',
-'閉著述' => '閉著述',
-'閉著錄' => '閉著錄',
-'克卜勒' => '開普勒',
-'開著' => '開着',
-'開著作' => '開著作',
-'開著名' => '開著名',
-'開著書' => '開著書',
-'開著稱' => '開著稱',
-'開著者' => '開著者',
-'開著述' => '開著述',
-'開著錄' => '開著錄',
-'开诚布公' => '開誠佈公',
-'開誠布公' => '開誠佈公',
-'閑著' => '閑着',
-'閑著作' => '閑著作',
-'閑著名' => '閑著名',
-'閑著書' => '閑著書',
-'閑著稱' => '閑著稱',
-'閑著者' => '閑著者',
-'閑著述' => '閑著述',
-'閑著錄' => '閑著錄',
-'閒著' => '閒着',
-'间里' => '間裏',
-'關係著' => '關係着',
-'關著' => '關着',
-'關著作' => '關著作',
-'關著名' => '關著名',
-'關著書' => '關著書',
-'關著稱' => '關著稱',
-'關著者' => '關著者',
-'關著述' => '關著述',
-'關著錄' => '關著錄',
-'聞不著' => '闻不着',
-'聞得著' => '闻得着',
-'聞著' => '闻着',
-'亞塞拜然' => '阿塞拜疆',
-'阿布達比' => '阿布扎比',
-'阿拉伯聯合大公國' => '阿拉伯聯合酋長國',
-'亞斯文' => '阿斯旺',
-'阿联酋' => '阿聯酋',
-'艾里爾·夏隆' => '阿里埃勒·沙龍',
-'附著' => '附着',
-'附著作' => '附著作',
-'附著名' => '附著名',
-'附著書' => '附著書',
-'附著稱' => '附著稱',
-'附著者' => '附著者',
-'附著述' => '附著述',
-'附著錄' => '附著錄',
-'陋著' => '陋着',
-'陋著作' => '陋著作',
-'陋著名' => '陋著名',
-'陋著書' => '陋著書',
-'陋著稱' => '陋著稱',
-'陋著者' => '陋著者',
-'陋著述' => '陋著述',
-'陋著錄' => '陋著錄',
-'院里' => '院裏',
-'陪著' => '陪着',
-'陪著作' => '陪著作',
-'陪著名' => '陪著名',
-'陪著書' => '陪著書',
-'陪著稱' => '陪著稱',
-'陪著者' => '陪著者',
-'陪著述' => '陪著述',
-'陪著錄' => '陪著錄',
-'阴沟里翻船' => '陰溝裏翻船',
-'隔著' => '隔着',
-'隔著作' => '隔著作',
-'隔著名' => '隔著名',
-'隔著書' => '隔著書',
-'隔著稱' => '隔著稱',
-'隔著者' => '隔著者',
-'隔著述' => '隔著述',
-'隔著錄' => '隔著錄',
-'隨著' => '隨着',
-'隨著作' => '隨著作',
-'隨著名' => '隨著名',
-'隨著書' => '隨著書',
-'隨著稱' => '隨著稱',
-'隨著者' => '隨著者',
-'隨著述' => '隨著述',
-'隨著錄' => '隨著錄',
-'隐占' => '隱佔',
-'隱占' => '隱佔',
-'雅爾達' => '雅爾塔',
-'雅著' => '雅着',
-'雅穆索戈' => '雅穆蘇克雷',
-'雅著作' => '雅著作',
-'雅著名' => '雅著名',
-'雅著書' => '雅著書',
-'雅著称' => '雅著稱',
-'雅著稱' => '雅著稱',
-'雅著者' => '雅著者',
-'雅著述' => '雅著述',
-'雅著錄' => '雅著錄',
-'集数里' => '集數裏',
-'集里' => '集裏',
-'雜著' => '雜着',
-'雜著作' => '雜著作',
-'雜著名' => '雜著名',
-'雜著書' => '雜著書',
-'雜著稱' => '雜著稱',
-'雜著者' => '雜著者',
-'雜著述' => '雜著述',
-'雜著錄' => '雜著錄',
-'鸡蛋里挑骨头' => '雞蛋裏挑骨頭',
-'冰淇淋' => '雪糕',
-'冰激凌' => '雪糕',
-'雪里' => '雪裏',
-'云里雾里' => '雲裏霧裏',
-'莱特湾' => '雷伊泰灣',
-'萊特灣' => '雷伊泰灣',
-'电影里' => '電影裏',
-'晶体管' => '電晶體',
-'晶體管' => '電晶體',
-'电梯里' => '電梯裏',
-'电脑程序' => '電腦程式',
-'计算机程序' => '電腦程式',
-'电视里' => '電視裏',
-'霄裡' => '霄裡',
-'荷姆茲' => '霍爾木茲',
-'雾里' => '霧裏',
-'霸占' => '霸佔',
-'非占不可' => '非佔不可',
-'靠著' => '靠着',
-'靠著作' => '靠著作',
-'靠著名' => '靠著名',
-'靠著称' => '靠著稱',
-'靠著稱' => '靠著稱',
-'靠著者' => '靠著者',
-'靠著述' => '靠著述',
-'靠著录' => '靠著錄',
-'靠著錄' => '靠著錄',
-'面包著' => '面包着',
-'鞋里' => '鞋裏',
-'鞭辟入里' => '鞭辟入裏',
-'朝鲜战争' => '韓戰',
-'響著' => '響着',
-'響著作' => '響著作',
-'響著名' => '響著名',
-'響著書' => '響著書',
-'響著稱' => '響著稱',
-'響著者' => '響著者',
-'響著述' => '響著述',
-'響著錄' => '響著錄',
-'頂著' => '頂着',
-'頂著作' => '頂著作',
-'頂著名' => '頂著名',
-'頂著書' => '頂著書',
-'頂著稱' => '頂著稱',
-'頂著者' => '頂著者',
-'頂著述' => '頂著述',
-'頂著錄' => '頂著錄',
-'順著' => '順着',
-'順著作' => '順著作',
-'順著名' => '順著名',
-'順著書' => '順著書',
-'順著稱' => '順著稱',
-'順著者' => '順著者',
-'順著述' => '順著述',
-'順著錄' => '順著錄',
-'頒布' => '頒佈',
-'颁布' => '頒佈',
-'領著' => '領着',
-'領著作' => '領著作',
-'領著名' => '領著名',
-'領著書' => '領著書',
-'領著稱' => '領著稱',
-'領著者' => '領著者',
-'領著述' => '領著述',
-'領著錄' => '領著錄',
-'头里' => '頭裏',
-'风里' => '風裏',
-'颳著' => '颳着',
-'飃著' => '飃着',
-'飄著' => '飄着',
-'飄著作' => '飄著作',
-'飄著名' => '飄著名',
-'飄著書' => '飄著書',
-'飄著稱' => '飄著稱',
-'飄著者' => '飄著者',
-'飄著述' => '飄著述',
-'飄著錄' => '飄著錄',
-'餐台' => '餐枱',
-'馆里' => '館裏',
-'糊口' => '餬口',
-'馬里蘭' => '馬利蘭',
-'马里兰' => '馬利蘭',
-'马拉特·萨芬' => '馬拉特·沙芬',
-'馬斯垂克' => '馬斯特里赫特',
-'馬爾地夫' => '馬爾代夫',
-'馬利共和國' => '馬里共和國',
-'駕著' => '駕着',
-'駕著作' => '駕著作',
-'駕著名' => '駕著名',
-'駕著書' => '駕著書',
-'駕著稱' => '駕著稱',
-'駕著者' => '駕著者',
-'駕著述' => '駕著述',
-'駕著錄' => '駕著錄',
-'騎著' => '騎着',
-'騎著作' => '騎著作',
-'騎著名' => '騎著名',
-'騎著書' => '騎著書',
-'騎著稱' => '騎著稱',
-'騎著者' => '騎著者',
-'騎著述' => '騎著述',
-'騎著錄' => '騎著錄',
-'騙著' => '騙着',
-'騙著作' => '騙著作',
-'騙著名' => '騙著名',
-'騙著書' => '騙著書',
-'騙著稱' => '騙著稱',
-'騙著者' => '騙著者',
-'騙著述' => '騙著述',
-'騙著錄' => '騙著錄',
-'驶著' => '驶着',
-'体里' => '體裏',
-'高畫質' => '高清',
-'高著' => '高着',
-'高著作' => '高著作',
-'高著名' => '高著名',
-'高著書' => '高著書',
-'高著称' => '高著稱',
-'高著稱' => '高著稱',
-'高著者' => '高著者',
-'高著述' => '高著述',
-'高著錄' => '高著錄',
-'斗着' => '鬥着',
-'鬥著' => '鬥着',
-'鬥著作' => '鬥著作',
-'鬥著名' => '鬥著名',
-'鬥著書' => '鬥著書',
-'鬥著稱' => '鬥著稱',
-'鬥著者' => '鬥著者',
-'鬥著述' => '鬥著述',
-'鬥著錄' => '鬥著錄',
-'鬧著' => '鬧着',
-'牛軋' => '鳥結',
-'牛轧' => '鳥結',
-'鳩占' => '鳩佔',
-'鸠占' => '鳩佔',
-'麗著' => '麗着',
-'麗著作' => '麗著作',
-'麗著名' => '麗著名',
-'麗著書' => '麗著書',
-'麗著稱' => '麗著稱',
-'麗著者' => '麗著者',
-'麗著述' => '麗著述',
-'麗著錄' => '麗著錄',
-'麼著' => '麼着',
-'芮氏0' => '黎克特制0',
-'里氏0' => '黎克特制0',
-'芮氏1' => '黎克特制1',
-'里氏1' => '黎克特制1',
-'芮氏2' => '黎克特制2',
-'里氏2' => '黎克特制2',
-'芮氏3' => '黎克特制3',
-'里氏3' => '黎克特制3',
-'芮氏4' => '黎克特制4',
-'里氏4' => '黎克特制4',
-'芮氏5' => '黎克特制5',
-'里氏5' => '黎克特制5',
-'芮氏6' => '黎克特制6',
-'里氏6' => '黎克特制6',
-'芮氏7' => '黎克特制7',
-'里氏7' => '黎克特制7',
-'芮氏8' => '黎克特制8',
-'里氏8' => '黎克特制8',
-'芮氏9' => '黎克特制9',
-'里氏9' => '黎克特制9',
-'芮氏地震規模' => '黎克特制地震震級',
-'里氏地震规模' => '黎克特制地震震級',
-'芮氏規模' => '黎克特制震級',
-'里氏规模' => '黎克特制震級',
-'里氏震级' => '黎克特制震級',
-'黏著' => '黏着',
-'黏著作' => '黏著作',
-'黏著名' => '黏著名',
-'黏著書' => '黏著書',
-'黏著稱' => '黏著稱',
-'黏著者' => '黏著者',
-'黏著述' => '黏著述',
-'黏著錄' => '黏著錄',
-'蒙特內哥羅' => '黑山',
-'點著' => '點着',
-'點著作' => '點著作',
-'點著名' => '點著名',
-'點著書' => '點著書',
-'點著稱' => '點著稱',
-'點著者' => '點著者',
-'點著述' => '點著述',
-'點著錄' => '點著錄',
-'点里' => '點裏',
-'点里程' => '點里程',
-'鼓里' => '鼓裏',
-);
-
-$zh2CN = array(
-'16進位制' => '16进位制',
-'16進位' => '16进制',
-'IP位址' => 'IP地址',
-'一份子' => '一分子',
-'全球資訊網' => '万维网',
-'三十六著' => '三十六着',
-'三極體' => '三极管',
-'下著' => '下着',
-'下著作' => '下著作',
-'下著名' => '下著名',
-'下著录' => '下著录',
-'下著錄' => '下著录',
-'下著有' => '下著有',
-'下著称' => '下著称',
-'下著稱' => '下著称',
-'下著者' => '下著者',
-'下著述' => '下著述',
-'不著' => '不着',
-'不著書' => '不著书',
-'不著名' => '不著名',
-'不著錄' => '不著录',
-'不著稱' => '不著称',
-'不著述' => '不著述',
-'與著' => '与着',
-'與著書' => '与著书',
-'與著作' => '与著作',
-'與著名' => '与著名',
-'與著錄' => '与著录',
-'與著稱' => '与著称',
-'與著者' => '与著者',
-'與著述' => '与著述',
-'醜著' => '丑着',
-'醜著書' => '丑著书',
-'醜著作' => '丑著作',
-'醜著名' => '丑著名',
-'醜著錄' => '丑著录',
-'醜著稱' => '丑著称',
-'醜著者' => '丑著者',
-'醜著述' => '丑著述',
-'邱吉爾' => '丘吉尔',
-'C型肝炎' => '丙型肝炎',
-'C肝' => '丙肝',
-'東協會' => '东协会',
-'東協助' => '东协助',
-'東協議' => '东协议',
-'東南亞國家協會' => '东南亚国家联盟',
-'亚细安' => '东盟',
-'東協' => '东盟',
-'仲介' => '中介',
-'臨著' => '临着',
-'臨著書' => '临著书',
-'臨著作' => '临著作',
-'臨著名' => '临著名',
-'臨著錄' => '临著录',
-'臨著稱' => '临著称',
-'臨著者' => '临著者',
-'臨著述' => '临著述',
-'為著' => '为着',
-'為著《' => '为著《',
-'為著作' => '为著作',
-'為著名' => '为著名',
-'為著錄' => '为著录',
-'為著稱' => '为著称',
-'為著者' => '为著者',
-'為著述' => '为著述',
-'主機板' => '主板',
-'麗著' => '丽着',
-'麗著書' => '丽著书',
-'麗著作' => '丽著作',
-'麗著名' => '丽著名',
-'麗著錄' => '丽著录',
-'麗著稱' => '丽著称',
-'麗著者' => '丽著者',
-'麗著述' => '丽著述',
-'麼著' => '么着',
-'樂著' => '乐着',
-'樂著書' => '乐著书',
-'樂著作' => '乐著作',
-'樂著名' => '乐著名',
-'樂著錄' => '乐著录',
-'樂著稱' => '乐著称',
-'樂著者' => '乐著者',
-'樂著述' => '乐著述',
-'賈伯斯' => '乔布斯',
-'喬治·歐威爾' => '乔治·奥威尔',
-'乘著' => '乘着',
-'乘著書' => '乘著书',
-'乘著作' => '乘著作',
-'乘著名' => '乘著名',
-'乘著錄' => '乘著录',
-'乘著称' => '乘著称',
-'乘著稱' => '乘著称',
-'乘著者' => '乘著者',
-'乘著述' => '乘著述',
-'B型肝炎' => '乙型肝炎',
-'B肝' => '乙肝',
-'吉力馬札羅' => '乞力马扎罗',
-'葉門' => '也门',
-'買帳' => '买账',
-'了結他' => '了结他',
-'爭著' => '争着',
-'爭著書' => '争著书',
-'爭著作' => '争著作',
-'爭著名' => '争著名',
-'爭著錄' => '争著录',
-'爭著稱' => '争著称',
-'爭著者' => '争著者',
-'爭著述' => '争著述',
-'二極體' => '二极管',
-'二進位制' => '二进位制',
-'二進位' => '二进制',
-'網際網絡' => '互联网',
-'網際網路' => '互联网',
-'亞歷山卓' => '亚历山大',
-'雅穆索戈' => '亚穆苏克罗',
-'交帳' => '交账',
-'亮著' => '亮着',
-'亮著書' => '亮著书',
-'亮著作' => '亮著作',
-'亮著名' => '亮著名',
-'亮著錄' => '亮著录',
-'亮著称' => '亮著称',
-'亮著稱' => '亮著称',
-'亮著者' => '亮著者',
-'亮著述' => '亮著述',
-'人工智慧' => '人工智能',
-'行人路' => '人行道',
-'甚麼' => '什么',
-'甚麽' => '什么',
-'仗著' => '仗着',
-'仗著書' => '仗著书',
-'仗著作' => '仗著作',
-'仗著名' => '仗著名',
-'仗著錄' => '仗著录',
-'仗著稱' => '仗著称',
-'仗著者' => '仗著者',
-'仗著述' => '仗著述',
-'付帳' => '付账',
-'代表著' => '代表着',
-'代表著書' => '代表著书',
-'代表著作' => '代表著作',
-'代表著名' => '代表著名',
-'代表著錄' => '代表著录',
-'代表著稱' => '代表著称',
-'代表著者' => '代表著者',
-'代表著述' => '代表著述',
-'乙太網' => '以太网',
-'伊莉莎白' => '伊丽莎白',
-'伊利諾' => '伊利诺伊',
-'伊利諾伊' => '伊利诺伊',
-'伊斯蘭瑪巴德' => '伊斯兰堡',
-'伊斯坦堡' => '伊斯坦布尔',
-'伏著' => '伏着',
-'優先順序' => '优先级',
-'傳著' => '传着',
-'傳著書' => '传著书',
-'傳著作' => '传著作',
-'傳著名' => '传著名',
-'傳著錄' => '传著录',
-'傳著稱' => '传著称',
-'傳著者' => '传著者',
-'傳著述' => '传著述',
-'貝里斯' => '伯利兹',
-'伯明罕' => '伯明翰',
-'伴著' => '伴着',
-'伴著書' => '伴著书',
-'伴著作' => '伴著作',
-'伴著名' => '伴著名',
-'伴著錄' => '伴著录',
-'伴著稱' => '伴著称',
-'伴著者' => '伴著者',
-'伴著述' => '伴著述',
-'點陣圖' => '位图',
-'低著' => '低着',
-'低著書' => '低著书',
-'低著作' => '低著作',
-'低著名' => '低著名',
-'低著錄' => '低著录',
-'低著称' => '低著称',
-'低著稱' => '低著称',
-'低著者' => '低著者',
-'低著述' => '低著述',
-'住著' => '住着',
-'住著書' => '住著书',
-'住著作' => '住著作',
-'住著名' => '住著名',
-'住著錄' => '住著录',
-'住著称' => '住著称',
-'住著稱' => '住著称',
-'住著者' => '住著者',
-'住著述' => '住著述',
-'餘' => '余',
-'維德角' => '佛得角',
-'侏儸紀' => '侏罗纪',
-'側著' => '侧着',
-'側著書' => '侧著书',
-'側著作' => '侧著作',
-'側著名' => '侧著名',
-'側著錄' => '侧著录',
-'側著稱' => '侧著称',
-'側著者' => '侧著者',
-'側著述' => '侧著述',
-'可攜式' => '便携式',
-'攜帶型' => '便携式',
-'保護著' => '保护着',
-'保障著' => '保障着',
-'保障著書' => '保障著书',
-'保障著作' => '保障著作',
-'保障著名' => '保障著名',
-'保障著錄' => '保障著录',
-'保障著称' => '保障著称',
-'保障著稱' => '保障著称',
-'保障著者' => '保障著者',
-'保障著述' => '保障著述',
-'資訊時代' => '信息时代',
-'資訊理論' => '信息论',
-'信著' => '信着',
-'信著書' => '信著书',
-'信著作' => '信著作',
-'信著名' => '信著名',
-'信著錄' => '信著录',
-'信著称' => '信著称',
-'信著稱' => '信著称',
-'信著者' => '信著者',
-'信著述' => '信著述',
-'伏地挺身' => '俯卧撑',
-'掌上壓' => '俯卧撑',
-'倒帳' => '倒账',
-'候著' => '候着',
-'候著書' => '候著书',
-'候著作' => '候著作',
-'候著名' => '候著名',
-'候著錄' => '候著录',
-'候著稱' => '候著称',
-'候著者' => '候著者',
-'候著述' => '候著述',
-'借著' => '借着',
-'藉著' => '借着',
-'借著書' => '借著书',
-'借著作' => '借著作',
-'借著名' => '借著名',
-'借著錄' => '借著录',
-'借著稱' => '借著称',
-'借著者' => '借著者',
-'借著述' => '借著述',
-'假帳' => '假账',
-'做著' => '做着',
-'做著書' => '做著书',
-'做著作' => '做著作',
-'做著名' => '做著名',
-'做著錄' => '做著录',
-'做著稱' => '做著称',
-'做著者' => '做著者',
-'做著述' => '做著述',
-'偷著' => '偷着',
-'偷著書' => '偷著书',
-'偷著作' => '偷著作',
-'偷著名' => '偷著名',
-'偷著錄' => '偷著录',
-'偷著稱' => '偷著称',
-'偷著者' => '偷著者',
-'偷著述' => '偷著述',
-'傅利葉' => '傅里叶',
-'母音' => '元音',
-'光著' => '光着',
-'光著書' => '光著书',
-'光著作' => '光著作',
-'光著名' => '光著名',
-'光著錄' => '光著录',
-'光著称' => '光著称',
-'光著稱' => '光著称',
-'光著者' => '光著者',
-'光著述' => '光著述',
-'光碟機' => '光驱',
-'柯林頓' => '克林顿',
-'克羅埃西亞' => '克罗地亚',
-'轉殖' => '克隆',
-'複製人' => '克隆人',
-'入帳' => '入账',
-'八進位制' => '八进位制',
-'八進位' => '八进制',
-'西元1' => '公元1',
-'西元2' => '公元2',
-'西元3' => '公元3',
-'西元4' => '公元4',
-'西元5' => '公元5',
-'西元6' => '公元6',
-'西元7' => '公元7',
-'西元8' => '公元8',
-'西元9' => '公元9',
-'西元前' => '公元前',
-'公帳' => '公账',
-'六進位制' => '六进位制',
-'六進位' => '六进制',
-'關著' => '关着',
-'關係著' => '关系着',
-'關著書' => '关著书',
-'關著作' => '关著作',
-'關著名' => '关著名',
-'關著錄' => '关著录',
-'關著稱' => '关著称',
-'關著者' => '关著者',
-'關著述' => '关著述',
-'關帳' => '关账',
-'記憶體' => '内存',
-'甘比亞' => '冈比亚',
-'冒著' => '冒着',
-'冒著書' => '冒著书',
-'冒著作' => '冒著作',
-'冒著名' => '冒著名',
-'冒著錄' => '冒著录',
-'冒著稱' => '冒著称',
-'冒著者' => '冒著者',
-'冒著述' => '冒著述',
-'寫著' => '写着',
-'寫著書' => '写著书',
-'寫著作' => '写著作',
-'寫著名' => '写著名',
-'寫著錄' => '写著录',
-'寫著稱' => '写著称',
-'寫著者' => '写著者',
-'寫著述' => '写著述',
-'沖著' => '冲着',
-'衝著' => '冲着',
-'沖著。' => '冲著。',
-'沖著《' => '冲著《',
-'沖著(' => '冲著(',
-'沖著,' => '冲著,',
-'沖帳' => '冲账',
-'涼著' => '凉着',
-'涼著書' => '凉著书',
-'涼著作' => '凉著作',
-'涼著名' => '凉著名',
-'涼著錄' => '凉著录',
-'涼著稱' => '凉著称',
-'涼著者' => '凉著者',
-'涼著述' => '凉著述',
-'湊合著' => '凑合着',
-'畿內亞' => '几内亚',
-'幾內亞比索' => '几内亚比绍',
-'凱薩琳' => '凯瑟琳',
-'嘉芙蓮' => '凯瑟琳',
-'份內' => '分内',
-'份外' => '分外',
-'分佈著' => '分布着',
-'分布著' => '分布着',
-'解像度' => '分辨率',
-'解析度' => '分辨率',
-'份量' => '分量',
-'車諾比' => '切尔诺贝利',
-'劃著' => '划着',
-'李奧納多' => '列奥那多',
-'列支敦斯登' => '列支敦士登',
-'賴比瑞亞' => '利比里亚',
-'別著' => '别着',
-'刮著' => '刮着',
-'颳著' => '刮着',
-'到帳' => '到账',
-'制著' => '制着',
-'制著書' => '制著书',
-'制著作' => '制著作',
-'制著名' => '制著名',
-'制著錄' => '制著录',
-'制著稱' => '制著称',
-'制著者' => '制著者',
-'制著述' => '制著述',
-'煞車' => '刹车',
-'刻著' => '刻着',
-'刻著書' => '刻著书',
-'刻著作' => '刻著作',
-'刻著名' => '刻著名',
-'刻著錄' => '刻著录',
-'刻著称' => '刻著称',
-'刻著稱' => '刻著称',
-'刻著者' => '刻著者',
-'刻著述' => '刻著述',
-'前波莫瑞' => '前波美拉尼亚',
-'辦著' => '办着',
-'辦著書' => '办著书',
-'辦著作' => '办著作',
-'辦著名' => '办著名',
-'辦著錄' => '办著录',
-'辦著稱' => '办著称',
-'辦著者' => '办著者',
-'辦著述' => '办著述',
-'加薩走廊' => '加沙地带',
-'迦納' => '加纳',
-'加彭' => '加蓬',
-'動著' => '动着',
-'動著書' => '动著书',
-'動著作' => '动著作',
-'動著名' => '动著名',
-'動著錄' => '动著录',
-'動著稱' => '动著称',
-'動著者' => '动著者',
-'動著述' => '动著述',
-'努力著' => '努力着',
-'努力著書' => '努力著书',
-'努力著作' => '努力著作',
-'努力著名' => '努力著名',
-'努力著錄' => '努力著录',
-'努力著称' => '努力著称',
-'努力著稱' => '努力著称',
-'努力著者' => '努力著者',
-'努力著述' => '努力著述',
-'蘿拉' => '劳拉',
-'布蘭登堡' => '勃兰登堡',
-'白朗寧' => '勃朗宁',
-'包著' => '包着',
-'北韓' => '北朝鲜',
-'十進位制' => '十进位制',
-'十進位' => '十进制',
-'公升' => '升',
-'單眼相機' => '单反相机',
-'單鏡反光機' => '单反相机',
-'波札那' => '博茨瓦纳',
-'占著' => '占着',
-'占著作' => '占著作',
-'占著名' => '占著名',
-'占著者' => '占著者',
-'喀拉蚩' => '卡拉奇',
-'卡斯楚' => '卡斯特罗',
-'卡佩雅蒂' => '卡普里亚蒂',
-'盧安達' => '卢旺达',
-'羅浮宮' => '卢浮宫',
-'羅亞爾' => '卢瓦尔',
-'印著' => '印着',
-'印著書' => '印著书',
-'印著作' => '印著作',
-'印著名' => '印著名',
-'印著錄' => '印著录',
-'印著稱' => '印著称',
-'印著者' => '印著者',
-'印著述' => '印著述',
-'瓜地馬拉' => '危地马拉',
-'厄瓜多' => '厄瓜多尔',
-'厄瓜多尔' => '厄瓜多尔',
-'厄瓜多爾' => '厄瓜多尔',
-'厄利垂亚' => '厄立特里亚',
-'厄利垂亞' => '厄立特里亚',
-'厄立特里亞' => '厄立特里亚',
-'壓著' => '压着',
-'壓著書' => '压著书',
-'壓著作' => '压著作',
-'壓著名' => '压著名',
-'壓著錄' => '压著录',
-'壓著稱' => '压著称',
-'壓著者' => '压著者',
-'壓著述' => '压著述',
-'發著' => '发着',
-'發著《' => '发著《',
-'發著作' => '发著作',
-'發著名' => '发著名',
-'發著稱' => '发著称',
-'發著者' => '发著者',
-'已開發國家' => '发达国家',
-'受著' => '受着',
-'受著書' => '受著书',
-'受著作' => '受著作',
-'受著名' => '受著名',
-'受著錄' => '受著录',
-'受著稱' => '受著称',
-'受著者' => '受著者',
-'受著述' => '受著述',
-'變著' => '变着',
-'變著書' => '变著书',
-'變著作' => '变著作',
-'變著名' => '变著名',
-'變著錄' => '变著录',
-'變著稱' => '变著称',
-'變著者' => '变著者',
-'變著述' => '变著述',
-'隻字片語' => '只字片语',
-'隻言片語' => '只言片语',
-'唯讀' => '只读',
-'叫著' => '叫着',
-'叫著書' => '叫著书',
-'叫著作' => '叫著作',
-'叫著名' => '叫著名',
-'叫著錄' => '叫著录',
-'叫著稱' => '叫著称',
-'叫著者' => '叫著者',
-'叫著述' => '叫著述',
-'桌上型電腦' => '台式电脑',
-'撞球' => '台球',
-'台帳' => '台账',
-'叱吒' => '叱咤',
-'吃著' => '吃着',
-'結他' => '吉他',
-'健力士世界紀錄' => '吉尼斯世界纪录',
-'金氏世界紀錄' => '吉尼斯世界纪录',
-'吉布地' => '吉布提',
-'吊著' => '吊着',
-'名份' => '名分',
-'向著' => '向着',
-'向著書' => '向著书',
-'向著作' => '向著作',
-'向著名' => '向著名',
-'向著錄' => '向著录',
-'向著稱' => '向著称',
-'向著者' => '向著者',
-'向著述' => '向著述',
-'含著' => '含着',
-'含著書' => '含著书',
-'含著作' => '含著作',
-'含著名' => '含著名',
-'含著錄' => '含著录',
-'含著稱' => '含著称',
-'含著者' => '含著者',
-'含著述' => '含著述',
-'聽著' => '听着',
-'聽著書' => '听著书',
-'聽著作' => '听著作',
-'聽著名' => '听著名',
-'聽著錄' => '听著录',
-'聽著稱' => '听著称',
-'聽著者' => '听著者',
-'聽著述' => '听著述',
-'吹著' => '吹着',
-'吹著書' => '吹著书',
-'吹著作' => '吹著作',
-'吹著名' => '吹著名',
-'吹著錄' => '吹著录',
-'吹著稱' => '吹著称',
-'吹著者' => '吹著者',
-'吹著述' => '吹著述',
-'呆著' => '呆着',
-'呆帳' => '呆账',
-'味著' => '味着',
-'味著書' => '味著书',
-'味著作' => '味著作',
-'味著名' => '味著名',
-'味著錄' => '味著录',
-'味著称' => '味著称',
-'味著稱' => '味著称',
-'味著者' => '味著者',
-'味著述' => '味著述',
-'咖哩' => '咖喱',
-'諮' => '咨',
-'響著' => '响着',
-'響著書' => '响著书',
-'響著作' => '响著作',
-'響著名' => '响著名',
-'響著錄' => '响著录',
-'響著稱' => '响著称',
-'響著者' => '响著者',
-'響著述' => '响著述',
-'哥斯大黎加' => '哥斯达黎加',
-'哥德式' => '哥特式',
-'哭著' => '哭着',
-'哭著書' => '哭著书',
-'哭著作' => '哭著作',
-'哭著名' => '哭著名',
-'哭著錄' => '哭著录',
-'哭著稱' => '哭著称',
-'哭著者' => '哭著者',
-'哭著述' => '哭著述',
-'唱著' => '唱着',
-'唱著書' => '唱著书',
-'唱著作' => '唱著作',
-'唱著名' => '唱著名',
-'唱著錄' => '唱著录',
-'唱著稱' => '唱著称',
-'唱著者' => '唱著者',
-'唱著述' => '唱著述',
-'啸吒' => '啸咤',
-'喝著' => '喝着',
-'喝著書' => '喝著书',
-'喝著作' => '喝著作',
-'喝著名' => '喝著名',
-'喝著錄' => '喝著录',
-'喝著稱' => '喝著称',
-'喝著者' => '喝著者',
-'喝著述' => '喝著述',
-'嗅著' => '嗅着',
-'雜訊' => '噪声',
-'嚷著' => '嚷着',
-'嚷著書' => '嚷著书',
-'嚷著作' => '嚷著作',
-'嚷著名' => '嚷著名',
-'嚷著錄' => '嚷著录',
-'嚷著稱' => '嚷著称',
-'嚷著者' => '嚷著者',
-'嚷著述' => '嚷著述',
-'回著' => '回着',
-'回著名' => '回著名',
-'因著' => '因着',
-'因著〈' => '因著〈',
-'因著《' => '因著《',
-'因著書' => '因著书',
-'因著作' => '因著作',
-'因著名' => '因著名',
-'因著录' => '因著录',
-'因著錄' => '因著录',
-'因著稱' => '因著称',
-'因著者' => '因著者',
-'因著述' => '因著述',
-'困著' => '困着',
-'困著書' => '困著书',
-'困著作' => '困著作',
-'困著名' => '困著名',
-'困著錄' => '困著录',
-'困著稱' => '困著称',
-'困著者' => '困著者',
-'困著述' => '困著述',
-'圍著' => '围着',
-'圍著書' => '围著书',
-'圍著作' => '围著作',
-'圍著名' => '围著名',
-'圍著錄' => '围著录',
-'圍著稱' => '围著称',
-'圍著者' => '围著者',
-'圍著述' => '围著述',
-'韌體' => '固件',
-'固著' => '固着',
-'西洋棋' => '国际象棋',
-'土魯斯' => '图卢兹',
-'吐瓦魯' => '图瓦卢',
-'原子筆' => '圆珠笔',
-'聖露西亞' => '圣卢西亚',
-'聖克里斯多福及尼維斯' => '圣基茨和尼维斯',
-'聖吉斯納域斯' => '圣基茨和尼维斯',
-'聖文森及格瑞那丁' => '圣文森特和格林纳丁斯',
-'聖馬利諾' => '圣马力诺',
-'蓋亞那' => '圭亚那',
-'坐著' => '坐着',
-'坐著書' => '坐著书',
-'坐著作' => '坐著作',
-'坐著名' => '坐著名',
-'坐著錄' => '坐著录',
-'坐著稱' => '坐著称',
-'坐著者' => '坐著者',
-'坐著述' => '坐著述',
-'堅貞著' => '坚贞着',
-'坦尚尼亞' => '坦桑尼亚',
-'伊波拉' => '埃博拉',
-'衣索匹亞' => '埃塞俄比亚',
-'衣索比亞' => '埃塞俄比亚',
-'艾菲爾' => '埃菲尔',
-'葉里溫' => '埃里温',
-'功能變數名稱' => '域名',
-'吉里巴斯' => '基里巴斯',
-'堂姊' => '堂姐',
-'坎培拉' => '堪培拉',
-'塑膠袋' => '塑料袋',
-'塞爾維亞與蒙特內哥羅' => '塞尔维亚和黑山',
-'塞拉利昂' => '塞拉利昂',
-'塞普勒斯' => '塞浦路斯',
-'賽普勒斯' => '塞浦路斯',
-'塞維亞' => '塞维利亚',
-'西維爾' => '塞维利亚',
-'塞席爾' => '塞舌尔',
-'音效卡' => '声卡',
-'備著' => '备着',
-'備著書' => '备著书',
-'備著作' => '备著作',
-'備著名' => '备著名',
-'備著錄' => '备著录',
-'備著稱' => '备著称',
-'備著者' => '备著者',
-'備著述' => '备著述',
-'外部連結' => '外部链接',
-'托巴哥' => '多巴哥',
-'都卜勒' => '多普勒',
-'多明尼加' => '多米尼加',
-'大姊' => '大姐',
-'天份' => '天分',
-'夾著' => '夹着',
-'夾著書' => '夹著书',
-'夾著作' => '夹著作',
-'夾著名' => '夹著名',
-'夾著錄' => '夹著录',
-'夾著稱' => '夹著称',
-'夾著者' => '夹著者',
-'夾著述' => '夹著述',
-'賓士' => '奔驰',
-'歐巴馬' => '奥巴马',
-'柯德莉·夏萍' => '奥黛丽·赫本',
-'忌廉' => '奶油',
-'荷里活' => '好莱坞',
-'姊夫' => '姐夫',
-'姊姊' => '姐姐',
-'姊弟' => '姐弟',
-'威爾斯' => '威尔士',
-'威斯伐倫' => '威斯特法伦',
-'字型大小' => '字号',
-'字型檔' => '字库',
-'欄位' => '字段',
-'位元組' => '字节',
-'存在著' => '存在着',
-'存著' => '存着',
-'存著作' => '存著作',
-'存著名' => '存著名',
-'學姊' => '学姐',
-'學著' => '学着',
-'學著書' => '学著书',
-'學著作' => '学著作',
-'學著名' => '学著名',
-'學著錄' => '学著录',
-'學著稱' => '学著称',
-'學著者' => '学著者',
-'學著述' => '学著述',
-'太空飛行員' => '宇航员',
-'太空衣' => '宇航服',
-'守著' => '守着',
-'守著書' => '守著书',
-'守著作' => '守著作',
-'守著名' => '守著名',
-'守著錄' => '守著录',
-'守著称' => '守著称',
-'守著稱' => '守著称',
-'守著者' => '守著者',
-'守著述' => '守著述',
-'安哈特' => '安哈尔特',
-'安地卡及巴布達' => '安提瓜和巴布达',
-'巨集' => '宏',
-'定著' => '定着',
-'定著書' => '定著书',
-'定著作' => '定著作',
-'定著名' => '定著名',
-'定著錄' => '定著录',
-'定著称' => '定著称',
-'定著稱' => '定著称',
-'定著者' => '定著者',
-'定著述' => '定著述',
-'波里活' => '宝莱坞',
-'寬頻' => '宽带',
-'密执安' => '密歇根',
-'密西根' => '密歇根',
-'對著' => '对着',
-'對著書' => '对著书',
-'對著作' => '对著作',
-'對著名' => '对著名',
-'對著錄' => '对著录',
-'對著稱' => '对著称',
-'對著者' => '对著者',
-'對著述' => '对著述',
-'對帳' => '对账',
-'尋著' => '寻着',
-'尋著書' => '寻著书',
-'尋著作' => '寻著作',
-'尋著名' => '寻著名',
-'尋著錄' => '寻著录',
-'尋著稱' => '寻著称',
-'尋著者' => '寻著者',
-'尋著述' => '寻著述',
-'飛彈' => '导弹',
-'祖雲達斯' => '尤文图斯',
-'奈及利亞' => '尼日利亚',
-'尼日爾' => '尼日尔',
-'區域網' => '局域网',
-'區域網路' => '局域网络',
-'螢幕' => '屏幕',
-'展著' => '展着',
-'展著書' => '展著书',
-'展著作' => '展著作',
-'展著名' => '展著名',
-'展著錄' => '展著录',
-'展著稱' => '展著称',
-'展著者' => '展著者',
-'展著述' => '展著述',
-'瓦倫西亞' => '巴伦西亚',
-'華倫西亞' => '巴伦西亚',
-'巴塞隆拿' => '巴塞罗那',
-'巴塞隆納' => '巴塞罗那',
-'巴斯拉' => '巴士拉',
-'帕邁拉環礁' => '巴尔米拉环礁',
-'巴貝多' => '巴巴多斯',
-'巴布亞紐幾內亞' => '巴布亚新几内亚',
-'布殊' => '布什',
-'布吉納法索' => '布基纳法索',
-'布隆泉' => '布隆方丹',
-'蒲隆地' => '布隆迪',
-'希冀著' => '希冀着',
-'席哈克' => '希拉克',
-'希拉莉' => '希拉里',
-'希拉蕊' => '希拉里',
-'希特拉' => '希特勒',
-'帛琉' => '帕劳',
-'派屈克' => '帕特里克',
-'頻寬' => '带宽',
-'帶著' => '带着',
-'帶著書' => '带著书',
-'帶著作' => '带著作',
-'帶著名' => '带著名',
-'帶著錄' => '带著录',
-'帶著稱' => '带著称',
-'帶著者' => '带著者',
-'帶著述' => '带著述',
-'幫著' => '帮着',
-'幫著書' => '帮著书',
-'幫著作' => '帮著作',
-'幫著名' => '帮著名',
-'幫著錄' => '帮著录',
-'幫著稱' => '帮著称',
-'幫著者' => '帮著者',
-'幫著述' => '帮著述',
-'乾姊' => '干姐',
-'幹著' => '干着',
-'幹著名' => '幹著名',
-'幹著稱' => '幹著称',
-'庇護著' => '庇护着',
-'庫德人' => '库尔德人',
-'庫德族' => '库尔德族',
-'應用程式' => '应用程序',
-'應著' => '应着',
-'應著書' => '应著书',
-'應著作' => '应著作',
-'應著名' => '应著名',
-'應著錄' => '应著录',
-'應著稱' => '应著称',
-'應著者' => '应著者',
-'應著述' => '应著述',
-'建帳' => '建账',
-'克卜勒' => '开普勒',
-'開著' => '开着',
-'開著書' => '开著书',
-'開著作' => '开著作',
-'開著名' => '开著名',
-'開著錄' => '开著录',
-'開著稱' => '开著称',
-'開著者' => '开著者',
-'開著述' => '开著述',
-'開帳' => '开账',
-'非同步' => '异步',
-'若且唯若' => '当且仅当',
-'當著' => '当着',
-'當著書' => '当著书',
-'當著作' => '当著作',
-'當著名' => '当著名',
-'當著錄' => '当著录',
-'當著稱' => '当著称',
-'當著者' => '当著者',
-'當著述' => '当著述',
-'錄影帶' => '录像带',
-'形上學' => '形而上学',
-'澈底' => '彻底',
-'逕入' => '径入',
-'逕到' => '径到',
-'逕取' => '径取',
-'逕啟' => '径启',
-'逕寄' => '径寄',
-'逕庭' => '径庭',
-'逕往' => '径往',
-'逕自' => '径自',
-'逕行' => '径行',
-'逕迎' => '径迎',
-'待著' => '待着',
-'待著書' => '待著书',
-'待著作' => '待著作',
-'待著名' => '待著名',
-'待著錄' => '待著录',
-'待著稱' => '待著称',
-'待著者' => '待著者',
-'待著述' => '待著述',
-'得著' => '得着',
-'得著書' => '得著书',
-'得著作' => '得著作',
-'得著名' => '得著名',
-'得著錄' => '得著录',
-'得著稱' => '得著称',
-'得著者' => '得著者',
-'得著述' => '得著述',
-'御姊' => '御姐',
-'迴圈' => '循环',
-'循著' => '循着',
-'循著書' => '循著书',
-'循著作' => '循著作',
-'循著名' => '循著名',
-'循著錄' => '循著录',
-'循著稱' => '循著称',
-'循著者' => '循著者',
-'循著述' => '循著述',
-'德勒斯登' => '德累斯顿',
-'德希達' => '德里达',
-'心著' => '心着',
-'心著書' => '心著书',
-'心著作' => '心著作',
-'心著名' => '心著名',
-'心著錄' => '心著录',
-'心著称' => '心著称',
-'心著稱' => '心著称',
-'心著者' => '心著者',
-'心著述' => '心著述',
-'忍著' => '忍着',
-'忍著書' => '忍著书',
-'忍著作' => '忍著作',
-'忍著名' => '忍著名',
-'忍著錄' => '忍著录',
-'忍著稱' => '忍著称',
-'忍著者' => '忍著者',
-'忍著述' => '忍著述',
-'忙著' => '忙着',
-'忙著書' => '忙著书',
-'忙著作' => '忙著作',
-'忙著名' => '忙著名',
-'忙著錄' => '忙著录',
-'忙著稱' => '忙著称',
-'忙著者' => '忙著者',
-'忙著述' => '忙著述',
-'忠貞著' => '忠贞着',
-'懷著' => '怀着',
-'懷著書' => '怀著书',
-'懷著作' => '怀著作',
-'懷著名' => '怀著名',
-'懷著錄' => '怀著录',
-'懷著稱' => '怀著称',
-'懷著者' => '怀著者',
-'懷著述' => '怀著述',
-'急著' => '急着',
-'急著書' => '急著书',
-'急著作' => '急著作',
-'急著名' => '急著名',
-'急著錄' => '急著录',
-'急著稱' => '急著称',
-'急著者' => '急著者',
-'急著述' => '急著述',
-'匯流排' => '总线',
-'總帳' => '总账',
-'戀著' => '恋着',
-'戀著書' => '恋著书',
-'戀著作' => '恋著作',
-'戀著名' => '恋著名',
-'戀著錄' => '恋著录',
-'戀著稱' => '恋著称',
-'戀著者' => '恋著者',
-'戀著述' => '恋著述',
-'恰如其份' => '恰如其分',
-'悠著' => '悠着',
-'悠著書' => '悠著书',
-'悠著作' => '悠著作',
-'悠著名' => '悠著名',
-'悠著錄' => '悠著录',
-'悠著稱' => '悠著称',
-'悠著者' => '悠著者',
-'悠著述' => '悠著述',
-'慣著' => '惯着',
-'慣著書' => '惯著书',
-'慣著作' => '惯著作',
-'慣著名' => '惯著名',
-'慣著錄' => '惯著录',
-'慣著稱' => '惯著称',
-'慣著者' => '惯著者',
-'慣著述' => '惯著述',
-'想著' => '想着',
-'想著書' => '想著书',
-'想著作' => '想著作',
-'想著名' => '想著名',
-'想著錄' => '想著录',
-'想著称' => '想著称',
-'想著稱' => '想著称',
-'想著者' => '想著者',
-'想著述' => '想著述',
-'義大利' => '意大利',
-'戈巴契夫' => '戈尔巴乔夫',
-'成份' => '成分',
-'戰著' => '战着',
-'戰著書' => '战著书',
-'戰著作' => '战著作',
-'戰著名' => '战著名',
-'戰著錄' => '战著录',
-'戰著稱' => '战著称',
-'戰著者' => '战著者',
-'戰著述' => '战著述',
-'坎城' => '戛纳',
-'黛安娜' => '戴安娜',
-'戴著' => '戴着',
-'戴著書' => '戴著书',
-'戴著作' => '戴著作',
-'戴著名' => '戴著名',
-'戴著錄' => '戴著录',
-'戴著稱' => '戴著称',
-'戴著者' => '戴著者',
-'戴著述' => '戴著述',
-'索羅門群島' => '所罗门群岛',
-'紮著' => '扎着',
-'紮著書' => '扎著书',
-'紮著作' => '扎著作',
-'紮著名' => '扎著名',
-'紮著錄' => '扎著录',
-'紮著稱' => '扎著称',
-'紮著者' => '扎著者',
-'紮著述' => '扎著述',
-'列印' => '打印',
-'印表機' => '打印机',
-'打著' => '打着',
-'打著書' => '打著书',
-'打著作' => '打著作',
-'打著名' => '打著名',
-'打著錄' => '打著录',
-'打著稱' => '打著称',
-'打著者' => '打著者',
-'打著述' => '打著述',
-'扛著' => '扛着',
-'扛著書' => '扛著书',
-'扛著作' => '扛著作',
-'扛著名' => '扛著名',
-'扛著錄' => '扛著录',
-'扛著稱' => '扛著称',
-'扛著者' => '扛著者',
-'扛著述' => '扛著述',
-'掃瞄' => '扫描',
-'掃瞄器' => '扫描仪',
-'抓著' => '抓着',
-'抓著作' => '抓著作',
-'抓著名' => '抓著名',
-'抓著錄' => '抓著录',
-'抓著稱' => '抓著称',
-'抓著者' => '抓著者',
-'抓著述' => '抓著述',
-'投機份子' => '投机分子',
-'護著' => '护着',
-'護著書' => '护著书',
-'護著作' => '护著作',
-'護著名' => '护著名',
-'護著錄' => '护著录',
-'護著稱' => '护著称',
-'護著者' => '护著者',
-'護著述' => '护著述',
-'報帳' => '报账',
-'披著' => '披着',
-'披著書' => '披著书',
-'披著作' => '披著作',
-'披著名' => '披著名',
-'披著錄' => '披著录',
-'披著稱' => '披著称',
-'披著者' => '披著者',
-'披著述' => '披著述',
-'抬著' => '抬着',
-'擡著' => '抬着',
-'抬著作' => '抬著作',
-'抬著名' => '抬著名',
-'抬著錄' => '抬著录',
-'抬著稱' => '抬著称',
-'抬著者' => '抬著者',
-'抬著述' => '抬著述',
-'抱著' => '抱着',
-'抱著作' => '抱著作',
-'抱著名' => '抱著名',
-'抱著錄' => '抱著录',
-'抱著稱' => '抱著称',
-'抱著者' => '抱著者',
-'抱著述' => '抱著述',
-'擔著' => '担着',
-'拉著' => '拉着',
-'拉著書' => '拉著书',
-'拉著作' => '拉著作',
-'拉著名' => '拉著名',
-'拉著錄' => '拉著录',
-'拉著稱' => '拉著称',
-'拉著者' => '拉著者',
-'拉著述' => '拉著述',
-'拎著' => '拎着',
-'拎著作' => '拎著作',
-'拎著名' => '拎著名',
-'拎著錄' => '拎著录',
-'拎著稱' => '拎著称',
-'拎著者' => '拎著者',
-'拎著述' => '拎著述',
-'拖著' => '拖着',
-'拖著作' => '拖著作',
-'拖著名' => '拖著名',
-'拖著錄' => '拖著录',
-'拖著稱' => '拖著称',
-'拖著者' => '拖著者',
-'拖著述' => '拖著述',
-'拼著' => '拼着',
-'拼著作' => '拼著作',
-'拼著名' => '拼著名',
-'拼著錄' => '拼著录',
-'拼著稱' => '拼著称',
-'拼著者' => '拼著者',
-'拼著述' => '拼著述',
-'拿著' => '拿着',
-'拿著作' => '拿著作',
-'拿著名' => '拿著名',
-'拿著錄' => '拿著录',
-'拿著稱' => '拿著称',
-'拿著者' => '拿著者',
-'拿著述' => '拿著述',
-'持著' => '持着',
-'持著作' => '持著作',
-'持著名' => '持著名',
-'持著錄' => '持著录',
-'持著稱' => '持著称',
-'持著者' => '持著者',
-'持著述' => '持著述',
-'掛著' => '挂着',
-'挑著' => '挑着',
-'挑著作' => '挑著作',
-'挑著名' => '挑著名',
-'挑著錄' => '挑著录',
-'挑著稱' => '挑著称',
-'挑著者' => '挑著者',
-'挑著述' => '挑著述',
-'擋著' => '挡着',
-'擋著作' => '挡著作',
-'擋著名' => '挡著名',
-'擋著錄' => '挡著录',
-'擋著稱' => '挡著称',
-'擋著者' => '挡著者',
-'擋著述' => '挡著述',
-'掙著' => '挣着',
-'掙著書' => '挣著书',
-'掙著作' => '挣著作',
-'掙著名' => '挣著名',
-'掙著錄' => '挣著录',
-'掙著稱' => '挣著称',
-'掙著者' => '挣著者',
-'掙著述' => '挣著述',
-'揮著' => '挥着',
-'揮著作' => '挥著作',
-'揮著名' => '挥著名',
-'揮著錄' => '挥著录',
-'揮著稱' => '挥著称',
-'揮著者' => '挥著者',
-'揮著述' => '挥著述',
-'挨著' => '挨着',
-'挨著作' => '挨著作',
-'挨著名' => '挨著名',
-'挨著錄' => '挨著录',
-'挨著稱' => '挨著称',
-'挨著者' => '挨著者',
-'挨著述' => '挨著述',
-'捆著' => '捆着',
-'捆著作' => '捆著作',
-'捆著名' => '捆著名',
-'捆著錄' => '捆著录',
-'捆著稱' => '捆著称',
-'捆著者' => '捆著者',
-'捆著述' => '捆著述',
-'據著' => '据着',
-'據著書' => '据著书',
-'據著作' => '据著作',
-'據著名' => '据著名',
-'據著錄' => '据著录',
-'據著稱' => '据著称',
-'據著者' => '据著者',
-'據著述' => '据著述',
-'積架' => '捷豹',
-'掖著' => '掖着',
-'掖著作' => '掖著作',
-'掖著名' => '掖著名',
-'掖著錄' => '掖著录',
-'掖著稱' => '掖著称',
-'掖著者' => '掖著者',
-'掖著述' => '掖著述',
-'接著' => '接着',
-'接著作' => '接著作',
-'接著名' => '接著名',
-'接著錄' => '接著录',
-'接著稱' => '接著称',
-'接著者' => '接著者',
-'接著述' => '接著述',
-'控制項' => '控件',
-'揉著' => '揉着',
-'揉著書' => '揉著书',
-'揉著作' => '揉著作',
-'揉著名' => '揉著名',
-'揉著錄' => '揉著录',
-'揉著稱' => '揉著称',
-'揉著者' => '揉著者',
-'揉著述' => '揉著述',
-'提著' => '提着',
-'提著作' => '提著作',
-'提著名' => '提著名',
-'提著錄' => '提著录',
-'提著稱' => '提著称',
-'提著者' => '提著者',
-'提著述' => '提著述',
-'外掛程式' => '插件',
-'摟著' => '搂着',
-'摟著作' => '搂著作',
-'摟著名' => '搂著名',
-'摟著錄' => '搂著录',
-'摟著稱' => '搂著称',
-'摟著者' => '搂著者',
-'摟著述' => '搂著述',
-'搜尋引擎' => '搜索引擎',
-'擺著' => '摆着',
-'擺著作' => '摆著作',
-'擺著名' => '摆著名',
-'擺著錄' => '摆著录',
-'擺著稱' => '摆著称',
-'擺著者' => '摆著者',
-'擺著述' => '摆著述',
-'電單車' => '摩托车',
-'戴卓爾' => '撒切尔',
-'柴契爾' => '撒切尔',
-'撼著' => '撼着',
-'撼著書' => '撼著书',
-'撼著作' => '撼著作',
-'撼著名' => '撼著名',
-'撼著錄' => '撼著录',
-'撼著稱' => '撼著称',
-'撼著者' => '撼著者',
-'撼著述' => '撼著述',
-'作業系統' => '操作系统',
-'收帳' => '收账',
-'放著' => '放着',
-'放著作' => '放著作',
-'放著名' => '放著名',
-'放著称' => '放著称',
-'放著稱' => '放著称',
-'放帳' => '放账',
-'敞著' => '敞着',
-'敞著作' => '敞著作',
-'敞著名' => '敞著名',
-'敞著錄' => '敞著录',
-'敞著稱' => '敞著称',
-'敞著者' => '敞著者',
-'敞著述' => '敞著述',
-'散佈著' => '散布着',
-'散布著' => '散布着',
-'數位訊號' => '数字信号',
-'數碼訊號' => '数字信号',
-'數位化' => '数字化',
-'數位技術' => '数字技术',
-'數位電視' => '数字电视',
-'數碼電視' => '数字电视',
-'資料庫' => '数据库',
-'數著' => '数着',
-'數位照相機' => '数码照相机',
-'數位相機' => '数码相机',
-'數著作' => '数著作',
-'數著名' => '数著名',
-'數著錄' => '数著录',
-'數著稱' => '数著称',
-'數著者' => '数著者',
-'數著述' => '数著述',
-'汶萊' => '文莱',
-'鬥著' => '斗着',
-'鬥著書' => '斗著书',
-'鬥著作' => '斗著作',
-'鬥著名' => '斗著名',
-'鬥著錄' => '斗著录',
-'鬥著稱' => '斗著称',
-'鬥著者' => '斗著者',
-'鬥著述' => '斗著述',
-'斥著' => '斥着',
-'斥著書' => '斥著书',
-'斥著作' => '斥著作',
-'斥著名' => '斥著名',
-'斥著錄' => '斥著录',
-'斥著稱' => '斥著称',
-'斥著者' => '斥著者',
-'斥著述' => '斥著述',
-'史丹福大學' => '斯坦福大学',
-'史達林' => '斯大林',
-'史瓦濟蘭' => '斯威士兰',
-'斯洛維尼亞' => '斯洛文尼亚',
-'史特勞斯' => '斯特劳斯',
-'紐幾內亞' => '新几内亚',
-'紐澤西' => '新泽西',
-'紐西蘭' => '新西兰',
-'舊帳' => '旧账',
-'三藩市' => '旧金山',
-'昂山素姬' => '昂山素季',
-'翁山蘇姬' => '昂山素季',
-'昂著' => '昂着',
-'昂著書' => '昂著书',
-'昂著作' => '昂著作',
-'昂著名' => '昂著名',
-'昂著錄' => '昂著录',
-'昂著稱' => '昂著称',
-'昂著者' => '昂著者',
-'昂著述' => '昂著述',
-'明白帳' => '明白账',
-'映著' => '映着',
-'映著書' => '映著书',
-'映著作' => '映著作',
-'映著名' => '映著名',
-'映著錄' => '映著录',
-'映著稱' => '映著称',
-'映著者' => '映著者',
-'映著述' => '映著述',
-'顯示卡' => '显卡',
-'显著' => '显著',
-'顯著' => '显著',
-'晃著' => '晃着',
-'晃著作' => '晃著作',
-'晃著名' => '晃著名',
-'晃著錄' => '晃著录',
-'晃著稱' => '晃著称',
-'晃著者' => '晃著者',
-'晃著述' => '晃著述',
-'普利茲' => '普利策',
-'蒲美蓬' => '普密蓬',
-'蒲朗克' => '普朗克',
-'電晶體' => '晶体管',
-'智慧型' => '智能',
-'智慧卡' => '智能卡',
-'智慧手機' => '智能手机',
-'暗著' => '暗着',
-'暗著書' => '暗著书',
-'暗著作' => '暗著作',
-'暗著名' => '暗著名',
-'暗著錄' => '暗著录',
-'暗著稱' => '暗著称',
-'暗著者' => '暗著者',
-'暗著述' => '暗著述',
-'有著' => '有着',
-'有著書' => '有著书',
-'有著作' => '有著作',
-'有著名' => '有著名',
-'有著錄' => '有著录',
-'有著稱' => '有著称',
-'有著者' => '有著者',
-'有著述' => '有著述',
-'伺服器' => '服务器',
-'望著' => '望着',
-'望著作' => '望著作',
-'望著名' => '望著名',
-'望著錄' => '望著录',
-'望著稱' => '望著称',
-'望著者' => '望著者',
-'望著述' => '望著述',
-'朝著' => '朝着',
-'朝著作' => '朝著作',
-'朝著名' => '朝著名',
-'朝著錄' => '朝著录',
-'朝著稱' => '朝著称',
-'朝著者' => '朝著者',
-'朝著述' => '朝著述',
-'賓·拉登' => '本·拉登',
-'本份' => '本分',
-'賓拉登' => '本拉登',
-'本本份份' => '本本分分',
-'班傑明' => '本杰明',
-'本著' => '本着',
-'本著書' => '本著书',
-'本著作' => '本著作',
-'本著名' => '本著名',
-'本著錄' => '本著录',
-'本著稱' => '本著称',
-'本著者' => '本著者',
-'本著述' => '本著述',
-'本帳' => '本账',
-'機械人' => '机器人',
-'工具機' => '机床',
-'殺著' => '杀着',
-'殺著書' => '杀著书',
-'殺著作' => '杀著作',
-'殺著名' => '杀著名',
-'殺著錄' => '杀著录',
-'殺著稱' => '杀著称',
-'殺著者' => '杀著者',
-'殺著述' => '杀著述',
-'雜著' => '杂着',
-'雜著書' => '杂著书',
-'雜著作' => '杂著作',
-'雜著名' => '杂著名',
-'雜著錄' => '杂著录',
-'雜著稱' => '杂著称',
-'雜著者' => '杂著者',
-'雜著述' => '杂著述',
-'杜塞道夫' => '杜塞尔多夫',
-'來著' => '来着',
-'來著書' => '来著书',
-'來著作' => '来著作',
-'來著名' => '来著名',
-'來著錄' => '来著录',
-'來著稱' => '来著称',
-'來著者' => '来著者',
-'來著述' => '来著述',
-'板著臉' => '板着脸',
-'枕著' => '枕着',
-'枕著作' => '枕著作',
-'枕著名' => '枕著名',
-'枕著錄' => '枕著录',
-'枕著稱' => '枕著称',
-'枕著者' => '枕著者',
-'枕著述' => '枕著述',
-'槍枝' => '枪支',
-'柏林圍牆' => '柏林墙',
-'查帳' => '查账',
-'查維茲' => '查韦斯',
-'標志著' => '标志着',
-'標誌著' => '标志着',
-'格瑞那達' => '格林纳达',
-'格林美獎' => '格莱美奖',
-'葛萊美獎' => '格莱美奖',
-'森巴舞' => '桑巴舞',
-'梅赫西迪' => '梅赛德斯',
-'夢著' => '梦着',
-'夢著書' => '梦著书',
-'夢著作' => '梦著作',
-'夢著名' => '梦著名',
-'夢著錄' => '梦著录',
-'夢著稱' => '梦著称',
-'夢著者' => '梦著者',
-'夢著述' => '梦著述',
-'梳著' => '梳着',
-'梳著作' => '梳著作',
-'梳著名' => '梳著名',
-'梳著錄' => '梳著录',
-'梳著稱' => '梳著称',
-'梳著者' => '梳著者',
-'梳著述' => '梳著述',
-'梵谷' => '梵高',
-'機率' => '概率',
-'欠帳' => '欠账',
-'死帳' => '死账',
-'庇里牛斯' => '比利牛斯',
-'畢卡索' => '毕加索',
-'茅利塔尼亞' => '毛里塔尼亚',
-'模里西斯' => '毛里求斯',
-'毛里裘斯' => '毛里求斯',
-'公厘' => '毫米',
-'公釐' => '毫米',
-'氧份' => '氧分',
-'胺基酸' => '氨基酸',
-'水份' => '水分',
-'水氣' => '水汽',
-'求著' => '求着',
-'求著書' => '求著书',
-'求著作' => '求著作',
-'求著名' => '求著名',
-'求著錄' => '求著录',
-'求著稱' => '求著称',
-'求著者' => '求著者',
-'求著述' => '求著述',
-'漢諾瓦' => '汉诺威',
-'沈著' => '沉着',
-'沉著' => '沉着',
-'沉著書' => '沉著书',
-'沉著作' => '沉著作',
-'沉著名' => '沉著名',
-'沉著錄' => '沉著录',
-'沉著稱' => '沉著称',
-'沉著者' => '沉著者',
-'沉著述' => '沉著述',
-'沙地阿拉伯' => '沙特阿拉伯',
-'沙烏地阿拉伯' => '沙特阿拉伯',
-'沿著' => '沿着',
-'沿著書' => '沿著书',
-'沿著作' => '沿著作',
-'沿著名' => '沿著名',
-'沿著錄' => '沿著录',
-'沿著稱' => '沿著称',
-'沿著者' => '沿著者',
-'沿著述' => '沿著述',
-'玻里尼西亞' => '波利尼西亚',
-'波士尼亞' => '波斯尼亚',
-'波士尼亞赫塞哥維納' => '波斯尼亚和黑塞哥维那',
-'鐵達尼號' => '泰坦尼克号',
-'幫浦' => '泵',
-'辛巴威' => '津巴布韦',
-'宏都拉斯' => '洪都拉斯',
-'活著' => '活着',
-'活著書' => '活著书',
-'活著作' => '活著作',
-'活著名' => '活著名',
-'活著錄' => '活著录',
-'活著稱' => '活著称',
-'活著者' => '活著者',
-'活著述' => '活著述',
-'流水帳' => '流水账',
-'流著' => '流着',
-'流著書' => '流著书',
-'流著作' => '流著作',
-'流著名' => '流著名',
-'流著錄' => '流著录',
-'流著稱' => '流著称',
-'流著者' => '流著者',
-'流著述' => '流著述',
-'流露著' => '流露着',
-'浮著' => '浮着',
-'蘭卡威' => '浮罗交怡',
-'浮著書' => '浮著书',
-'浮著作' => '浮著作',
-'浮著名' => '浮著名',
-'浮著錄' => '浮著录',
-'浮著稱' => '浮著称',
-'浮著者' => '浮著者',
-'浮著述' => '浮著述',
-'海洛英' => '海洛因',
-'海浬' => '海里',
-'塗著' => '涂着',
-'潤著' => '润着',
-'潤著書' => '润著书',
-'潤著作' => '润著作',
-'潤著名' => '润著名',
-'潤著錄' => '润著录',
-'潤著稱' => '润著称',
-'潤著者' => '润著者',
-'潤著述' => '润著述',
-'混帳' => '混账',
-'清澈' => '清澈',
-'清帳' => '清账',
-'渴著' => '渴着',
-'渴著書' => '渴著书',
-'渴著作' => '渴著作',
-'渴著名' => '渴著名',
-'渴著錄' => '渴著录',
-'渴著稱' => '渴著称',
-'渴著者' => '渴著者',
-'渴著述' => '渴著述',
-'原始碼' => '源代码',
-'溢著' => '溢着',
-'溢著書' => '溢著书',
-'溢著作' => '溢著作',
-'溢著名' => '溢著名',
-'溢著錄' => '溢著录',
-'溢著稱' => '溢著称',
-'溢著者' => '溢著者',
-'溢著述' => '溢著述',
-'滑鼠蛇' => '滑鼠蛇',
-'滿16進位' => '满16进位',
-'滿二進位' => '满二进位',
-'滿八進位' => '满八进位',
-'滿六進位' => '满六进位',
-'滿十六進位' => '满十六进位',
-'滿十進位' => '满十进位',
-'滿著' => '满着',
-'滿著作' => '满著作',
-'滿著名' => '满著名',
-'滿著者' => '满著者',
-'演著' => '演着',
-'演著書' => '演著书',
-'演著作' => '演著作',
-'演著名' => '演著名',
-'演著錄' => '演著录',
-'演著稱' => '演著称',
-'演著者' => '演著者',
-'演著述' => '演著述',
-'漫著' => '漫着',
-'漫著書' => '漫著书',
-'漫著作' => '漫著作',
-'漫著名' => '漫著名',
-'漫著錄' => '漫著录',
-'漫著稱' => '漫著称',
-'漫著者' => '漫著者',
-'漫著述' => '漫著述',
-'雷射' => '激光',
-'點著' => '点着',
-'點著作' => '点著作',
-'點著名' => '点著名',
-'點著錄' => '点著录',
-'點著稱' => '点著称',
-'點著者' => '点著者',
-'點著述' => '点著述',
-'爛帳' => '烂账',
-'燒著' => '烧着',
-'燒著作' => '烧著作',
-'燒著名' => '烧著名',
-'燒著錄' => '烧著录',
-'燒著稱' => '烧著称',
-'燒著者' => '烧著者',
-'燒著述' => '烧著述',
-'照著' => '照着',
-'照著書' => '照著书',
-'照著作' => '照著作',
-'照著名' => '照著名',
-'照著錄' => '照著录',
-'照著稱' => '照著称',
-'照著者' => '照著者',
-'照著述' => '照著述',
-'愛護著' => '爱护着',
-'愛著' => '爱着',
-'愛著書' => '爱著书',
-'愛著作' => '爱著作',
-'愛著名' => '爱著名',
-'愛著錄' => '爱著录',
-'愛著稱' => '爱著称',
-'愛著者' => '爱著者',
-'愛著述' => '爱著述',
-'牽著' => '牵着',
-'牽著書' => '牵著书',
-'牽著作' => '牵著作',
-'牽著名' => '牵著名',
-'牽著錄' => '牵著录',
-'牽著稱' => '牵著称',
-'牽著者' => '牵著者',
-'牽著述' => '牵著述',
-'千里達' => '特立尼达',
-'千里達及托巴哥' => '特立尼达和多巴哥',
-'千里達托貝哥' => '特立尼达和托巴哥',
-'狗隻' => '犬只',
-'猶豫著' => '犹豫着',
-'獨立國家國協' => '独立国家联合体',
-'獨立國協' => '独联体',
-'猜著' => '猜着',
-'猜著書' => '猜着书',
-'猜著作' => '猜著作',
-'猜著名' => '猜著名',
-'猜著錄' => '猜著录',
-'猜著稱' => '猜著称',
-'猜著者' => '猜著者',
-'猜著述' => '猜著述',
-'玩著' => '玩着',
-'班固著' => '班固著',
-'溫納圖' => '瓦努阿图',
-'萬那杜' => '瓦努阿图',
-'華勒沙' => '瓦文萨',
-'華里沙' => '瓦文萨',
-'甜著' => '甜着',
-'甜著書' => '甜著书',
-'甜著作' => '甜著作',
-'甜著名' => '甜著名',
-'甜著錄' => '甜著录',
-'甜著稱' => '甜著称',
-'甜著者' => '甜著者',
-'甜著述' => '甜著述',
-'用著' => '用着',
-'用著書' => '用著书',
-'用著作' => '用著作',
-'用著名' => '用著名',
-'用著錄' => '用著录',
-'用著稱' => '用著称',
-'用著者' => '用著者',
-'用著述' => '用著述',
-'A型肝炎' => '甲型肝炎',
-'A肝' => '甲肝',
-'電視劇集' => '电视剧',
-'電視影集' => '电视系列剧',
-'畫著' => '画着',
-'畫著作' => '画著作',
-'畫著名' => '画著名',
-'畫著稱' => '画著称',
-'畫著者' => '画著者',
-'介面' => '界面',
-'留著' => '留着',
-'留著書' => '留着书',
-'留著作' => '留著作',
-'留著名' => '留著名',
-'留著錄' => '留著录',
-'留著稱' => '留著称',
-'留著者' => '留著者',
-'留著述' => '留著述',
-'疑著' => '疑着',
-'疑著書' => '疑著书',
-'疑著作' => '疑著作',
-'疑著名' => '疑著名',
-'疑著錄' => '疑著录',
-'疑著稱' => '疑著称',
-'疑著者' => '疑著者',
-'疑著述' => '疑著述',
-'狂牛症' => '疯牛病',
-'徵狀' => '症状',
-'百慕達' => '百慕大',
-'皮雅斯·布士南' => '皮尔斯·布鲁斯南',
-'皺著' => '皱着',
-'皺著書' => '皱著书',
-'皺著作' => '皱著作',
-'皺著名' => '皱著名',
-'皺著錄' => '皱著录',
-'皺著稱' => '皱著称',
-'皺著者' => '皱著者',
-'皺著述' => '皱著述',
-'鹽份' => '盐分',
-'蓋著' => '盖着',
-'蓋著作' => '盖著作',
-'蓋著名' => '盖著名',
-'蓋著稱' => '盖著称',
-'盛著' => '盛着',
-'盛著書' => '盛著书',
-'盛著作' => '盛著作',
-'盛著名' => '盛著名',
-'盛著錄' => '盛著录',
-'盛著稱' => '盛著称',
-'盛著者' => '盛著者',
-'盛著述' => '盛著述',
-'盯著' => '盯着',
-'盯著書' => '盯着书',
-'盯著作' => '盯著作',
-'盯著名' => '盯著名',
-'盯著錄' => '盯著录',
-'盯著稱' => '盯著称',
-'盯著者' => '盯著者',
-'盯著述' => '盯著述',
-'看著' => '看着',
-'看著書' => '看着书',
-'看著作' => '看著作',
-'看著名' => '看著名',
-'看著錄' => '看著录',
-'看著稱' => '看著称',
-'看著者' => '看著者',
-'看著述' => '看著述',
-'著業' => '着业',
-'著絲' => '着丝',
-'著麼' => '着么',
-'著人' => '着人',
-'著什麼' => '着什么',
-'著甚麽' => '着什么',
-'著他' => '着他',
-'著令' => '着令',
-'著位' => '着位',
-'著體' => '着体',
-'著你' => '着你',
-'著便' => '着便',
-'著涼' => '着凉',
-'著力' => '着力',
-'著勁' => '着劲',
-'著號' => '着号',
-'著呢' => '着呢',
-'著哩' => '着哩',
-'著地' => '着地',
-'著墨' => '着墨',
-'著聲' => '着声',
-'著處' => '着处',
-'著她' => '着她',
-'著妳' => '着妳',
-'著姓' => '着姓',
-'著它' => '着它',
-'著定' => '着定',
-'著實' => '着实',
-'著己' => '着己',
-'著帳' => '着帐',
-'著床' => '着床',
-'著庸' => '着庸',
-'著式' => '着式',
-'著錄' => '着录',
-'著心' => '着心',
-'著志' => '着志',
-'著忙' => '着忙',
-'著急' => '着急',
-'著惱' => '着恼',
-'著驚' => '着惊',
-'著想' => '着想',
-'著意' => '着意',
-'著慌' => '着慌',
-'著我' => '着我',
-'著手' => '着手',
-'著抹' => '着抹',
-'著摸' => '着摸',
-'著撰' => '着撰',
-'著數' => '着数',
-'著明' => '着明',
-'著末' => '着末',
-'著極' => '着极',
-'著格' => '着格',
-'著棋' => '着棋',
-'著氣' => '着气',
-'著法' => '着法',
-'著淺' => '着浅',
-'著火' => '着火',
-'著然' => '着然',
-'著甚' => '着甚',
-'著生' => '着生',
-'著疑' => '着疑',
-'著白' => '着白',
-'著相' => '着相',
-'著眼' => '着眼',
-'著著' => '着着',
-'著祂' => '着祂',
-'著積' => '着积',
-'著稿' => '着稿',
-'著筆' => '着笔',
-'著籍' => '着籍',
-'著緊' => '着紧',
-'著緑' => '着緑',
-'著絆' => '着绊',
-'著績' => '着绩',
-'著緋' => '着绯',
-'著綠' => '着绿',
-'著肉' => '着肉',
-'著腳' => '着脚',
-'著艦' => '着舰',
-'著色' => '着色',
-'著節' => '着节',
-'著花' => '着花',
-'著莫' => '着莫',
-'著落' => '着落',
-'著槁' => '着藁',
-'著衣' => '着衣',
-'著裝' => '着装',
-'著要' => '着要',
-'著警' => '着警',
-'著趣' => '着趣',
-'著邊' => '着边',
-'著迷' => '着迷',
-'著跡' => '着迹',
-'著重' => '着重',
-'著録' => '着録',
-'著聞' => '着闻',
-'著陸' => '着陆',
-'著雝' => '着雝',
-'著鞭' => '着鞭',
-'著題' => '着题',
-'著魔' => '着魔',
-'睡著' => '睡着',
-'睡著書' => '睡著书',
-'睡著作' => '睡著作',
-'睡著名' => '睡著名',
-'睡著錄' => '睡著录',
-'睡著稱' => '睡著称',
-'睡著者' => '睡著者',
-'睡著述' => '睡著述',
-'瞞著' => '瞒着',
-'瞞著書' => '瞒著书',
-'瞞著作' => '瞒著作',
-'瞞著名' => '瞒著名',
-'瞞著錄' => '瞒著录',
-'瞞著稱' => '瞒著称',
-'瞞著者' => '瞒著者',
-'瞞著述' => '瞒著述',
-'瞧著' => '瞧着',
-'瞧著書' => '瞧着书',
-'瞧著作' => '瞧著作',
-'瞧著名' => '瞧著名',
-'瞧著錄' => '瞧著录',
-'瞧著稱' => '瞧著称',
-'瞧著者' => '瞧著者',
-'瞧著述' => '瞧著述',
-'瞪著' => '瞪着',
-'瞪著書' => '瞪著书',
-'瞪著作' => '瞪著作',
-'瞪著名' => '瞪著名',
-'瞪著錄' => '瞪著录',
-'瞪著稱' => '瞪著称',
-'瞪著者' => '瞪著者',
-'瞪著述' => '瞪著述',
-'矛盾著' => '矛盾着',
-'智慧財產權' => '知识产权',
-'智財權' => '知识产权',
-'知識份子' => '知识分子',
-'什勒斯維希' => '石勒苏益格',
-'矽塵' => '矽尘',
-'矽尘' => '矽尘',
-'矽肺' => '矽肺',
-'矽鋼' => '矽钢',
-'矽钢' => '矽钢',
-'矽' => '硅',
-'矽片' => '硅片',
-'矽谷' => '硅谷',
-'硬體' => '硬件',
-'硬碟' => '硬盘',
-'磁碟' => '磁盘',
-'磁軌' => '磁道',
-'福馬林' => '福尔马林',
-'福著' => '福着',
-'福著書' => '福著书',
-'福著作' => '福著作',
-'福著名' => '福著名',
-'福著錄' => '福著录',
-'福著稱' => '福著称',
-'福著者' => '福著者',
-'福著述' => '福著述',
-'私帳' => '私账',
-'葛摩' => '科摩罗',
-'象牙海岸' => '科特迪瓦',
-'積極份子' => '积极分子',
-'流動電話' => '移动电话',
-'行動電話' => '移动电话',
-'流動網絡' => '移动网络',
-'行動網路' => '移动网络',
-'程式設計師' => '程序员',
-'程式控制' => '程控',
-'空中巴士' => '空中客车',
-'空氣品質' => '空气质量',
-'空氣質素' => '空气质量',
-'空著' => '空着',
-'空著書' => '空著书',
-'空著作' => '空著作',
-'空著名' => '空著名',
-'空著錄' => '空著录',
-'空著稱' => '空著称',
-'空著者' => '空著者',
-'空著述' => '空著述',
-'穿著' => '穿着',
-'穿著書' => '穿著书',
-'穿著作' => '穿著作',
-'穿著名' => '穿著名',
-'穿著錄' => '穿著录',
-'穿著稱' => '穿著称',
-'穿著者' => '穿著者',
-'穿著述' => '穿著述',
-'突尼西亞' => '突尼斯',
-'立著' => '立着',
-'立著《' => '立著《',
-'立著作' => '立著作',
-'立著名' => '立著名',
-'立著有' => '立著有',
-'立著称' => '立著称',
-'立著稱' => '立著称',
-'立著者' => '立著者',
-'立著(' => '立著(',
-'豎著' => '竖着',
-'豎著書' => '竖著书',
-'豎著作' => '竖著作',
-'豎著名' => '竖著名',
-'豎著錄' => '竖著录',
-'豎著稱' => '竖著称',
-'豎著者' => '竖著者',
-'豎著述' => '竖著述',
-'站著' => '站着',
-'站著書' => '站著书',
-'站著作' => '站著作',
-'站著名' => '站著名',
-'站著錄' => '站著录',
-'站著稱' => '站著称',
-'站著者' => '站著者',
-'站著述' => '站著述',
-'笑著' => '笑着',
-'笑著書' => '笑著书',
-'笑著作' => '笑著作',
-'笑著名' => '笑著名',
-'笑著錄' => '笑著录',
-'笑著稱' => '笑著称',
-'笑著者' => '笑著者',
-'笑著述' => '笑著述',
-'筆帳' => '笔账',
-'提比里西' => '第比利斯',
-'簽著' => '签着',
-'簽帳' => '签账',
-'運算元' => '算子',
-'演算法' => '算法',
-'算帳' => '算账',
-'管著' => '管着',
-'管著書' => '管著书',
-'管著作' => '管著作',
-'管著名' => '管著名',
-'管著錄' => '管著录',
-'管著稱' => '管著称',
-'管著者' => '管著者',
-'管著述' => '管著述',
-'管帳' => '管账',
-'公尺' => '米',
-'糊塗帳' => '糊涂账',
-'糖份' => '糖分',
-'動畫影集' => '系列动画片',
-'繫著' => '系着',
-'索忍尼辛' => '索尔仁尼琴',
-'索贊尼辛' => '索尔仁尼琴',
-'蘇辛尼津' => '索尔仁尼琴',
-'索馬利亞' => '索马里',
-'索馬利蘭' => '索马里兰',
-'正體中文' => '繁体中文',
-'強斯頓環礁' => '约翰斯顿岛',
-'縱著' => '纵着',
-'組份' => '组分',
-'經常帳' => '经常账',
-'經濟帳' => '经济账',
-'綁著' => '绑着',
-'綁著書' => '绑著书',
-'綁著作' => '绑著作',
-'綁著名' => '绑著名',
-'綁著錄' => '绑著录',
-'綁著稱' => '绑著称',
-'綁著者' => '绑著者',
-'綁著述' => '绑著述',
-'結帳' => '结账',
-'繞著' => '绕着',
-'繞著書' => '绕著书',
-'繞著作' => '绕著作',
-'繞著名' => '绕著名',
-'繞著錄' => '绕著录',
-'繞著稱' => '绕著称',
-'繞著者' => '绕著者',
-'繞著述' => '绕著述',
-'維根斯坦' => '维特根斯坦',
-'繃著' => '绷着',
-'緣份' => '缘分',
-'纏著' => '缠着',
-'纏著書' => '缠著书',
-'纏著作' => '缠著作',
-'纏著名' => '缠著名',
-'纏著錄' => '缠著录',
-'纏著稱' => '缠著称',
-'纏著者' => '缠著者',
-'纏著述' => '缠著述',
-'網站連結' => '网站链接',
-'網路' => '网络',
-'網頁連結' => '网页链接',
-'罩著' => '罩着',
-'罩著書' => '罩著书',
-'罩著作' => '罩著作',
-'罩著名' => '罩著名',
-'罩著錄' => '罩著录',
-'罩著稱' => '罩著称',
-'罩著者' => '罩著者',
-'罩著述' => '罩著述',
-'美著' => '美着',
-'美著書' => '美著书',
-'美著作' => '美著作',
-'美著名' => '美著名',
-'美著錄' => '美著录',
-'美著称' => '美著称',
-'美著稱' => '美著称',
-'美著者' => '美著者',
-'美著述' => '美著述',
-'耀著' => '耀着',
-'耀著書' => '耀著书',
-'耀著作' => '耀著作',
-'耀著名' => '耀著名',
-'耀著錄' => '耀著录',
-'耀著稱' => '耀著称',
-'耀著者' => '耀著者',
-'耀著述' => '耀著述',
-'寮國' => '老挝',
-'寮人民民主共和國' => '老挝人民民主共和国',
-'寮語' => '老挝语',
-'考著' => '考着',
-'考著書' => '考著书',
-'考著作' => '考著作',
-'考著名' => '考著名',
-'考著錄' => '考著录',
-'考著稱' => '考著称',
-'考著者' => '考著者',
-'考著述' => '考著述',
-'職份' => '职分',
-'辛康納利' => '肖恩·康纳利',
-'蕭士塔高維奇' => '肖斯塔科维奇',
-'蕭士達高維契' => '肖斯塔科维奇',
-'甘迺迪' => '肯尼迪',
-'背著' => '背着',
-'背著書' => '背著书',
-'背著作' => '背著作',
-'背著名' => '背著名',
-'背著錄' => '背著录',
-'背著稱' => '背著称',
-'背著者' => '背著者',
-'背著述' => '背著述',
-'膠著' => '胶着',
-'膠著書' => '胶著书',
-'膠著作' => '胶著作',
-'膠著名' => '胶著名',
-'膠著錄' => '胶著录',
-'膠著稱' => '胶著称',
-'膠著者' => '胶著者',
-'膠著述' => '胶著述',
-'舒麥加' => '舒马赫',
-'太空梭' => '航天飞机',
-'穿梭機' => '航天飞机',
-'愛滋' => '艾滋',
-'晶元' => '芯片',
-'晶片' => '芯片',
-'蘇利南' => '苏里南',
-'苦著' => '苦着',
-'苦著書' => '苦著书',
-'苦著作' => '苦著作',
-'苦著名' => '苦著名',
-'苦著錄' => '苦著录',
-'苦著稱' => '苦著称',
-'苦著者' => '苦著者',
-'苦著述' => '苦著述',
-'英吋' => '英寸',
-'英呎' => '英尺',
-'共和联邦' => '英联邦',
-'大英國協' => '英联邦',
-'士多啤梨' => '草莓',
-'螢光棒' => '荧光棒',
-'螢屏' => '荧屏',
-'霍爾斯坦' => '荷尔斯泰因',
-'莫三比克' => '莫桑比克',
-'雷伊泰灣' => '莱特湾',
-'賴索托' => '莱索托',
-'獲著' => '获着',
-'穫著' => '获着',
-'獲著書' => '获著书',
-'獲著作' => '获著作',
-'獲著名' => '获著名',
-'獲著錄' => '获著录',
-'獲著稱' => '获著称',
-'獲著者' => '获著者',
-'獲著述' => '获著述',
-'塞拉耶佛' => '萨拉热窝',
-'落著' => '落着',
-'落著書' => '落著书',
-'落著作' => '落著作',
-'落著名' => '落著名',
-'落著錄' => '落著录',
-'落著稱' => '落著称',
-'落著者' => '落著者',
-'落著述' => '落著述',
-'滿地可' => '蒙特利尔',
-'蒙特婁' => '蒙特利尔',
-'蒙著' => '蒙着',
-'蒙著書' => '蒙著书',
-'蒙著作' => '蒙著作',
-'蒙著名' => '蒙著名',
-'蒙著錄' => '蒙著录',
-'蒙著稱' => '蒙著称',
-'蒙著者' => '蒙著者',
-'蒙著述' => '蒙著述',
-'藍芽' => '蓝牙',
-'蘊涵著' => '蕴涵着',
-'薛丁格' => '薛定谔',
-'藏著' => '藏着',
-'藏著書' => '藏著书',
-'藏著作' => '藏著作',
-'藏著名' => '藏著名',
-'藏著錄' => '藏著录',
-'藏著稱' => '藏著称',
-'藏著者' => '藏著者',
-'藏著述' => '藏著述',
-'蘸著' => '蘸着',
-'蘸著書' => '蘸著书',
-'蘸著作' => '蘸著作',
-'蘸著名' => '蘸著名',
-'蘸著錄' => '蘸著录',
-'蘸著稱' => '蘸著称',
-'蘸著者' => '蘸著者',
-'蘸著述' => '蘸著述',
-'行人路权' => '行人路权',
-'行人路權' => '行人路权',
-'行著' => '行着',
-'行著書' => '行著书',
-'行著作' => '行著作',
-'行著名' => '行著名',
-'行著錄' => '行著录',
-'行著稱' => '行著称',
-'行著者' => '行著者',
-'行著述' => '行著述',
-'衣著' => '衣着',
-'衣著書' => '衣著书',
-'衣著作' => '衣著作',
-'衣著名' => '衣著名',
-'衣著錄' => '衣著录',
-'衣著称' => '衣著称',
-'衣著稱' => '衣著称',
-'衣著者' => '衣著者',
-'衣著述' => '衣著述',
-'表姊' => '表姐',
-'裝著' => '装着',
-'裝著書' => '装著书',
-'裝著作' => '装著作',
-'裝著名' => '装著名',
-'裝著錄' => '装著录',
-'裝著稱' => '装著称',
-'裝著者' => '装著者',
-'裝著述' => '装著述',
-'裹著' => '裹着',
-'裹著書' => '裹著书',
-'裹著作' => '裹著作',
-'裹著名' => '裹著名',
-'裹著錄' => '裹著录',
-'裹著稱' => '裹著称',
-'裹著者' => '裹著者',
-'裹著述' => '裹著述',
-'要帳' => '要账',
-'覆蓋著' => '覆盖着',
-'覆著' => '覆着',
-'見著' => '见着',
-'見著書' => '见著书',
-'見著作' => '见著作',
-'見著名' => '见著名',
-'見著錄' => '见著录',
-'見著稱' => '见著称',
-'見著者' => '见著者',
-'見著述' => '见著述',
-'規畫' => '规划',
-'視著' => '视着',
-'視著名' => '视著名',
-'占士邦' => '詹姆斯·邦德',
-'警戒著' => '警戒着',
-'計畫' => '计划',
-'電腦程式' => '计算机程序',
-'認帳' => '认账',
-'記著' => '记着',
-'記著書' => '记著书',
-'記著作' => '记著作',
-'記著名' => '记著名',
-'記著錄' => '记著录',
-'記著稱' => '记著称',
-'記著者' => '记著者',
-'記著述' => '记著述',
-'記帳' => '记账',
-'片語' => '词组',
-'試著' => '试着',
-'試著書' => '试著书',
-'試著作' => '试著作',
-'試著名' => '试著名',
-'試著錄' => '试著录',
-'試著稱' => '试著称',
-'試著者' => '试著者',
-'試著述' => '试著述',
-'語著' => '语着',
-'語著書' => '语著书',
-'語著作' => '语著作',
-'語著名' => '语著名',
-'語著錄' => '语著录',
-'語著稱' => '语著称',
-'語著者' => '语著者',
-'語著述' => '语著述',
-'說著' => '说着',
-'說著作' => '说著作',
-'說著稱' => '说著称',
-'說著者' => '说著者',
-'說著述' => '说著述',
-'諾曼第' => '诺曼底',
-'數據機' => '调制解调器',
-'象徵著' => '象征着',
-'象徵著名' => '象征著名',
-'碧咸' => '贝克汉姆',
-'貝爾格勒' => '贝尔格莱德',
-'負著' => '负着',
-'貢寮' => '贡寮',
-'帳上' => '账上',
-'帳冊' => '账册',
-'帳務' => '账务',
-'帳單' => '账单',
-'帳號' => '账号',
-'帳外' => '账外',
-'帳戶' => '账户',
-'帳房' => '账房',
-'帳本' => '账本',
-'帳款' => '账款',
-'帳目' => '账目',
-'帳簿' => '账簿',
-'帳面' => '账面',
-'賒帳' => '赊账',
-'賴帳' => '赖账',
-'尚比亞' => '赞比亚',
-'西臺人' => '赫梯人',
-'西臺國' => '赫梯国',
-'西臺帝' => '赫梯帝',
-'西臺文' => '赫梯文',
-'西臺族' => '赫梯族',
-'西臺王' => '赫梯王',
-'西臺語' => '赫梯语',
-'赫魯雪夫' => '赫鲁晓夫',
-'走為上著' => '走为上着',
-'走著' => '走着',
-'走著書' => '走著书',
-'走著作' => '走著作',
-'走著名' => '走著名',
-'走著錄' => '走著录',
-'走著稱' => '走著称',
-'走著者' => '走著者',
-'走著述' => '走著述',
-'趕著' => '赶着',
-'趕著書' => '赶著书',
-'趕著作' => '赶著作',
-'趕著名' => '赶著名',
-'趕著錄' => '赶著录',
-'趕著稱' => '赶著称',
-'趕著者' => '赶著者',
-'趕著述' => '赶著述',
-'超連結' => '超链接',
-'趴著' => '趴着',
-'趴著書' => '趴著书',
-'趴著作' => '趴著作',
-'趴著名' => '趴著名',
-'趴著錄' => '趴著录',
-'趴著稱' => '趴著称',
-'趴著者' => '趴著者',
-'趴著述' => '趴著述',
-'躍著' => '跃着',
-'躍著書' => '跃著书',
-'躍著作' => '跃著作',
-'躍著名' => '跃著名',
-'躍著錄' => '跃著录',
-'躍著稱' => '跃著称',
-'躍著者' => '跃著者',
-'躍著述' => '跃著述',
-'跑著' => '跑着',
-'跑著書' => '跑著书',
-'跑著作' => '跑著作',
-'跑著名' => '跑著名',
-'跑著錄' => '跑著录',
-'跑著稱' => '跑著称',
-'跑著者' => '跑著者',
-'跑著述' => '跑著述',
-'跟著' => '跟着',
-'跟著書' => '跟著书',
-'跟著作' => '跟著作',
-'跟著名' => '跟著名',
-'跟著錄' => '跟著录',
-'跟著稱' => '跟著称',
-'跟著者' => '跟著者',
-'跟著述' => '跟著述',
-'跪著' => '跪着',
-'跪著書' => '跪著书',
-'跪著作' => '跪著作',
-'跪著名' => '跪著名',
-'跪著錄' => '跪著录',
-'跪著稱' => '跪著称',
-'跪著者' => '跪著者',
-'跪著述' => '跪著述',
-'跳著' => '跳着',
-'跳著書' => '跳著书',
-'跳著作' => '跳著作',
-'跳著名' => '跳著名',
-'跳著錄' => '跳著录',
-'跳著稱' => '跳著称',
-'跳著者' => '跳著者',
-'跳著述' => '跳著述',
-'踏著' => '踏着',
-'踏著書' => '踏著书',
-'踏著作' => '踏著作',
-'踏著名' => '踏著名',
-'踏著錄' => '踏著录',
-'踏著稱' => '踏著称',
-'踏著者' => '踏著者',
-'踏著述' => '踏著述',
-'踩著' => '踩着',
-'踩著書' => '踩著书',
-'踩著作' => '踩著作',
-'踩著名' => '踩著名',
-'踩著錄' => '踩著录',
-'踩著稱' => '踩著称',
-'踩著者' => '踩著者',
-'踩著述' => '踩著述',
-'笨豬跳' => '蹦极跳',
-'绑紧跳' => '蹦极跳',
-'身分' => '身份',
-'身著' => '身着',
-'身著書' => '身著书',
-'身著作' => '身著作',
-'身著名' => '身著名',
-'身著錄' => '身著录',
-'身著稱' => '身著称',
-'身著者' => '身著者',
-'身著述' => '身著述',
-'躺著' => '躺着',
-'躺著書' => '躺著书',
-'躺著作' => '躺著作',
-'躺著名' => '躺著名',
-'躺著錄' => '躺著录',
-'躺著稱' => '躺著称',
-'躺著者' => '躺著者',
-'躺著述' => '躺著述',
-'轉著' => '转着',
-'轉著書' => '转著书',
-'轉著作' => '转著作',
-'轉著名' => '转著名',
-'轉著錄' => '转著录',
-'轉著稱' => '转著称',
-'轉著者' => '转著者',
-'轉著述' => '转著述',
-'轉帳' => '转账',
-'軟體' => '软件',
-'軟體動物' => '软体动物',
-'軟體家具' => '软体家具',
-'軟碟機' => '软驱',
-'載著' => '载着',
-'載著書' => '载著书',
-'載著作' => '载著作',
-'載著名' => '载著名',
-'載著錄' => '载著录',
-'載著稱' => '载著称',
-'載著者' => '载著者',
-'載著述' => '载著述',
-'達·文西' => '达·芬奇',
-'達著' => '达着',
-'三蘭港' => '达累斯萨拉姆',
-'達文西' => '达芬奇',
-'達著書' => '达著书',
-'達著作' => '达著作',
-'達著名' => '达著名',
-'達著錄' => '达著录',
-'達著稱' => '达著称',
-'達著者' => '达著者',
-'達著述' => '达著述',
-'過份' => '过分',
-'過著' => '过着',
-'過著作' => '过著作',
-'過著名' => '过著名',
-'過著錄' => '过著录',
-'過著稱' => '过著称',
-'過著者' => '过著者',
-'過著述' => '过著述',
-'米高·奧雲' => '迈克尔·欧文',
-'還帳' => '还账',
-'演化論' => '进化论',
-'進帳' => '进账',
-'連著' => '连着',
-'連結他' => '连结他',
-'連著書' => '连著书',
-'連著作' => '连著作',
-'連著名' => '连著名',
-'連著錄' => '连著录',
-'連著稱' => '连著称',
-'連著者' => '连著者',
-'連著述' => '连著述',
-'杜拜' => '迪拜',
-'迫著' => '迫着',
-'疊代' => '迭代',
-'追著' => '追着',
-'追著書' => '追著书',
-'追著作' => '追著作',
-'追著名' => '追著名',
-'追著錄' => '追著录',
-'追著稱' => '追著称',
-'追著者' => '追著者',
-'追著述' => '追著述',
-'逆著' => '逆着',
-'逆著書' => '逆著书',
-'逆著作' => '逆著作',
-'逆著名' => '逆著名',
-'逆著錄' => '逆著录',
-'逆著稱' => '逆著称',
-'逆著者' => '逆著者',
-'逆著述' => '逆著述',
-'逼著' => '逼着',
-'逼著書' => '逼著书',
-'逼著作' => '逼著作',
-'逼著名' => '逼著名',
-'逼著錄' => '逼著录',
-'逼著稱' => '逼著称',
-'逼著者' => '逼著者',
-'逼著述' => '逼著述',
-'遇著' => '遇着',
-'遇著書' => '遇著书',
-'遇著作' => '遇著作',
-'遇著名' => '遇著名',
-'遇著錄' => '遇著录',
-'遇著称' => '遇著称',
-'遇著稱' => '遇著称',
-'遇著者' => '遇著者',
-'遇著述' => '遇著述',
-'遍佈著' => '遍布着',
-'遍布著' => '遍布着',
-'部份' => '部分',
-'配合著' => '配合着',
-'配合著名' => '配合著名',
-'配著' => '配着',
-'配著書' => '配著书',
-'配著作' => '配著作',
-'配著名' => '配著名',
-'配著錄' => '配著录',
-'配著稱' => '配著称',
-'配著者' => '配著者',
-'配著述' => '配著述',
-'釀著' => '酿着',
-'釀著書' => '酿著书',
-'釀著作' => '酿著作',
-'釀著名' => '酿著名',
-'釀著錄' => '酿著录',
-'釀著稱' => '酿著称',
-'釀著者' => '酿著者',
-'釀著述' => '酿著述',
-'黎克特制' => '里氏',
-'芮氏0' => '里氏0',
-'芮氏1' => '里氏1',
-'芮氏2' => '里氏2',
-'芮氏3' => '里氏3',
-'芮氏4' => '里氏4',
-'芮氏5' => '里氏5',
-'芮氏6' => '里氏6',
-'芮氏7' => '里氏7',
-'芮氏8' => '里氏8',
-'芮氏9' => '里氏9',
-'芮氏地震規模' => '里氏地震规模',
-'芮氏規模' => '里氏震级',
-'金夏沙' => '金沙萨',
-'鈽' => '钚',
-'鍅' => '钫',
-'狄托' => '铁托',
-'卯足' => '铆足',
-'鋪著' => '铺着',
-'鋪著書' => '铺著书',
-'鋪著作' => '铺著作',
-'鋪著名' => '铺著名',
-'鋪著錄' => '铺著录',
-'鋪著稱' => '铺著称',
-'鋪著者' => '铺著者',
-'鋪著述' => '铺著述',
-'鏈結' => '链接',
-'銷帳' => '销账',
-'鉲' => '锎',
-'鎝' => '锝',
-'鉳' => '锫',
-'鑀' => '锿',
-'鋂' => '镅',
-'錼' => '镎',
-'孟德爾遜' => '门德尔松',
-'孟德爾頌' => '门德尔松',
-'快閃記憶體' => '闪存',
-'閉著' => '闭着',
-'閉著書' => '闭著书',
-'閉著作' => '闭著作',
-'閉著名' => '闭著名',
-'閉著錄' => '闭著录',
-'閉著稱' => '闭著称',
-'閉著者' => '闭著者',
-'閉著述' => '闭著述',
-'閑著' => '闲着',
-'閒著' => '闲着',
-'閑著書' => '闲著书',
-'閑著作' => '闲著作',
-'閑著名' => '闲著名',
-'閑著錄' => '闲著录',
-'閑著稱' => '闲著称',
-'閑著者' => '闲著者',
-'閑著述' => '闲著述',
-'悶著' => '闷着',
-'鬧著' => '闹着',
-'聞著' => '闻着',
-'亞塞拜然' => '阿塞拜疆',
-'阿布達比' => '阿布扎比',
-'阿拉伯聯合大公國' => '阿拉伯联合酋长国',
-'亞斯文' => '阿斯旺',
-'附著' => '附着',
-'附著書' => '附著书',
-'附著作' => '附著作',
-'附著名' => '附著名',
-'附著錄' => '附著录',
-'附著稱' => '附著称',
-'附著者' => '附著者',
-'附著述' => '附著述',
-'陋著' => '陋着',
-'陋著書' => '陋著书',
-'陋著作' => '陋著作',
-'陋著名' => '陋著名',
-'陋著錄' => '陋著录',
-'陋著稱' => '陋著称',
-'陋著者' => '陋著者',
-'陋著述' => '陋著述',
-'陪著' => '陪着',
-'陪著書' => '陪著书',
-'陪著作' => '陪著作',
-'陪著名' => '陪著名',
-'陪著錄' => '陪著录',
-'陪著稱' => '陪著称',
-'陪著者' => '陪著者',
-'陪著述' => '陪著述',
-'隨著' => '随着',
-'隨著書' => '随著书',
-'隨著作' => '随著作',
-'隨著名' => '随著名',
-'隨著錄' => '随著录',
-'隨著稱' => '随著称',
-'隨著者' => '随著者',
-'隨著述' => '随著述',
-'私隱' => '隐私',
-'隔著' => '隔着',
-'隔著書' => '隔著书',
-'隔著作' => '隔著作',
-'隔著名' => '隔著名',
-'隔著錄' => '隔著录',
-'隔著稱' => '隔著称',
-'隔著者' => '隔著者',
-'隔著述' => '隔著述',
-'耶加達' => '雅加达',
-'雅爾達' => '雅尔塔',
-'雅著' => '雅着',
-'雅著書' => '雅著书',
-'雅著作' => '雅著作',
-'雅著名' => '雅著名',
-'雅著錄' => '雅著录',
-'雅著称' => '雅著称',
-'雅著稱' => '雅著称',
-'雅著者' => '雅著者',
-'雅著述' => '雅著述',
-'雷諾瓦' => '雷诺阿',
-'荷姆茲' => '霍尔木兹',
-'非份' => '非分',
-'靠著' => '靠着',
-'靠著作' => '靠著作',
-'靠著名' => '靠著名',
-'靠著錄' => '靠著录',
-'靠著稱' => '靠著称',
-'靠著者' => '靠著者',
-'靠著述' => '靠著述',
-'南韓' => '韩国',
-'音樂錄影帶' => '音乐录影带',
-'頂著' => '顶着',
-'頂著書' => '顶著书',
-'頂著作' => '顶著作',
-'頂著名' => '顶著名',
-'頂著錄' => '顶著录',
-'頂著稱' => '顶著称',
-'頂著者' => '顶著者',
-'頂著述' => '顶著述',
-'順著' => '顺着',
-'順著書' => '顺著书',
-'順著作' => '顺著作',
-'順著名' => '顺著名',
-'順著錄' => '顺著录',
-'順著稱' => '顺著称',
-'順著者' => '顺著者',
-'順著述' => '顺著述',
-'領著' => '领着',
-'領著書' => '领著书',
-'領著作' => '领著作',
-'領著名' => '领著名',
-'領著錄' => '领著录',
-'領著稱' => '领著称',
-'領著者' => '领著者',
-'領著述' => '领著述',
-'飃著' => '飘着',
-'飄著' => '飘着',
-'飄著書' => '飘著书',
-'飄著作' => '飘著作',
-'飄著名' => '飘著名',
-'飄著錄' => '飘著录',
-'飄著稱' => '飘著称',
-'飄著者' => '飘著者',
-'飄著述' => '飘著述',
-'行政總裁' => '首席执行官',
-'執行長、' => '首席执行官、',
-'執行長。' => '首席执行官。',
-'執行長,' => '首席执行官,',
-'財務長、' => '首席财务官、',
-'財務長。' => '首席财务官。',
-'財務長,' => '首席财务官,',
-'營運長、' => '首席运营官、',
-'營運長。' => '首席运营官。',
-'營運長,' => '首席运营官,',
-'馬爾地夫' => '马尔代夫',
-'萌島' => '马恩岛',
-'馬拉威' => '马拉维',
-'馬斯垂克' => '马斯特里赫特',
-'馬爾他' => '马耳他',
-'麻薩諸塞' => '马萨诸塞',
-'馬利共和國' => '马里共和国',
-'駛著' => '驶着',
-'駕著' => '驾着',
-'駕著書' => '驾著书',
-'駕著作' => '驾著作',
-'駕著名' => '驾著名',
-'駕著錄' => '驾著录',
-'駕著稱' => '驾著称',
-'駕著者' => '驾著者',
-'駕著述' => '驾著述',
-'罵著' => '骂着',
-'罵著書' => '骂著书',
-'罵著作' => '骂著作',
-'罵著名' => '骂著名',
-'罵著錄' => '骂著录',
-'罵著稱' => '骂著称',
-'罵著者' => '骂著者',
-'罵著述' => '骂著述',
-'騎著' => '骑着',
-'騎著書' => '骑著书',
-'騎著作' => '骑著作',
-'騎著名' => '骑著名',
-'騎著錄' => '骑著录',
-'騎著稱' => '骑著称',
-'騎著者' => '骑著者',
-'騎著述' => '骑著述',
-'騙著' => '骗着',
-'騙著書' => '骗著书',
-'騙著作' => '骗著作',
-'騙著名' => '骗著名',
-'騙著錄' => '骗著录',
-'騙著稱' => '骗著称',
-'騙著者' => '骗著者',
-'騙著述' => '骗著述',
-'尖峰時段' => '高峰时段',
-'尖峰時間' => '高峰时间',
-'高畫質' => '高清',
-'高著' => '高着',
-'高著書' => '高著书',
-'高著作' => '高著作',
-'高著名' => '高著名',
-'高著錄' => '高著录',
-'高著称' => '高著称',
-'高著稱' => '高著称',
-'高著者' => '高著者',
-'高著述' => '高著述',
-'魚雷' => '鱼雷',
-'鱼雷' => '鱼雷',
-'咪高峰' => '麦克风',
-'黏著' => '黏着',
-'黏著書' => '黏著书',
-'黏著作' => '黏著作',
-'黏著名' => '黏著名',
-'黏著錄' => '黏著录',
-'黏著稱' => '黏著称',
-'黏著者' => '黏著者',
-'黏著述' => '黏著述',
-'蒙特內哥羅' => '黑山',
-'滑鼠' => '鼠标',
-);
index ca47fce..43260d0 100644 (file)
@@ -132,6 +132,8 @@ class HistoryAction extends FormlessAction {
                        return;
                }
 
+               $this->addHelpLink( '//meta.wikimedia.org/wiki/Special:MyLanguage/Help:Page_history', true );
+
                // Fail nicely if article doesn't exist.
                if ( !$this->page->exists() ) {
                        $out->addWikiMsg( 'nohistory' );
index b371848..69cd7aa 100644 (file)
@@ -83,8 +83,7 @@ class RawAction extends FormlessAction {
                $response->header( 'Content-type: ' . $contentType . '; charset=UTF-8' );
                // Output may contain user-specific data;
                // vary generated content for open sessions on private wikis
-               $privateCache = !User::isEveryoneAllowed( 'read' ) &&
-                       ( $smaxage == 0 || MediaWiki\Session\SessionManager::getGlobalSession()->isPersistent() );
+               $privateCache = !User::isEveryoneAllowed( 'read' ) && ( $smaxage == 0 || session_id() != '' );
                // Don't accidentally cache cookies if user is logged in (T55032)
                $privateCache = $privateCache || $this->getUser()->isLoggedIn();
                $mode = $privateCache ? 'private' : 'public';
index 8990b75..fae49f6 100644 (file)
@@ -32,8 +32,10 @@ class SubmitAction extends EditAction {
        }
 
        public function show() {
-               // Send a cookie so anons get talk message notifications
-               MediaWiki\Session\SessionManager::getGlobalSession()->persist();
+               if ( session_id() === '' ) {
+                       // Send a cookie so anons get talk message notifications
+                       wfSetupSession();
+               }
 
                parent::show();
        }
index 13d13a6..b9163d2 100644 (file)
@@ -2523,19 +2523,6 @@ abstract class ApiBase extends ContextSource {
        /// @deprecated since 1.24
        const PROP_NULLABLE = 1;
 
-       /**
-        * Formerly returned a string that identifies the version of the extending
-        * class. Typically included the class name, the svn revision, timestamp,
-        * and last author. Usually done with SVN's Id keyword
-        *
-        * @deprecated since 1.21, version string is no longer supported
-        * @return string
-        */
-       public function getVersion() {
-               wfDeprecated( __METHOD__, '1.21' );
-               return '';
-       }
-
        /**
         * Formerly used to fetch a list of possible properites in the result,
         * somehow organized with respect to the prop parameter that causes them to
index a044be2..1368bda 100644 (file)
@@ -59,8 +59,10 @@ class ApiCreateAccount extends ApiBase {
 
                $params = $this->extractRequestParams();
 
-               // Make sure session is persisted
-               MediaWiki\Session\SessionManager::getGlobalSession()->persist();
+               // Init session if necessary
+               if ( session_id() == '' ) {
+                       wfSetupSession();
+               }
 
                if ( $params['mailpassword'] && !$params['email'] ) {
                        $this->dieUsageMsg( 'noemail' );
index 860e3b2..eb376d3 100644 (file)
@@ -24,7 +24,6 @@
  *
  * @file
  */
-
 use MediaWiki\Logger\LoggerFactory;
 
 /**
@@ -63,72 +62,26 @@ class ApiLogin extends ApiBase {
 
                $result = array();
 
-               // Make sure session is persisted
-               $session = MediaWiki\Session\SessionManager::getGlobalSession();
-               $session->persist();
-
-               // Make sure it's possible to log in
-               if ( !$session->canSetUser() ) {
-                       $this->getResult()->addValue( null, 'login', array(
-                               'result' => 'Aborted',
-                               'reason' => 'Cannot log in when using ' .
-                                       $session->getProvider()->describe( Language::factory( 'en' ) ),
-                       ) );
-
-                       return;
+               // Init session if necessary
+               if ( session_id() == '' ) {
+                       wfSetupSession();
                }
 
-               $authRes = false;
                $context = new DerivativeContext( $this->getContext() );
-               $loginType = 'N/A';
-
-               // Check login token
-               $token = LoginForm::getLoginToken();
-               if ( !$token ) {
-                       LoginForm::setLoginToken();
-                       $authRes = LoginForm::NEED_TOKEN;
-               } elseif ( !$params['token'] ) {
-                       $authRes = LoginForm::NEED_TOKEN;
-               } elseif ( $token !== $params['token'] ) {
-                       $authRes = LoginForm::WRONG_TOKEN;
-               }
-
-               // Try bot passwords
-               if ( $authRes === false && $this->getConfig()->get( 'EnableBotPasswords' ) &&
-                       strpos( $params['name'], BotPassword::getSeparator() ) !== false
-               ) {
-                       $status = BotPassword::login(
-                               $params['name'], $params['password'], $this->getRequest()
-                       );
-                       if ( $status->isOk() ) {
-                               $session = $status->getValue();
-                               $authRes = LoginForm::SUCCESS;
-                               $loginType = 'BotPassword';
-                       } else {
-                               LoggerFactory::getInstance( 'authmanager' )->info(
-                                       'BotPassword login failed: ' . $status->getWikiText()
-                               );
-                       }
-               }
-
-               // Normal login
-               if ( $authRes === false ) {
-                       $context->setRequest( new DerivativeRequest(
-                               $this->getContext()->getRequest(),
-                               array(
-                                       'wpName' => $params['name'],
-                                       'wpPassword' => $params['password'],
-                                       'wpDomain' => $params['domain'],
-                                       'wpLoginToken' => $params['token'],
-                                       'wpRemember' => ''
-                               )
-                       ) );
-                       $loginForm = new LoginForm();
-                       $loginForm->setContext( $context );
-                       $authRes = $loginForm->authenticateUserData();
-                       $loginType = 'LoginForm';
-               }
+               $context->setRequest( new DerivativeRequest(
+                       $this->getContext()->getRequest(),
+                       array(
+                               'wpName' => $params['name'],
+                               'wpPassword' => $params['password'],
+                               'wpDomain' => $params['domain'],
+                               'wpLoginToken' => $params['token'],
+                               'wpRemember' => ''
+                       )
+               ) );
+               $loginForm = new LoginForm();
+               $loginForm->setContext( $context );
 
+               $authRes = $loginForm->authenticateUserData();
                switch ( $authRes ) {
                        case LoginForm::SUCCESS:
                                $user = $context->getUser();
@@ -154,16 +107,16 @@ class ApiLogin extends ApiBase {
                                // SessionManager/AuthManager are *really* going to break it.
                                $result['lgtoken'] = $user->getToken();
                                $result['cookieprefix'] = $this->getConfig()->get( 'CookiePrefix' );
-                               $result['sessionid'] = $session->getId();
+                               $result['sessionid'] = session_id();
                                break;
 
                        case LoginForm::NEED_TOKEN:
                                $result['result'] = 'NeedToken';
-                               $result['token'] = LoginForm::getLoginToken();
+                               $result['token'] = $loginForm->getLoginToken();
 
                                // @todo: See above about deprecation
                                $result['cookieprefix'] = $this->getConfig()->get( 'CookiePrefix' );
-                               $result['sessionid'] = $session->getId();
+                               $result['sessionid'] = session_id();
                                break;
 
                        case LoginForm::WRONG_TOKEN:
@@ -234,7 +187,6 @@ class ApiLogin extends ApiBase {
                LoggerFactory::getInstance( 'authmanager' )->info( 'Login attempt', array(
                        'event' => 'login',
                        'successful' => $authRes === LoginForm::SUCCESS,
-                       'loginType' => $loginType,
                        'status' => LoginForm::$statusCodes[$authRes],
                ) );
        }
index b40f5a3..bf0ca9c 100644 (file)
 class ApiLogout extends ApiBase {
 
        public function execute() {
-               // Make sure it's possible to log out
-               $session = MediaWiki\Session\SessionManager::getGlobalSession();
-               if ( !$session->canSetUser() ) {
-                       $this->dieUsage(
-                               'Cannot log out when using ' .
-                                       $session->getProvider()->describe( Language::factory( 'en' ) ),
-                               'cannotlogout'
-                       );
-               }
-
                $user = $this->getUser();
                $oldName = $user->getName();
                $user->logout();
index 6ddc28a..f6f4d20 100644 (file)
@@ -769,7 +769,7 @@ class ApiMain extends ApiBase {
                                        return;
                                }
                                // Logged out, send normal public headers below
-                       } elseif ( MediaWiki\Session\SessionManager::getGlobalSession()->isPersistent() ) {
+                       } elseif ( session_id() != '' ) {
                                // Logged in or otherwise has session (e.g. anonymous users who have edited)
                                // Mark request private
                                $response->header( "Cache-Control: $privateCache" );
@@ -1231,7 +1231,8 @@ class ApiMain extends ApiBase {
         * @param array $params An array with the request parameters
         */
        protected function setupExternalResponse( $module, $params ) {
-               if ( !$this->getRequest()->wasPosted() && $module->mustBePosted() ) {
+               $request = $this->getRequest();
+               if ( !$request->wasPosted() && $module->mustBePosted() ) {
                        // Module requires POST. GET request might still be allowed
                        // if $wgDebugApi is true, otherwise fail.
                        $this->dieUsageMsgOrDebug( array( 'mustbeposted', $this->mAction ) );
@@ -1243,6 +1244,15 @@ class ApiMain extends ApiBase {
                        // Create an appropriate printer
                        $this->mPrinter = $this->createPrinterByName( $params['format'] );
                }
+
+               if ( $request->getProtocol() === 'http' && (
+                       $request->getCookie( 'forceHTTPS', '' ) ||
+                       ( $this->getUser()->isLoggedIn() &&
+                               $this->getUser()->requiresHTTPS() )
+               ) ) {
+                       $this->logFeatureUsage( 'https-expected' );
+                       $this->setWarning( 'HTTP used when HTTPS was expected' );
+               }
        }
 
        /**
index 6f1e2e5..27690ff 100644 (file)
@@ -33,17 +33,25 @@ class ApiQueryInfo extends ApiQueryBase {
 
        private $fld_protection = false, $fld_talkid = false,
                $fld_subjectid = false, $fld_url = false,
-               $fld_readable = false, $fld_watched = false, $fld_watchers = false,
+               $fld_readable = false, $fld_watched = false,
+               $fld_watchers = false, $fld_visitingwatchers = false,
                $fld_notificationtimestamp = false,
                $fld_preload = false, $fld_displaytitle = false;
 
-       private $params, $titles, $missing, $everything;
+       private $params;
+
+       /** @var Title[] */
+       private $titles;
+       /** @var Title[] */
+       private $missing;
+       /** @var Title[] */
+       private $everything;
 
        private $pageRestrictions, $pageIsRedir, $pageIsNew, $pageTouched,
                $pageLatest, $pageLength;
 
-       private $protections, $restrictionTypes, $watched, $watchers, $notificationtimestamps,
-               $talkids, $subjectids, $displaytitles;
+       private $protections, $restrictionTypes, $watched, $watchers, $visitingwatchers,
+               $notificationtimestamps, $talkids, $subjectids, $displaytitles;
        private $showZeroWatchers = false;
 
        private $tokenFunctions;
@@ -292,6 +300,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $this->fld_protection = isset( $prop['protection'] );
                        $this->fld_watched = isset( $prop['watched'] );
                        $this->fld_watchers = isset( $prop['watchers'] );
+                       $this->fld_visitingwatchers = isset( $prop['visitingwatchers'] );
                        $this->fld_notificationtimestamp = isset( $prop['notificationtimestamp'] );
                        $this->fld_talkid = isset( $prop['talkid'] );
                        $this->fld_subjectid = isset( $prop['subjectid'] );
@@ -348,6 +357,10 @@ class ApiQueryInfo extends ApiQueryBase {
                        $this->getWatcherInfo();
                }
 
+               if ( $this->fld_visitingwatchers ) {
+                       $this->getVisitingWatcherInfo();
+               }
+
                // Run the talkid/subjectid query if requested
                if ( $this->fld_talkid || $this->fld_subjectid ) {
                        $this->getTSIDs();
@@ -447,6 +460,14 @@ class ApiQueryInfo extends ApiQueryBase {
                        }
                }
 
+               if ( $this->fld_visitingwatchers ) {
+                       if ( isset( $this->visitingwatchers[$ns][$dbkey] ) ) {
+                               $pageInfo['visitingwatchers'] = $this->visitingwatchers[$ns][$dbkey];
+                       } elseif ( $this->showZeroWatchers ) {
+                               $pageInfo['visitingwatchers'] = 0;
+                       }
+               }
+
                if ( $this->fld_notificationtimestamp ) {
                        $pageInfo['notificationtimestamp'] = '';
                        if ( isset( $this->notificationtimestamps[$ns][$dbkey] ) ) {
@@ -802,6 +823,98 @@ class ApiQueryInfo extends ApiQueryBase {
                }
        }
 
+       /**
+        * Get the count of watchers who have visited recent edits and put it in
+        * $this->visitingwatchers
+        *
+        * Based on InfoAction::pageCounts
+        */
+       private function getVisitingWatcherInfo() {
+               $config = $this->getConfig();
+               $user = $this->getUser();
+               $db = $this->getDB();
+
+               $canUnwatchedpages = $user->isAllowed( 'unwatchedpages' );
+               $unwatchedPageThreshold = $this->getConfig()->get( 'UnwatchedPageThreshold' );
+               if ( !$canUnwatchedpages && !is_int( $unwatchedPageThreshold ) ) {
+                       return;
+               }
+
+               $this->showZeroWatchers = $canUnwatchedpages;
+
+               // Assemble a WHERE condition to find:
+               // * if the page exists, number of users watching who have
+               //   visited the page recently
+               // * if the page doesn't exist, number of users that have
+               //   the page on their watchlist
+               $whereStrings = array();
+
+               // For pages that exist
+               if ( $this->titles ) {
+                       $lb = new LinkBatch( $this->titles );
+
+                       // Fetch last edit timestamps for pages
+                       $this->resetQueryParams();
+                       $this->addTables( array( 'page', 'revision' ) );
+                       $this->addFields( array( 'page_namespace', 'page_title', 'rev_timestamp' ) );
+                       $this->addWhere( array(
+                               'page_latest = rev_id',
+                               $lb->constructSet( 'page', $db ),
+                       ) );
+                       $this->addOption( 'GROUP BY', array( 'page_namespace', 'page_title' ) );
+                       $timestampRes = $this->select( __METHOD__ );
+
+                       // Assemble SQL WHERE condition to find number of page watchers who also
+                       // visited a "recent" edit (last visited about 26 weeks before latest edit)
+                       $age = $config->get( 'WatchersMaxAge' );
+                       $timestamps = array();
+                       foreach ( $timestampRes as $row ) {
+                               $revTimestamp = wfTimestamp( TS_UNIX, (int)$row->rev_timestamp );
+                               $threshold = $db->timestamp( $revTimestamp - $age );
+                               $timestamps[$row->page_namespace][$row->page_title] = $threshold;
+                       }
+
+                       foreach ( $timestamps as $ns_key => $namespace ) {
+                               $pageStrings = array();
+                               foreach ( $namespace as $pg_key => $threshold ) {
+                                       $pageStrings[] = "wl_title = '$pg_key' AND" .
+                                               ' (wl_notificationtimestamp >= ' .
+                                               $db->addQuotes( $threshold ) .
+                                               ' OR wl_notificationtimestamp IS NULL)';
+                               }
+                               $whereStrings[] = "wl_namespace = '$ns_key' AND (" .
+                                       $db->makeList( $pageStrings, LIST_OR ) . ')';
+                       }
+               }
+
+               // For nonexistant pages
+               if ( $this->missing ) {
+                       $lb = new LinkBatch( $this->missing );
+                       $whereStrings[] = $lb->constructSet( 'wl', $db );
+               }
+
+               // Make the actual string and do the query
+               $whereString = $db->makeList( $whereStrings, LIST_OR );
+
+               $this->resetQueryParams();
+               $this->addTables( array( 'watchlist' ) );
+               $this->addFields( array(
+                       'wl_namespace',
+                       'wl_title',
+                       'count' => 'COUNT(*)'
+               ) );
+               $this->addWhere( array( $whereString ) );
+               $this->addOption( 'GROUP BY', array( 'wl_namespace', 'wl_title' ) );
+               if ( !$canUnwatchedpages ) {
+                       $this->addOption( 'HAVING', "COUNT(*) >= $unwatchedPageThreshold" );
+               }
+
+               $res = $this->select( __METHOD__ );
+               foreach ( $res as $row ) {
+                       $this->visitingwatchers[$row->wl_namespace][$row->wl_title] = (int)$row->count;
+               }
+       }
+
        public function getCacheMode( $params ) {
                // Other props depend on something about the current user
                $publicProps = array(
@@ -837,6 +950,7 @@ class ApiQueryInfo extends ApiQueryBase {
                                        'talkid',
                                        'watched', # private
                                        'watchers', # private
+                                       'visitingwatchers', # private
                                        'notificationtimestamp', # private
                                        'subjectid',
                                        'url',
index ca9ceca..196c1fa 100644 (file)
@@ -184,11 +184,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data['git-hash'] = $git;
                        $data['git-branch'] =
                                SpecialVersion::getGitCurrentBranch( $GLOBALS['IP'] );
-               } else {
-                       $svn = SpecialVersion::getSvnRevision( $IP );
-                       if ( $svn ) {
-                               $data['rev'] = $svn;
-                       }
                }
 
                // 'case-insensitive' option is reserved for future
@@ -602,11 +597,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                }
                                if ( isset( $ext['version'] ) ) {
                                        $ret['version'] = $ext['version'];
-                               } elseif ( isset( $ext['svn-revision'] ) &&
-                                       preg_match( '/\$(?:Rev|LastChangedRevision|Revision): *(\d+)/',
-                                               $ext['svn-revision'], $m )
-                               ) {
-                                       $ret['version'] = 'r' . $m[1];
                                }
                                if ( isset( $ext['path'] ) ) {
                                        $extensionPath = dirname( $ext['path'] );
@@ -620,13 +610,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                                if ( $vcsDate !== false ) {
                                                        $ret['vcs-date'] = wfTimestamp( TS_ISO_8601, $vcsDate );
                                                }
-                                       } else {
-                                               $svnInfo = SpecialVersion::getSvnInfo( $extensionPath );
-                                               if ( $svnInfo !== false ) {
-                                                       $ret['vcs-system'] = 'svn';
-                                                       $ret['vcs-version'] = $svnInfo['checkout-rev'];
-                                                       $ret['vcs-url'] = isset( $svnInfo['viewvc-url'] ) ? $svnInfo['viewvc-url'] : '';
-                                               }
                                        }
 
                                        if ( SpecialVersion::getExtLicenseFileName( $extensionPath ) ) {
index 8822750..00675f4 100644 (file)
@@ -141,6 +141,9 @@ class ApiStashEdit extends ApiBase {
                if ( $editInfo && $editInfo->output ) {
                        $key = self::getStashKey( $page->getTitle(), $content, $user );
 
+                       // Let extensions add ParserOutput metadata or warm other caches
+                       Hooks::run( 'ParserOutputStashForEdit', array( $page, $content, $editInfo->output ) );
+
                        list( $stashInfo, $ttl ) = self::buildStashValue(
                                $editInfo->pstContent, $editInfo->output, $editInfo->timestamp
                        );
@@ -148,6 +151,7 @@ class ApiStashEdit extends ApiBase {
                        if ( $stashInfo ) {
                                $ok = $cache->set( $key, $stashInfo, $ttl );
                                if ( $ok ) {
+
                                        $logger->debug( "Cached parser output for key '$key'." );
                                        return self::ERROR_NONE;
                                } else {
index 037e381..1680544 100644 (file)
        "apihelp-query+links-param-dir": "Die Auflistungsrichtung.",
        "apihelp-query+links-example-simple": "Links von der <kbd>Hauptseite</kbd> abrufen",
        "apihelp-query+linkshere-description": "Alle Seiten finden, die auf die angegebenen Seiten verlinken.",
+       "apihelp-query+linkshere-paramvalue-prop-pageid": "Die Seitenkennung jeder Seite.",
        "apihelp-query+logevents-description": "Ereignisse von den Logbüchern abrufen.",
        "apihelp-query+logevents-example-simple": "Listet die letzten Logbuch-Ereignisse auf.",
        "apihelp-query+pageswithprop-paramvalue-prop-ids": "Fügt die Seitenkennung hinzu.",
index 55baa47..1af53fa 100644 (file)
        "apihelp-query+info-paramvalue-prop-talkid": "The page ID of the talk page for each non-talk page.",
        "apihelp-query+info-paramvalue-prop-watched": "List the watched status of each page.",
        "apihelp-query+info-paramvalue-prop-watchers": "The number of watchers, if allowed.",
+       "apihelp-query+info-paramvalue-prop-visitingwatchers": "The number of watchers of each page who have visited recent edits to that page, if allowed.",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "The watchlist notification timestamp of each page.",
        "apihelp-query+info-paramvalue-prop-subjectid": "The page ID of the parent page for each talk page.",
        "apihelp-query+info-paramvalue-prop-url": "Gives a full URL, an edit URL, and the canonical URL for each page.",
index 7c54805..01cc1f7 100644 (file)
        "apihelp-query+info-paramvalue-prop-talkid": "L’ID de la page de discussion de chaque page qui n’est pas de discussion.",
        "apihelp-query+info-paramvalue-prop-watched": "Lister l’état de suivi de chaque page.",
        "apihelp-query+info-paramvalue-prop-watchers": "Le nombre d’observateurs, si c’est autorisé.",
+       "apihelp-query+info-paramvalue-prop-visitingwatchers": "Le nombre de personnes suivant chaque page qui ont regardé les modifications récentes de cette page, si c’est autorisé.",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "L’horodatage de notification de la liste de suivi de chaque page.",
        "apihelp-query+info-paramvalue-prop-subjectid": "L’ID de page de la page parent de chaque page de discussion.",
        "apihelp-query+info-paramvalue-prop-url": "Fournit une URL complète, une URL de modification, et l’URL canonique de chaque page.",
index 7651551..bb8a074 100644 (file)
        "apihelp-query+info-paramvalue-prop-talkid": "מזהה הדף של דף השיחה עבור כל דף שאינו דף שיחה.",
        "apihelp-query+info-paramvalue-prop-watched": "לרשום את מצב המעקב של כל דף.",
        "apihelp-query+info-paramvalue-prop-watchers": "מספר העוקבים, אם קיבלת הרשאה.",
+       "apihelp-query+info-paramvalue-prop-visitingwatchers": "מספר העוקבים אחרי כל דף שביקרו עריכות אחרונות לאותו הדף, אם זה מותר.",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "חותם־זמן של הודעת רשימת מעקב של כל דף.",
        "apihelp-query+info-paramvalue-prop-subjectid": "מזהה הדף של הדף העיקרי של כל דף שיחה.",
        "apihelp-query+info-paramvalue-prop-url": "נותן URL מלא, URL לעריכה ו־URL קנוני לכל דף.",
index 5730655..dd3c80c 100644 (file)
        "apihelp-query+imageusage-description": "Trova tutte le pagine che utilizzano il titolo dell'immagine specificato.",
        "apihelp-query+imageusage-param-dir": "La direzione in cui elencare.",
        "apihelp-query+imageusage-param-redirect": "Se la pagina collegata è un redirect, trova tutte le pagine che puntano al redirect. Il limite massimo è dimezzato.",
+       "apihelp-query+info-paramvalue-prop-visitingwatchers": "Il numero di osservatori di ogni pagina che hanno visitato le ultime modifiche alla pagina, se consentito.",
        "apihelp-query+iwbacklinks-param-prop": "Quali proprietà ottenere:",
        "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Aggiunge il titolo dell'interwiki.",
        "apihelp-query+iwbacklinks-param-dir": "La direzione in cui elencare.",
index c6b08c1..f7468b4 100644 (file)
        "apihelp-query+info-paramvalue-prop-talkid": "De Kännong för de Klaafsigg för jehde Nit-Klaafsigg.",
        "apihelp-query+info-paramvalue-prop-watched": "Donn der Zohschtand vum Oppaße för jehde Sigg opleßte.",
        "apihelp-query+info-paramvalue-prop-watchers": "De Aanzahl Oppaßer, wann zohjelohße.",
+       "apihelp-query+info-paramvalue-prop-visitingwatchers": "De Aanzahl Oppaßer pro Sigg, di woh zohjelohße, de neußte Änderonge aan dä Sigg belohrt hann.",
        "apihelp-query+info-paramvalue-prop-subjectid": "De Kännong för de övverje'odente Sigg för jehde Klaafsigg.",
        "apihelp-query+info-paramvalue-prop-url": "Jidd en kumplätte <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>, en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> för et Beärbeide, un en kannohnesche <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> för jehde Sigg uß.",
        "apihelp-query+info-paramvalue-prop-readable": "Ov dä Metmaacher heh di Sigg lässe kann.",
        "apihelp-upload-param-url": "Der <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i>, öm di Dattei dervun ze holle.",
        "apihelp-upload-param-sessionkey": "Et sälve wi „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">$1filekey</code>“, wat mer emmer noch noch bruche kann, weil mer et fröhjer alld ens esu hatte.",
        "apihelp-upload-param-filesize": "De Datteijrühße vum jannze Huhlahde.",
-       "apihelp-upload-param-asyncdownload": "Maach dat Holle vun ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> zoh ene andere Zigg.",
        "apihelp-upload-example-url": "Vun enem <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Uniform Ressource Locator\">URL</i> huhlahde.",
        "apihelp-upload-example-filekey": "Don et Huhlahde fähdesch maace, wat wähje Warnonge nit johd jejange wohr.",
        "apihelp-userrights-param-user": "Metmaacher_Nahme.",
index c2c6d7e..e7b4421 100644 (file)
@@ -11,7 +11,8 @@
                        "SPQRobin",
                        "HanV",
                        "Rangekill",
-                       "Robin van der Vliet"
+                       "Robin van der Vliet",
+                       "Edoderoo"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentatie]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-maillijst]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aankondigingen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & verzoeken]\n</div>\n<strong>Status:</strong> Alle functies die op deze pagina worden weergegeven horen te werken. Aan de API wordt actief gewerkt, en deze kan gewijzigd worden. Abonneer u op  de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-maillijst mediawiki-api-announce] voor meldingen over aanpassingen.\n\n<strong>Foutieve verzoeken:</strong> als de API foutieve verzoeken ontvangt, wordt er geantwoord met een HTTP-header met de sleutel \"MediaWiki-API-Error\" en daarna worden de waarde van de header en de foutcode op dezelfde waarde ingesteld. Zie [[mw:API:Errors_and_warnings|API: Errors and warnings]] voor meer informatie.",
        "apihelp-block-param-nocreate": "Voorkom registeren van accounts.",
        "apihelp-block-param-autoblock": "Blokkeer automatisch het laatst gebruikte IP-adres en ieder volgend IP-adres van waaruit ze proberen aan te melden.",
        "apihelp-block-param-reblock": "De huidige blokkade aanpassen als de gebruiker al geblokkeerd is.",
+       "apihelp-block-param-watchuser": "De gebruikerspagina en overlegpagina van de gebruiker of het IP-adres volgen.",
+       "apihelp-block-example-ip-simple": "Het IP-adres <kbd>192.0.2.5</kbd> voor drie dagen blokkeren met <kbd>First strike</kbd> als opgegeven reden.",
+       "apihelp-compare-param-fromtitle": "Eerste titel om te vergelijken.",
+       "apihelp-compare-param-fromid": "Eerste pagina-ID om te vergelijken.",
+       "apihelp-compare-param-fromrev": "Eerste versie om te vergelijken.",
+       "apihelp-compare-param-totitle": "Tweede titel om te vergelijken.",
+       "apihelp-compare-param-toid": "Andere pagina-ID om te vergelijken.",
+       "apihelp-compare-param-torev": "Tweede versie om te vergelijken.",
        "apihelp-createaccount-description": "Een nieuw gebruikersaccount aanmaken.",
        "apihelp-createaccount-param-name": "Gebruikersnaam.",
        "apihelp-createaccount-param-email": "E-mailadres van de gebruikers (optioneel).",
        "apihelp-createaccount-param-realname": "Echte naam van de gebruiker (optioneel).",
        "apihelp-delete-description": "Verwijder een pagina.",
+       "apihelp-delete-param-reason": "Reden voor verwijdering. Wanneer dit niet is opgegeven wordt een automatisch gegenereerde reden gebruikt.",
        "apihelp-delete-param-watch": "De pagina aan de volglijst van de huidige gebruiker toevoegen.",
        "apihelp-delete-param-unwatch": "De pagina van de volglijst van de huidige gebruiker verwijderen.",
        "apihelp-delete-example-simple": "Verwijder <kbd>Main Page</kbd>.",
@@ -53,7 +63,8 @@
        "apihelp-edit-param-watch": "Voeg de pagina toe aan de volglijst van de huidige gebruiker.",
        "apihelp-edit-param-unwatch": "Verwijder de pagina van de volglijst van de huidige gebruiker.",
        "apihelp-edit-param-redirect": "Automatisch doorverwijzingen oplossen.",
-       "apihelp-edit-example-edit": "Pagina bewerken",
+       "apihelp-edit-example-edit": "Een pagina bewerken.",
+       "apihelp-edit-example-undo": "Revisies 13579 tot 13585 ongedaan maken met automatische beschrijving.",
        "apihelp-emailuser-description": "Gebruiker e-mailen.",
        "apihelp-emailuser-param-target": "Gebruiker naar wie de e-mail moet worden gestuurd.",
        "apihelp-emailuser-param-subject": "Onderwerpkoptekst.",
        "apihelp-emailuser-param-ccme": "Stuur mij een kopie van deze e-mail.",
        "apihelp-expandtemplates-param-title": "Paginanaam.",
        "apihelp-expandtemplates-param-text": "Wikitekst om om te zetten.",
+       "apihelp-expandtemplates-paramvalue-prop-wikitext": "De uitgevulde wikitekst.",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "De maximum tijdsduur waarna cache van het resultaat moet worden weggegooid.",
        "apihelp-feedcontributions-description": "Haalt de feed van de gebruikersbijdragen op.",
+       "apihelp-feedcontributions-param-feedformat": "De opmaak van de feed.",
        "apihelp-feedcontributions-param-year": "Van jaar (en eerder).",
        "apihelp-feedcontributions-param-month": "Van maand (en eerder).",
        "apihelp-feedcontributions-param-deletedonly": "Alleen verwijderde bijdragen weergeven.",
@@ -76,6 +90,8 @@
        "apihelp-feedrecentchanges-example-simple": "Recente wijzigingen weergeven.",
        "apihelp-feedrecentchanges-example-30days": "Recente wijzigingen van de afgelopen 30 dagen weergeven.",
        "apihelp-filerevert-description": "Een oude versie van een bestand herplaatsen.",
+       "apihelp-imagerotate-description": "Een of meerdere afbeeldingen draaien.",
+       "apihelp-import-param-xml": "Geüpload XML-bestand.",
        "apihelp-import-param-namespace": "Importeren in deze naamruimte. Can niet samen gebruikt worden met <var>$1rootpage</var>.",
        "apihelp-import-param-rootpage": "Importeren als subpagina van deze pagina. Kan niet samen met <var>$1namespace</var> gebruikt worden.",
        "apihelp-login-param-name": "Gebruikersnaam.",
        "apihelp-logout-example-logout": "Meldt de huidige gebruiker af.",
        "apihelp-managetags-param-tag": "Label om aan te maken, te activeren of te deactiveren. Voor het aanmaken van een label, mag het niet bestaan. Voor het verwijderen van een label, moet het bestaan. Voor het activeren van een label, moet het bestaan en mag het niet gebruikt worden door een uitbreiding. Voor het deactiveren van een label, moet het gebruikt worden en handmatig gedefinieerd zijn.",
        "apihelp-move-description": "Pagina hernoemen.",
+       "apihelp-move-param-to": "Titel om de pagina naar te hernoemen.",
        "apihelp-move-param-reason": "Reden voor de naamswijziging.",
        "apihelp-move-param-noredirect": "Geen doorverwijzing achterlaten.",
        "apihelp-move-param-watch": "Pagina en de omleiding toevoegen aan de volglijst van de huidige gebruiker.",
index 6705658..4d4614c 100644 (file)
        "apihelp-query+info-paramvalue-prop-talkid": "{{doc-apihelp-paramvalue|query+info|prop|talkid}}",
        "apihelp-query+info-paramvalue-prop-watched": "{{doc-apihelp-paramvalue|query+info|prop|watched}}",
        "apihelp-query+info-paramvalue-prop-watchers": "{{doc-apihelp-paramvalue|query+info|prop|watchers}}",
+       "apihelp-query+info-paramvalue-prop-visitingwatchers": "{{doc-apihelp-paramvalue|query+info|prop|visitingwatchers}}",
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "{{doc-apihelp-paramvalue|query+info|prop|notificationtimestamp}}",
        "apihelp-query+info-paramvalue-prop-subjectid": "{{doc-apihelp-paramvalue|query+info|prop|subjectid}}",
        "apihelp-query+info-paramvalue-prop-url": "{{doc-apihelp-paramvalue|query+info|prop|url}}",
index d235209..e6d3344 100644 (file)
        "apihelp-query+allrevisions-param-generatetitles": "当作为生成器使用时,生成标题而不是修订ID。",
        "apihelp-query+allrevisions-example-user": "列出由用户<kbd>Example</kbd>作出的最近50次贡献。",
        "apihelp-query+allrevisions-example-ns-main": "列举主名字空间中的前50次修订。",
+       "apihelp-query+mystashedfiles-description": "获取当前用户的上传藏匿中的文件列表。",
        "apihelp-query+mystashedfiles-param-prop": "要检索文件的属性。",
        "apihelp-query+mystashedfiles-paramvalue-prop-type": "检索文件的MIME类型和媒体类型。",
        "apihelp-query+mystashedfiles-param-limit": "获取多少文件。",
        "apihelp-query+protectedtitles-paramvalue-prop-level": "添加保护级别。",
        "apihelp-query+protectedtitles-example-simple": "受保护标题列表。",
        "apihelp-query+protectedtitles-example-generator": "找到主命名空间中已保护的标题的链接。",
+       "apihelp-query+querypage-param-page": "特殊页面的名称。注意其区分大小写。",
        "apihelp-query+querypage-param-limit": "返回的结果数。",
        "apihelp-query+querypage-example-ancientpages": "返回[[Special:Ancientpages]]的结果。",
        "apihelp-query+random-description": "获取一组随机页面。\n\n页面列举在一个固定序列中,只有起始点是随机的。这意味着如果<samp>Main Page</samp>是列表中第一个随机页面的话,<samp>List of fictional monkeys</samp>将<em>总是</em>第二个,<samp>List of people on stamps of Vanuatu</samp>是第三个等。",
        "apihelp-query+watchlist-param-allrev": "将同一页面的多个修订包含于指定的时间表内。",
        "apihelp-query+watchlist-param-start": "枚举的起始时间戳。",
        "apihelp-query+watchlist-param-end": "枚举的结束时间戳。",
+       "apihelp-query+watchlist-param-namespace": "过滤更改为仅限指定的名字空间。",
        "apihelp-query+watchlist-param-user": "只列出此用户的更改。",
        "apihelp-query+watchlist-param-excludeuser": "不要列出此用户的更改。",
        "apihelp-query+watchlist-param-limit": "根据结果返回的结果总数。",
index af6f9d9..ab88834 100644 (file)
@@ -19,7 +19,7 @@
  *
  * @file
  * @author Kai Nissen
- * @author Adam Shorland
+ * @author Addshore
  * @since 1.27
  */
 
index 3b868a1..36c644a 100644 (file)
@@ -513,7 +513,7 @@ class RequestContext implements IContextSource, MutableContext {
                return array(
                        'ip' => $this->getRequest()->getIP(),
                        'headers' => $this->getRequest()->getAllHeaders(),
-                       'sessionId' => MediaWiki\Session\SessionManager::getGlobalSession()->getId(),
+                       'sessionId' => session_id(),
                        'userId' => $this->getUser()->getId()
                );
        }
@@ -541,9 +541,7 @@ class RequestContext implements IContextSource, MutableContext {
         * @since 1.21
         */
        public static function importScopedSession( array $params ) {
-               if ( strlen( $params['sessionId'] ) &&
-                       MediaWiki\Session\SessionManager::getGlobalSession()->isPersistent()
-               ) {
+               if ( session_id() != '' && strlen( $params['sessionId'] ) ) {
                        // Sanity check to avoid sending random cookies for the wrong users.
                        // This method should only called by CLI scripts or by HTTP job runners.
                        throw new MWException( "Sessions can only be imported when none is active." );
@@ -565,39 +563,23 @@ class RequestContext implements IContextSource, MutableContext {
                        global $wgRequest, $wgUser;
 
                        $context = RequestContext::getMain();
-
                        // Commit and close any current session
-                       if ( MediaWiki\Session\PHPSessionHandler::isEnabled() ) {
-                               session_write_close(); // persist
-                               session_id( '' ); // detach
-                               $_SESSION = array(); // clear in-memory array
-                       }
-
-                       // Get new session, if applicable
-                       $session = null;
-                       if ( strlen( $params['sessionId'] ) ) { // don't make a new random ID
-                               $manager = MediaWiki\Session\SessionManager::singleton();
-                               $session = $manager->getSessionById( $params['sessionId'], true )
-                                       ?: $manager->getEmptySession();
-                       }
-
-                       // Remove any user IP or agent information, and attach the request
-                       // with the new session.
-                       $context->setRequest( new FauxRequest( array(), false, $session ) );
+                       session_write_close(); // persist
+                       session_id( '' ); // detach
+                       $_SESSION = array(); // clear in-memory array
+                       // Remove any user IP or agent information
+                       $context->setRequest( new FauxRequest() );
                        $wgRequest = $context->getRequest(); // b/c
-
                        // Now that all private information is detached from the user, it should
                        // be safe to load the new user. If errors occur or an exception is thrown
                        // and caught (leaving the main context in a mixed state), there is no risk
                        // of the User object being attached to the wrong IP, headers, or session.
                        $context->setUser( $user );
                        $wgUser = $context->getUser(); // b/c
-                       if ( $session && MediaWiki\Session\PHPSessionHandler::isEnabled() ) {
-                               session_id( $session->getId() );
-                               MediaWiki\quietCall( 'session_cache_limiter', 'private, must-revalidate' );
-                               MediaWiki\quietCall( 'session_start' );
+                       if ( strlen( $params['sessionId'] ) ) { // don't make a new random ID
+                               wfSetupSession( $params['sessionId'] ); // sets $_SESSION
                        }
-                       $request = new FauxRequest( array(), false, $session );
+                       $request = new FauxRequest( array(), false, $_SESSION );
                        $request->setIP( $params['ip'] );
                        foreach ( $params['headers'] as $name => $value ) {
                                $request->setHeader( $name, $value );
index f09de4f..264ee11 100644 (file)
@@ -505,6 +505,10 @@ class DBConnRef implements IDatabase {
                return $this->__call( __FUNCTION__, func_get_args() );
        }
 
+       public function getScopedLockAndFlush( $lockKey, $fname, $timeout ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
        public function namedLocksEnqueue() {
                return $this->__call( __FUNCTION__, func_get_args() );
        }
index 1835958..a4d0ad0 100644 (file)
@@ -155,6 +155,9 @@ abstract class DatabaseBase implements IDatabase {
         */
        private $mTrxWriteDuration = 0.0;
 
+       /** @var array Map of (name => 1) for locks obtained via lock() */
+       private $mNamedLocksHeld = array();
+
        /** @var IDatabase|null Lazy handle to the master DB this server replicates from */
        private $lazyMasterHandle;
 
@@ -871,7 +874,7 @@ abstract class DatabaseBase implements IDatabase {
                                $msg = __METHOD__ . ": lost connection to $server; reconnected";
                                wfDebugLog( 'DBPerformance', "$msg:\n" . wfBacktrace( true ) );
 
-                               if ( $hadTrx ) {
+                               if ( $hadTrx || $this->mNamedLocksHeld ) {
                                        # Leave $ret as false and let an error be reported.
                                        # Callers may catch the exception and continue to use the DB.
                                        $this->reportQueryError( $lastError, $lastErrno, $sql, $fname, $tempIgnore );
@@ -3160,13 +3163,33 @@ abstract class DatabaseBase implements IDatabase {
        }
 
        public function lock( $lockName, $method, $timeout = 5 ) {
+               $this->mNamedLocksHeld[$lockName] = 1;
+
                return true;
        }
 
        public function unlock( $lockName, $method ) {
+               unset( $this->mNamedLocksHeld[$lockName] );
+
                return true;
        }
 
+       public function getScopedLockAndFlush( $lockKey, $fname, $timeout ) {
+               if ( !$this->lock( $lockKey, $fname, $timeout ) ) {
+                       return null;
+               }
+
+               $that = $this;
+               $unlocker = new ScopedCallback( function () use ( $that, $lockKey, $fname ) {
+                       $that->commit( __METHOD__, 'flush' );
+                       $that->unlock( $lockKey, $fname );
+               } );
+
+               $this->commit( __METHOD__, 'flush' );
+
+               return $unlocker;
+       }
+
        public function namedLocksEnqueue() {
                return false;
        }
index 3a8f737..29106ab 100644 (file)
@@ -932,12 +932,13 @@ abstract class DatabaseMysqlBase extends Database {
                $row = $this->fetchObject( $result );
 
                if ( $row->lockstatus == 1 ) {
+                       parent::lock( $lockName, $method, $timeout ); // record
                        return true;
-               } else {
-                       wfDebug( __METHOD__ . " failed to acquire lock\n" );
-
-                       return false;
                }
+
+               wfDebug( __METHOD__ . " failed to acquire lock\n" );
+
+               return false;
        }
 
        /**
@@ -952,7 +953,14 @@ abstract class DatabaseMysqlBase extends Database {
                $result = $this->query( "SELECT RELEASE_LOCK($lockName) as lockstatus", $method );
                $row = $this->fetchObject( $result );
 
-               return ( $row->lockstatus == 1 );
+               if ( $row->lockstatus == 1 ) {
+                       parent::unlock( $lockName, $method ); // record
+                       return true;
+               }
+
+               wfDebug( __METHOD__ . " failed to release lock\n" );
+
+               return false;
        }
 
        private function makeLockName( $lockName ) {
index 4d9891e..e84f264 100644 (file)
@@ -1581,11 +1581,13 @@ SQL;
                                "SELECT pg_try_advisory_lock($key) AS lockstatus", $method );
                        $row = $this->fetchObject( $result );
                        if ( $row->lockstatus === 't' ) {
+                               parent::lock( $lockName, $method, $timeout ); // record
                                return true;
                        } else {
                                sleep( 1 );
                        }
                }
+
                wfDebug( __METHOD__ . " failed to acquire lock\n" );
 
                return false;
@@ -1603,7 +1605,14 @@ SQL;
                $result = $this->query( "SELECT pg_advisory_unlock($key) as lockstatus", $method );
                $row = $this->fetchObject( $result );
 
-               return ( $row->lockstatus === 't' );
+               if ( $row->lockstatus === 't' ) {
+                       parent::unlock( $lockName, $method ); // record
+                       return true;
+               }
+
+               wfDebug( __METHOD__ . " failed to release lock\n" );
+
+               return false;
        }
 
        /**
index c72218a..1e728d8 100644 (file)
@@ -1219,6 +1219,8 @@ interface IDatabase {
         * after the database is updated so that the jobs will see the data when they actually run.
         * It can also be used for updates that easily cause deadlocks if locks are held too long.
         *
+        * Updates will execute in the order they were enqueued.
+        *
         * @param callable $callback
         * @since 1.20
         */
@@ -1232,6 +1234,8 @@ interface IDatabase {
         * This is useful for updates that easily cause deadlocks if locks are held too long
         * but where atomicity is strongly desired for these updates and some related updates.
         *
+        * Updates will execute in the order they were enqueued.
+        *
         * @param callable $callback
         * @since 1.22
         */
@@ -1489,8 +1493,8 @@ interface IDatabase {
         * Named locks are not related to transactions
         *
         * @param string $lockName Name of lock to aquire
-        * @param string $method Name of method calling us
-        * @param int $timeout
+        * @param string $method Name of the calling method
+        * @param int $timeout Acquisition timeout in seconds
         * @return bool
         */
        public function lock( $lockName, $method, $timeout = 5 );
@@ -1501,7 +1505,7 @@ interface IDatabase {
         * Named locks are not related to transactions
         *
         * @param string $lockName Name of lock to release
-        * @param string $method Name of method calling us
+        * @param string $method Name of the calling method
         *
         * @return int Returns 1 if the lock was released, 0 if the lock was not established
         * by this thread (in which case the lock is not released), and NULL if the named
@@ -1509,6 +1513,25 @@ interface IDatabase {
         */
        public function unlock( $lockName, $method );
 
+       /**
+        * Acquire a named lock, flush any transaction, and return an RAII style unlocker object
+        *
+        * This is suitiable for transactions that need to be serialized using cooperative locks,
+        * where each transaction can see each others' changes. Any transaction is flushed to clear
+        * out stale REPEATABLE-READ snapshot data. Once the returned object falls out of PHP scope,
+        * any transaction will be committed and the lock will be released.
+        *
+        * If the lock acquisition failed, then no transaction flush happens, and null is returned.
+        *
+        * @param string $lockKey Name of lock to release
+        * @param string $fname Name of the calling method
+        * @param int $timeout Acquisition timeout in seconds
+        * @return ScopedCallback|null
+        * @throws DBUnexpectedError
+        * @since 1.27
+        */
+       public function getScopedLockAndFlush( $lockKey, $fname, $timeout );
+
        /**
         * Check to see if a named lock used by lock() use blocking queues
         *
index 25fdea9..606f4f4 100644 (file)
@@ -228,9 +228,24 @@ abstract class LBFactory {
        /**
         * Commit changes on all master connections
         * @param string $fname Caller name
+        * @param array $options Options map:
+        *   - maxWriteDuration: abort if more than this much time was spent in write queries
         */
-       public function commitMasterChanges( $fname = __METHOD__ ) {
+       public function commitMasterChanges( $fname = __METHOD__, array $options = array() ) {
+               $limit = isset( $options['maxWriteDuration'] ) ? $options['maxWriteDuration'] : 0;
+
                $this->logMultiDbTransaction();
+               $this->forEachLB( function ( LoadBalancer $lb ) use ( $limit ) {
+                       $lb->forEachOpenConnection( function ( IDatabase $db ) use ( $limit ) {
+                               $time = $db->pendingWriteQueryDuration();
+                               if ( $limit > 0 && $time > $limit ) {
+                                       throw new DBTransactionError(
+                                               $db,
+                                               wfMessage( 'transaction-duration-limit-exceeded', $time, $limit )->text()
+                                       );
+                               }
+                       } );
+               } );
 
                $start = microtime( true );
                $this->forEachLBCallMethod( 'commitMasterChanges', array( $fname ) );
index b5a79a9..32999f5 100644 (file)
@@ -1363,10 +1363,10 @@ class LoadBalancer {
         * function instead of Database::getLag() avoids a fatal error in this
         * case on many installations.
         *
-        * @param DatabaseBase $conn
-        * @return int
+        * @param IDatabase $conn
+        * @return int|bool Returns false on error
         */
-       public function safeGetLag( $conn ) {
+       public function safeGetLag( IDatabase $conn ) {
                if ( $this->getServerCount() == 1 ) {
                        return 0;
                } else {
@@ -1374,6 +1374,41 @@ class LoadBalancer {
                }
        }
 
+       /**
+        * Wait for a slave DB to reach a specified master position
+        *
+        * This will connect to the master to get an accurate position if $pos is not given
+        *
+        * @param IDatabase $conn Slave DB
+        * @param DBMasterPos|bool $pos Master position; default: current position
+        * @param integer $timeout Timeout in seconds
+        * @return bool Success
+        * @since 1.27
+        */
+       public function safeWaitForMasterPos( IDatabase $conn, $pos = false, $timeout = 10 ) {
+               if ( $this->getServerCount() == 1 || !$conn->getLBInfo( 'slave' ) ) {
+                       return true; // server is not a slave DB
+               }
+
+               $pos = $pos ?: $this->getConnection( DB_MASTER )->getMasterPos();
+               if ( !$pos ) {
+                       return false; // something is misconfigured
+               }
+
+               $result = $conn->masterPosWait( $pos, $timeout );
+               if ( $result == -1 || is_null( $result ) ) {
+                       $msg = __METHOD__ . ": Timed out waiting on {$conn->getServer()} pos {$pos}";
+                       wfDebugLog( 'replication', "$msg\n" );
+                       wfDebugLog( 'DBPerformance', "$msg:\n" . wfBacktrace( true ) );
+                       $ok = false;
+               } else {
+                       wfDebugLog( 'replication', __METHOD__ . ": Done\n" );
+                       $ok = true;
+               }
+
+               return $ok;
+       }
+
        /**
         * Clear the cache for slag lag delay times
         *
index 4e8e65b..2465918 100644 (file)
@@ -99,9 +99,25 @@ class KafkaHandler extends AbstractProcessingHandler {
        ) {
                $metadata = new MetaDataFromKafka( $kafkaServers );
                $produce = new Produce( $metadata );
+
+               if ( isset( $options['sendTimeout'] ) ) {
+                       $timeOut = $options['sendTimeout'];
+                       $produce->getClient()->setStreamOption( 'SendTimeoutSec', 0 );
+                       $produce->getClient()->setStreamOption( 'SendTimeoutUSec',
+                               intval( $timeOut * 1000000 )
+                       );
+               }
+               if ( isset( $options['recvTimeout'] ) ) {
+                       $timeOut = $options['recvTimeout'];
+                       $produce->getClient()->setStreamOption( 'RecvTimeoutSec', 0 );
+                       $produce->getClient()->setStreamOption( 'RecvTimeoutUSec',
+                               intval( $timeOut * 1000000 )
+                       );
+               }
                if ( isset( $options['logExceptions'] ) && is_string( $options['logExceptions'] ) ) {
                        $options['logExceptions'] = LoggerFactory::getInstance( $options['logExceptions'] );
                }
+
                return new self( $produce, $options, $level, $bubble );
        }
 
index 9617c0a..8816d37 100644 (file)
@@ -44,4 +44,13 @@ class HTMLUserTextField extends HTMLTextField {
 
                return new UserInputWidget( $params );
        }
+
+       public function getInputHtml( $value ) {
+               // add the required module and css class for user suggestions in non-OOUI mode
+               $this->mParent->getOutput()->addModules( 'mediawiki.userSuggest' );
+               $this->mClass .= ' mw-autocomplete-user';
+
+               // return parent html
+               return parent::getInputHtml( $value );
+       }
 }
index 904fde8..61c3002 100644 (file)
@@ -456,7 +456,7 @@ abstract class DatabaseUpdater {
                        flush();
                        if ( $ret !== false ) {
                                $updatesDone[] = $origParams;
-                               wfWaitForSlaves();
+                               wfGetLBFactory()->waitForReplication();
                        } else {
                                $updatesSkipped[] = array( $func, $params, $origParams );
                        }
index b742074..3b6a37f 100644 (file)
@@ -391,7 +391,7 @@ ${serverSetting}
 ## be publically accessible from the web.
 #\$wgCacheDirectory = \"\$IP/cache\";
 
-# Site language code, should be one of the list in ./languages/Names.php
+# Site language code, should be one of the list in ./languages/data/Names.php
 \$wgLanguageCode = \"{$this->values['wgLanguageCode']}\";
 
 \$wgSecretKey = \"{$this->values['wgSecretKey']}\";
index 4813bea..9b5635b 100644 (file)
@@ -278,7 +278,6 @@ class MysqlUpdater extends DatabaseUpdater {
                        // 1.27
                        array( 'dropTable', 'msg_resource_links' ),
                        array( 'dropTable', 'msg_resource' ),
-                       array( 'addTable', 'bot_passwords', 'patch-bot_passwords.sql' ),
                );
        }
 
@@ -836,7 +835,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        foreach ( $res as $row ) {
                                $count = ( $count + 1 ) % 100;
                                if ( $count == 0 ) {
-                                       wfWaitForSlaves();
+                                       wfGetLBFactory()->waitForReplication( array( 'wiki' => wfWikiID() ) );
                                }
                                $this->db->insert( 'templatelinks',
                                        array(
index 21d5dbc..7880557 100644 (file)
@@ -89,7 +89,6 @@ class PostgresUpdater extends DatabaseUpdater {
                        array( 'addTable', 'uploadstash', 'patch-uploadstash.sql' ),
                        array( 'addTable', 'user_former_groups', 'patch-user_former_groups.sql' ),
                        array( 'addTable', 'sites', 'patch-sites.sql' ),
-                       array( 'addTable', 'bot_passwords', 'patch-bot_passwords.sql' ),
 
                        # Needed before new field
                        array( 'convertArchive2' ),
index ba223c4..5279c2d 100644 (file)
@@ -147,7 +147,6 @@ class SqliteUpdater extends DatabaseUpdater {
                        // 1.27
                        array( 'dropTable', 'msg_resource_links' ),
                        array( 'dropTable', 'msg_resource' ),
-                       array( 'addTable', 'bot_passwords', 'patch-bot_passwords.sql' ),
                );
        }
 
index ad7c627..ee46d90 100644 (file)
@@ -18,7 +18,7 @@
        "config-localsettings-upgrade": "Εντοπίστηκε αρχείο <code>LocalSettings.php</code>.\nΓια να αναβαθμίσετε αυτή την εγκατάσταση, παρακαλούμε να εισαγάγετε την τιμή του <code>$wgUpgradeKey</code> στο παρακάτω πλαίσιο.\nΘα το βρείτε στο <code>LocalSettings.php</code>.",
        "config-localsettings-cli-upgrade": "Ένα αρχείο <code>LocalSettings.php</code> έχει εντοπιστεί.\nΓια να αναβαθμίσετε αυτή την εγκατάσταση, εκτελέστε το <code>update.php</code> αντ' αυτού.",
        "config-localsettings-key": "Κλειδί αναβάθμισης:",
-       "config-localsettings-badkey": "Το κλειδί που δώσατε είναι εσφαλμένο.",
+       "config-localsettings-badkey": "Το κλειδί αναβάθμισης που δώσατε είναι εσφαλμένο.",
        "config-upgrade-key-missing": "Έχει εντοπιστεί μια υπάρχουσα εγκατάσταση του MediaWiki.\nΓια να αναβαθμίσετε αυτήν την εγκατάσταση, παρακαλούμε να βάλετε την ακόλουθη γραμμή στο κάτω μέρος του <code>LocalSettings.php</code> σας:\n\n$1",
        "config-localsettings-incomplete": "Το υπάρχον <code>LocalSettings.php</code> φαίνεται να είναι ελλιπές.\nΤο $1 μεταβλητή δεν έχει οριστεί.\nΠαρακαλούμε να αλλάξετε  το <code>LocalSettings.php</code> έτσι ώστε αυτή η μεταβλητή έχει οριστεί, και κάντε κλικ στο \"{{int:Config-continue}}\".",
        "config-localsettings-connection-error": "Ένα σφάλμα παρουσιάστηκε κατά τη σύνδεση με τη βάση δεδομένων και με τη χρήση των ρυθμίσεων που ορίστηκαν στο <code>LocalSettings.php</code>. Παρακαλούμε διορθώστε αυτές τις ρυθμίσεις και δοκιμάστε ξανά.\n\n$1",
index e468b00..8c0ade9 100644 (file)
@@ -15,7 +15,8 @@
                        "Shield-9",
                        "Takot",
                        "Sujiniku",
-                       "Macofe"
+                       "Macofe",
+                       "2nd-player"
                ]
        },
        "config-desc": "MediaWiki のインストーラー",
        "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] は、[//commons.wikimedia.org/ ウィキメディア・コモンズ]のサイトにある画像、音声、その他のメディアをウィキ上で利用できるようにする機能です。\nこれを使用するには、MediaWiki がインターネットに接続できる必要があります。\n\nウィキメディア・コモンズ以外のウィキを同様に設定する手順など、この機能に関する詳細な情報は、[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos マニュアル]をご覧ください。",
        "config-cc-error": "クリエイティブ・コモンズ・ライセンスの選択器から結果が得られませんでした。\nライセンスの名前を手動で入力してください。",
        "config-cc-again": "もう一度選択してください...",
-       "config-cc-not-chosen": "希望するクリエイティブ・コモンズのライセンスを選択して、「続行」をクリックしてください。",
+       "config-cc-not-chosen": "希望するクリエイティブ・コモンズのライセンスを選択して、「proceed」をクリックしてください。",
        "config-advanced-settings": "高度な設定",
        "config-cache-options": "オブジェクトのキャッシュの設定:",
        "config-cache-help": "オブジェクトのキャッシュを使用すると、頻繁に使用するデータをキャッシュするため MediaWiki の動作速度を改善できます。\n中〜大規模サイトではこれを有効にすることを強くお勧めします。小規模サイトでも同様に効果があります。",
index 6a607b6..3377afb 100644 (file)
@@ -12,7 +12,7 @@
        "config-localsettings-upgrade": "Востановена е податотека <code>LocalSettings.php</code>.\nЗа да ја надградите инсталцијава, внесете ја вредноста на <code>$wgUpgradeKey</code> во полето подолу.\nТоа е го најдете во <code>LocalSettings.php</code>.",
        "config-localsettings-cli-upgrade": "Утврдено е присуството на податотеката „<code>LocalSettings.php</code>“.\nЗа да ја надградите воспоставката, пуштете ја „<code>update.php</code>“ наместо горенаведената.",
        "config-localsettings-key": "Надградбен клуч:",
-       "config-localsettings-badkey": "Ð\9aлÑ\83Ñ\87оÑ\82 Ñ\88Ñ\82о Ð³Ð¾ Ð½Ð°Ð²ÐµÐ´Ð¾Ð²Ñ\82е Ðµ Ð¿Ð¾Ð³Ñ\80еÑ\88ен",
+       "config-localsettings-badkey": "Ð\9dадгÑ\80адбениоÑ\82 ÐºÐ»Ñ\83Ñ\87 Ñ\88Ñ\82о Ð³Ð¾ Ð½Ð°Ð²ÐµÐ´Ð¾Ð²Ñ\82е Ðµ Ð¿Ð¾Ð³Ñ\80еÑ\88ен.",
        "config-upgrade-key-missing": "Востановена е постоечка воспоставка на МедијаВики.\nЗа да ја надградите, вметнете го следниов ред на дното од вашата страница <code>LocalSettings.php</code>:\n\n$1",
        "config-localsettings-incomplete": "Постоечката страница <code>LocalSettings.php</code> е нецелосна.\nНе е поставена променливата $1.\nИзменете ја страницата <code>LocalSettings.php</code> така што ќе ѝ зададете вредност на променливата, па стиснете на „{{int:Config-continue}}“.",
        "config-localsettings-connection-error": "Се појави грешка при поврзувањето со базата користејќи ги поставките назначени во <code>LocalSettings.php</code>. Исправете ги овие поставки и обидете се повторно.\n\n$1",
index a9a8b2b..4c71d39 100644 (file)
@@ -25,7 +25,7 @@
        "config-localsettings-upgrade": "Er is een bestaand instellingenbestand <code>LocalSettings.php</code> gevonden.\nVoer de waarde van <code>$wgUpgradeKey</code> in in onderstaande invoerveld om deze installatie bij te werken.\nDe instelling is terug te vinden in <code>LocalSettings.php</code>.",
        "config-localsettings-cli-upgrade": "Het bestand <code>LocalSettings.php</code> is al aanwezig.\nVoer <code>update.php</code> uit om deze installatie bij te werken.",
        "config-localsettings-key": "Upgradesleutel:",
-       "config-localsettings-badkey": "De sleutel die u hebt opgegeven is onjuist.",
+       "config-localsettings-badkey": "De upgrade-sleutel die u hebt opgegeven is onjuist.",
        "config-upgrade-key-missing": "Er is een bestaande installatie van MediaWiki aangetroffen.\nPlaats de volgende regel onderaan uw <code>LocalSettings.php</code> om deze installatie bij te werken:\n\n$1",
        "config-localsettings-incomplete": "De bestaande inhoud van <code>LocalSettings.php</code> lijkt incompleet.\nDe variabele $1 is niet ingesteld.\nWijzig <code>LocalSettings.php</code> zodat deze variabele is ingesteld en klik op \"{{int:Config-continue}}\".",
        "config-localsettings-connection-error": "Er is een fout opgetreden tijdens het verbinden met de database met de instellingen uit <code>LocalSettings.php</code>. Los het probleem met de instellingen op en probeer het daarna opnieuw.\n\n$1",
@@ -86,6 +86,7 @@
        "config-apc": "[http://www.php.net/apc APC] is op dit moment geïnstalleerd",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] is op dit moment geïnstalleerd",
        "config-no-cache": "'''Waarschuwing:''' [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] of [http://www.iis.net/download/WinCacheForPhp WinCache] is niet aangetroffen.\nHet cachen van objecten is niet ingeschakeld.",
+       "config-no-cache-apcu": "<strong>Waarschuwing:</strong> [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] of [http://www.iis.net/download/WinCacheForPhp WinCache] is niet aangetroffen.\nHet cachen van objecten is niet ingeschakeld.",
        "config-mod-security": "'''Waarschuwing:''' uw webserver heeft de module [http://modsecurity.org/ mod_security] ingeschakeld. Als deze onjuist is ingesteld, kan dit problemen geven in combinatie met MediaWiki of andere software die gebruikers in staat stelt willekeurige inhoud te posten.\nLees de [http://modsecurity.org/documentation/ documentatie over mod_security] of neem contact op met de helpdesk van uw provider als u tegen problemen aanloopt.",
        "config-diff3-bad": "GNU diff3 niet aangetroffen.",
        "config-git": "Versiecontrolesoftware git is aangetroffen: <code>$1</code>",
index dcfd69a..b57bc78 100644 (file)
        "config-unicode-pure-php-warning": "<strong>警告:</strong>因为尚未安装 [http://pecl.php.net/intl intl PECL 扩展]以处理 Unicode 正常化,故只能退而采用运行较慢的纯 PHP 实现的方法。\n如果您运行着一个高流量的网站,请参阅 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode标准化]一文。",
        "config-unicode-update-warning": "'''警告''':Unicode正常化封装器的已安装版本使用了旧版本的[http://site.icu-project.org/ ICU项目]库。如果您需要使用Unicode,请将其[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations 升级]。",
        "config-no-db": "无法找到合适的数据库驱动!您需要为PHP安装数据库驱动。目前支持以下数据库{{PLURAL:$2|类型}}:$1。\n\n如果您自己编译了PHP,请通过启用数据库客户端重新配置它,例如使用 <code>./configure --with-mysqli</code>。如果您从 Debian 或 Ubuntu 安装包安装了PHP,那么您也需要安装,例如 <code>php5-mysql</code> 安装包。",
-       "config-outdated-sqlite": "'''警告''':您已安装SQLite $1,但是它的版本低于最低要求版本$2。因此您无法选择SQLite。",
-       "config-no-fts3": "'''警告''':已编译的SQLite不包含[//sqlite.org/fts3.html FTS3模块],后台搜索功能将不可用。",
+       "config-outdated-sqlite": "<strong>警告:</strong>您已安装SQLite $1,但是它的版本低于最低要求版本$2。因此您无法选择SQLite。",
+       "config-no-fts3": "<strong>警告:</strong>已编译的SQLite不包含[//sqlite.org/fts3.html FTS3模块],后台搜索功能将不可用。",
        "config-register-globals-error": "<strong>错误:PHP<code>[http://php.net/register_globals register_globals]</code>选项被启用。必须禁用它才能继续安装。</strong>关于如何禁用,参见[https://www.mediawiki.org/wiki/register_globals mediawiki.org此页]。",
        "config-magic-quotes-gpc": "<strong>致命错误:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc]已启用!</strong>此选项会无法挽回的破坏输入数据。除非此选项被禁用否则您不能安装或使用MediaWiki。",
-       "config-magic-quotes-runtime": "'''毁灭性错误:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]已启用!'''\n此选项会无法预测地破坏输入的数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
-       "config-magic-quotes-sybase": "'''毁灭性错误:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase]已启用!'''\n此选项会无法预测地破坏输入的数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
-       "config-mbstring": "'''毁灭性错误:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]已启用!'''\n此选项会导致错误并不可预测地破坏数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
-       "config-safe-mode": "'''警告:'''PHP的[http://www.php.net/features.safe-mode 安全模式]已启用。它可能会导致一些问题,尤其在对文件上传和数学公式<code>math</code>的支持方面。",
+       "config-magic-quotes-runtime": "<strong>致命错误:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]已启用!</strong>\n此选项会无法预测地破坏输入的数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
+       "config-magic-quotes-sybase": "<strong>致命错误:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]已启用!</strong>\n此选项会无法预测地破坏输入的数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
+       "config-mbstring": "<strong>致命错误:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]已启用!</strong>\n此选项会导致错误并不可预测地破坏数据,请将其禁用,否则您将不能安装或使用MediaWiki。",
+       "config-safe-mode": "<strong>警告:</strong>PHP的[http://www.php.net/features.safe-mode 安全模式]已启用。\n它可能会导致一些问题,尤其在对文件上传和数学公式<code>math</code>的支持方面。",
        "config-xml-bad": "缺少PHP的XML模块。MediaWiki需要使用该模块提供的函数,在当前配置下将无法工作。您可能需要安装php-xml RPM包。",
-       "config-pcre-old": "'' 致命错误: ''需要PCRE $1 或更高版本。\n您的 PHP 二进制文件与 PCRE $2 链接。\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 详细信息]。",
-       "config-pcre-no-utf8": "'''毁灭性错误''':PHP的PCRE模块在编译时可能没有包含PCRE_UTF8支持。MediaWiki需要UTF-8支持才能正常工作。",
+       "config-pcre-old": "<strong>致命错误:</strong>需要PCRE $1 或更高版本。\n您的 PHP 二进制文件与 PCRE $2 链接。\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 详细信息]。",
+       "config-pcre-no-utf8": "<strong>致命错误:</strong>PHP的PCRE模块在编译时可能没有包含PCRE_UTF8支持。\nMediaWiki需要UTF-8支持才能正常工作。",
        "config-memory-raised": "PHP的内存使用上限<code>memory_limit</code>为$1,自动提升到$2。",
-       "config-memory-bad": "'''警告:'''PHP的内存使用上限<code>memory_limit</code>为$1。该设定可能过低,并导致安装失败!",
-       "config-ctype": "'''毁灭性错误''':PHP必须有[http://www.php.net/manual/en/ctype.installation.php Ctype 扩展]来支持编译。",
+       "config-memory-bad": "<strong>警告:</strong>PHP的内存使用上限<code>memory_limit</code>为$1。\n该设定可能过低,并导致安装失败!",
+       "config-ctype": "<strong>致命错误:</strong>PHP必须有[http://www.php.net/manual/en/ctype.installation.php Ctype 扩展]来支持编译。",
        "config-iconv": "<strong>致命错误:</strong>PHP必须编译支持[http://www.php.net/manual/en/iconv.installation.php iconv拓展]。",
-       "config-json": "'''致命问题:''' PHP编译没有附带JSON支持。\n在安装MediaWiki前,你必须安装PHP JSON扩展或者[http://pecl.php.net/package/jsonc PECL jsonc]扩展。\n* PHP扩展已包含在Red Hat Enterprise Linux (CentOS) 5和6中,但必须在<code>/etc/php.ini</code>或<code>/etc/php.d/json.ini</code>中启用。\n* 部分在2013年5月后发行的Linux发行版省略了PHP扩展,而将PECL扩展打包成了<code>php5-json</code>或<code>php-pecl-jsonc</code>。",
+       "config-json": "<strong>致命错误:</strong>PHP编译没有附带JSON支持。\n在安装MediaWiki前,你必须安装PHP JSON扩展或者[http://pecl.php.net/package/jsonc PECL jsonc]扩展。\n* PHP扩展已包含在Red Hat Enterprise Linux (CentOS) 5和6中,但必须在<code>/etc/php.ini</code>或<code>/etc/php.d/json.ini</code>中启用。\n* 部分在2013年5月后发行的Linux发行版省略了PHP扩展,而将PECL扩展打包成了<code>php5-json</code>或<code>php-pecl-jsonc</code>。",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache]已安装",
        "config-apc": "[http://www.php.net/apc APC]已安装",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache]已安装",
-       "config-no-cache": "'''警告:'''找不到[http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache],无法启用对象缓存。\nObject caching is not enabled.",
+       "config-no-cache": "<strong>警告:</strong>找不到[http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache]。\n对象缓冲未启用。",
        "config-no-cache-apcu": "<strong>警告:</strong>找不到[http://www.php.net/apcu APCu]、[http://xcache.lighttpd.net/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache]。\n对象缓存未启用。",
-       "config-mod-security": "'''警告''':您的服务器已启动[http://modsecurity.org/ mod_security]。若其配置错误, 会导致MediaWiki和其他软件的错误并允许用户任意发布内容。如果您遇到任何错误,请查阅[http://modsecurity.org/documentation/ mod_security文档]或联系您的客服。",
+       "config-mod-security": "<strong>警告:</strong>您的web服务器已启用[http://modsecurity.org/ mod_security]/mod_security2。它的很多常见配置可能导致MediaWiki及其他软件允许用户发布任意内容的问题。如果可能,这应当被禁用。否则,当您遭遇随机错误时,请参考[http://modsecurity.org/documentation/ mod_security 文档]或联络您的主机支持。",
        "config-diff3-bad": "找不到GNU diff3。",
        "config-git": "发现Git版本控制软件:<code>$1</code>",
        "config-git-bad": "Git版本控制软件未找到。",
        "config-imagemagick": "已找到ImageMagick:<code>$1</code>。如果你启用了上传功能,缩略图功能也将被启用。",
        "config-gd": "已找到内建的GD图形库。如果你启用了上传功能,缩略图功能也将被启用。",
        "config-no-scaling": "找不到GD库或ImageMagick。缩略图功能将不可用。",
-       "config-no-uri": "'''错误:'''无法确定当前的URI。安装已中断。",
+       "config-no-uri": "<strong>错误:</strong>无法确定当前的URI。\n安装已中断。",
        "config-no-cli-uri": "<strong>警告:</strong>未指定<code>--scriptpath</code>参数,使用默认值:<code>$1</code>。",
        "config-using-server": "使用服务器名“<nowiki>$1</nowiki>”。",
        "config-using-uri": "使用服务器URL“<nowiki>$1$2</nowiki>”。",
-       "config-uploads-not-safe": "'''警告:'''您的默认上传目录<code>$1</code>存在允许执行任意脚本的漏洞。尽管MediaWiki会对所有已上传的文件进行安全检查,但我们仍然强烈建议您在启用上传功能前[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security 关闭该安全漏洞]。",
-       "config-no-cli-uploads-check": "'''警告''':在CLI安装过程中,没有对您的默认上传目录(<code>$1</code>)进行执行任意脚本的漏洞检查。",
+       "config-uploads-not-safe": "<strong>警告:</strong>您的默认上传目录<code>$1</code>存在允许执行任意脚本的漏洞。\n尽管MediaWiki会对所有已上传的文件进行安全检查,但我们仍然强烈建议您在启用上传功能前[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security 关闭该安全漏洞]。",
+       "config-no-cli-uploads-check": "<strong>警告:</strong>在CLI安装过程中,没有对您的默认上传目录(<code>$1</code>)进行执行任意脚本的漏洞检查。",
        "config-brokenlibxml": "您的系统安装的PHP和libxml2版本组合存在故障,并可能在MediaWiki和其他web应用程序中造成隐藏的数据损坏。请将libxml2升级到2.7.3或以上([https://bugs.php.net/bug.php?id=45996 PHP的故障报告])。安装已中断。",
        "config-suhosin-max-value-length": "Suhosin已经安装并将GET请求的参数长度限制在$1字节。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能会被降低。如果可能,请在<code>php.ini</code>中将<code>suhosin.get.max_value_length</code>设为1024或更高值,并在LocalSettings.php中将<code>$wgResourceLoaderMaxQueryLength</code>设为同一值。",
        "config-db-type": "数据库类型:",
        "config-charset-mysql5-binary": "MySQL 4.1/5.0 二进制",
        "config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
        "config-charset-mysql4": "MySQL 4.0 UTF-8(向后兼容)",
-       "config-charset-help": "'''警告:'''如果您在MySQL 4.1+中使用'''向后兼容的UTF-8'''字符集,并在之后使用<code>mysqldump</code>备份了数据库,则可能损坏所有的非ASCII字符,从而不可逆地破坏您的备份!\n\n在'''二进制模式'''下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。\n\n在'''UTF-8模式'''下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[//zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。",
+       "config-charset-help": "<strong>警告:</strong>如果您在MySQL 4.1+中使用<strong>向后兼容的UTF-8</strong>字符集,并在之后使用<code>mysqldump</code>备份了数据库,则可能损坏所有的非ASCII字符,从而不可逆地破坏您的备份!\n\n在<strong>二进制模式</strong>下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。\n\n在<strong>UTF-8模式</strong>下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[//zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。",
        "config-mysql-old": "需要MySQL $1或更新的版本,您的版本为$2。",
        "config-db-port": "数据库端口:",
        "config-db-schema": "MediaWiki的数据库模式",
        "config-db-schema-help": "此数据库模式通常是正确的,请在有明确需求时才改动之。",
-       "config-pg-test-error": "无法连接到数据库'''$1''':$2",
+       "config-pg-test-error": "无法连接到数据库<strong>$1</strong>:$2",
        "config-sqlite-dir": "SQLite数据目录:",
-       "config-sqlite-dir-help": "SQLite会将所有的数据存储于单一文件中。\n\n您所提供的目录必须在安装过程中对网页服务器可写。\n\n该目录'''不应'''允许通过web访问,因此我们不会将数据文件和PHP文件放在一起。\n\n安装程序在创建数据文件时,亦会在相同目录下创建<code>.htaccess</code>以控制权限。假若此等控制失效,则可能会将您的数据文件暴露于公共空间,让他人可以获取用户数据(电子邮件地址、杂凑后的密码)、被删除的版本以及其他在wiki上被限制访问的数据。\n\n请考虑将数据库统一放置在某处,如<code>/var/lib/mediawiki/yourwiki</code>下。",
+       "config-sqlite-dir-help": "SQLite会将所有的数据存储于单一文件中。\n\n您所提供的目录必须在安装过程中对网页服务器可写。\n\n该目录<strong>不应</strong>允许通过web访问,因此我们不会将数据文件和PHP文件放在一起。\n\n安装程序在创建数据文件时,亦会在相同目录下创建<code>.htaccess</code>以控制权限。假若此等控制失效,则可能会将您的数据文件暴露于公共空间,让他人可以获取用户数据(电子邮件地址、杂凑后的密码)、被删除的版本以及其他在wiki上被限制访问的数据。\n\n请考虑将数据库统一放置在某处,如<code>/var/lib/mediawiki/yourwiki</code>下。",
        "config-oracle-def-ts": "默认表空间:",
        "config-oracle-temp-ts": "临时表空间:",
        "config-type-mysql": "MySQL(或兼容程序)",
        "config-sqlite-readonly": "文件<code>$1</code>不可写。",
        "config-sqlite-cant-create-db": "无法创建数据文件<code>$1</code>。",
        "config-sqlite-fts3-downgrade": "PHP缺少FTS3支持,正在降级数据表",
-       "config-can-upgrade": "在数据库中发现了MediaWiki的数据表。要将它们升级至MediaWiki $1,请点击'''继续'''。",
-       "config-upgrade-done": "升级完成。\n\n现在您可以[$1 开始使用您的wiki]了。\n\n如果您需要重新生成<code>LocalSettings.php</code>文件,请点击下面的按钮。除非您的wiki出现了问题,我们'''不推荐'''您执行此操作。",
+       "config-can-upgrade": "在数据库中发现了MediaWiki的数据表。要将它们升级至MediaWiki $1,请点击<strong>继续</strong>。",
+       "config-upgrade-done": "升级完成。\n\n现在您可以[$1 开始使用您的wiki]了。\n\n如果您需要重新生成<code>LocalSettings.php</code>文件,请点击下面的按钮。除非您的wiki出现了问题,我们<strong>不推荐</strong>您执行此操作。",
        "config-upgrade-done-no-regenerate": "升级完成。\n\n现在您可以[$1 开始使用您的wiki]了。",
        "config-regenerate": "重新生成LocalSettings.php →",
        "config-show-table-status": "<code>SHOW TABLE STATUS</code>语句执行失败!",
-       "config-unknown-collation": "'''警告:'''数据库使用了无法识别的整理。",
+       "config-unknown-collation": "<strong>警告:</strong>数据库使用了无法识别的整理。",
        "config-db-web-account": "供网页访问使用的数据库帐号",
        "config-db-web-help": "请指定在wiki执行普通操作时,网页服务器用于连接数据库服务器的用户名和密码。",
        "config-db-web-account-same": "使用和安装程序相同的帐号",
        "config-mysql-engine": "存储引擎:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
-       "config-mysql-myisam-dep": "'''警告''':您选择了MyISAM作为MySQL的存储引擎,MediaWiki并不推荐您这么做,因为:\n* 它仅能通过表锁定来勉强支持并发\n* 与其他引擎相比,它更容易被损坏\n* MediaWiki代码库并不总会去处理MyISAM\n\n如果您的MySQL程序支持InnoDB,我们高度推荐您使用该引擎替代MyISAM。\n如果您的MySQL程序不支持InnoDB,请考虑升级。",
+       "config-mysql-myisam-dep": "<strong>警告:</strong>您选择了MyISAM作为MySQL的存储引擎,MediaWiki并不推荐您这么做,因为:\n* 它仅能通过表锁定来勉强支持并发\n* 与其他引擎相比,它更容易被损坏\n* MediaWiki代码库并不总会去处理MyISAM\n\n如果您的MySQL程序支持InnoDB,我们高度推荐您使用该引擎替代MyISAM。\n如果您的MySQL程序不支持InnoDB,请考虑升级。",
        "config-mysql-only-myisam-dep": "<strong>警告:</strong>MyISAM是MySQL在此机器上唯一可用的存储引擎,但它不适合用于MediaWiki,因为:\n*因为表级锁定,它几乎不支持并发。\n*它相比其他引擎更容易损坏。\n*MediaWiki代码不能总是按照预期操作MyISAM。\n\n你的MySQL不支持InnoDB,是时候升级了。",
-       "config-mysql-engine-help": "'''InnoDB'''通常是最佳选项,因为它对并发操作有着良好的支持。\n\n'''MyISAM'''在单用户或只读环境下可能会有更快的性能表现。但MyISAM数据库出错的概率一般要大于InnoDB数据库。",
+       "config-mysql-engine-help": "<strong>InnoDB</strong>通常是最佳选项,因为它对并发操作有着良好的支持。\n\n<strong>MyISAM</strong>在单用户或只读环境下可能会有更快的性能表现。但MyISAM数据库出错的概率一般要大于InnoDB数据库。",
        "config-mysql-charset": "数据库字符集:",
        "config-mysql-binary": "二进制",
        "config-mysql-utf8": "UTF-8",
-       "config-mysql-charset-help": "在'''二进制模式'''下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。\n\n在'''UTF-8模式'''下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[//zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。",
+       "config-mysql-charset-help": "在<strong>二进制模式</strong>下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。\n\n在<strong>UTF-8模式</strong>下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[//zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。",
        "config-mssql-auth": "身份验证类型:",
        "config-mssql-install-auth": "选择安装过程中链接数据库时将采用的身份验证方式。\n如果您选择“{{int:config-mssql-windowsauth}}”,将使用运行服务器的用户的身份凭据。",
        "config-mssql-web-auth": "选择Web服务器在通常wiki操作期间用来连接数据库服务器的身份验证方式。\n如果您选择“{{int:config-mssql-windowsauth}}”,将使用运行Web服务器的用户的凭据。",
index 4ab9f5a..3919318 100644 (file)
@@ -208,7 +208,12 @@ class JobRunner implements LoggerAwareInterface {
                                // other wikis in the farm (on different masters) get a chance.
                                $timePassed = microtime( true ) - $lastCheckTime;
                                if ( $timePassed >= self::LAG_CHECK_PERIOD || $timePassed < 0 ) {
-                                       if ( !wfWaitForSlaves( $lastCheckTime, false, '*', self::MAX_ALLOWED_LAG ) ) {
+                                       try {
+                                               wfGetLBFactory()->waitForReplication( array(
+                                                       'ifWritesSince' => $lastCheckTime,
+                                                       'timeout' => self::MAX_ALLOWED_LAG
+                                               ) );
+                                       } catch ( DBReplicationWaitError $e ) {
                                                $response['reached'] = 'slave-lag-limit';
                                                break;
                                        }
index f146e6e..13e36d8 100644 (file)
@@ -41,7 +41,8 @@ class ActivityUpdateJob extends Job {
                if ( $this->params['type'] === 'updateWatchlistNotification' ) {
                        $this->updateWatchlistNotification();
                } else {
-                       throw new Exception( "Invalid 'type' parameter '{$this->params['type']}'." );
+                       throw new InvalidArgumentException(
+                               "Invalid 'type' parameter '{$this->params['type']}'." );
                }
 
                return true;
index c9e20a9..5dc2acb 100644 (file)
@@ -49,21 +49,22 @@ class CategoryMembershipChangeJob extends Job {
                }
 
                $dbw = wfGetDB( DB_MASTER );
-
                // Use a named lock so that jobs for this page see each others' changes
-               $fname = __METHOD__;
                $lockKey = "CategoryMembershipUpdates:{$page->getId()}";
-               if ( !$dbw->lock( $lockKey, $fname, 10 ) ) {
+               $scopedLock = $dbw->getScopedLockAndFlush( $lockKey, __METHOD__, 10 );
+               if ( !$scopedLock ) {
                        $this->setLastError( "Could not acquire lock '$lockKey'" );
                        return false;
                }
 
-               $unlocker = new ScopedCallback( function () use ( $dbw, $lockKey, $fname ) {
-                       $dbw->unlock( $lockKey, $fname );
-               } );
-
-               // Sanity: clear any DB transaction snapshot
-               $dbw->commit( __METHOD__, 'flush' );
+               $dbr = wfGetDB( DB_SLAVE, array( 'recentchanges' ) );
+               // Wait till the slave is caught up so that jobs for this page see each others' changes
+               if ( !wfGetLB()->safeWaitForMasterPos( $dbr ) ) {
+                       $this->setLastError( "Timed out while waiting for slave to catch up" );
+                       return false;
+               }
+               // Clear any stale REPEATABLE-READ snapshot
+               $dbr->commit( __METHOD__, 'flush' );
 
                $cutoffUnix = wfTimestamp( TS_UNIX, $this->params['revTimestamp'] );
                // Using ENQUEUE_FUDGE_SEC handles jobs inserted out of revision order due to the delay
@@ -71,12 +72,12 @@ class CategoryMembershipChangeJob extends Job {
                $cutoffUnix -= self::ENQUEUE_FUDGE_SEC;
 
                // Get the newest revision that has a SRC_CATEGORIZE row...
-               $row = $dbw->selectRow(
+               $row = $dbr->selectRow(
                        array( 'revision', 'recentchanges' ),
                        array( 'rev_timestamp', 'rev_id' ),
                        array(
                                'rev_page' => $page->getId(),
-                               'rev_timestamp >= ' . $dbw->addQuotes( $dbw->timestamp( $cutoffUnix ) )
+                               'rev_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( $cutoffUnix ) )
                        ),
                        __METHOD__,
                        array( 'ORDER BY' => 'rev_timestamp DESC, rev_id DESC' ),
@@ -103,8 +104,8 @@ class CategoryMembershipChangeJob extends Job {
 
                // Find revisions to this page made around and after this revision which lack category
                // notifications in recent changes. This lets jobs pick up were the last one left off.
-               $encCutoff = $dbw->addQuotes( $dbw->timestamp( $cutoffUnix ) );
-               $res = $dbw->select(
+               $encCutoff = $dbr->addQuotes( $dbr->timestamp( $cutoffUnix ) );
+               $res = $dbr->select(
                        'revision',
                        Revision::selectFields(),
                        array(
@@ -121,8 +122,6 @@ class CategoryMembershipChangeJob extends Job {
                        $this->notifyUpdatesForRevision( $page, Revision::newFromRow( $row ) );
                }
 
-               ScopedCallback::consume( $unlocker );
-
                return true;
        }
 
@@ -169,7 +168,7 @@ class CategoryMembershipChangeJob extends Job {
                        $catMembChange->triggerCategoryAddedNotification( $categoryTitle );
                        if ( $insertCount++ && ( $insertCount % $batchSize ) == 0 ) {
                                $dbw->commit( __METHOD__, 'flush' );
-                               wfWaitForSlaves();
+                               wfGetLBFactory()->waitForReplication();
                        }
                }
 
@@ -178,7 +177,7 @@ class CategoryMembershipChangeJob extends Job {
                        $catMembChange->triggerCategoryRemovedNotification( $categoryTitle );
                        if ( $insertCount++ && ( $insertCount++ % $batchSize ) == 0 ) {
                                $dbw->commit( __METHOD__, 'flush' );
-                               wfWaitForSlaves();
+                               wfGetLBFactory()->waitForReplication();
                        }
                }
        }
index df0a66e..0d48cb3 100644 (file)
@@ -120,7 +120,7 @@ class HTMLCacheUpdateJob extends Job {
                // Check $wgUpdateRowsPerQuery for sanity; batch jobs are sized by that already.
                foreach ( array_chunk( $pageIds, $wgUpdateRowsPerQuery ) as $batch ) {
                        $dbw->commit( __METHOD__, 'flush' );
-                       wfWaitForSlaves();
+                       wfGetLBFactory()->waitForReplication();
 
                        $dbw->update( 'page',
                                array( 'page_touched' => $dbw->timestamp( $touchTimestamp ) ),
index d6fa26b..0685299 100644 (file)
@@ -98,7 +98,9 @@ class RecentChangesUpdateJob extends Job {
 
                        if ( count( $rcIds ) === $batchSize ) {
                                // There might be more, so try waiting for slaves
-                               if ( !wfWaitForSlaves( null, false, false, /* $timeout = */ 3 ) ) {
+                               try {
+                                       wfGetLBFactory()->waitForReplication( array( 'timeout' => 3 ) );
+                               } catch ( DBReplicationWaitError $e ) {
                                        // Another job will continue anyway
                                        break;
                                }
@@ -125,7 +127,7 @@ class RecentChangesUpdateJob extends Job {
 
                        $lockKey = wfWikiID() . '-activeusers';
                        if ( !$dbw->lock( $lockKey, __METHOD__, 1 ) ) {
-                               return false; // exclusive update (avoids duplicate entries)
+                               return; // exclusive update (avoids duplicate entries)
                        }
 
                        $nowUnix = time();
@@ -203,7 +205,7 @@ class RecentChangesUpdateJob extends Job {
                                }
                                foreach ( array_chunk( $newRows, 500 ) as $rowBatch ) {
                                        $dbw->insert( 'querycachetwo', $rowBatch, __METHOD__ );
-                                       wfWaitForSlaves();
+                                       wfGetLBFactory()->waitForReplication();
                                }
                        }
 
index e2d9946..b99cb41 100644 (file)
@@ -67,7 +67,7 @@ class LogFormatter {
        /**
         * Handy shortcut for constructing a formatter directly from
         * database row.
-        * @param object $row
+        * @param stdClass|array $row
         * @see DatabaseLogEntry::getSelectQueryData
         * @return LogFormatter
         */
@@ -237,7 +237,7 @@ class LogFormatter {
                                        // @codingStandardsIgnoreStart Long line
                                        //case 'revision': // Revision deletion
                                        //case 'event': // Log deletion
-                                       // see https://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/LogPage.php?&pathrev=97044&r1=97043&r2=97044
+                                       // see https://github.com/wikimedia/mediawiki/commit/a9c243b7b5289dad204278dbe7ed571fd914e395
                                        //default:
                                        // @codingStandardsIgnoreEnd
                                }
@@ -245,7 +245,7 @@ class LogFormatter {
 
                        case 'patrol':
                                // @codingStandardsIgnoreStart Long line
-                               // https://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/includes/PatrolLog.php?&pathrev=97495&r1=97494&r2=97495
+                               // https://github.com/wikimedia/mediawiki/commit/1a05f8faf78675dc85984f27f355b8825b43efff
                                // @codingStandardsIgnoreEnd
                                // Create a diff link to the patrolled revision
                                if ( $entry->getSubtype() === 'patrol' ) {
index 5a58c33..b62bcb4 100644 (file)
@@ -38,10 +38,10 @@ class TagLogFormatter extends LogFormatter {
                $remove = ( isset( $params[8] ) && isset( $params[8]['num'] ) && $params[8]['num'] );
                $key .= ( $remove ? ( $add ? '' : '-remove' ) : '-add' );
 
-               if ( isset( $params[4] ) && $params[4] ) {
-                       $key .= '-logentry';
-               } else {
+               if ( isset( $params[3] ) && $params[3] ) {
                        $key .= '-revision';
+               } else {
+                       $key .= '-logentry';
                }
 
                return $key;
index f557c1a..8bac6b8 100644 (file)
@@ -138,7 +138,7 @@ class EmailNotification {
        public function notifyOnPageChange( $editor, $title, $timestamp, $summary,
                $minorEdit, $oldid = false, $pageStatus = 'changed'
        ) {
-               global $wgEnotifUseJobQ, $wgEnotifMinorEdits, $wgUsersNotifiedOnAllChanges, $wgEnotifUserTalk;
+               global $wgEnotifMinorEdits, $wgUsersNotifiedOnAllChanges, $wgEnotifUserTalk;
 
                if ( $title->getNamespace() < 0 ) {
                        return;
@@ -166,34 +166,20 @@ class EmailNotification {
                        }
                }
 
-               if ( !$sendEmail ) {
-                       return;
-               }
-
-               if ( $wgEnotifUseJobQ ) {
-                       $params = array(
-                               'editor' => $editor->getName(),
-                               'editorID' => $editor->getID(),
-                               'timestamp' => $timestamp,
-                               'summary' => $summary,
-                               'minorEdit' => $minorEdit,
-                               'oldid' => $oldid,
-                               'watchers' => $watchers,
-                               'pageStatus' => $pageStatus
-                       );
-                       $job = new EnotifNotifyJob( $title, $params );
-                       JobQueueGroup::singleton()->lazyPush( $job );
-               } else {
-                       $this->actuallyNotifyOnPageChange(
-                               $editor,
+               if ( $sendEmail ) {
+                       JobQueueGroup::singleton()->lazyPush( new EnotifNotifyJob(
                                $title,
-                               $timestamp,
-                               $summary,
-                               $minorEdit,
-                               $oldid,
-                               $watchers,
-                               $pageStatus
-                       );
+                               array(
+                                       'editor' => $editor->getName(),
+                                       'editorID' => $editor->getID(),
+                                       'timestamp' => $timestamp,
+                                       'summary' => $summary,
+                                       'minorEdit' => $minorEdit,
+                                       'oldid' => $oldid,
+                                       'watchers' => $watchers,
+                                       'pageStatus' => $pageStatus
+                               )
+                       ) );
                }
        }
 
index faf40b3..9ac5e6b 100644 (file)
@@ -59,6 +59,43 @@ class BitmapHandler extends TransformationalImageHandler {
                return $scaler;
        }
 
+       function makeParamString( $params ) {
+               $res = parent::makeParamString( $params );
+               if ( isset( $params['interlace'] ) && $params['interlace'] ) {
+                       return "interlaced-{$res}";
+               } else {
+                       return $res;
+               }
+       }
+
+       function parseParamString( $str ) {
+               $remainder = preg_replace( '/^interlaced-/', '', $str );
+               $params = parent::parseParamString( $remainder );
+               if ( $params === false ) {
+                       return false;
+               }
+               $params['interlace'] = $str !== $remainder;
+               return $params;
+       }
+
+       /**
+        * @param File $image
+        * @param array $params
+        * @return bool
+        */
+       function normaliseParams( $image, &$params ) {
+               global $wgMaxInterlacingAreas;
+               if ( !parent::normaliseParams( $image, $params ) ) {
+                       return false;
+               }
+               $mimeType = $image->getMimeType();
+               $interlace = isset( $params['interlace'] ) && $params['interlace']
+                       && isset( $wgMaxInterlacingAreas[$mimeType] )
+                       && $this->getImageArea( $image ) <= $wgMaxInterlacingAreas[$mimeType];
+               $params['interlace'] = $interlace;
+               return true;
+       }
+
        /**
         * Transform an image using ImageMagick
         *
@@ -70,7 +107,7 @@ class BitmapHandler extends TransformationalImageHandler {
        protected function transformImageMagick( $image, $params ) {
                # use ImageMagick
                global $wgSharpenReductionThreshold, $wgSharpenParameter, $wgMaxAnimatedGifArea,
-                       $wgImageMagickTempDir, $wgImageMagickConvertCommand;
+                       $wgImageMagickTempDir, $wgImageMagickConvertCommand, $wgMaxInterlacingAreas;
 
                $quality = array();
                $sharpen = array();
@@ -78,9 +115,13 @@ class BitmapHandler extends TransformationalImageHandler {
                $animation_pre = array();
                $animation_post = array();
                $decoderHint = array();
+
                if ( $params['mimeType'] == 'image/jpeg' ) {
                        $qualityVal = isset( $params['quality'] ) ? (string)$params['quality'] : null;
                        $quality = array( '-quality', $qualityVal ?: '80' ); // 80%
+                       if ( $params['interlace'] ) {
+                               $animation_post = array( '-interlace', 'JPEG' );
+                       }
                        # Sharpening, see bug 6193
                        if ( ( $params['physicalWidth'] + $params['physicalHeight'] )
                                / ( $params['srcWidth'] + $params['srcHeight'] )
@@ -92,7 +133,12 @@ class BitmapHandler extends TransformationalImageHandler {
                                // JPEG decoder hint to reduce memory, available since IM 6.5.6-2
                                $decoderHint = array( '-define', "jpeg:size={$params['physicalDimensions']}" );
                        }
-               } elseif ( $params['mimeType'] == 'image/png' || $params['mimeType'] == 'image/webp' ) {
+               } elseif ( $params['mimeType'] == 'image/png' ) {
+                       $quality = array( '-quality', '95' ); // zlib 9, adaptive filtering
+                       if ( $params['interlace'] ) {
+                               $animation_post = array( '-interlace', 'PNG' );
+                       }
+               } elseif ( $params['mimeType'] == 'image/webp' ) {
                        $quality = array( '-quality', '95' ); // zlib 9, adaptive filtering
                } elseif ( $params['mimeType'] == 'image/gif' ) {
                        if ( $this->getImageArea( $image ) > $wgMaxAnimatedGifArea ) {
@@ -108,6 +154,11 @@ class BitmapHandler extends TransformationalImageHandler {
                                        $animation_post = array( '-fuzz', '5%', '-layers', 'optimizeTransparency' );
                                }
                        }
+                       if ( $params['interlace'] && version_compare( $this->getMagickVersion(), "6.3.4" ) >= 0
+                               && !$this->isAnimatedImage( $image ) ) { // interlacing animated GIFs is a bad idea
+                               $animation_post[] = '-interlace';
+                               $animation_post[] = 'GIF';
+                       }
                } elseif ( $params['mimeType'] == 'image/x-xcf' ) {
                        // Before merging layers, we need to set the background
                        // to be transparent to preserve alpha, as -layers merge
@@ -191,7 +242,8 @@ class BitmapHandler extends TransformationalImageHandler {
         * @return MediaTransformError Error object if error occurred, false (=no error) otherwise
         */
        protected function transformImageMagickExt( $image, $params ) {
-               global $wgSharpenReductionThreshold, $wgSharpenParameter, $wgMaxAnimatedGifArea;
+               global $wgSharpenReductionThreshold, $wgSharpenParameter, $wgMaxAnimatedGifArea,
+                       $wgMaxInterlacingAreas;
 
                try {
                        $im = new Imagick();
@@ -209,8 +261,14 @@ class BitmapHandler extends TransformationalImageHandler {
                                }
                                $qualityVal = isset( $params['quality'] ) ? (string)$params['quality'] : null;
                                $im->setCompressionQuality( $qualityVal ?: 80 );
+                               if ( $params['interlace'] ) {
+                                       $im->setInterlaceScheme( Imagick::INTERLACE_JPEG );
+                               }
                        } elseif ( $params['mimeType'] == 'image/png' ) {
                                $im->setCompressionQuality( 95 );
+                               if ( $params['interlace'] ) {
+                                       $im->setInterlaceScheme( Imagick::INTERLACE_PNG );
+                               }
                        } elseif ( $params['mimeType'] == 'image/gif' ) {
                                if ( $this->getImageArea( $image ) > $wgMaxAnimatedGifArea ) {
                                        // Extract initial frame only; we're so big it'll
@@ -220,6 +278,13 @@ class BitmapHandler extends TransformationalImageHandler {
                                        // Coalesce is needed to scale animated GIFs properly (bug 1017).
                                        $im = $im->coalesceImages();
                                }
+                               // GIF interlacing is only available since 6.3.4
+                               $v = Imagick::getVersion();
+                               preg_match( '/ImageMagick ([0-9]+\.[0-9]+\.[0-9]+)/', $v['versionString'], $v );
+
+                               if ( $params['interlace'] && version_compare( $v[1], '6.3.4' ) >= 0 ) {
+                                       $im->setInterlaceScheme( Imagick::INTERLACE_GIF );
+                               }
                        }
 
                        $rotation = isset( $params['disableRotation'] ) ? 0 : $this->getRotation( $image );
index f72df19..597ac26 100644 (file)
@@ -126,6 +126,7 @@ abstract class TransformationalImageHandler extends ImageHandler {
                        'mimeType' => $image->getMimeType(),
                        'dstPath' => $dstPath,
                        'dstUrl' => $dstUrl,
+                       'interlace' => isset( $params['interlace'] ) ? $params['interlace'] : false,
                );
 
                if ( isset( $params['quality'] ) && $params['quality'] === 'low' ) {
diff --git a/includes/objectcache/ObjectCacheSessionHandler.php b/includes/objectcache/ObjectCacheSessionHandler.php
new file mode 100644 (file)
index 0000000..cc85074
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+/**
+ * Session storage in object cache.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+use MediaWiki\Logger\LoggerFactory;
+
+/**
+ * Session storage in object cache.
+ * Used if $wgSessionsInObjectCache is true.
+ *
+ * @ingroup Cache
+ */
+class ObjectCacheSessionHandler {
+       /** @var array Map of (session ID => SHA-1 of the data) */
+       protected static $hashCache = array();
+
+       /**
+        * Install a session handler for the current web request
+        */
+       static function install() {
+               session_set_save_handler(
+                       array( __CLASS__, 'open' ),
+                       array( __CLASS__, 'close' ),
+                       array( __CLASS__, 'read' ),
+                       array( __CLASS__, 'write' ),
+                       array( __CLASS__, 'destroy' ),
+                       array( __CLASS__, 'gc' ) );
+
+               // It's necessary to register a shutdown function to call session_write_close(),
+               // because by the time the request shutdown function for the session module is
+               // called, the BagOStuff has already been destroyed. Shutdown functions registered
+               // this way are called before object destruction.
+               register_shutdown_function( array( __CLASS__, 'handleShutdown' ) );
+       }
+
+       /**
+        * Get the cache storage object to use for session storage
+        * @return BagOStuff
+        */
+       protected static function getCache() {
+               global $wgSessionCacheType;
+
+               return ObjectCache::getInstance( $wgSessionCacheType );
+       }
+
+       /**
+        * Get a cache key for the given session id.
+        *
+        * @param string $id Session id
+        * @return string Cache key
+        */
+       protected static function getKey( $id ) {
+               return wfMemcKey( 'session', $id );
+       }
+
+       /**
+        * @param mixed $data
+        * @return string
+        */
+       protected static function getHash( $data ) {
+               return sha1( serialize( $data ) );
+       }
+
+       /**
+        * Callback when opening a session.
+        *
+        * @param string $save_path Path used to store session files, unused
+        * @param string $session_name Session name
+        * @return bool Success
+        */
+       static function open( $save_path, $session_name ) {
+               return true;
+       }
+
+       /**
+        * Callback when closing a session.
+        * NOP.
+        *
+        * @return bool Success
+        */
+       static function close() {
+               return true;
+       }
+
+       /**
+        * Callback when reading session data.
+        *
+        * @param string $id Session id
+        * @return mixed Session data
+        */
+       static function read( $id ) {
+               $stime = microtime( true );
+               $data = self::getCache()->get( self::getKey( $id ) );
+               $real = microtime( true ) - $stime;
+
+               RequestContext::getMain()->getStats()->timing( "session.read", 1000 * $real );
+
+               self::$hashCache = array( $id => self::getHash( $data ) );
+
+               return ( $data === false ) ? '' : $data;
+       }
+
+       /**
+        * Callback when writing session data.
+        *
+        * @param string $id Session id
+        * @param string $data Session data
+        * @return bool Success
+        */
+       static function write( $id, $data ) {
+               global $wgObjectCacheSessionExpiry;
+
+               // Only issue a write if anything changed (PHP 5.6 already does this)
+               if ( !isset( self::$hashCache[$id] )
+                       || self::getHash( $data ) !== self::$hashCache[$id]
+               ) {
+                       $stime = microtime( true );
+                       self::getCache()->set( self::getKey( $id ), $data, $wgObjectCacheSessionExpiry );
+                       $real = microtime( true ) - $stime;
+
+                       RequestContext::getMain()->getStats()->timing( "session.write", 1000 * $real );
+               }
+
+               return true;
+       }
+
+       /**
+        * Callback to destroy a session when calling session_destroy().
+        *
+        * @param string $id Session id
+        * @return bool Success
+        */
+       static function destroy( $id ) {
+               $stime = microtime( true );
+               self::getCache()->delete( self::getKey( $id ) );
+               $real = microtime( true ) - $stime;
+
+               RequestContext::getMain()->getStats()->timing( "session.destroy", 1000 * $real );
+
+               return true;
+       }
+
+       /**
+        * Callback to execute garbage collection.
+        * NOP: Object caches perform garbage collection implicitly
+        *
+        * @param int $maxlifetime Maximum session life time
+        * @return bool Success
+        */
+       static function gc( $maxlifetime ) {
+               return true;
+       }
+
+       /**
+        * Shutdown function.
+        * See the comment inside ObjectCacheSessionHandler::install for rationale.
+        */
+       static function handleShutdown() {
+               session_write_close();
+       }
+
+       /**
+        * Pre-emptive session renewal function
+        */
+       static function renewCurrentSession() {
+               global $wgObjectCacheSessionExpiry;
+
+               // Once a session is at half TTL, renew it
+               $window = $wgObjectCacheSessionExpiry / 2;
+               $logger = LoggerFactory::getInstance( 'SessionHandler' );
+
+               $now = microtime( true );
+               // Session are only written in object stores when $_SESSION changes,
+               // which also renews the TTL ($wgObjectCacheSessionExpiry). If a user
+               // is active but not causing session data changes, it may suddenly
+               // expire as they view a form, blocking the first submission.
+               // Make a dummy change every so often to avoid this.
+               if ( !isset( $_SESSION['wsExpiresUnix'] ) ) {
+                       $_SESSION['wsExpiresUnix'] = $now + $wgObjectCacheSessionExpiry;
+
+                       $logger->info( "Set expiry for session " . session_id(), array() );
+               } elseif ( ( $now + $window ) > $_SESSION['wsExpiresUnix'] ) {
+                       $_SESSION['wsExpiresUnix'] = $now + $wgObjectCacheSessionExpiry;
+
+                       $logger->info( "Renewed session " . session_id(), array() );
+               }
+       }
+}
index 5776519..0e3c9eb 100644 (file)
@@ -735,7 +735,12 @@ class SqlBagOStuff extends BagOStuff {
        protected function waitForSlaves() {
                if ( !$this->serverInfos ) {
                        // Main LB is used; wait for any slaves to catch up
-                       return wfWaitForSlaves( null, false, false, $this->syncTimeout );
+                       try {
+                               wfGetLBFactory()->waitForReplication( array( 'wiki' => wfWikiID() ) );
+                               return true;
+                       } catch ( DBReplicationWaitError $e ) {
+                               return false;
+                       }
                } else {
                        // Custom DB server list; probably doesn't use replication
                        return true;
index f16158b..938c049 100644 (file)
@@ -2084,22 +2084,574 @@ class Article implements Page {
        }
 
        /**
-        * Use PHP's magic __call handler to transform instance calls to
-        * WikiPage functions for backwards compatibility.
-        *
-        * @param string $fname Name of called method
-        * @param array $args Arguments to the method
-        * @return mixed
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::checkFlags
         */
-       public function __call( $fname, $args ) {
-               if ( is_callable( array( $this->mPage, $fname ) ) ) {
-                       # wfWarn( "Call to " . __CLASS__ . "::$fname; please use WikiPage instead" );
-                       return call_user_func_array( array( $this->mPage, $fname ), $args );
-               }
-               trigger_error( 'Inaccessible function via __call(): ' . $fname, E_USER_ERROR );
+       public function checkFlags( $flags ) {
+               return $this->mPage->checkFlags( $flags );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::checkTouched
+        */
+       public function checkTouched() {
+               return $this->mPage->checkTouched();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::clearPreparedEdit
+        */
+       public function clearPreparedEdit() {
+               return $this->mPage->clearPreparedEdit();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::doDeleteArticleReal
+        */
+       public function doDeleteArticleReal(
+               $reason, $suppress = false, $u1 = null, $u2 = null, &$error = '', User $user = null
+       ) {
+               return $this->mPage->doDeleteArticleReal(
+                       $reason, $suppress, $u1, $u2, $error, $user
+               );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::doDeleteUpdates
+        */
+       public function doDeleteUpdates( $id, Content $content = null ) {
+               return $this->mPage->doDeleteUpdates( $id, $content );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::doEdit
+        */
+       public function doEdit( $text, $summary, $flags = 0, $baseRevId = false, $user = null ) {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+               return $this->mPage->doEdit( $text, $summary, $flags, $baseRevId, $user );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::doEditContent
+        */
+       public function doEditContent( Content $content, $summary, $flags = 0, $baseRevId = false,
+               User $user = null, $serialFormat = null
+       ) {
+               return $this->mPage->doEditContent( $content, $summary, $flags, $baseRevId,
+                       $user, $serialFormat
+               );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::doEditUpdates
+        */
+       public function doEditUpdates( Revision $revision, User $user, array $options = array() ) {
+               return $this->mPage->doEditUpdates( $revision, $user, $options );
        }
 
-       // ****** B/C functions to work-around PHP silliness with __call and references ****** //
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::doPurge
+        */
+       public function doPurge() {
+               return $this->mPage->doPurge();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::doQuickEditContent
+        */
+       public function doQuickEditContent(
+               Content $content, User $user, $comment = '', $minor = false, $serialFormat = null
+       ) {
+               return $this->mPage->doQuickEditContent(
+                       $content, $user, $comment, $minor, $serialFormat
+               );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::doViewUpdates
+        */
+       public function doViewUpdates( User $user, $oldid = 0 ) {
+               return $this->mPage->doViewUpdates( $user, $oldid );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::exists
+        */
+       public function exists() {
+               return $this->mPage->exists();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::followRedirect
+        */
+       public function followRedirect() {
+               return $this->mPage->followRedirect();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getActionOverrides
+        */
+       public function getActionOverrides() {
+               return $this->mPage->getActionOverrides();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getAutoDeleteReason
+        */
+       public function getAutoDeleteReason( &$hasHistory ) {
+               return $this->mPage->getAutoDeleteReason( $hasHistory );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getCategories
+        */
+       public function getCategories() {
+               return $this->mPage->getCategories();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getComment
+        */
+       public function getComment( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               return $this->mPage->getComment( $audience, $user );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getContentHandler
+        */
+       public function getContentHandler() {
+               return $this->mPage->getContentHandler();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getContentModel
+        */
+       public function getContentModel() {
+               return $this->mPage->getContentModel();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getContributors
+        */
+       public function getContributors() {
+               return $this->mPage->getContributors();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getCreator
+        */
+       public function getCreator( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               return $this->mPage->getCreator( $audience, $user );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getDeletionUpdates
+        */
+       public function getDeletionUpdates( Content $content = null ) {
+               return $this->mPage->getDeletionUpdates( $content );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getHiddenCategories
+        */
+       public function getHiddenCategories() {
+               return $this->mPage->getHiddenCategories();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getId
+        */
+       public function getId() {
+               return $this->mPage->getId();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getLatest
+        */
+       public function getLatest() {
+               return $this->mPage->getLatest();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getLinksTimestamp
+        */
+       public function getLinksTimestamp() {
+               return $this->mPage->getLinksTimestamp();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getMinorEdit
+        */
+       public function getMinorEdit() {
+               return $this->mPage->getMinorEdit();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getOldestRevision
+        */
+       public function getOldestRevision() {
+               return $this->mPage->getOldestRevision();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getRedirectTarget
+        */
+       public function getRedirectTarget() {
+               return $this->mPage->getRedirectTarget();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getRedirectURL
+        */
+       public function getRedirectURL( $rt ) {
+               return $this->mPage->getRedirectURL( $rt );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getRevision
+        */
+       public function getRevision() {
+               return $this->mPage->getRevision();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getText
+        */
+       public function getText( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+               return $this->mPage->getText( $audience, $user );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getTimestamp
+        */
+       public function getTimestamp() {
+               return $this->mPage->getTimestamp();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getTouched
+        */
+       public function getTouched() {
+               return $this->mPage->getTouched();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getUndoContent
+        */
+       public function getUndoContent( Revision $undo, Revision $undoafter = null ) {
+               return $this->mPage->getUndoContent( $undo, $undoafter );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getUndoText
+        */
+       public function getUndoText( Revision $undo, Revision $undoafter = null ) {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+               return $this->mPage->getUndoText( $undo, $undoafter );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getUser
+        */
+       public function getUser( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               return $this->mPage->getUser( $audience, $user );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::getUserText
+        */
+       public function getUserText( $audience = Revision::FOR_PUBLIC, User $user = null ) {
+               return $this->mPage->getUserText( $audience, $user );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::hasViewableContent
+        */
+       public function hasViewableContent() {
+               return $this->mPage->hasViewableContent();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::insertOn
+        */
+       public function insertOn( $dbw, $pageId = null ) {
+               return $this->mPage->insertOn( $dbw, $pageId );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::insertProtectNullRevision
+        */
+       public function insertProtectNullRevision( $revCommentMsg, array $limit,
+               array $expiry, $cascade, $reason, $user = null
+       ) {
+               return $this->mPage->insertProtectNullRevision( $revCommentMsg, $limit,
+                       $expiry, $cascade, $reason, $user
+               );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::insertRedirect
+        */
+       public function insertRedirect() {
+               return $this->mPage->insertRedirect();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::insertRedirectEntry
+        */
+       public function insertRedirectEntry( Title $rt, $oldLatest = null ) {
+               return $this->mPage->insertRedirectEntry( $rt, $oldLatest );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::isCountable
+        */
+       public function isCountable( $editInfo = false ) {
+               return $this->mPage->isCountable( $editInfo );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::isRedirect
+        */
+       public function isRedirect() {
+               return $this->mPage->isRedirect();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::loadFromRow
+        */
+       public function loadFromRow( $data, $from ) {
+               return $this->mPage->loadFromRow( $data, $from );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::loadPageData
+        */
+       public function loadPageData( $from = 'fromdb' ) {
+               return $this->mPage->loadPageData( $from );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::lockAndGetLatest
+        */
+       public function lockAndGetLatest() {
+               return $this->mPage->lockAndGetLatest();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::makeParserOptions
+        */
+       public function makeParserOptions( $context ) {
+               return $this->mPage->makeParserOptions( $context );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::pageDataFromId
+        */
+       public function pageDataFromId( $dbr, $id, $options = array() ) {
+               return $this->mPage->pageDataFromId( $dbr, $id, $options );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::pageDataFromTitle
+        */
+       public function pageDataFromTitle( $dbr, $title, $options = array() ) {
+               return $this->mPage->pageDataFromTitle( $dbr, $title, $options );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::prepareContentForEdit
+        */
+       public function prepareContentForEdit(
+               Content $content, $revision = null, User $user = null,
+               $serialFormat = null, $useCache = true
+       ) {
+               return $this->mPage->prepareContentForEdit(
+                       $content, $revision, $user,
+                       $serialFormat, $useCache
+               );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::prepareTextForEdit
+        */
+       public function prepareTextForEdit( $text, $revid = null, User $user = null ) {
+               return $this->mPage->prepareTextForEdit( $text, $revid, $user );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::protectDescription
+        */
+       public function protectDescription( array $limit, array $expiry ) {
+               return $this->mPage->protectDescription( $limit, $expiry );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::protectDescriptionLog
+        */
+       public function protectDescriptionLog( array $limit, array $expiry ) {
+               return $this->mPage->protectDescriptionLog( $limit, $expiry );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::replaceSection
+        */
+       public function replaceSection( $sectionId, $text, $sectionTitle = '',
+               $edittime = null
+       ) {
+               ContentHandler::deprecated( __METHOD__, '1.21' );
+               return $this->mPage->replaceSection( $sectionId, $text, $sectionTitle,
+                       $edittime
+               );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::replaceSectionAtRev
+        */
+       public function replaceSectionAtRev( $sectionId, Content $sectionContent,
+               $sectionTitle = '', $baseRevId = null
+       ) {
+               return $this->mPage->replaceSectionAtRev( $sectionId, $sectionContent,
+                       $sectionTitle, $baseRevId
+               );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::replaceSectionContent
+        */
+       public function replaceSectionContent(
+               $sectionId, Content $sectionContent, $sectionTitle = '', $edittime = null
+       ) {
+               return $this->mPage->replaceSectionContent(
+                       $sectionId, $sectionContent, $sectionTitle, $edittime
+               );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::setTimestamp
+        */
+       public function setTimestamp( $ts ) {
+               return $this->mPage->setTimestamp( $ts );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::shouldCheckParserCache
+        */
+       public function shouldCheckParserCache( ParserOptions $parserOptions, $oldId ) {
+               return $this->mPage->shouldCheckParserCache( $parserOptions, $oldId );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::supportsSections
+        */
+       public function supportsSections() {
+               return $this->mPage->supportsSections();
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::triggerOpportunisticLinksUpdate
+        */
+       public function triggerOpportunisticLinksUpdate( ParserOutput $parserOutput ) {
+               return $this->mPage->triggerOpportunisticLinksUpdate( $parserOutput );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::updateCategoryCounts
+        */
+       public function updateCategoryCounts( array $added, array $deleted ) {
+               return $this->mPage->updateCategoryCounts( $added, $deleted );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::updateIfNewerOn
+        */
+       public function updateIfNewerOn( $dbw, $revision ) {
+               return $this->mPage->updateIfNewerOn( $dbw, $revision );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::updateRedirectOn
+        */
+       public function updateRedirectOn( $dbw, $redirectTitle, $lastRevIsRedirect = null ) {
+               return $this->mPage->updateRedirectOn( $dbw, $redirectTitle, $lastRevIsRedirect = null );
+       }
+
+       /**
+        * Call to WikiPage function for backwards compatibility.
+        * @see WikiPage::updateRevisionOn
+        */
+       public function updateRevisionOn( $dbw, $revision, $lastRevision = null,
+               $lastRevIsRedirect = null
+       ) {
+               return $this->mPage->updateRevisionOn( $dbw, $revision, $lastRevision,
+                       $lastRevIsRedirect
+               );
+       }
 
        /**
         * @param array $limit
@@ -2185,8 +2737,6 @@ class Article implements Page {
                return $handler->getAutoDeleteReason( $title, $hasHistory );
        }
 
-       // ****** B/C functions for static methods ( __callStatic is PHP>=5.3 ) ****** //
-
        /**
         * @return array
         *
index 6f4c296..c02f975 100644 (file)
@@ -1823,7 +1823,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $revisionId = $revision->insertOn( $dbw );
                        // Update page_latest and friends to reflect the new revision
                        if ( !$this->updateRevisionOn( $dbw, $revision, null, $meta['oldIsRedirect'] ) ) {
-                               $dbw->rollback( __METHOD__ );
+                               $dbw->rollback( __METHOD__ ); // sanity; this should never happen
                                throw new MWException( "Failed to update page row to use new revision." );
                        }
 
@@ -1921,12 +1921,12 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->begin( __METHOD__ );
+               $dbw->startAtomic( __METHOD__ );
 
                // Add the page record unless one already exists for the title
                $newid = $this->insertOn( $dbw );
                if ( $newid === false ) {
-                       $dbw->commit( __METHOD__ ); // nothing inserted
+                       $dbw->endAtomic( __METHOD__ ); // nothing inserted
                        $status->fatal( 'edit-already-exists' );
 
                        return $status; // nothing done
@@ -1956,7 +1956,7 @@ class WikiPage implements Page, IDBAccessObject {
                $revisionId = $revision->insertOn( $dbw );
                // Update the page record with revision data
                if ( !$this->updateRevisionOn( $dbw, $revision, 0 ) ) {
-                       $dbw->rollback( __METHOD__ );
+                       $dbw->rollback( __METHOD__ ); // sanity; this should never happen
                        throw new MWException( "Failed to update page row to use new revision." );
                }
 
@@ -1984,25 +1984,34 @@ class WikiPage implements Page, IDBAccessObject {
 
                $user->incEditCount();
 
-               $dbw->commit( __METHOD__ );
+               $dbw->endAtomic( __METHOD__ );
                $this->mTimestamp = $now;
 
-               // Update links, etc.
-               $this->doEditUpdates( $revision, $user, array( 'created' => true ) );
-
-               $hook_args = array( &$this, &$user, $content, $summary,
-                       $flags & EDIT_MINOR, null, null, &$flags, $revision );
-               ContentHandler::runLegacyHooks( 'ArticleInsertComplete', $hook_args );
-               Hooks::run( 'PageContentInsertComplete', $hook_args );
-
                // Return the new revision to the caller
                $status->value['revision'] = $revision;
 
-               // Trigger post-save hook
-               $hook_args = array( &$this, &$user, $content, $summary,
-                       $flags & EDIT_MINOR, null, null, &$flags, $revision, &$status, $meta['baseRevId'] );
-               ContentHandler::runLegacyHooks( 'ArticleSaveComplete', $hook_args );
-               Hooks::run( 'PageContentSaveComplete', $hook_args );
+               // Do secondary updates once the main changes have been committed...
+               $that = $this;
+               $dbw->onTransactionIdle(
+                       function () use (
+                               &$that, $dbw, $revision, &$user, $content, $summary, &$flags, $meta, &$status
+                       ) {
+                               // Do per-page updates in a transaction
+                               $dbw->setFlag( DBO_TRX );
+                               // Update links, etc.
+                               $that->doEditUpdates( $revision, $user, array( 'created' => true ) );
+                               // Trigger post-create hook
+                               $params = array( &$that, &$user, $content, $summary,
+                                       $flags & EDIT_MINOR, null, null, &$flags, $revision );
+                               ContentHandler::runLegacyHooks( 'ArticleInsertComplete', $params );
+                               Hooks::run( 'PageContentInsertComplete', $params );
+                               // Trigger post-save hook
+                               $params = array_merge( $params, array( &$status, $meta['baseRevId'] ) );
+                               ContentHandler::runLegacyHooks( 'ArticleSaveComplete', $params );
+                               Hooks::run( 'PageContentSaveComplete', $params );
+
+                       }
+               );
 
                return $status;
        }
index 5f7e89c..f947285 100644 (file)
@@ -1113,15 +1113,15 @@ class Parser {
                                        $line = substr( $line, 1 );
                                }
 
+                               // Implies both are valid for table headings.
                                if ( $first_character === '!' ) {
                                        $line = str_replace( '!!', '||', $line );
                                }
 
                                # Split up multiple cells on the same line.
                                # FIXME : This can result in improper nesting of tags processed
-                               # by earlier parser steps, but should avoid splitting up eg
-                               # attribute values containing literal "||".
-                               $cells = StringUtils::explodeMarkup( '||', $line );
+                               # by earlier parser steps.
+                               $cells = explode( '||', $line );
 
                                $outLine = '';
 
index 9d5fe38..1f35e1f 100644 (file)
@@ -272,7 +272,7 @@ class ResourceLoaderImage {
         */
        protected function variantize( $variantConf, ResourceLoaderContext $context ) {
                $dom = new DomDocument;
-               $dom->load( $this->getPath( $context ) );
+               $dom->loadXml( file_get_contents( $this->getPath( $context ) ) );
                $root = $dom->documentElement;
                $wrapper = $dom->createElement( 'g' );
                while ( $root->firstChild ) {
index 113fc84..bcd159f 100644 (file)
@@ -180,6 +180,7 @@ abstract class ResourceLoaderModule implements LoggerAwareInterface {
        /**
         * @since 1.27
         * @param LoggerInterface $logger
+        * @return null
         */
        public function setLogger( LoggerInterface $logger ) {
                $this->logger = $logger;
@@ -410,8 +411,8 @@ abstract class ResourceLoaderModule implements LoggerAwareInterface {
         * This is used to retrieve data in batches. See ResourceLoader::preloadModuleInfo().
         * To save the data, use saveFileDependencies().
         *
-        * @param string $skin Skin name
-        * @param array $deps Array of file names
+        * @param ResourceLoaderContext $context
+        * @param string[] $files Array of file names
         */
        public function setFileDependencies( ResourceLoaderContext $context, $files ) {
                $vary = $context->getSkin() . '|' . $context->getLanguage();
diff --git a/includes/session/BotPasswordSessionProvider.php b/includes/session/BotPasswordSessionProvider.php
deleted file mode 100644 (file)
index d9c60c7..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-/**
- * Session provider for bot passwords
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use BotPassword;
-use User;
-use WebRequest;
-
-/**
- * Session provider for bot passwords
- * @since 1.27
- */
-class BotPasswordSessionProvider extends ImmutableSessionProviderWithCookie {
-
-       /**
-        * @param array $params Keys include:
-        *  - priority: (required) Set the priority
-        *  - sessionCookieName: Session cookie name. Default is '_BPsession'.
-        *  - sessionCookieOptions: Options to pass to WebResponse::setCookie().
-        */
-       public function __construct( array $params = array() ) {
-               if ( !isset( $params['sessionCookieName'] ) ) {
-                       $params['sessionCookieName'] = '_BPsession';
-               }
-               parent::__construct( $params );
-
-               if ( !isset( $params['priority'] ) ) {
-                       throw new \InvalidArgumentException( __METHOD__ . ': priority must be specified' );
-               }
-               if ( $params['priority'] < SessionInfo::MIN_PRIORITY ||
-                       $params['priority'] > SessionInfo::MAX_PRIORITY
-               ) {
-                       throw new \InvalidArgumentException( __METHOD__ . ': Invalid priority' );
-               }
-
-               $this->priority = $params['priority'];
-       }
-
-       public function provideSessionInfo( WebRequest $request ) {
-               // Only relevant for the API
-               if ( !defined( 'MW_API' ) ) {
-                       return null;
-               }
-
-               // Enabled?
-               if ( !$this->config->get( 'EnableBotPasswords' ) ) {
-                       return null;
-               }
-
-               // Have a session ID?
-               $id = $this->getSessionIdFromCookie( $request );
-               if ( $id === null ) {
-                       return null;
-               }
-
-               return new SessionInfo( $this->priority, array(
-                       'provider' => $this,
-                       'id' => $id,
-                       'persisted' => true
-               ) );
-       }
-
-       public function newSessionInfo( $id = null ) {
-               // We don't activate by default
-               return null;
-       }
-
-       /**
-        * Create a new session for a request
-        * @param User $user
-        * @param BotPassword $bp
-        * @param WebRequest $request
-        * @return Session
-        */
-       public function newSessionForRequest( User $user, BotPassword $bp, WebRequest $request ) {
-               $id = $this->getSessionIdFromCookie( $request );
-               $info = new SessionInfo( SessionInfo::MAX_PRIORITY, array(
-                       'provider' => $this,
-                       'id' => $id,
-                       'userInfo' => UserInfo::newFromUser( $user, true ),
-                       'persisted' => $id !== null,
-                       'metadata' => array(
-                               'centralId' => $bp->getUserCentralId(),
-                               'appId' => $bp->getAppId(),
-                               'token' => $bp->getToken(),
-                               'rights' => \MWGrants::getGrantRights( $bp->getGrants() ),
-                       ),
-               ) );
-               $session = $this->getManager()->getSessionFromInfo( $info, $request );
-               $session->persist();
-               return $session;
-       }
-
-       public function refreshSessionInfo( SessionInfo $info, WebRequest $request, &$metadata ) {
-               $missingKeys = array_diff(
-                       array( 'centralId', 'appId', 'token' ),
-                       array_keys( $metadata )
-               );
-               if ( $missingKeys ) {
-                       $this->logger->info( "Session $info: Missing metadata: " . join( ', ', $missingKeys ) );
-                       return false;
-               }
-
-               $bp = BotPassword::newFromCentralId( $metadata['centralId'], $metadata['appId'] );
-               if ( !$bp ) {
-                       $this->logger->info(
-                               "Session $info: No BotPassword for {$metadata['centralId']} {$metadata['appId']}"
-                       );
-                       return false;
-               }
-
-               if ( !hash_equals( $metadata['token'], $bp->getToken() ) ) {
-                       $this->logger->info( "Session $info: BotPassword token check failed" );
-                       return false;
-               }
-
-               $status = $bp->getRestrictions()->check( $request );
-               if ( !$status->isOk() ) {
-                       $this->logger->info( "Session $info: Restrictions check failed", $status->getValue() );
-                       return false;
-               }
-
-               // Update saved rights
-               $metadata['rights'] = \MWGrants::getGrantRights( $bp->getGrants() );
-
-               return true;
-       }
-
-       public function preventSessionsForUser( $username ) {
-               BotPassword::removeAllPasswordsForUser( $username );
-       }
-
-       public function getAllowedUserRights( SessionBackend $backend ) {
-               if ( $backend->getProvider() !== $this ) {
-                       throw new InvalidArgumentException( 'Backend\'s provider isn\'t $this' );
-               }
-               $data = $backend->getProviderMetadata();
-               if ( $data ) {
-                       return $data['rights'];
-               }
-
-               // Should never happen
-               $this->logger->debug( __METHOD__ . ': No provider metadata, returning no rights allowed' );
-               return array();
-       }
-}
diff --git a/includes/session/CookieSessionProvider.php b/includes/session/CookieSessionProvider.php
deleted file mode 100644 (file)
index 2d01d1d..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-<?php
-/**
- * MediaWiki cookie-based session provider interface
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use Config;
-use User;
-use WebRequest;
-
-/**
- * A CookieSessionProvider persists sessions using cookies
- *
- * @ingroup Session
- * @since 1.27
- */
-class CookieSessionProvider extends SessionProvider {
-
-       protected $params = array();
-       protected $cookieOptions = array();
-
-       /**
-        * @param array $params Keys include:
-        *  - priority: (required) Priority of the returned sessions
-        *  - callUserSetCookiesHook: Whether to call the deprecated hook
-        *  - sessionName: Session cookie name. Doesn't honor 'prefix'. Defaults to
-        *    $wgSessionName, or $wgCookiePrefix . '_session' if that is unset.
-        *  - cookieOptions: Options to pass to WebRequest::setCookie():
-        *    - prefix: Cookie prefix, defaults to $wgCookiePrefix
-        *    - path: Cookie path, defaults to $wgCookiePath
-        *    - domain: Cookie domain, defaults to $wgCookieDomain
-        *    - secure: Cookie secure flag, defaults to $wgCookieSecure
-        *    - httpOnly: Cookie httpOnly flag, defaults to $wgCookieHttpOnly
-        */
-       public function __construct( $params = array() ) {
-               parent::__construct();
-
-               $params += array(
-                       'cookieOptions' => array(),
-                       // @codeCoverageIgnoreStart
-               );
-               // @codeCoverageIgnoreEnd
-
-               if ( !isset( $params['priority'] ) ) {
-                       throw new \InvalidArgumentException( __METHOD__ . ': priority must be specified' );
-               }
-               if ( $params['priority'] < SessionInfo::MIN_PRIORITY ||
-                       $params['priority'] > SessionInfo::MAX_PRIORITY
-               ) {
-                       throw new \InvalidArgumentException( __METHOD__ . ': Invalid priority' );
-               }
-
-               if ( !is_array( $params['cookieOptions'] ) ) {
-                       throw new \InvalidArgumentException( __METHOD__ . ': cookieOptions must be an array' );
-               }
-
-               $this->priority = $params['priority'];
-               $this->cookieOptions = $params['cookieOptions'];
-               $this->params = $params;
-               unset( $this->params['priority'] );
-               unset( $this->params['cookieOptions'] );
-       }
-
-       public function setConfig( Config $config ) {
-               parent::setConfig( $config );
-
-               // @codeCoverageIgnoreStart
-               $this->params += array(
-                       // @codeCoverageIgnoreEnd
-                       'callUserSetCookiesHook' => false,
-                       'sessionName' =>
-                               $config->get( 'SessionName' ) ?: $config->get( 'CookiePrefix' ) . '_session',
-               );
-
-               // @codeCoverageIgnoreStart
-               $this->cookieOptions += array(
-                       // @codeCoverageIgnoreEnd
-                       'prefix' => $config->get( 'CookiePrefix' ),
-                       'path' => $config->get( 'CookiePath' ),
-                       'domain' => $config->get( 'CookieDomain' ),
-                       'secure' => $config->get( 'CookieSecure' ),
-                       'httpOnly' => $config->get( 'CookieHttpOnly' ),
-               );
-       }
-
-       public function provideSessionInfo( WebRequest $request ) {
-               $info = array(
-                       'id' => $this->getCookie( $request, $this->params['sessionName'], '' )
-               );
-               if ( !SessionManager::validateSessionId( $info['id'] ) ) {
-                       unset( $info['id'] );
-               }
-
-               list( $userId, $userName, $token ) = $this->getUserInfoFromCookies( $request );
-               if ( $userId !== null ) {
-                       try {
-                               $userInfo = UserInfo::newFromId( $userId );
-                       } catch ( \InvalidArgumentException $ex ) {
-                               return null;
-                       }
-
-                       // Sanity check
-                       if ( $userName !== null && $userInfo->getName() !== $userName ) {
-                               return null;
-                       }
-
-                       if ( $token !== null ) {
-                               if ( !hash_equals( $userInfo->getToken(), $token ) ) {
-                                       return null;
-                               }
-                               $info['userInfo'] = $userInfo->verified();
-                       } elseif ( isset( $info['id'] ) ) { // No point if no session ID
-                               $info['userInfo'] = $userInfo;
-                       }
-               }
-
-               if ( !$info ) {
-                       return null;
-               }
-
-               $info += array(
-                       'provider' => $this,
-                       'persisted' => isset( $info['id'] ),
-                       'forceHTTPS' => $this->getCookie( $request, 'forceHTTPS', '', false )
-               );
-
-               return new SessionInfo( $this->priority, $info );
-       }
-
-       public function persistsSessionId() {
-               return true;
-       }
-
-       public function canChangeUser() {
-               return true;
-       }
-
-       public function persistSession( SessionBackend $session, WebRequest $request ) {
-               $response = $request->response();
-               if ( $response->headersSent() ) {
-                       // Can't do anything now
-                       $this->logger->debug( __METHOD__ . ': Headers already sent' );
-                       return;
-               }
-
-               $user = $session->getUser();
-
-               $cookies = $this->cookieDataToExport( $user, $session->shouldRememberUser() );
-               $sessionData = $this->sessionDataToExport( $user );
-
-               // Legacy hook
-               if ( $this->params['callUserSetCookiesHook'] && !$user->isAnon() ) {
-                       \Hooks::run( 'UserSetCookies', array( $user, &$sessionData, &$cookies ) );
-               }
-
-               $options = $this->cookieOptions;
-
-               $forceHTTPS = $session->shouldForceHTTPS() || $user->requiresHTTPS();
-               if ( $forceHTTPS ) {
-                       // Don't set the secure flag if the request came in
-                       // over "http", for backwards compat.
-                       // @todo Break that backwards compat properly.
-                       $options['secure'] = $this->config->get( 'CookieSecure' );
-               }
-
-               $response->setCookie( $this->params['sessionName'], $session->getId(), null,
-                       array( 'prefix' => '' ) + $options
-               );
-
-               $extendedCookies = $this->config->get( 'ExtendedLoginCookies' );
-               $extendedExpiry = $this->config->get( 'ExtendedLoginCookieExpiration' );
-
-               foreach ( $cookies as $key => $value ) {
-                       if ( $value === false ) {
-                               $response->clearCookie( $key, $options );
-                       } else {
-                               if ( $extendedExpiry !== null && in_array( $key, $extendedCookies ) ) {
-                                       $expiry = time() + (int)$extendedExpiry;
-                               } else {
-                                       $expiry = 0; // Default cookie expiration
-                               }
-                               $response->setCookie( $key, (string)$value, $expiry, $options );
-                       }
-               }
-
-               $this->setForceHTTPSCookie( $forceHTTPS, $session, $request );
-               $this->setLoggedOutCookie( $session->getLoggedOutTimestamp(), $request );
-
-               if ( $sessionData ) {
-                       $session->addData( $sessionData );
-               }
-       }
-
-       public function unpersistSession( WebRequest $request ) {
-               $response = $request->response();
-               if ( $response->headersSent() ) {
-                       // Can't do anything now
-                       $this->logger->debug( __METHOD__ . ': Headers already sent' );
-                       return;
-               }
-
-               $cookies = array(
-                       'UserID' => false,
-                       'Token' => false,
-               );
-
-               $response->clearCookie(
-                       $this->params['sessionName'], array( 'prefix' => '' ) + $this->cookieOptions
-               );
-
-               foreach ( $cookies as $key => $value ) {
-                       $response->clearCookie( $key, $this->cookieOptions );
-               }
-
-               $this->setForceHTTPSCookie( false, null, $request );
-       }
-
-       /**
-        * Set the "forceHTTPS" cookie
-        * @param bool $set Whether the cookie should be set or not
-        * @param SessionBackend|null $backend
-        * @param WebRequest $request
-        */
-       protected function setForceHTTPSCookie(
-               $set, SessionBackend $backend = null, WebRequest $request
-       ) {
-               $response = $request->response();
-               if ( $set ) {
-                       $response->setCookie( 'forceHTTPS', 'true', $backend->shouldRememberUser() ? 0 : null,
-                               array( 'prefix' => '', 'secure' => false ) + $this->cookieOptions );
-               } else {
-                       $response->clearCookie( 'forceHTTPS',
-                               array( 'prefix' => '', 'secure' => false ) + $this->cookieOptions );
-               }
-       }
-
-       /**
-        * Set the "logged out" cookie
-        * @param int $loggedOut timestamp
-        * @param WebRequest $request
-        */
-       protected function setLoggedOutCookie( $loggedOut, WebRequest $request ) {
-               if ( $loggedOut + 86400 > time() &&
-                       $loggedOut !== (int)$this->getCookie( $request, 'LoggedOut', $this->cookieOptions['prefix'] )
-               ) {
-                       $request->response()->setCookie( 'LoggedOut', $loggedOut, $loggedOut + 86400,
-                               $this->cookieOptions );
-               }
-       }
-
-       public function getVaryCookies() {
-               return array(
-                       // Vary on token and session because those are the real authn
-                       // determiners. UserID and UserName don't matter without those.
-                       $this->cookieOptions['prefix'] . 'Token',
-                       $this->cookieOptions['prefix'] . 'LoggedOut',
-                       $this->params['sessionName'],
-                       'forceHTTPS',
-               );
-       }
-
-       public function suggestLoginUsername( WebRequest $request ) {
-                $name = $this->getCookie( $request, 'UserName', $this->cookieOptions['prefix'] );
-                if ( $name !== null ) {
-                        $name = User::getCanonicalName( $name, 'usable' );
-                }
-                return $name === false ? null : $name;
-       }
-
-       /**
-        * Fetch the user identity from cookies
-        * @param \WebRequest $request
-        * @return array (string|null $id, string|null $username, string|null $token)
-        */
-       protected function getUserInfoFromCookies( $request ) {
-               $prefix = $this->cookieOptions['prefix'];
-               return array(
-                       $this->getCookie( $request, 'UserID', $prefix ),
-                       $this->getCookie( $request, 'UserName', $prefix ),
-                       $this->getCookie( $request, 'Token', $prefix ),
-               );
-       }
-
-       /**
-        * Get a cookie. Contains an auth-specific hack.
-        * @param \WebRequest $request
-        * @param string $key
-        * @param string $prefix
-        * @param mixed $default
-        * @return mixed
-        */
-       protected function getCookie( $request, $key, $prefix, $default = null ) {
-               $value = $request->getCookie( $key, $prefix, $default );
-               if ( $value === 'deleted' ) {
-                       // PHP uses this value when deleting cookies. A legitimate cookie will never have
-                       // this value (usernames start with uppercase, token is longer, other auth cookies
-                       // are booleans or integers). Seeing this means that in a previous request we told the
-                       // client to delete the cookie, but it has poor cookie handling. Pretend the cookie is
-                       // not there to avoid invalidating the session.
-                       return null;
-               }
-               return $value;
-       }
-
-       /**
-        * Return the data to store in cookies
-        * @param User $user
-        * @param bool $remember
-        * @return array $cookies Set value false to unset the cookie
-        */
-       protected function cookieDataToExport( $user, $remember ) {
-               if ( $user->isAnon() ) {
-                       return array(
-                               'UserID' => false,
-                               'Token' => false,
-                       );
-               } else {
-                       return array(
-                               'UserID' => $user->getId(),
-                               'UserName' => $user->getName(),
-                               'Token' => $remember ? (string)$user->getToken() : false,
-                       );
-               }
-       }
-
-       /**
-        * Return extra data to store in the session
-        * @param User $user
-        * @return array $session
-        */
-       protected function sessionDataToExport( $user ) {
-               // If we're calling the legacy hook, we should populate $session
-               // like User::setCookies() did.
-               if ( !$user->isAnon() && $this->params['callUserSetCookiesHook'] ) {
-                       return array(
-                               'wsUserID' => $user->getId(),
-                               'wsToken' => $user->getToken(),
-                               'wsUserName' => $user->getName(),
-                       );
-               }
-
-               return array();
-       }
-
-       public function whyNoSession() {
-               return wfMessage( 'sessionprovider-nocookies' );
-       }
-
-}
diff --git a/includes/session/ImmutableSessionProviderWithCookie.php b/includes/session/ImmutableSessionProviderWithCookie.php
deleted file mode 100644 (file)
index 98f7e5c..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-/**
- * MediaWiki session provider base class
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use WebRequest;
-
-/**
- * An ImmutableSessionProviderWithCookie doesn't persist the user, but
- * optionally can use a cookie to support multiple IDs per session.
- *
- * As mentioned in the documentation for SessionProvider, many methods that are
- * technically "cannot persist ID" could be turned into "can persist ID but
- * not changing User" using a session cookie. This class implements such an
- * optional session cookie.
- *
- * @ingroup Session
- * @since 1.27
- */
-abstract class ImmutableSessionProviderWithCookie extends SessionProvider {
-
-       /** @var string|null */
-       protected $sessionCookieName = null;
-       protected $sessionCookieOptions = array();
-
-       /**
-        * @param array $params Keys include:
-        *  - sessionCookieName: Session cookie name, if multiple sessions per
-        *    client are to be supported.
-        *  - sessionCookieOptions: Options to pass to WebResponse::setCookie().
-        */
-       public function __construct( $params = array() ) {
-               parent::__construct();
-
-               if ( isset( $params['sessionCookieName'] ) ) {
-                       if ( !is_string( $params['sessionCookieName'] ) ) {
-                               throw new \InvalidArgumentException( 'sessionCookieName must be a string' );
-                       }
-                       $this->sessionCookieName = $params['sessionCookieName'];
-               }
-               if ( isset( $params['sessionCookieOptions'] ) ) {
-                       if ( !is_array( $params['sessionCookieOptions'] ) ) {
-                               throw new \InvalidArgumentException( 'sessionCookieOptions must be an array' );
-                       }
-                       $this->sessionCookieOptions = $params['sessionCookieOptions'];
-               }
-       }
-
-       /**
-        * Get the session ID from the cookie, if any.
-        *
-        * Only call this if $this->sessionCookieName !== null. If
-        * sessionCookieName is null, do some logic (probably involving a call to
-        * $this->hashToSessionId()) to create the single session ID corresponding
-        * to this WebRequest instead of calling this method.
-        *
-        * @param WebRequest $request
-        * @return string|null
-        */
-       protected function getSessionIdFromCookie( WebRequest $request ) {
-               if ( $this->sessionCookieName === null ) {
-                       throw new \BadMethodCallException(
-                               __METHOD__ . ' may not be called when $this->sessionCookieName === null'
-                       );
-               }
-
-               $prefix = isset( $this->sessionCookieOptions['prefix'] )
-                       ? $this->sessionCookieOptions['prefix']
-                       : $this->config->get( 'CookiePrefix' );
-               $id = $request->getCookie( $this->sessionCookieName, $prefix );
-               return SessionManager::validateSessionId( $id ) ? $id : null;
-       }
-
-       public function persistsSessionId() {
-               return $this->sessionCookieName !== null;
-       }
-
-       public function canChangeUser() {
-               return false;
-       }
-
-       public function persistSession( SessionBackend $session, WebRequest $request ) {
-               if ( $this->sessionCookieName === null ) {
-                       return;
-               }
-
-               $response = $request->response();
-               if ( $response->headersSent() ) {
-                       // Can't do anything now
-                       $this->logger->debug( __METHOD__ . ': Headers already sent' );
-                       return;
-               }
-
-               $options = $this->sessionCookieOptions;
-               if ( $session->shouldForceHTTPS() || $session->getUser()->requiresHTTPS() ) {
-                       $response->setCookie( 'forceHTTPS', 'true', $session->shouldRememberUser() ? 0 : null,
-                               array( 'prefix' => '', 'secure' => false ) + $options );
-                       $options['secure'] = true;
-               }
-
-               $response->setCookie( $this->sessionCookieName, $session->getId(), null, $options );
-       }
-
-       public function unpersistSession( WebRequest $request ) {
-               if ( $this->sessionCookieName === null ) {
-                       return;
-               }
-
-               $response = $request->response();
-               if ( $response->headersSent() ) {
-                       // Can't do anything now
-                       $this->logger->debug( __METHOD__ . ': Headers already sent' );
-                       return;
-               }
-
-               $response->clearCookie( $this->sessionCookieName, $this->sessionCookieOptions );
-       }
-
-       public function getVaryCookies() {
-               if ( $this->sessionCookieName === null ) {
-                       return array();
-               }
-
-               $prefix = isset( $this->sessionCookieOptions['prefix'] )
-                       ? $this->sessionCookieOptions['prefix']
-                       : $this->config->get( 'CookiePrefix' );
-               return array( $prefix . $this->sessionCookieName );
-       }
-
-       public function whyNoSession() {
-               return wfMessage( 'sessionprovider-nocookies' );
-       }
-}
diff --git a/includes/session/PHPSessionHandler.php b/includes/session/PHPSessionHandler.php
deleted file mode 100644 (file)
index d21bea9..0000000
+++ /dev/null
@@ -1,377 +0,0 @@
-<?php
-/**
- * Session storage in object cache.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use Psr\Log\LoggerInterface;
-use BagOStuff;
-
-/**
- * Adapter for PHP's session handling
- * @todo Once we drop support for PHP < 5.4, use SessionHandlerInterface
- *  (should just be a matter of adding "implements SessionHandlerInterface" and
- *  changing the session_set_save_handler() call).
- * @ingroup Session
- * @since 1.27
- */
-class PHPSessionHandler {
-       /** @var PHPSessionHandler */
-       protected static $instance = null;
-
-       /** @var bool Whether PHP session handling is enabled */
-       protected $enable = false;
-       protected $warn = true;
-
-       /** @var SessionManager|null */
-       protected $manager;
-
-       /** @var BagOStuff|null */
-       protected $store;
-
-       /** @var LoggerInterface */
-       protected $logger;
-
-       /** @var array Track original session fields for later modification check */
-       protected $sessionFieldCache = array();
-
-       protected function __construct( SessionManager $manager ) {
-               $this->setEnableFlags(
-                       \RequestContext::getMain()->getConfig()->get( 'PHPSessionHandling' )
-               );
-               $manager->setupPHPSessionHandler( $this );
-       }
-
-       /**
-        * Set $this->enable and $this->warn
-        *
-        * Separate just because there doesn't seem to be a good way to test it
-        * otherwise.
-        *
-        * @param string $PHPSessionHandling See $wgPHPSessionHandling
-        */
-       private function setEnableFlags( $PHPSessionHandling ) {
-               switch ( $PHPSessionHandling ) {
-                       case 'enable':
-                               $this->enable = true;
-                               $this->warn = false;
-                               break;
-
-                       case 'warn':
-                               $this->enable = true;
-                               $this->warn = true;
-                               break;
-
-                       case 'disable':
-                               $this->enable = false;
-                               $this->warn = false;
-                               break;
-               }
-       }
-
-       /**
-        * Test whether the handler is installed
-        * @return bool
-        */
-       public static function isInstalled() {
-               return (bool)self::$instance;
-       }
-
-       /**
-        * Test whether the handler is installed and enabled
-        * @return bool
-        */
-       public static function isEnabled() {
-               return self::$instance && self::$instance->enable;
-       }
-
-       /**
-        * Install a session handler for the current web request
-        * @param SessionManager $manager
-        */
-       public static function install( SessionManager $manager ) {
-               if ( self::$instance ) {
-                       $manager->setupPHPSessionHandler( self::$instance );
-                       return;
-               }
-
-               self::$instance = new self( $manager );
-
-               // Close any auto-started session, before we replace it
-               session_write_close();
-
-               // Tell PHP not to mess with cookies itself
-               ini_set( 'session.use_cookies', 0 );
-               ini_set( 'session.use_trans_sid', 0 );
-
-               // Also set a sane serialization handler
-               \Wikimedia\PhpSessionSerializer::setSerializeHandler();
-
-               session_set_save_handler(
-                       array( self::$instance, 'open' ),
-                       array( self::$instance, 'close' ),
-                       array( self::$instance, 'read' ),
-                       array( self::$instance, 'write' ),
-                       array( self::$instance, 'destroy' ),
-                       array( self::$instance, 'gc' )
-               );
-
-               // It's necessary to register a shutdown function to call session_write_close(),
-               // because by the time the request shutdown function for the session module is
-               // called, other needed objects may have already been destroyed. Shutdown functions
-               // registered this way are called before object destruction.
-               register_shutdown_function( array( self::$instance, 'handleShutdown' ) );
-       }
-
-       /**
-        * Set the manager, store, and logger
-        * @private Use self::install().
-        * @param SessionManager $manager
-        * @param BagOStuff $store
-        * @param LoggerInterface $store
-        */
-       public function setManager(
-               SessionManager $manager, BagOStuff $store, LoggerInterface $logger
-       ) {
-               if ( $this->manager !== $manager ) {
-                       // Close any existing session before we change stores
-                       if ( $this->manager ) {
-                               session_write_close();
-                       }
-                       $this->manager = $manager;
-                       $this->store = $store;
-                       $this->logger = $logger;
-                       \Wikimedia\PhpSessionSerializer::setLogger( $this->logger );
-               }
-       }
-
-       /**
-        * Initialize the session (handler)
-        * @private For internal use only
-        * @param string $save_path Path used to store session files (ignored)
-        * @param string $session_name Session name (ignored)
-        * @return bool Success
-        */
-       public function open( $save_path, $session_name ) {
-               if ( self::$instance !== $this ) {
-                       throw new \UnexpectedValueException( __METHOD__ . ': Wrong instance called!' );
-               }
-               if ( !$this->enable ) {
-                       throw new \BadMethodCallException( 'Attempt to use PHP session management' );
-               }
-               return true;
-       }
-
-       /**
-        * Close the session (handler)
-        * @private For internal use only
-        * @return bool Success
-        */
-       public function close() {
-               if ( self::$instance !== $this ) {
-                       throw new \UnexpectedValueException( __METHOD__ . ': Wrong instance called!' );
-               }
-               $this->sessionFieldCache = array();
-               return true;
-       }
-
-       /**
-        * Read session data
-        * @private For internal use only
-        * @param string $id Session id
-        * @return string Session data
-        */
-       public function read( $id ) {
-               if ( self::$instance !== $this ) {
-                       throw new \UnexpectedValueException( __METHOD__ . ': Wrong instance called!' );
-               }
-               if ( !$this->enable ) {
-                       throw new \BadMethodCallException( 'Attempt to use PHP session management' );
-               }
-
-               $session = $this->manager->getSessionById( $id, false );
-               if ( !$session ) {
-                       return '';
-               }
-               $session->persist();
-
-               $data = iterator_to_array( $session );
-               $this->sessionFieldCache[$id] = $data;
-               return (string)\Wikimedia\PhpSessionSerializer::encode( $data );
-       }
-
-       /**
-        * Write session data
-        * @private For internal use only
-        * @param string $id Session id
-        * @param string $dataStr Session data. Not that you should ever call this
-        *   directly, but note that this has the same issues with code injection
-        *   via user-controlled data as does PHP's unserialize function.
-        * @return bool Success
-        */
-       public function write( $id, $dataStr ) {
-               if ( self::$instance !== $this ) {
-                       throw new \UnexpectedValueException( __METHOD__ . ': Wrong instance called!' );
-               }
-               if ( !$this->enable ) {
-                       throw new \BadMethodCallException( 'Attempt to use PHP session management' );
-               }
-
-               $session = $this->manager->getSessionById( $id, true );
-               if ( !$session ) {
-                       // This can happen under normal circumstances, if the session exists but is
-                       // invalid. Let's emit a log warning instead of a PHP warning.
-                       $this->logger->warning(
-                               __METHOD__ . ": Session \"$id\" cannot be loaded, skipping write."
-                       );
-                       return true;
-               }
-
-               // First, decode the string PHP handed us
-               $data = \Wikimedia\PhpSessionSerializer::decode( $dataStr );
-               if ( $data === null ) {
-                       // @codeCoverageIgnoreStart
-                       return false;
-                       // @codeCoverageIgnoreEnd
-               }
-
-               // Now merge the data into the Session object.
-               $changed = false;
-               $cache = isset( $this->sessionFieldCache[$id] ) ? $this->sessionFieldCache[$id] : array();
-               foreach ( $data as $key => $value ) {
-                       if ( !array_key_exists( $key, $cache ) ) {
-                               if ( $session->exists( $key ) ) {
-                                       // New in both, so ignore and log
-                                       $this->logger->warning(
-                                               __METHOD__ . ": Key \"$key\" added in both Session and \$_SESSION!"
-                                       );
-                               } else {
-                                       // New in $_SESSION, keep it
-                                       $session->set( $key, $value );
-                                       $changed = true;
-                               }
-                       } elseif ( $cache[$key] === $value ) {
-                               // Unchanged in $_SESSION, so ignore it
-                       } elseif ( !$session->exists( $key ) ) {
-                               // Deleted in Session, keep but log
-                               $this->logger->warning(
-                                       __METHOD__ . ": Key \"$key\" deleted in Session and changed in \$_SESSION!"
-                               );
-                               $session->set( $key, $value );
-                               $changed = true;
-                       } elseif ( $cache[$key] === $session->get( $key ) ) {
-                               // Unchanged in Session, so keep it
-                               $session->set( $key, $value );
-                               $changed = true;
-                       } else {
-                               // Changed in both, so ignore and log
-                               $this->logger->warning(
-                                       __METHOD__ . ": Key \"$key\" changed in both Session and \$_SESSION!"
-                               );
-                       }
-               }
-               // Anything deleted in $_SESSION and unchanged in Session should be deleted too
-               // (but not if $_SESSION can't represent it at all)
-               \Wikimedia\PhpSessionSerializer::setLogger( new \Psr\Log\NullLogger() );
-               foreach ( $cache as $key => $value ) {
-                       if ( !array_key_exists( $key, $data ) && $session->exists( $key ) &&
-                               \Wikimedia\PhpSessionSerializer::encode( array( $key => true ) )
-                       ) {
-                               if ( $cache[$key] === $session->get( $key ) ) {
-                                       // Unchanged in Session, delete it
-                                       $session->remove( $key );
-                                       $changed = true;
-                               } else {
-                                       // Changed in Session, ignore deletion and log
-                                       $this->logger->warning(
-                                               __METHOD__ . ": Key \"$key\" changed in Session and deleted in \$_SESSION!"
-                                       );
-                               }
-                       }
-               }
-               \Wikimedia\PhpSessionSerializer::setLogger( $this->logger );
-
-               // Save and update cache if anything changed
-               if ( $changed ) {
-                       if ( $this->warn ) {
-                               wfDeprecated( '$_SESSION', '1.27' );
-                               $this->logger->warning( 'Something wrote to $_SESSION!' );
-                       }
-
-                       $session->save();
-                       $this->sessionFieldCache[$id] = iterator_to_array( $session );
-               }
-
-               $session->persist();
-
-               return true;
-       }
-
-       /**
-        * Destroy a session
-        * @private For internal use only
-        * @param string $id Session id
-        * @return bool Success
-        */
-       public function destroy( $id ) {
-               if ( self::$instance !== $this ) {
-                       throw new \UnexpectedValueException( __METHOD__ . ': Wrong instance called!' );
-               }
-               if ( !$this->enable ) {
-                       throw new \BadMethodCallException( 'Attempt to use PHP session management' );
-               }
-               $session = $this->manager->getSessionById( $id, false );
-               if ( $session ) {
-                       $session->clear();
-               }
-               return true;
-       }
-
-       /**
-        * Execute garbage collection.
-        * @private For internal use only
-        * @param int $maxlifetime Maximum session life time (ignored)
-        * @return bool Success
-        */
-       public function gc( $maxlifetime ) {
-               if ( self::$instance !== $this ) {
-                       throw new \UnexpectedValueException( __METHOD__ . ': Wrong instance called!' );
-               }
-               $before = date( 'YmdHis', time() );
-               $this->store->deleteObjectsExpiringBefore( $before );
-               return true;
-       }
-
-       /**
-        * Shutdown function.
-        *
-        * See the comment inside self::install for rationale.
-        * @codeCoverageIgnore
-        * @private For internal use only
-        */
-       public function handleShutdown() {
-               if ( $this->enable ) {
-                       session_write_close();
-               }
-       }
-
-}
diff --git a/includes/session/Session.php b/includes/session/Session.php
deleted file mode 100644 (file)
index 840baa7..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-<?php
-/**
- * MediaWiki session
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use User;
-use WebRequest;
-
-/**
- * Manages data for an an authenticated session
- *
- * A Session represents the fact that the current HTTP request is part of a
- * session. There are two broad types of Sessions, based on whether they
- * return true or false from self::canSetUser():
- * * When true (mutable), the Session identifies multiple requests as part of
- *   a session generically, with no tie to a particular user.
- * * When false (immutable), the Session identifies multiple requests as part
- *   of a session by identifying and authenticating the request itself as
- *   belonging to a particular user.
- *
- * The Session object also serves as a replacement for PHP's $_SESSION,
- * managing access to per-session data.
- *
- * @todo Once we drop support for PHP 5.3.3, implementing ArrayAccess would be nice.
- * @ingroup Session
- * @since 1.27
- */
-final class Session implements \Countable, \Iterator {
-       /** @var SessionBackend Session backend */
-       private $backend;
-
-       /** @var int Session index */
-       private $index;
-
-       /**
-        * @param SessionBackend $backend
-        * @param int $index
-        */
-       public function __construct( SessionBackend $backend, $index ) {
-               $this->backend = $backend;
-               $this->index = $index;
-       }
-
-       public function __destruct() {
-               $this->backend->deregisterSession( $this->index );
-       }
-
-       /**
-        * Returns the session ID
-        * @return string
-        */
-       public function getId() {
-               return $this->backend->getId();
-       }
-
-       /**
-        * Returns the SessionId object
-        * @private For internal use by WebRequest
-        * @return SessionId
-        */
-       public function getSessionId() {
-               return $this->backend->getSessionId();
-       }
-
-       /**
-        * Changes the session ID
-        * @return string New ID (might be the same as the old)
-        */
-       public function resetId() {
-               return $this->backend->resetId();
-       }
-
-       /**
-        * Fetch the SessionProvider for this session
-        * @return SessionProviderInterface
-        */
-       public function getProvider() {
-               return $this->backend->getProvider();
-       }
-
-       /**
-        * Indicate whether this session is persisted across requests
-        *
-        * For example, if cookies are set.
-        *
-        * @return bool
-        */
-       public function isPersistent() {
-               return $this->backend->isPersistent();
-       }
-
-       /**
-        * Make this session persisted across requests
-        *
-        * If the session is already persistent, equivalent to calling
-        * $this->renew().
-        */
-       public function persist() {
-               $this->backend->persist();
-       }
-
-       /**
-        * Indicate whether the user should be remembered independently of the
-        * session ID.
-        * @return bool
-        */
-       public function shouldRememberUser() {
-               return $this->backend->shouldRememberUser();
-       }
-
-       /**
-        * Set whether the user should be remembered independently of the session
-        * ID.
-        * @param bool $remember
-        */
-       public function setRememberUser( $remember ) {
-               $this->backend->setRememberUser( $remember );
-       }
-
-       /**
-        * Returns the request associated with this session
-        * @return WebRequest
-        */
-       public function getRequest() {
-               return $this->backend->getRequest( $this->index );
-       }
-
-       /**
-        * Returns the authenticated user for this session
-        * @return User
-        */
-       public function getUser() {
-               return $this->backend->getUser();
-       }
-
-       /**
-        * Fetch the rights allowed the user when this session is active.
-        * @return null|string[] Allowed user rights, or null to allow all.
-        */
-       public function getAllowedUserRights() {
-               return $this->backend->getAllowedUserRights();
-       }
-
-       /**
-        * Indicate whether the session user info can be changed
-        * @return bool
-        */
-       public function canSetUser() {
-               return $this->backend->canSetUser();
-       }
-
-       /**
-        * Set a new user for this session
-        * @note This should only be called when the user has been authenticated
-        * @param User $user User to set on the session.
-        *   This may become a "UserValue" in the future, or User may be refactored
-        *   into such.
-        */
-       public function setUser( $user ) {
-               $this->backend->setUser( $user );
-       }
-
-       /**
-        * Get a suggested username for the login form
-        * @return string|null
-        */
-       public function suggestLoginUsername() {
-               return $this->backend->suggestLoginUsername( $this->index );
-       }
-
-       /**
-        * Whether HTTPS should be forced
-        * @return bool
-        */
-       public function shouldForceHTTPS() {
-               return $this->backend->shouldForceHTTPS();
-       }
-
-       /**
-        * Set whether HTTPS should be forced
-        * @param bool $force
-        */
-       public function setForceHTTPS( $force ) {
-               $this->backend->setForceHTTPS( $force );
-       }
-
-       /**
-        * Fetch the "logged out" timestamp
-        * @return int
-        */
-       public function getLoggedOutTimestamp() {
-               return $this->backend->getLoggedOutTimestamp();
-       }
-
-       /**
-        * Set the "logged out" timestamp
-        * @param int $ts
-        */
-       public function setLoggedOutTimestamp( $ts ) {
-               $this->backend->setLoggedOutTimestamp( $ts );
-       }
-
-       /**
-        * Fetch provider metadata
-        * @protected For use by SessionProvider subclasses only
-        * @return mixed
-        */
-       public function getProviderMetadata() {
-               return $this->backend->getProviderMetadata();
-       }
-
-       /**
-        * Delete all session data and clear the user (if possible)
-        */
-       public function clear() {
-               $data = &$this->backend->getData();
-               if ( $data ) {
-                       $data = array();
-                       $this->backend->dirty();
-               }
-               if ( $this->backend->canSetUser() ) {
-                       $this->backend->setUser( new User );
-               }
-               $this->backend->save();
-       }
-
-       /**
-        * Renew the session
-        *
-        * Resets the TTL in the backend store if the session is near expiring, and
-        * re-persists the session to any active WebRequests if persistent.
-        */
-       public function renew() {
-               $this->backend->renew();
-       }
-
-       /**
-        * Fetch a copy of this session attached to an alternative WebRequest
-        *
-        * Actions on the copy will affect this session too, and vice versa.
-        *
-        * @param WebRequest $request Any existing session associated with this
-        *  WebRequest object will be overwritten.
-        * @return Session
-        */
-       public function sessionWithRequest( WebRequest $request ) {
-               $request->setSessionId( $this->backend->getSessionId() );
-               return $this->backend->getSession( $request );
-       }
-
-       /**
-        * Fetch a value from the session
-        * @param string|int $key
-        * @param mixed $default
-        * @return mixed
-        */
-       public function get( $key, $default = null ) {
-               $data = &$this->backend->getData();
-               return array_key_exists( $key, $data ) ? $data[$key] : $default;
-       }
-
-       /**
-        * Test if a value exists in the session
-        * @param string|int $key
-        * @return bool
-        */
-       public function exists( $key ) {
-               $data = &$this->backend->getData();
-               return array_key_exists( $key, $data );
-       }
-
-       /**
-        * Set a value in the session
-        * @param string|int $key
-        * @param mixed $value
-        */
-       public function set( $key, $value ) {
-               $data = &$this->backend->getData();
-               if ( !array_key_exists( $key, $data ) || $data[$key] !== $value ) {
-                       $data[$key] = $value;
-                       $this->backend->dirty();
-               }
-       }
-
-       /**
-        * Remove a value from the session
-        * @param string|int $key
-        */
-       public function remove( $key ) {
-               $data = &$this->backend->getData();
-               if ( array_key_exists( $key, $data ) ) {
-                       unset( $data[$key] );
-                       $this->backend->dirty();
-               }
-       }
-
-       /**
-        * Delay automatic saving while multiple updates are being made
-        *
-        * Calls to save() or clear() will not be delayed.
-        *
-        * @return \ScopedCallback When this goes out of scope, a save will be triggered
-        */
-       public function delaySave() {
-               return $this->backend->delaySave();
-       }
-
-       /**
-        * Save the session
-        */
-       public function save() {
-               $this->backend->save();
-       }
-
-       /**
-        * @name Interface methods
-        * @{
-        */
-
-       public function count() {
-               $data = &$this->backend->getData();
-               return count( $data );
-       }
-
-       public function current() {
-               $data = &$this->backend->getData();
-               return current( $data );
-       }
-
-       public function key() {
-               $data = &$this->backend->getData();
-               return key( $data );
-       }
-
-       public function next() {
-               $data = &$this->backend->getData();
-               next( $data );
-       }
-
-       public function rewind() {
-               $data = &$this->backend->getData();
-               reset( $data );
-       }
-
-       public function valid() {
-               $data = &$this->backend->getData();
-               return key( $data ) !== null;
-       }
-
-       /**@}*/
-
-}
diff --git a/includes/session/SessionBackend.php b/includes/session/SessionBackend.php
deleted file mode 100644 (file)
index 95c6f0c..0000000
+++ /dev/null
@@ -1,652 +0,0 @@
-<?php
-/**
- * MediaWiki session backend
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use BagOStuff;
-use Psr\Log\LoggerInterface;
-use User;
-use WebRequest;
-
-/**
- * This is the actual workhorse for Session.
- *
- * Most code does not need to use this class, you want \\MediaWiki\\Session\\Session.
- * The exceptions are SessionProviders and SessionMetadata hook functions,
- * which get an instance of this class rather than Session.
- *
- * The reasons for this split are:
- * 1. A session can be attached to multiple requests, but we want the Session
- *    object to have some features that correspond to just one of those
- *    requests.
- * 2. We want reasonable garbage collection behavior, but we also want the
- *    SessionManager to hold a reference to every active session so it can be
- *    saved when the request ends.
- *
- * @ingroup Session
- * @since 1.27
- */
-final class SessionBackend {
-       /** @var SessionId */
-       private $id;
-
-       private $persist = false;
-       private $remember = false;
-       private $forceHTTPS = false;
-
-       /** @var array|null */
-       private $data = null;
-
-       private $forcePersist = false;
-       private $metaDirty = false;
-       private $dataDirty = false;
-
-       /** @var string Used to detect subarray modifications */
-       private $dataHash = null;
-
-       /** @var BagOStuff */
-       private $store;
-
-       /** @var LoggerInterface */
-       private $logger;
-
-       /** @var int */
-       private $lifetime;
-
-       /** @var User */
-       private $user;
-
-       private $curIndex = 0;
-
-       /** @var WebRequest[] Session requests */
-       private $requests = array();
-
-       /** @var SessionProvider provider */
-       private $provider;
-
-       /** @var array|null provider-specified metadata */
-       private $providerMetadata = null;
-
-       private $expires = 0;
-       private $loggedOut = 0;
-       private $delaySave = 0;
-
-       private $usePhpSessionHandling = true;
-       private $checkPHPSessionRecursionGuard = false;
-
-       /**
-        * @param SessionId $id Session ID object
-        * @param SessionInfo $info Session info to populate from
-        * @param BagOStuff $store Backend data store
-        * @param LoggerInterface $logger
-        * @param int $lifetime Session data lifetime in seconds
-        */
-       public function __construct(
-               SessionId $id, SessionInfo $info, BagOStuff $store, LoggerInterface $logger, $lifetime
-       ) {
-               $phpSessionHandling = \RequestContext::getMain()->getConfig()->get( 'PHPSessionHandling' );
-               $this->usePhpSessionHandling = $phpSessionHandling !== 'disable';
-
-               if ( $info->getUserInfo() && !$info->getUserInfo()->isVerified() ) {
-                       throw new \InvalidArgumentException(
-                               "Refusing to create session for unverified user {$info->getUserInfo()}"
-                       );
-               }
-               if ( $info->getProvider() === null ) {
-                       throw new \InvalidArgumentException( 'Cannot create session without a provider' );
-               }
-               if ( $info->getId() !== $id->getId() ) {
-                       throw new \InvalidArgumentException( 'SessionId and SessionInfo don\'t match' );
-               }
-
-               $this->id = $id;
-               $this->user = $info->getUserInfo() ? $info->getUserInfo()->getUser() : new User;
-               $this->store = $store;
-               $this->logger = $logger;
-               $this->lifetime = $lifetime;
-               $this->provider = $info->getProvider();
-               $this->persist = $info->wasPersisted();
-               $this->remember = $info->wasRemembered();
-               $this->forceHTTPS = $info->forceHTTPS();
-               $this->providerMetadata = $info->getProviderMetadata();
-
-               $blob = $store->get( wfMemcKey( 'MWSession', (string)$this->id ) );
-               if ( !is_array( $blob ) ||
-                       !isset( $blob['metadata'] ) || !is_array( $blob['metadata'] ) ||
-                       !isset( $blob['data'] ) || !is_array( $blob['data'] )
-               ) {
-                       $this->data = array();
-                       $this->dataDirty = true;
-                       $this->metaDirty = true;
-                       $this->logger->debug( "SessionBackend $this->id is unsaved, marking dirty in constructor" );
-               } else {
-                       $this->data = $blob['data'];
-                       if ( isset( $blob['metadata']['loggedOut'] ) ) {
-                               $this->loggedOut = (int)$blob['metadata']['loggedOut'];
-                       }
-                       if ( isset( $blob['metadata']['expires'] ) ) {
-                               $this->expires = (int)$blob['metadata']['expires'];
-                       } else {
-                               $this->metaDirty = true;
-                               $this->logger->debug(
-                                       "SessionBackend $this->id metadata dirty due to missing expiration timestamp"
-                               );
-                       }
-               }
-               $this->dataHash = md5( serialize( $this->data ) );
-       }
-
-       /**
-        * Return a new Session for this backend
-        * @param WebRequest $request
-        * @return Session
-        */
-       public function getSession( WebRequest $request ) {
-               $index = ++$this->curIndex;
-               $this->requests[$index] = $request;
-               $session = new Session( $this, $index );
-               return $session;
-       }
-
-       /**
-        * Deregister a Session
-        * @private For use by \\MediaWiki\\Session\\Session::__destruct() only
-        * @param int $index
-        */
-       public function deregisterSession( $index ) {
-               unset( $this->requests[$index] );
-               if ( !count( $this->requests ) ) {
-                       $this->save( true );
-                       $this->provider->getManager()->deregisterSessionBackend( $this );
-               }
-       }
-
-       /**
-        * Returns the session ID.
-        * @return string
-        */
-       public function getId() {
-               return (string)$this->id;
-       }
-
-       /**
-        * Fetch the SessionId object
-        * @private For internal use by WebRequest
-        * @return SessionId
-        */
-       public function getSessionId() {
-               return $this->id;
-       }
-
-       /**
-        * Changes the session ID
-        * @return string New ID (might be the same as the old)
-        */
-       public function resetId() {
-               if ( $this->provider->persistsSessionId() ) {
-                       $oldId = (string)$this->id;
-                       $restart = $this->usePhpSessionHandling && $oldId === session_id() &&
-                               PHPSessionHandler::isEnabled();
-
-                       if ( $restart ) {
-                               // If this session is the one behind PHP's $_SESSION, we need
-                               // to close then reopen it.
-                               session_write_close();
-                       }
-
-                       $this->provider->getManager()->changeBackendId( $this );
-                       $this->provider->sessionIdWasReset( $this, $oldId );
-                       $this->metaDirty = true;
-                       $this->logger->debug(
-                               "SessionBackend $this->id metadata dirty due to ID reset (formerly $oldId)"
-                       );
-
-                       if ( $restart ) {
-                               session_id( (string)$this->id );
-                               \MediaWiki\quietCall( 'session_start' );
-                       }
-
-                       $this->autosave();
-
-                       // Delete the data for the old session ID now
-                       $this->store->delete( wfMemcKey( 'MWSession', $oldId ) );
-               }
-       }
-
-       /**
-        * Fetch the SessionProvider for this session
-        * @return SessionProviderInterface
-        */
-       public function getProvider() {
-               return $this->provider;
-       }
-
-       /**
-        * Indicate whether this session is persisted across requests
-        *
-        * For example, if cookies are set.
-        *
-        * @return bool
-        */
-       public function isPersistent() {
-               return $this->persist;
-       }
-
-       /**
-        * Make this session persisted across requests
-        *
-        * If the session is already persistent, equivalent to calling
-        * $this->renew().
-        */
-       public function persist() {
-               if ( !$this->persist ) {
-                       $this->persist = true;
-                       $this->forcePersist = true;
-                       $this->logger->debug( "SessionBackend $this->id force-persist due to persist()" );
-                       $this->autosave();
-               } else {
-                       $this->renew();
-               }
-       }
-
-       /**
-        * Indicate whether the user should be remembered independently of the
-        * session ID.
-        * @return bool
-        */
-       public function shouldRememberUser() {
-               return $this->remember;
-       }
-
-       /**
-        * Set whether the user should be remembered independently of the session
-        * ID.
-        * @param bool $remember
-        */
-       public function setRememberUser( $remember ) {
-               if ( $this->remember !== (bool)$remember ) {
-                       $this->remember = (bool)$remember;
-                       $this->metaDirty = true;
-                       $this->logger->debug( "SessionBackend $this->id metadata dirty due to remember-user change" );
-                       $this->autosave();
-               }
-       }
-
-       /**
-        * Returns the request associated with a Session
-        * @param int $index Session index
-        * @return WebRequest
-        */
-       public function getRequest( $index ) {
-               if ( !isset( $this->requests[$index] ) ) {
-                       throw new \InvalidArgumentException( 'Invalid session index' );
-               }
-               return $this->requests[$index];
-       }
-
-       /**
-        * Returns the authenticated user for this session
-        * @return User
-        */
-       public function getUser() {
-               return $this->user;
-       }
-
-       /**
-        * Fetch the rights allowed the user when this session is active.
-        * @return null|string[] Allowed user rights, or null to allow all.
-        */
-       public function getAllowedUserRights() {
-               return $this->provider->getAllowedUserRights( $this );
-       }
-
-       /**
-        * Indicate whether the session user info can be changed
-        * @return bool
-        */
-       public function canSetUser() {
-               return $this->provider->canChangeUser();
-       }
-
-       /**
-        * Set a new user for this session
-        * @note This should only be called when the user has been authenticated via a login process
-        * @param User $user User to set on the session.
-        *   This may become a "UserValue" in the future, or User may be refactored
-        *   into such.
-        */
-       public function setUser( $user ) {
-               if ( !$this->canSetUser() ) {
-                       throw new \BadMethodCallException(
-                               'Cannot set user on this session; check $session->canSetUser() first'
-                       );
-               }
-
-               $this->user = $user;
-               $this->metaDirty = true;
-               $this->logger->debug( "SessionBackend $this->id metadata dirty due to user change" );
-               $this->autosave();
-       }
-
-       /**
-        * Get a suggested username for the login form
-        * @param int $index Session index
-        * @return string|null
-        */
-       public function suggestLoginUsername( $index ) {
-               if ( !isset( $this->requests[$index] ) ) {
-                       throw new \InvalidArgumentException( 'Invalid session index' );
-               }
-               return $this->provider->suggestLoginUsername( $this->requests[$index] );
-       }
-
-       /**
-        * Whether HTTPS should be forced
-        * @return bool
-        */
-       public function shouldForceHTTPS() {
-               return $this->forceHTTPS;
-       }
-
-       /**
-        * Set whether HTTPS should be forced
-        * @param bool $force
-        */
-       public function setForceHTTPS( $force ) {
-               if ( $this->forceHTTPS !== (bool)$force ) {
-                       $this->forceHTTPS = (bool)$force;
-                       $this->metaDirty = true;
-                       $this->logger->debug( "SessionBackend $this->id metadata dirty due to force-HTTPS change" );
-                       $this->autosave();
-               }
-       }
-
-       /**
-        * Fetch the "logged out" timestamp
-        * @return int
-        */
-       public function getLoggedOutTimestamp() {
-               return $this->loggedOut;
-       }
-
-       /**
-        * Set the "logged out" timestamp
-        * @param int $ts
-        */
-       public function setLoggedOutTimestamp( $ts = null ) {
-               $ts = (int)$ts;
-               if ( $this->loggedOut !== $ts ) {
-                       $this->loggedOut = $ts;
-                       $this->metaDirty = true;
-                       $this->logger->debug(
-                               "SessionBackend $this->id metadata dirty due to logged-out-timestamp change"
-                       );
-                       $this->autosave();
-               }
-       }
-
-       /**
-        * Fetch provider metadata
-        * @protected For use by SessionProvider subclasses only
-        * @return array|null
-        */
-       public function getProviderMetadata() {
-               return $this->providerMetadata;
-       }
-
-       /**
-        * Set provider metadata
-        * @protected For use by SessionProvider subclasses only
-        * @param array|null $metadata
-        */
-       public function setProviderMetadata( $metadata ) {
-               if ( $metadata !== null && !is_array( $metadata ) ) {
-                       throw new \InvalidArgumentException( '$metadata must be an array or null' );
-               }
-               if ( $this->providerMetadata !== $metadata ) {
-                       $this->providerMetadata = $metadata;
-                       $this->metaDirty = true;
-                       $this->logger->debug(
-                               "SessionBackend $this->id metadata dirty due to provider metadata change"
-                       );
-                       $this->autosave();
-               }
-       }
-
-       /**
-        * Fetch the session data array
-        *
-        * Note the caller is responsible for calling $this->dirty() if anything in
-        * the array is changed.
-        *
-        * @private For use by \\MediaWiki\\Session\\Session only.
-        * @return array
-        */
-       public function &getData() {
-               return $this->data;
-       }
-
-       /**
-        * Add data to the session.
-        *
-        * Overwrites any existing data under the same keys.
-        *
-        * @param array $newData Key-value pairs to add to the session
-        */
-       public function addData( array $newData ) {
-               $data = &$this->getData();
-               foreach ( $newData as $key => $value ) {
-                       if ( !array_key_exists( $key, $data ) || $data[$key] !== $value ) {
-                               $data[$key] = $value;
-                               $this->dataDirty = true;
-                               $this->logger->debug(
-                                       "SessionBackend $this->id data dirty due to addData(): " . wfGetAllCallers( 5 )
-                               );
-                       }
-               }
-       }
-
-       /**
-        * Mark data as dirty
-        * @private For use by \\MediaWiki\\Session\\Session only.
-        */
-       public function dirty() {
-               $this->dataDirty = true;
-               $this->logger->debug(
-                       "SessionBackend $this->id data dirty due to dirty(): " . wfGetAllCallers( 5 )
-               );
-       }
-
-       /**
-        * Renew the session by resaving everything
-        *
-        * Resets the TTL in the backend store if the session is near expiring, and
-        * re-persists the session to any active WebRequests if persistent.
-        */
-       public function renew() {
-               if ( time() + $this->lifetime / 2 > $this->expires ) {
-                       $this->metaDirty = true;
-                       $this->logger->debug(
-                               "SessionBackend $this->id metadata dirty for renew(): " . wfGetAllCallers( 5 )
-                       );
-                       if ( $this->persist ) {
-                               $this->forcePersist = true;
-                               $this->logger->debug(
-                                       "SessionBackend $this->id force-persist for renew(): " . wfGetAllCallers( 5 )
-                               );
-                       }
-               }
-               $this->autosave();
-       }
-
-       /**
-        * Delay automatic saving while multiple updates are being made
-        *
-        * Calls to save() will not be delayed.
-        *
-        * @return \ScopedCallback When this goes out of scope, a save will be triggered
-        */
-       public function delaySave() {
-               $that = $this;
-               $this->delaySave++;
-               $ref = &$this->delaySave;
-               return new \ScopedCallback( function () use ( $that, &$ref ) {
-                       if ( --$ref <= 0 ) {
-                               $ref = 0;
-                               $that->save();
-                       }
-               } );
-       }
-
-       /**
-        * Save and persist session data, unless delayed
-        */
-       private function autosave() {
-               if ( $this->delaySave <= 0 ) {
-                       $this->save();
-               }
-       }
-
-       /**
-        * Save and persist session data
-        * @param bool $closing Whether the session is being closed
-        */
-       public function save( $closing = false ) {
-               if ( $this->provider->getManager()->isUserSessionPrevented( $this->user->getName() ) ) {
-                       $this->logger->debug(
-                               "SessionBackend $this->id not saving, " .
-                                       "user {$this->user} was passed to SessionManager::preventSessionsForUser"
-                       );
-                       return;
-               }
-
-               // Ensure the user has a token
-               // @codeCoverageIgnoreStart
-               $anon = $this->user->isAnon();
-               if ( !$anon && !$this->user->getToken() ) {
-                       $this->logger->debug(
-                               "SessionBackend $this->id creating token for user {$this->user} on save"
-                       );
-                       $this->user->setToken();
-                       if ( !wfReadOnly() ) {
-                               $this->user->saveSettings();
-                       }
-                       $this->metaDirty = true;
-               }
-               // @codeCoverageIgnoreEnd
-
-               if ( !$this->metaDirty && !$this->dataDirty &&
-                       $this->dataHash !== md5( serialize( $this->data ) )
-               ) {
-                       $this->logger->debug( "SessionBackend $this->id data dirty due to hash mismatch, " .
-                               "$this->dataHash !== " . md5( serialize( $this->data ) ) );
-                       $this->dataDirty = true;
-               }
-
-               if ( !$this->metaDirty && !$this->dataDirty && !$this->forcePersist ) {
-                       return;
-               }
-
-               $this->logger->debug( "SessionBackend $this->id save: " .
-                       'dataDirty=' . (int)$this->dataDirty . ' ' .
-                       'metaDirty=' . (int)$this->metaDirty . ' ' .
-                       'forcePersist=' . (int)$this->forcePersist
-               );
-
-               // Persist to the provider, if flagged
-               if ( $this->persist && ( $this->metaDirty || $this->forcePersist ) ) {
-                       foreach ( $this->requests as $request ) {
-                               $request->setSessionId( $this->getSessionId() );
-                               $this->provider->persistSession( $this, $request );
-                       }
-                       if ( !$closing ) {
-                               $this->checkPHPSession();
-                       }
-               }
-
-               $this->forcePersist = false;
-
-               if ( !$this->metaDirty && !$this->dataDirty ) {
-                       return;
-               }
-
-               // Save session data to store, if necessary
-               $metadata = $origMetadata = array(
-                       'provider' => (string)$this->provider,
-                       'providerMetadata' => $this->providerMetadata,
-                       'userId' => $anon ? 0 : $this->user->getId(),
-                       'userName' => $anon ? null : $this->user->getName(),
-                       'userToken' => $anon ? null : $this->user->getToken(),
-                       'remember' => !$anon && $this->remember,
-                       'forceHTTPS' => $this->forceHTTPS,
-                       'expires' => time() + $this->lifetime,
-                       'loggedOut' => $this->loggedOut,
-               );
-
-               \Hooks::run( 'SessionMetadata', array( $this, &$metadata, $this->requests ) );
-
-               foreach ( $origMetadata as $k => $v ) {
-                       if ( $metadata[$k] !== $v ) {
-                               throw new \UnexpectedValueException( "SessionMetadata hook changed metadata key \"$k\"" );
-                       }
-               }
-
-               $this->store->set(
-                       wfMemcKey( 'MWSession', (string)$this->id ),
-                       array(
-                               'data' => $this->data,
-                               'metadata' => $metadata,
-                       ),
-                       $metadata['expires']
-               );
-
-               $this->metaDirty = false;
-               $this->dataDirty = false;
-               $this->dataHash = md5( serialize( $this->data ) );
-               $this->expires = $metadata['expires'];
-       }
-
-       /**
-        * For backwards compatibility, open the PHP session when the global
-        * session is persisted
-        */
-       private function checkPHPSession() {
-               if ( !$this->checkPHPSessionRecursionGuard ) {
-                       $this->checkPHPSessionRecursionGuard = true;
-                       $ref = &$this->checkPHPSessionRecursionGuard;
-                       $reset = new \ScopedCallback( function () use ( &$ref ) {
-                               $ref = false;
-                       } );
-
-                       if ( $this->usePhpSessionHandling && session_id() === '' && PHPSessionHandler::isEnabled() &&
-                               SessionManager::getGlobalSession()->getId() === (string)$this->id
-                       ) {
-                               $this->logger->debug( "SessionBackend $this->id: Taking over PHP session" );
-                               session_id( (string)$this->id );
-                               \MediaWiki\quietCall( 'session_cache_limiter', 'private, must-revalidate' );
-                               \MediaWiki\quietCall( 'session_start' );
-                       }
-               }
-       }
-
-}
diff --git a/includes/session/SessionId.php b/includes/session/SessionId.php
deleted file mode 100644 (file)
index 0669100..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/**
- * MediaWiki session ID holder
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-/**
- * Value object holding the session ID in a manner that can be globally
- * updated.
- *
- * This class exists because we want WebRequest to refer to the session, but it
- * can't hold the Session itself due to issues with circular references and it
- * can't just hold the ID as a string because we need to be able to update the
- * ID when SessionBackend::resetId() is called.
- *
- * @ingroup Session
- * @since 1.27
- */
-final class SessionId {
-       /** @var string */
-       private $id;
-
-       /**
-        * @param string $id
-        */
-       public function __construct( $id ) {
-               $this->id = $id;
-       }
-
-       /**
-        * Get the ID
-        * @return string
-        */
-       public function getId() {
-               return $this->id;
-       }
-
-       /**
-        * Set the ID
-        * @private For use by \\MediaWiki\\Session\\SessionManager only
-        * @param string $id
-        */
-       public function setId( $id ) {
-               $this->id = $id;
-       }
-
-       public function __toString() {
-               return $this->id;
-       }
-
-}
diff --git a/includes/session/SessionInfo.php b/includes/session/SessionInfo.php
deleted file mode 100644 (file)
index 9fe2cdf..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-<?php
-/**
- * MediaWiki session info
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use Psr\Log\LoggerInterface;
-use BagOStuff;
-use WebRequest;
-
-/**
- * Value object returned by SessionProvider
- *
- * This holds the data necessary to construct a Session.
- *
- * @ingroup Session
- * @since 1.27
- */
-class SessionInfo {
-       /** Minimum allowed priority */
-       const MIN_PRIORITY = 1;
-
-       /** Maximum allowed priority */
-       const MAX_PRIORITY = 100;
-
-       /** @var SessionProvider|null */
-       private $provider;
-
-       /** @var string */
-       private $id;
-
-       /** @var int */
-       private $priority;
-
-       /** @var UserInfo|null */
-       private $userInfo = null;
-
-       private $persisted = false;
-       private $remembered = false;
-       private $forceHTTPS = false;
-       private $idIsSafe = false;
-
-       /** @var array|null */
-       private $providerMetadata = null;
-
-       /**
-        * @param int $priority Session priority
-        * @param array $data
-        *  - provider: (SessionProvider|null) If not given, the provider will be
-        *    determined from the saved session data.
-        *  - id: (string|null) Session ID
-        *  - userInfo: (UserInfo|null) User known from the request. If
-        *    $provider->canChangeUser() is false, a verified user
-        *    must be provided.
-        *  - persisted: (bool) Whether this session was persisted
-        *  - remembered: (bool) Whether the verified user was remembered.
-        *    Defaults to true.
-        *  - forceHTTPS: (bool) Whether to force HTTPS for this session
-        *  - metadata: (array) Provider metadata, to be returned by
-        *    Session::getProviderMetadata().
-        *  - idIsSafe: (bool) Set true if the 'id' did not come from the user.
-        *    Generally you'll use this from SessionProvider::newEmptySession(),
-        *    and not from any other method.
-        *  - copyFrom: (SessionInfo) SessionInfo to copy other data items from.
-        */
-       public function __construct( $priority, array $data ) {
-               if ( $priority < self::MIN_PRIORITY || $priority > self::MAX_PRIORITY ) {
-                       throw new \InvalidArgumentException( 'Invalid priority' );
-               }
-
-               if ( isset( $data['copyFrom'] ) ) {
-                       $from = $data['copyFrom'];
-                       if ( !$from instanceof SessionInfo ) {
-                               throw new \InvalidArgumentException( 'Invalid copyFrom' );
-                       }
-                       $data += array(
-                               'provider' => $from->provider,
-                               'id' => $from->id,
-                               'userInfo' => $from->userInfo,
-                               'persisted' => $from->persisted,
-                               'remembered' => $from->remembered,
-                               'forceHTTPS' => $from->forceHTTPS,
-                               'metadata' => $from->providerMetadata,
-                               'idIsSafe' => $from->idIsSafe,
-                               // @codeCoverageIgnoreStart
-                       );
-                       // @codeCoverageIgnoreEnd
-               } else {
-                       $data += array(
-                               'provider' => null,
-                               'id' => null,
-                               'userInfo' => null,
-                               'persisted' => false,
-                               'remembered' => true,
-                               'forceHTTPS' => false,
-                               'metadata' => null,
-                               'idIsSafe' => false,
-                               // @codeCoverageIgnoreStart
-                       );
-                       // @codeCoverageIgnoreEnd
-               }
-
-               if ( $data['id'] !== null && !SessionManager::validateSessionId( $data['id'] ) ) {
-                       throw new \InvalidArgumentException( 'Invalid session ID' );
-               }
-
-               if ( $data['userInfo'] !== null && !$data['userInfo'] instanceof UserInfo ) {
-                       throw new \InvalidArgumentException( 'Invalid userInfo' );
-               }
-
-               if ( !$data['provider'] && $data['id'] === null ) {
-                       throw new \InvalidArgumentException(
-                               'Must supply an ID when no provider is given'
-                       );
-               }
-
-               if ( $data['metadata'] !== null && !is_array( $data['metadata'] ) ) {
-                       throw new \InvalidArgumentException( 'Invalid metadata' );
-               }
-
-               $this->provider = $data['provider'];
-               if ( $data['id'] !== null ) {
-                       $this->id = $data['id'];
-                       $this->idIsSafe = $data['idIsSafe'];
-               } else {
-                       $this->id = $this->provider->getManager()->generateSessionId();
-                       $this->idIsSafe = true;
-               }
-               $this->priority = (int)$priority;
-               $this->userInfo = $data['userInfo'];
-               $this->persisted = (bool)$data['persisted'];
-               if ( $data['provider'] !== null ) {
-                       if ( $this->userInfo !== null && !$this->userInfo->isAnon() && $this->userInfo->isVerified() ) {
-                               $this->remembered = (bool)$data['remembered'];
-                       }
-                       $this->providerMetadata = $data['metadata'];
-               }
-               $this->forceHTTPS = (bool)$data['forceHTTPS'];
-       }
-
-       /**
-        * Return the provider
-        * @return SessionProvider|null
-        */
-       final public function getProvider() {
-               return $this->provider;
-       }
-
-       /**
-        * Return the session ID
-        * @return string
-        */
-       final public function getId() {
-               return $this->id;
-       }
-
-       /**
-        * Indicate whether the ID is "safe"
-        *
-        * The ID is safe in the following cases:
-        * - The ID was randomly generated by the constructor.
-        * - The ID was found in the backend data store.
-        * - $this->getProvider()->persistsSessionId() is false.
-        * - The constructor was explicitly told it's safe using the 'idIsSafe'
-        *   parameter.
-        *
-        * @return bool
-        */
-       final public function isIdSafe() {
-               return $this->idIsSafe;
-       }
-
-       /**
-        * Return the priority
-        * @return int
-        */
-       final public function getPriority() {
-               return $this->priority;
-       }
-
-       /**
-        * Return the user
-        * @return UserInfo|null
-        */
-       final public function getUserInfo() {
-               return $this->userInfo;
-       }
-
-       /**
-        * Return whether the session is persisted
-        *
-        * i.e. a session ID was given to the constuctor
-        *
-        * @return bool
-        */
-       final public function wasPersisted() {
-               return $this->persisted;
-       }
-
-       /**
-        * Return provider metadata
-        * @return array|null
-        */
-       final public function getProviderMetadata() {
-               return $this->providerMetadata;
-       }
-
-       /**
-        * Return whether the user was remembered
-        *
-        * For providers that can persist the user separately from the session,
-        * the human using it may not actually *want* that to be done. For example,
-        * a cookie-based provider can set cookies that are longer-lived than the
-        * backend session data, but on a public terminal the human likely doesn't
-        * want those cookies set.
-        *
-        * This is false unless a non-anonymous verified user was passed to
-        * the SessionInfo constructor by the provider, and the provider didn't
-        * pass false for the 'remembered' data item.
-        *
-        * @return bool
-        */
-       final public function wasRemembered() {
-               return $this->remembered;
-       }
-
-       /**
-        * Whether this session should only be used over HTTPS
-        * @return bool
-        */
-       final public function forceHTTPS() {
-               return $this->forceHTTPS;
-       }
-
-       public function __toString() {
-               return '[' . $this->getPriority() . ']' .
-                       ( $this->getProvider() ?: 'null' ) .
-                       ( $this->userInfo ?: '<null>' ) . $this->getId();
-       }
-
-       /**
-        * Compare two SessionInfo objects by priority
-        * @param SessionInfo $a
-        * @param SessionInfo $b
-        * @return int Negative if $a < $b, positive if $a > $b, zero if equal
-        */
-       public static function compare( $a, $b ) {
-               return $a->getPriority() - $b->getPriority();
-       }
-
-}
diff --git a/includes/session/SessionManager.php b/includes/session/SessionManager.php
deleted file mode 100644 (file)
index ecc4e54..0000000
+++ /dev/null
@@ -1,999 +0,0 @@
-<?php
-/**
- * MediaWiki\Session entry point
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use Psr\Log\LoggerInterface;
-use BagOStuff;
-use Config;
-use FauxRequest;
-use Language;
-use Message;
-use User;
-use WebRequest;
-
-/**
- * This serves as the entry point to the MediaWiki session handling system.
- *
- * @ingroup Session
- * @since 1.27
- */
-final class SessionManager implements SessionManagerInterface {
-       /** @var SessionManager|null */
-       private static $instance = null;
-
-       /** @var Session|null */
-       private static $globalSession = null;
-
-       /** @var WebRequest|null */
-       private static $globalSessionRequest = null;
-
-       /** @var LoggerInterface */
-       private $logger;
-
-       /** @var Config */
-       private $config;
-
-       /** @var BagOStuff|null */
-       private $store;
-
-       /** @var SessionProvider[] */
-       private $sessionProviders = null;
-
-       /** @var string[] */
-       private $varyCookies = null;
-
-       /** @var array */
-       private $varyHeaders = null;
-
-       /** @var SessionBackend[] */
-       private $allSessionBackends = array();
-
-       /** @var SessionId[] */
-       private $allSessionIds = array();
-
-       /** @var string[] */
-       private $preventUsers = array();
-
-       /**
-        * Get the global SessionManager
-        * @return SessionManagerInterface
-        *  (really a SessionManager, but this is to make IDEs less confused)
-        */
-       public static function singleton() {
-               if ( self::$instance === null ) {
-                       self::$instance = new self();
-               }
-               return self::$instance;
-       }
-
-       /**
-        * Get the "global" session
-        *
-        * If PHP's session_id() has been set, returns that session. Otherwise
-        * returns the session for RequestContext::getMain()->getRequest().
-        *
-        * @return Session
-        */
-       public static function getGlobalSession() {
-               if ( !PHPSessionHandler::isEnabled() ) {
-                       $id = '';
-               } else {
-                       $id = session_id();
-               }
-
-               $request = \RequestContext::getMain()->getRequest();
-               if (
-                       !self::$globalSession // No global session is set up yet
-                       || self::$globalSessionRequest !== $request // The global WebRequest changed
-                       || $id !== '' && self::$globalSession->getId() !== $id // Someone messed with session_id()
-               ) {
-                       self::$globalSessionRequest = $request;
-                       if ( $id === '' ) {
-                               // session_id() wasn't used, so fetch the Session from the WebRequest.
-                               // We use $request->getSession() instead of $singleton->getSessionForRequest()
-                               // because doing the latter would require a public
-                               // "$request->getSessionId()" method that would confuse end
-                               // users by returning SessionId|null where they'd expect it to
-                               // be short for $request->getSession()->getId(), and would
-                               // wind up being a duplicate of the code in
-                               // $request->getSession() anyway.
-                               self::$globalSession = $request->getSession();
-                       } else {
-                               // Someone used session_id(), so we need to follow suit.
-                               // Note this overwrites whatever session might already be
-                               // associated with $request with the one for $id.
-                               self::$globalSession = self::singleton()->getSessionById( $id, true, $request )
-                                       ?: $request->getSession();
-                       }
-               }
-               return self::$globalSession;
-       }
-
-       /**
-        * @param array $options
-        *  - config: Config to fetch configuration from. Defaults to the default 'main' config.
-        *  - logger: LoggerInterface to use for logging. Defaults to the 'session' channel.
-        *  - store: BagOStuff to store session data in.
-        */
-       public function __construct( $options = array() ) {
-               if ( isset( $options['config'] ) ) {
-                       $this->config = $options['config'];
-                       if ( !$this->config instanceof Config ) {
-                               throw new \InvalidArgumentException(
-                                       '$options[\'config\'] must be an instance of Config'
-                               );
-                       }
-               } else {
-                       $this->config = \ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
-               }
-
-               if ( isset( $options['logger'] ) ) {
-                       if ( !$options['logger'] instanceof LoggerInterface ) {
-                               throw new \InvalidArgumentException(
-                                       '$options[\'logger\'] must be an instance of LoggerInterface'
-                               );
-                       }
-                       $this->setLogger( $options['logger'] );
-               } else {
-                       $this->setLogger( \MediaWiki\Logger\LoggerFactory::getInstance( 'session' ) );
-               }
-
-               if ( isset( $options['store'] ) ) {
-                       if ( !$options['store'] instanceof BagOStuff ) {
-                               throw new \InvalidArgumentException(
-                                       '$options[\'store\'] must be an instance of BagOStuff'
-                               );
-                       }
-                       $this->store = $options['store'];
-               } else {
-                       $this->store = \ObjectCache::getInstance( $this->config->get( 'SessionCacheType' ) );
-                       $this->store->setLogger( $this->logger );
-               }
-
-               register_shutdown_function( array( $this, 'shutdown' ) );
-       }
-
-       public function setLogger( LoggerInterface $logger ) {
-               $this->logger = $logger;
-       }
-
-       public function getSessionForRequest( WebRequest $request ) {
-               $info = $this->getSessionInfoForRequest( $request );
-
-               if ( !$info ) {
-                       $session = $this->getEmptySession( $request );
-               } else {
-                       $session = $this->getSessionFromInfo( $info, $request );
-               }
-               return $session;
-       }
-
-       public function getSessionById( $id, $create = false, WebRequest $request = null ) {
-               if ( !self::validateSessionId( $id ) ) {
-                       throw new \InvalidArgumentException( 'Invalid session ID' );
-               }
-               if ( !$request ) {
-                       $request = new FauxRequest;
-               }
-
-               $session = null;
-
-               // Test this here to provide a better log message for the common case
-               // of "no such ID"
-               $key = wfMemcKey( 'MWSession', $id );
-               if ( is_array( $this->store->get( $key ) ) ) {
-                       $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array( 'id' => $id, 'idIsSafe' => true ) );
-                       if ( $this->loadSessionInfoFromStore( $info, $request ) ) {
-                               $session = $this->getSessionFromInfo( $info, $request );
-                       }
-               }
-
-               if ( $create && $session === null ) {
-                       $ex = null;
-                       try {
-                               $session = $this->getEmptySessionInternal( $request, $id );
-                       } catch ( \Exception $ex ) {
-                               $this->logger->error( __METHOD__ . ': failed to create empty session: ' .
-                                       $ex->getMessage() );
-                               $session = null;
-                       }
-               }
-
-               return $session;
-       }
-
-       public function getEmptySession( WebRequest $request = null ) {
-               return $this->getEmptySessionInternal( $request );
-       }
-
-       /**
-        * @see SessionManagerInterface::getEmptySession
-        * @param WebRequest|null $request
-        * @param string|null $id ID to force on the new session
-        * @return Session
-        */
-       private function getEmptySessionInternal( WebRequest $request = null, $id = null ) {
-               if ( $id !== null ) {
-                       if ( !self::validateSessionId( $id ) ) {
-                               throw new \InvalidArgumentException( 'Invalid session ID' );
-                       }
-
-                       $key = wfMemcKey( 'MWSession', $id );
-                       if ( is_array( $this->store->get( $key ) ) ) {
-                               throw new \InvalidArgumentException( 'Session ID already exists' );
-                       }
-               }
-               if ( !$request ) {
-                       $request = new FauxRequest;
-               }
-
-               $infos = array();
-               foreach ( $this->getProviders() as $provider ) {
-                       $info = $provider->newSessionInfo( $id );
-                       if ( !$info ) {
-                               continue;
-                       }
-                       if ( $info->getProvider() !== $provider ) {
-                               throw new \UnexpectedValueException(
-                                       "$provider returned an empty session info for a different provider: $info"
-                               );
-                       }
-                       if ( $id !== null && $info->getId() !== $id ) {
-                               throw new \UnexpectedValueException(
-                                       "$provider returned empty session info with a wrong id: " .
-                                               $info->getId() . ' != ' . $id
-                               );
-                       }
-                       if ( !$info->isIdSafe() ) {
-                               throw new \UnexpectedValueException(
-                                       "$provider returned empty session info with id flagged unsafe"
-                               );
-                       }
-                       $compare = $infos ? SessionInfo::compare( $infos[0], $info ) : -1;
-                       if ( $compare > 0 ) {
-                               continue;
-                       }
-                       if ( $compare === 0 ) {
-                               $infos[] = $info;
-                       } else {
-                               $infos = array( $info );
-                       }
-               }
-
-               // Make sure there's exactly one
-               if ( count( $infos ) > 1 ) {
-                       throw new \UnexpectedValueException(
-                               'Multiple empty sessions tied for top priority: ' . join( ', ', $infos )
-                       );
-               } elseif ( count( $infos ) < 1 ) {
-                       throw new \UnexpectedValueException( 'No provider could provide an empty session!' );
-               }
-
-               return $this->getSessionFromInfo( $infos[0], $request );
-       }
-
-       public function getVaryHeaders() {
-               if ( $this->varyHeaders === null ) {
-                       $headers = array();
-                       foreach ( $this->getProviders() as $provider ) {
-                               foreach ( $provider->getVaryHeaders() as $header => $options ) {
-                                       if ( !isset( $headers[$header] ) ) {
-                                               $headers[$header] = array();
-                                       }
-                                       if ( is_array( $options ) ) {
-                                               $headers[$header] = array_unique( array_merge( $headers[$header], $options ) );
-                                       }
-                               }
-                       }
-                       $this->varyHeaders = $headers;
-               }
-               return $this->varyHeaders;
-       }
-
-       public function getVaryCookies() {
-               if ( $this->varyCookies === null ) {
-                       $cookies = array();
-                       foreach ( $this->getProviders() as $provider ) {
-                               $cookies = array_merge( $cookies, $provider->getVaryCookies() );
-                       }
-                       $this->varyCookies = array_values( array_unique( $cookies ) );
-               }
-               return $this->varyCookies;
-       }
-
-       /**
-        * Validate a session ID
-        * @param string $id
-        * @return bool
-        */
-       public static function validateSessionId( $id ) {
-               return is_string( $id ) && preg_match( '/^[a-zA-Z0-9_-]{32,}$/', $id );
-       }
-
-       /**
-        * @name Internal methods
-        * @{
-        */
-
-       /**
-        * Auto-create the given user, if necessary
-        * @private Don't call this yourself. Let Setup.php do it for you at the right time.
-        * @note This more properly belongs in AuthManager, but we need it now.
-        *  When AuthManager comes, this will be deprecated and will pass-through
-        *  to the corresponding AuthManager method.
-        * @param User $user User to auto-create
-        * @return bool Success
-        */
-       public static function autoCreateUser( User $user ) {
-               global $wgAuth;
-
-               $logger = self::singleton()->logger;
-
-               // Much of this code is based on that in CentralAuth
-
-               // Try the local user from the slave DB
-               $localId = User::idFromName( $user->getName() );
-
-               // Fetch the user ID from the master, so that we don't try to create the user
-               // when they already exist, due to replication lag
-               // @codeCoverageIgnoreStart
-               if ( !$localId && wfGetLB()->getReaderIndex() != 0 ) {
-                       $localId = User::idFromName( $user->getName(), User::READ_LATEST );
-               }
-               // @codeCoverageIgnoreEnd
-
-               if ( $localId ) {
-                       // User exists after all.
-                       $user->setId( $localId );
-                       $user->loadFromId();
-                       return false;
-               }
-
-               // Denied by AuthPlugin? But ignore AuthPlugin itself.
-               if ( get_class( $wgAuth ) !== 'AuthPlugin' && !$wgAuth->autoCreate() ) {
-                       $logger->debug( __METHOD__ . ': denied by AuthPlugin' );
-                       $user->setId( 0 );
-                       $user->loadFromId();
-                       return false;
-               }
-
-               // Wiki is read-only?
-               if ( wfReadOnly() ) {
-                       $logger->debug( __METHOD__ . ': denied by wfReadOnly()' );
-                       $user->setId( 0 );
-                       $user->loadFromId();
-                       return false;
-               }
-
-               $userName = $user->getName();
-
-               // Check the session, if we tried to create this user already there's
-               // no point in retrying.
-               $session = self::getGlobalSession();
-               $reason = $session->get( 'MWSession::AutoCreateBlacklist' );
-               if ( $reason ) {
-                       $logger->debug( __METHOD__ . ": blacklisted in session ($reason)" );
-                       $user->setId( 0 );
-                       $user->loadFromId();
-                       return false;
-               }
-
-               // Is the IP user able to create accounts?
-               $anon = new User;
-               if ( !$anon->isAllowedAny( 'createaccount', 'autocreateaccount' )
-                       || $anon->isBlockedFromCreateAccount()
-               ) {
-                       // Blacklist the user to avoid repeated DB queries subsequently
-                       $logger->debug( __METHOD__ . ': user is blocked from this wiki, blacklisting' );
-                       $session->set( 'MWSession::AutoCreateBlacklist', 'blocked', 600 );
-                       $session->persist();
-                       $user->setId( 0 );
-                       $user->loadFromId();
-                       return false;
-               }
-
-               // Check for validity of username
-               if ( !User::isCreatableName( $userName ) ) {
-                       $logger->debug( __METHOD__ . ': Invalid username, blacklisting' );
-                       $session->set( 'MWSession::AutoCreateBlacklist', 'invalid username', 600 );
-                       $session->persist();
-                       $user->setId( 0 );
-                       $user->loadFromId();
-                       return false;
-               }
-
-               // Give other extensions a chance to stop auto creation.
-               $user->loadDefaults( $userName );
-               $abortMessage = '';
-               if ( !\Hooks::run( 'AbortAutoAccount', array( $user, &$abortMessage ) ) ) {
-                       // In this case we have no way to return the message to the user,
-                       // but we can log it.
-                       $logger->debug( __METHOD__ . ": denied by hook: $abortMessage" );
-                       $session->set( 'MWSession::AutoCreateBlacklist', "hook aborted: $abortMessage", 600 );
-                       $session->persist();
-                       $user->setId( 0 );
-                       $user->loadFromId();
-                       return false;
-               }
-
-               // Make sure the name has not been changed
-               if ( $user->getName() !== $userName ) {
-                       $user->setId( 0 );
-                       $user->loadFromId();
-                       throw new \UnexpectedValueException(
-                               'AbortAutoAccount hook tried to change the user name'
-                       );
-               }
-
-               // Ignore warnings about master connections/writes...hard to avoid here
-               \Profiler::instance()->getTransactionProfiler()->resetExpectations();
-
-               $cache = \ObjectCache::getLocalClusterInstance();
-               $backoffKey = wfMemcKey( 'MWSession', 'autocreate-failed', md5( $userName ) );
-               if ( $cache->get( $backoffKey ) ) {
-                       $logger->debug( __METHOD__ . ': denied by prior creation attempt failures' );
-                       $user->setId( 0 );
-                       $user->loadFromId();
-                       return false;
-               }
-
-               // Checks passed, create the user...
-               $from = isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : 'CLI';
-               $logger->info( __METHOD__ . ": creating new user ($userName) - from: $from" );
-
-               try {
-                       // Insert the user into the local DB master
-                       $status = $user->addToDatabase();
-                       if ( !$status->isOK() ) {
-                               // @codeCoverageIgnoreStart
-                               $logger->error( __METHOD__ . ': failed with message ' . $status->getWikiText() );
-                               $user->setId( 0 );
-                               $user->loadFromId();
-                               return false;
-                               // @codeCoverageIgnoreEnd
-                       }
-               } catch ( \Exception $ex ) {
-                       // @codeCoverageIgnoreStart
-                       $logger->error( __METHOD__ . ': failed with exception ' . $ex->getMessage() );
-                       // Do not keep throwing errors for a while
-                       $cache->set( $backoffKey, 1, 600 );
-                       // Bubble up error; which should normally trigger DB rollbacks
-                       throw $ex;
-                       // @codeCoverageIgnoreEnd
-               }
-
-               # Notify hooks (e.g. Newuserlog)
-               \Hooks::run( 'AuthPluginAutoCreate', array( $user ) );
-               \Hooks::run( 'LocalUserCreated', array( $user, true ) );
-
-               # Notify AuthPlugin too
-               $tmpUser = $user;
-               $wgAuth->initUser( $tmpUser, true );
-               if ( $tmpUser !== $user ) {
-                       $logger->warning( __METHOD__ . ': ' .
-                               get_class( $wgAuth ) . '::initUser() replaced the user object' );
-               }
-
-               $user->saveSettings();
-
-               # Update user count
-               \DeferredUpdates::addUpdate( new \SiteStatsUpdate( 0, 0, 0, 0, 1 ) );
-
-               # Watch user's userpage and talk page
-               $user->addWatch( $user->getUserPage(), \WatchedItem::IGNORE_USER_RIGHTS );
-
-               return true;
-       }
-
-       /**
-        * Prevent future sessions for the user
-        *
-        * The intention is that the named account will never again be usable for
-        * normal login (i.e. there is no way to undo the prevention of access).
-        *
-        * @private For use from \\User::newSystemUser only
-        * @param string $username
-        */
-       public function preventSessionsForUser( $username ) {
-               $this->preventUsers[$username] = true;
-
-               // Reset the user's token to kill existing sessions
-               $user = User::newFromName( $username );
-               if ( $user && $user->getToken() ) {
-                       $user->setToken( true );
-                       $user->saveSettings();
-               }
-
-               // Instruct the session providers to kill any other sessions too.
-               foreach ( $this->getProviders() as $provider ) {
-                       $provider->preventSessionsForUser( $username );
-               }
-       }
-
-       /**
-        * Test if a user is prevented
-        * @private For use from SessionBackend only
-        * @param string $username
-        * @return bool
-        */
-       public function isUserSessionPrevented( $username ) {
-               return !empty( $this->preventUsers[$username] );
-       }
-
-       /**
-        * Get the available SessionProviders
-        * @return SessionProvider[]
-        */
-       protected function getProviders() {
-               if ( $this->sessionProviders === null ) {
-                       $this->sessionProviders = array();
-                       foreach ( $this->config->get( 'SessionProviders' ) as $spec ) {
-                               $provider = \ObjectFactory::getObjectFromSpec( $spec );
-                               $provider->setLogger( $this->logger );
-                               $provider->setConfig( $this->config );
-                               $provider->setManager( $this );
-                               if ( isset( $this->sessionProviders[(string)$provider] ) ) {
-                                       throw new \UnexpectedValueException( "Duplicate provider name \"$provider\"" );
-                               }
-                               $this->sessionProviders[(string)$provider] = $provider;
-                       }
-               }
-               return $this->sessionProviders;
-       }
-
-       /**
-        * Get a session provider by name
-        *
-        * Generally, this will only be used by internal implementation of some
-        * special session-providing mechanism. General purpose code, if it needs
-        * to access a SessionProvider at all, will use Session::getProvider().
-        *
-        * @param string $name
-        * @return SessionProvider|null
-        */
-       public function getProvider( $name ) {
-               $providers = $this->getProviders();
-               return isset( $providers[$name] ) ? $providers[$name] : null;
-       }
-
-       /**
-        * Save all active sessions on shutdown
-        * @private For internal use with register_shutdown_function()
-        */
-       public function shutdown() {
-               if ( $this->allSessionBackends ) {
-                       $this->logger->debug( 'Saving all sessions on shutdown' );
-                       if ( session_id() !== '' ) {
-                               // @codeCoverageIgnoreStart
-                               session_write_close();
-                       }
-                       // @codeCoverageIgnoreEnd
-                       foreach ( $this->allSessionBackends as $backend ) {
-                               $backend->save( true );
-                       }
-               }
-       }
-
-       /**
-        * Fetch the SessionInfo(s) for a request
-        * @param WebRequest $request
-        * @return SessionInfo|null
-        */
-       private function getSessionInfoForRequest( WebRequest $request ) {
-               // Call all providers to fetch "the" session
-               $infos = array();
-               foreach ( $this->getProviders() as $provider ) {
-                       $info = $provider->provideSessionInfo( $request );
-                       if ( !$info ) {
-                               continue;
-                       }
-                       if ( $info->getProvider() !== $provider ) {
-                               throw new \UnexpectedValueException(
-                                       "$provider returned session info for a different provider: $info"
-                               );
-                       }
-                       $infos[] = $info;
-               }
-
-               // Sort the SessionInfos. Then find the first one that can be
-               // successfully loaded, and then all the ones after it with the same
-               // priority.
-               usort( $infos, 'MediaWiki\\Session\\SessionInfo::compare' );
-               $retInfos = array();
-               while ( $infos ) {
-                       $info = array_pop( $infos );
-                       if ( $this->loadSessionInfoFromStore( $info, $request ) ) {
-                               $retInfos[] = $info;
-                               while ( $infos ) {
-                                       $info = array_pop( $infos );
-                                       if ( SessionInfo::compare( $retInfos[0], $info ) ) {
-                                               // We hit a lower priority, stop checking.
-                                               break;
-                                       }
-                                       if ( $this->loadSessionInfoFromStore( $info, $request ) ) {
-                                               // This is going to error out below, but we want to
-                                               // provide a complete list.
-                                               $retInfos[] = $info;
-                                       }
-                               }
-                       }
-               }
-
-               if ( count( $retInfos ) > 1 ) {
-                       $ex = new \OverflowException(
-                               'Multiple sessions for this request tied for top priority: ' . join( ', ', $retInfos )
-                       );
-                       $ex->sessionInfos = $retInfos;
-                       throw $ex;
-               }
-
-               return $retInfos ? $retInfos[0] : null;
-       }
-
-       /**
-        * Load and verify the session info against the store
-        *
-        * @param SessionInfo &$info Will likely be replaced with an updated SessionInfo instance
-        * @param WebRequest $request
-        * @return bool Whether the session info matches the stored data (if any)
-        */
-       private function loadSessionInfoFromStore( SessionInfo &$info, WebRequest $request ) {
-               $key = wfMemcKey( 'MWSession', $info->getId() );
-               $blob = $this->store->get( $key );
-
-               $newParams = array();
-
-               if ( $blob !== false ) {
-                       // Sanity check: blob must be an array, if it's saved at all
-                       if ( !is_array( $blob ) ) {
-                               $this->logger->warning( "Session $info: Bad data" );
-                               $this->store->delete( $key );
-                               return false;
-                       }
-
-                       // Sanity check: blob has data and metadata arrays
-                       if ( !isset( $blob['data'] ) || !is_array( $blob['data'] ) ||
-                               !isset( $blob['metadata'] ) || !is_array( $blob['metadata'] )
-                       ) {
-                               $this->logger->warning( "Session $info: Bad data structure" );
-                               $this->store->delete( $key );
-                               return false;
-                       }
-
-                       $data = $blob['data'];
-                       $metadata = $blob['metadata'];
-
-                       // Sanity check: metadata must be an array and must contain certain
-                       // keys, if it's saved at all
-                       if ( !array_key_exists( 'userId', $metadata ) ||
-                               !array_key_exists( 'userName', $metadata ) ||
-                               !array_key_exists( 'userToken', $metadata ) ||
-                               !array_key_exists( 'provider', $metadata )
-                       ) {
-                               $this->logger->warning( "Session $info: Bad metadata" );
-                               $this->store->delete( $key );
-                               return false;
-                       }
-
-                       // First, load the provider from metadata, or validate it against the metadata.
-                       $provider = $info->getProvider();
-                       if ( $provider === null ) {
-                               $newParams['provider'] = $provider = $this->getProvider( $metadata['provider'] );
-                               if ( !$provider ) {
-                                       $this->logger->warning( "Session $info: Unknown provider, " . $metadata['provider'] );
-                                       $this->store->delete( $key );
-                                       return false;
-                               }
-                       } elseif ( $metadata['provider'] !== (string)$provider ) {
-                               $this->logger->warning( "Session $info: Wrong provider, " .
-                                       $metadata['provider'] . ' !== ' . $provider );
-                               return false;
-                       }
-
-                       // Load provider metadata from metadata, or validate it against the metadata
-                       $providerMetadata = $info->getProviderMetadata();
-                       if ( isset( $metadata['providerMetadata'] ) ) {
-                               if ( $providerMetadata === null ) {
-                                       $newParams['metadata'] = $metadata['providerMetadata'];
-                               } else {
-                                       try {
-                                               $newProviderMetadata = $provider->mergeMetadata(
-                                                       $metadata['providerMetadata'], $providerMetadata
-                                               );
-                                               if ( $newProviderMetadata !== $providerMetadata ) {
-                                                       $newParams['metadata'] = $newProviderMetadata;
-                                               }
-                                       } catch ( \UnexpectedValueException $ex ) {
-                                               $this->logger->warning( "Session $info: Metadata merge failed: " . $ex->getMessage() );
-                                               return false;
-                                       }
-                               }
-                       }
-
-                       // Next, load the user from metadata, or validate it against the metadata.
-                       $userInfo = $info->getUserInfo();
-                       if ( !$userInfo ) {
-                               // For loading, id is preferred to name.
-                               try {
-                                       if ( $metadata['userId'] ) {
-                                               $userInfo = UserInfo::newFromId( $metadata['userId'] );
-                                       } elseif ( $metadata['userName'] !== null ) { // Shouldn't happen, but just in case
-                                               $userInfo = UserInfo::newFromName( $metadata['userName'] );
-                                       } else {
-                                               $userInfo = UserInfo::newAnonymous();
-                                       }
-                               } catch ( \InvalidArgumentException $ex ) {
-                                       $this->logger->error( "Session $info: " . $ex->getMessage() );
-                                       return false;
-                               }
-                               $newParams['userInfo'] = $userInfo;
-                       } else {
-                               // User validation passes if user ID matches, or if there
-                               // is no saved ID and the names match.
-                               if ( $metadata['userId'] ) {
-                                       if ( $metadata['userId'] !== $userInfo->getId() ) {
-                                               $this->logger->warning( "Session $info: User ID mismatch, " .
-                                                       $metadata['userId'] . ' !== ' . $userInfo->getId() );
-                                               return false;
-                                       }
-
-                                       // If the user was renamed, probably best to fail here.
-                                       if ( $metadata['userName'] !== null &&
-                                               $userInfo->getName() !== $metadata['userName']
-                                       ) {
-                                               $this->logger->warning( "Session $info: User ID matched but name didn't (rename?), " .
-                                                       $metadata['userName'] . ' !== ' . $userInfo->getName() );
-                                               return false;
-                                       }
-
-                               } elseif ( $metadata['userName'] !== null ) { // Shouldn't happen, but just in case
-                                       if ( $metadata['userName'] !== $userInfo->getName() ) {
-                                               $this->logger->warning( "Session $info: User name mismatch, " .
-                                                       $metadata['userName'] . ' !== ' . $userInfo->getName() );
-                                               return false;
-                                       }
-                               } elseif ( !$userInfo->isAnon() ) {
-                                       // Metadata specifies an anonymous user, but the passed-in
-                                       // user isn't anonymous.
-                                       $this->logger->warning(
-                                               "Session $info: Metadata has an anonymous user, " .
-                                                       'but a non-anon user was provided'
-                                       );
-                                       return false;
-                               }
-                       }
-
-                       // And if we have a token in the metadata, it must match the loaded/provided user.
-                       if ( $metadata['userToken'] !== null &&
-                               $userInfo->getToken() !== $metadata['userToken']
-                       ) {
-                               $this->logger->warning( "Session $info: User token mismatch" );
-                               return false;
-                       }
-                       if ( !$userInfo->isVerified() ) {
-                               $newParams['userInfo'] = $userInfo->verified();
-                       }
-
-                       if ( !empty( $metadata['remember'] ) && !$info->wasRemembered() ) {
-                               $newParams['remembered'] = true;
-                       }
-                       if ( !empty( $metadata['forceHTTPS'] ) && !$info->forceHTTPS() ) {
-                               $newParams['forceHTTPS'] = true;
-                       }
-
-                       if ( !$info->isIdSafe() ) {
-                               $newParams['idIsSafe'] = true;
-                       }
-               } else {
-                       // No metadata, so we can't load the provider if one wasn't given.
-                       if ( $info->getProvider() === null ) {
-                               $this->logger->warning( "Session $info: Null provider and no metadata" );
-                               return false;
-                       }
-
-                       // If no user was provided and no metadata, it must be anon.
-                       if ( !$info->getUserInfo() ) {
-                               if ( $info->getProvider()->canChangeUser() ) {
-                                       $newParams['userInfo'] = UserInfo::newAnonymous();
-                               } else {
-                                       $this->logger->info(
-                                               "Session $info: No user provided and provider cannot set user"
-                                       );
-                                       return false;
-                               }
-                       } elseif ( !$info->getUserInfo()->isVerified() ) {
-                               $this->logger->warning(
-                                       "Session $info: Unverified user provided and no metadata to auth it"
-                               );
-                               return false;
-                       }
-
-                       $data = false;
-                       $metadata = false;
-
-                       if ( !$info->getProvider()->persistsSessionId() && !$info->isIdSafe() ) {
-                               // The ID doesn't come from the user, so it should be safe
-                               // (and if not, nothing we can do about it anyway)
-                               $newParams['idIsSafe'] = true;
-                       }
-               }
-
-               // Construct the replacement SessionInfo, if necessary
-               if ( $newParams ) {
-                       $newParams['copyFrom'] = $info;
-                       $info = new SessionInfo( $info->getPriority(), $newParams );
-               }
-
-               // Allow the provider to check the loaded SessionInfo
-               $providerMetadata = $info->getProviderMetadata();
-               if ( !$info->getProvider()->refreshSessionInfo( $info, $request, $providerMetadata ) ) {
-                       return false;
-               }
-               if ( $providerMetadata !== $info->getProviderMetadata() ) {
-                       $info = new SessionInfo( $info->getPriority(), array(
-                               'metadata' => $providerMetadata,
-                               'copyFrom' => $info,
-                       ) );
-               }
-
-               // Give hooks a chance to abort. Combined with the SessionMetadata
-               // hook, this can allow for tying a session to an IP address or the
-               // like.
-               $reason = 'Hook aborted';
-               if ( !\Hooks::run(
-                       'SessionCheckInfo',
-                       array( &$reason, $info, $request, $metadata, $data )
-               ) ) {
-                       $this->logger->warning( "Session $info: $reason" );
-                       return false;
-               }
-
-               return true;
-       }
-
-       /**
-        * Create a session corresponding to the passed SessionInfo
-        * @private For use by a SessionProvider that needs to specially create its
-        *  own session.
-        * @param SessionInfo $info
-        * @param WebRequest $request
-        * @return Session
-        */
-       public function getSessionFromInfo( SessionInfo $info, WebRequest $request ) {
-               $id = $info->getId();
-
-               if ( !isset( $this->allSessionBackends[$id] ) ) {
-                       if ( !isset( $this->allSessionIds[$id] ) ) {
-                               $this->allSessionIds[$id] = new SessionId( $id );
-                       }
-                       $backend = new SessionBackend(
-                               $this->allSessionIds[$id],
-                               $info,
-                               $this->store,
-                               $this->logger,
-                               $this->config->get( 'ObjectCacheSessionExpiry' )
-                       );
-                       $this->allSessionBackends[$id] = $backend;
-                       $delay = $backend->delaySave();
-               } else {
-                       $backend = $this->allSessionBackends[$id];
-                       $delay = $backend->delaySave();
-                       if ( $info->wasPersisted() ) {
-                               $backend->persist();
-                       }
-                       if ( $info->wasRemembered() ) {
-                               $backend->setRememberUser( true );
-                       }
-               }
-
-               $request->setSessionId( $backend->getSessionId() );
-               $session = $backend->getSession( $request );
-
-               if ( !$info->isIdSafe() ) {
-                       $session->resetId();
-               }
-
-               \ScopedCallback::consume( $delay );
-               return $session;
-       }
-
-       /**
-        * Deregister a SessionBackend
-        * @private For use from \\MediaWiki\\Session\\SessionBackend only
-        * @param SessionBackend $backend
-        */
-       public function deregisterSessionBackend( SessionBackend $backend ) {
-               $id = $backend->getId();
-               if ( !isset( $this->allSessionBackends[$id] ) || !isset( $this->allSessionIds[$id] ) ||
-                       $this->allSessionBackends[$id] !== $backend ||
-                       $this->allSessionIds[$id] !== $backend->getSessionId()
-               ) {
-                       throw new \InvalidArgumentException( 'Backend was not registered with this SessionManager' );
-               }
-
-               unset( $this->allSessionBackends[$id] );
-               // Explicitly do not unset $this->allSessionIds[$id]
-       }
-
-       /**
-        * Change a SessionBackend's ID
-        * @private For use from \\MediaWiki\\Session\\SessionBackend only
-        * @param SessionBackend $backend
-        */
-       public function changeBackendId( SessionBackend $backend ) {
-               $sessionId = $backend->getSessionId();
-               $oldId = (string)$sessionId;
-               if ( !isset( $this->allSessionBackends[$oldId] ) || !isset( $this->allSessionIds[$oldId] ) ||
-                       $this->allSessionBackends[$oldId] !== $backend ||
-                       $this->allSessionIds[$oldId] !== $sessionId
-               ) {
-                       throw new \InvalidArgumentException( 'Backend was not registered with this SessionManager' );
-               }
-
-               $newId = $this->generateSessionId();
-
-               unset( $this->allSessionBackends[$oldId], $this->allSessionIds[$oldId] );
-               $sessionId->setId( $newId );
-               $this->allSessionBackends[$newId] = $backend;
-               $this->allSessionIds[$newId] = $sessionId;
-       }
-
-       /**
-        * Generate a new random session ID
-        * @return string
-        */
-       public function generateSessionId() {
-               do {
-                       $id = wfBaseConvert( \MWCryptRand::generateHex( 40 ), 16, 32, 32 );
-                       $key = wfMemcKey( 'MWSession', $id );
-               } while ( isset( $this->allSessionIds[$id] ) || is_array( $this->store->get( $key ) ) );
-               return $id;
-       }
-
-       /**
-        * Call setters on a PHPSessionHandler
-        * @private Use PhpSessionHandler::install()
-        * @param PHPSessionHandler $handler
-        */
-       public function setupPHPSessionHandler( PHPSessionHandler $handler ) {
-               $handler->setManager( $this, $this->store, $this->logger );
-       }
-
-       /**
-        * Reset the internal caching for unit testing
-        */
-       public static function resetCache() {
-               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
-                       // @codeCoverageIgnoreStart
-                       throw new MWException( __METHOD__ . ' may only be called from unit tests!' );
-                       // @codeCoverageIgnoreEnd
-               }
-
-               self::$globalSession = null;
-               self::$globalSessionRequest = null;
-       }
-
-       /**@}*/
-
-}
diff --git a/includes/session/SessionManagerInterface.php b/includes/session/SessionManagerInterface.php
deleted file mode 100644 (file)
index 14af630..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-/**
- * MediaWiki\Session entry point interface
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use Psr\Log\LoggerAwareInterface;
-use WebRequest;
-
-/**
- * This exists to make IDEs happy, so they don't see the
- * internal-but-required-to-be-public methods on SessionManager.
- *
- * @ingroup Session
- * @since 1.27
- */
-interface SessionManagerInterface extends LoggerAwareInterface {
-       /**
-        * Fetch the session for a request
-        *
-        * @note You probably want to use $request->getSession() instead. It's more
-        *  efficient and doesn't break FauxRequests or sessions that were changed
-        *  by $this->getSessionById() or $this->getEmptySession().
-        * @param WebRequest $request Any existing associated session will be reset
-        *  to the session corresponding to the data in the request itself.
-        * @return Session
-        * @throws \\OverflowException if there are multiple sessions tied for top
-        *  priority in the request. Exception has a property "sessionInfos"
-        *  holding the SessionInfo objects for the sessions involved.
-        */
-       public function getSessionForRequest( WebRequest $request );
-
-       /**
-        * Fetch a session by ID
-        * @param string $id
-        * @param bool $create If no session exists for $id, try to create a new one.
-        *  May still return null if a session for $id exists but cannot be loaded.
-        * @param WebRequest|null $request Corresponding request. Any existing
-        *  session associated with this WebRequest object will be overwritten.
-        * @return Session|null
-        */
-       public function getSessionById( $id, $create = false, WebRequest $request = null );
-
-       /**
-        * Fetch a new, empty session
-        *
-        * The first provider configured that is able to provide an empty session
-        * will be used.
-        *
-        * @param WebRequest|null $request Corresponding request. Any existing
-        *  session associated with this WebRequest object will be overwritten.
-        * @return Session
-        */
-       public function getEmptySession( WebRequest $request = null );
-
-       /**
-        * Return the HTTP headers that need varying on.
-        *
-        * The return value is such that someone could theoretically do this:
-        * @code
-        *  foreach ( $provider->getVaryHeaders() as $header => $options ) {
-        *      $outputPage->addVaryHeader( $header, $options );
-        *  }
-        * @endcode
-        *
-        * @return array
-        */
-       public function getVaryHeaders();
-
-       /**
-        * Return the list of cookies that need varying on.
-        * @return string[]
-        */
-       public function getVaryCookies();
-
-}
diff --git a/includes/session/SessionProvider.php b/includes/session/SessionProvider.php
deleted file mode 100644 (file)
index 0fd3a71..0000000
+++ /dev/null
@@ -1,487 +0,0 @@
-<?php
-/**
- * MediaWiki session provider base class
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use Psr\Log\LoggerAwareInterface;
-use Psr\Log\LoggerInterface;
-use Config;
-use Language;
-use WebRequest;
-
-/**
- * A SessionProvider provides SessionInfo and support for Session
- *
- * A SessionProvider is responsible for taking a WebRequest and determining
- * the authenticated session that it's a part of. It does this by returning an
- * SessionInfo object with basic information about the session it thinks is
- * associated with the request, namely the session ID and possibly the
- * authenticated user the session belongs to.
- *
- * The SessionProvider also provides for updating the WebResponse with
- * information necessary to provide the client with data that the client will
- * send with later requests, and for populating the Vary and Key headers with
- * the data necessary to correctly vary the cache on these client requests.
- *
- * An important part of the latter is indicating whether it even *can* tell the
- * client to include such data in future requests, via the persistsSessionId()
- * and canChangeUser() methods. The cases are (in order of decreasing
- * commonness):
- *  - Cannot persist ID, no changing User: The request identifies and
- *    authenticates a particular local user, and the client cannot be
- *    instructed to include an arbitrary session ID with future requests. For
- *    example, OAuth or SSL certificate auth.
- *  - Can persist ID and can change User: The client can be instructed to
- *    return at least one piece of arbitrary data, that being the session ID.
- *    The user identity might also be given to the client, otherwise it's saved
- *    in the session data. For example, cookie-based sessions.
- *  - Can persist ID but no changing User: The request uniquely identifies and
- *    authenticates a local user, and the client can be instructed to return an
- *    arbitrary session ID with future requests. For example, HTTP Digest
- *    authentication might somehow use the 'opaque' field as a session ID
- *    (although getting MediaWiki to return 401 responses without breaking
- *    other stuff might be a challenge).
- *  - Cannot persist ID but can change User: I can't think of a way this
- *    would make sense.
- *
- * Note that many methods that are technically "cannot persist ID" could be
- * turned into "can persist ID but not changing User" using a session cookie,
- * as implemented by ImmutableSessionProviderWithCookie. If doing so, different
- * session cookie names should be used for different providers to avoid
- * collisions.
- *
- * @ingroup Session
- * @since 1.27
- */
-abstract class SessionProvider implements SessionProviderInterface, LoggerAwareInterface {
-
-       /** @var LoggerInterface */
-       protected $logger;
-
-       /** @var Config */
-       protected $config;
-
-       /** @var SessionManager */
-       protected $manager;
-
-       /** @var int Session priority. Used for the default newSessionInfo(), but
-        * could be used by subclasses too.
-        */
-       protected $priority;
-
-       /**
-        * @note To fully initialize a SessionProvider, the setLogger(),
-        *  setConfig(), and setManager() methods must be called (and should be
-        *  called in that order). Failure to do so is liable to cause things to
-        *  fail unexpectedly.
-        */
-       public function __construct() {
-               $this->priority = SessionInfo::MIN_PRIORITY + 10;
-       }
-
-       public function setLogger( LoggerInterface $logger ) {
-               $this->logger = $logger;
-       }
-
-       /**
-        * Set configuration
-        * @param Config $config
-        */
-       public function setConfig( Config $config ) {
-               $this->config = $config;
-       }
-
-       /**
-        * Set the session manager
-        * @param SessionManager $manager
-        */
-       public function setManager( SessionManager $manager ) {
-               $this->manager = $manager;
-       }
-
-       /**
-        * Get the session manager
-        * @return SessionManager
-        */
-       public function getManager() {
-               return $this->manager;
-       }
-
-       /**
-        * Provide session info for a request
-        *
-        * If no session exists for the request, return null. Otherwise return an
-        * SessionInfo object identifying the session.
-        *
-        * If multiple SessionProviders provide sessions, the one with highest
-        * priority wins. In case of a tie, an exception is thrown.
-        * SessionProviders are encouraged to make priorities user-configurable
-        * unless only max-priority makes sense.
-        *
-        * @warning This will be called early in the MediaWiki setup process,
-        *  before $wgUser, $wgLang, $wgOut, $wgParser, $wgTitle, and corresponding
-        *  pieces of the main RequestContext are set up! If you try to use these,
-        *  things *will* break.
-        * @note The SessionProvider must not attempt to auto-create users.
-        *  MediaWiki will do this later (when it's safe) if the chosen session has
-        *  a user with a valid name but no ID.
-        * @protected For use by \\MediaWiki\\Session\\SessionManager only
-        * @param WebRequest $request
-        * @return SessionInfo|null
-        */
-       abstract public function provideSessionInfo( WebRequest $request );
-
-       /**
-        * Provide session info for a new, empty session
-        *
-        * Return null if such a session cannot be created. This base
-        * implementation assumes that it only makes sense if a session ID can be
-        * persisted and changing users is allowed.
-        *
-        * @protected For use by \\MediaWiki\\Session\\SessionManager only
-        * @param string|null $id ID to force for the new session
-        * @return SessionInfo|null
-        *  If non-null, must return true for $info->isIdSafe(); pass true for
-        *  $data['idIsSafe'] to ensure this.
-        */
-       public function newSessionInfo( $id = null ) {
-               if ( $this->canChangeUser() && $this->persistsSessionId() ) {
-                       return new SessionInfo( $this->priority, array(
-                               'id' => $id,
-                               'provider' => $this,
-                               'persisted' => false,
-                               'idIsSafe' => true,
-                       ) );
-               }
-               return null;
-       }
-
-       /**
-        * Merge saved session provider metadata
-        *
-        * The default implementation checks that anything in both arrays is
-        * identical, then returns $providedMetadata.
-        *
-        * @protected For use by \\MediaWiki\\Session\\SessionManager only
-        * @param array $savedMetadata Saved provider metadata
-        * @param array $providedMetadata Provided provider metadata
-        * @return array Resulting metadata
-        * @throws \UnexpectedValueException If the metadata cannot be merged
-        */
-       public function mergeMetadata( array $savedMetadata, array $providedMetadata ) {
-               foreach ( $providedMetadata as $k => $v ) {
-                       if ( array_key_exists( $k, $savedMetadata ) && $savedMetadata[$k] !== $v ) {
-                               throw new \UnexpectedValueException( "Key \"$k\" changed" );
-                       }
-               }
-               return $providedMetadata;
-       }
-
-       /**
-        * Validate a loaded SessionInfo and refresh provider metadata
-        *
-        * This is similar in purpose to the 'SessionCheckInfo' hook, and also
-        * allows for updating the provider metadata. On failure, the provider is
-        * expected to write an appropriate message to its logger.
-        *
-        * @protected For use by \\MediaWiki\\Session\\SessionManager only
-        * @param SessionInfo $info
-        * @param WebRequest $request
-        * @param array|null &$metadata Provider metadata, may be altered.
-        * @return bool Return false to reject the SessionInfo after all.
-        */
-       public function refreshSessionInfo( SessionInfo $info, WebRequest $request, &$metadata ) {
-               return true;
-       }
-
-       /**
-        * Indicate whether self::persistSession() can save arbitrary session IDs
-        *
-        * If false, any session passed to self::persistSession() will have an ID
-        * that was originally provided by self::provideSessionInfo().
-        *
-        * If true, the provider may be passed sessions with arbitrary session IDs,
-        * and will be expected to manipulate the request in such a way that future
-        * requests will cause self::provideSessionInfo() to provide a SessionInfo
-        * with that ID.
-        *
-        * For example, a session provider for OAuth would function by matching the
-        * OAuth headers to a particular user, and then would use self::hashToSessionId()
-        * to turn the user and OAuth client ID (and maybe also the user token and
-        * client secret) into a session ID, and therefore can't easily assign that
-        * user+client a different ID. Similarly, a session provider for SSL client
-        * certificates would function by matching the certificate to a particular
-        * user, and then would use self::hashToSessionId() to turn the user and
-        * certificate fingerprint into a session ID, and therefore can't easily
-        * assign a different ID either. On the other hand, a provider that saves
-        * the session ID into a cookie can easily just set the cookie to a
-        * different value.
-        *
-        * @protected For use by \\MediaWiki\\Session\\SessionBackend only
-        * @return bool
-        */
-       abstract public function persistsSessionId();
-
-       /**
-        * Indicate whether the user associated with the request can be changed
-        *
-        * If false, any session passed to self::persistSession() will have a user
-        * that was originally provided by self::provideSessionInfo(). Further,
-        * self::provideSessionInfo() may only provide sessions that have a user
-        * already set.
-        *
-        * If true, the provider may be passed sessions with arbitrary users, and
-        * will be expected to manipulate the request in such a way that future
-        * requests will cause self::provideSessionInfo() to provide a SessionInfo
-        * with that ID. This can be as simple as not passing any 'userInfo' into
-        * SessionInfo's constructor, in which case SessionInfo will load the user
-        * from the saved session's metadata.
-        *
-        * For example, a session provider for OAuth or SSL client certificates
-        * would function by matching the OAuth headers or certificate to a
-        * particular user, and thus would return false here since it can't
-        * arbitrarily assign those OAuth credentials or that certificate to a
-        * different user. A session provider that shoves information into cookies,
-        * on the other hand, could easily do so.
-        *
-        * @protected For use by \\MediaWiki\\Session\\SessionBackend only
-        * @return bool
-        */
-       abstract public function canChangeUser();
-
-       /**
-        * Notification that the session ID was reset
-        *
-        * No need to persist here, persistSession() will be called if appropriate.
-        *
-        * @protected For use by \\MediaWiki\\Session\\SessionBackend only
-        * @param SessionBackend $session Session to persist
-        * @param string $oldId Old session ID
-        * @codeCoverageIgnore
-        */
-       public function sessionIdWasReset( SessionBackend $session, $oldId ) {
-       }
-
-       /**
-        * Persist a session into a request/response
-        *
-        * For example, you might set cookies for the session's ID, user ID, user
-        * name, and user token on the passed request.
-        *
-        * To correctly persist a user independently of the session ID, the
-        * provider should persist both the user ID (or name, but preferably the
-        * ID) and the user token. When reading the data from the request, it
-        * should construct a User object from the ID/name and then verify that the
-        * User object's token matches the token included in the request. Should
-        * the tokens not match, an anonymous user *must* be passed to
-        * SessionInfo::__construct().
-        *
-        * When persisting a user independently of the session ID,
-        * $session->shouldRememberUser() should be checked first. If this returns
-        * false, the user token *must not* be saved to cookies. The user name
-        * and/or ID may be persisted, and should be used to construct an
-        * unverified UserInfo to pass to SessionInfo::__construct().
-        *
-        * A backend that cannot persist sesison ID or user info should implement
-        * this as a no-op.
-        *
-        * @protected For use by \\MediaWiki\\Session\\SessionBackend only
-        * @param SessionBackend $session Session to persist
-        * @param WebRequest $request Request into which to persist the session
-        */
-       abstract public function persistSession( SessionBackend $session, WebRequest $request );
-
-       /**
-        * Remove any persisted session from a request/response
-        *
-        * For example, blank and expire any cookies set by self::persistSession().
-        *
-        * A backend that cannot persist sesison ID or user info should implement
-        * this as a no-op.
-        *
-        * @protected For use by \\MediaWiki\\Session\\SessionManager only
-        * @param WebRequest $request Request from which to remove any session data
-        */
-       abstract public function unpersistSession( WebRequest $request );
-
-       /**
-        * Prevent future sessions for the user
-        *
-        * If the provider is capable of returning a SessionInfo with a verified
-        * UserInfo for the named user in some manner other than by validating
-        * against $user->getToken(), steps must be taken to prevent that from
-        * occurring in the future. This might add the username to a blacklist, or
-        * it might just delete whatever authentication credentials would allow
-        * such a session in the first place (e.g. remove all OAuth grants or
-        * delete record of the SSL client certificate).
-        *
-        * The intention is that the named account will never again be usable for
-        * normal login (i.e. there is no way to undo the prevention of access).
-        *
-        * Note that the passed user name might not exist locally (i.e.
-        * User::idFromName( $username ) === 0); the name should still be
-        * prevented, if applicable.
-        *
-        * @protected For use by \\MediaWiki\\Session\\SessionManager only
-        * @param string $username
-        */
-       public function preventSessionsForUser( $username ) {
-               if ( !$this->canChangeUser() ) {
-                       throw new \BadMethodCallException(
-                               __METHOD__ . ' must be implmented when canChangeUser() is false'
-                       );
-               }
-       }
-
-       /**
-        * Return the HTTP headers that need varying on.
-        *
-        * The return value is such that someone could theoretically do this:
-        * @code
-        *  foreach ( $provider->getVaryHeaders() as $header => $options ) {
-        *      $outputPage->addVaryHeader( $header, $options );
-        *  }
-        * @endcode
-        *
-        * @protected For use by \\MediaWiki\\Session\\SessionManager only
-        * @return array
-        */
-       public function getVaryHeaders() {
-               return array();
-       }
-
-       /**
-        * Return the list of cookies that need varying on.
-        * @protected For use by \\MediaWiki\\Session\\SessionManager only
-        * @return string[]
-        */
-       public function getVaryCookies() {
-               return array();
-       }
-
-       /**
-        * Get a suggested username for the login form
-        * @protected For use by \\MediaWiki\\Session\\SessionBackend only
-        * @param WebRequest $request
-        * @return string|null
-        */
-       public function suggestLoginUsername( WebRequest $request ) {
-               return null;
-       }
-
-       /**
-        * Fetch the rights allowed the user when the specified session is active.
-        * @param SessionBackend $backend
-        * @return null|string[] Allowed user rights, or null to allow all.
-        */
-       public function getAllowedUserRights( SessionBackend $backend ) {
-               if ( $backend->getProvider() !== $this ) {
-                       // Not that this should ever happen...
-                       throw new \InvalidArgumentException( 'Backend\'s provider isn\'t $this' );
-               }
-
-               return null;
-       }
-
-       /**
-        * @note Only override this if it makes sense to instantiate multiple
-        *  instances of the provider. Value returned must be unique across
-        *  configured providers. If you override this, you'll likely need to
-        *  override self::describeMessage() as well.
-        * @return string
-        */
-       public function __toString() {
-               return get_class( $this );
-       }
-
-       /**
-        * Return a Message identifying this session type
-        *
-        * This default implementation takes the class name, lowercases it,
-        * replaces backslashes with dashes, and prefixes 'sessionprovider-' to
-        * determine the message key. For example, MediaWiki\\Session\\CookieSessionProvider
-        * produces 'sessionprovider-mediawiki-session-cookiesessionprovider'.
-        *
-        * @note If self::__toString() is overridden, this will likely need to be
-        *  overridden as well.
-        * @warning This will be called early during MediaWiki startup. Do not
-        *  use $wgUser, $wgLang, $wgOut, $wgParser, or their equivalents via
-        *  RequestContext from this method!
-        * @return Message
-        */
-       protected function describeMessage() {
-               return wfMessage(
-                       'sessionprovider-' . str_replace( '\\', '-', strtolower( get_class( $this ) ) )
-               );
-       }
-
-       public function describe( Language $lang ) {
-               $msg = $this->describeMessage();
-               $msg->inLanguage( $lang );
-               if ( $msg->isDisabled() ) {
-                       $msg = wfMessage( 'sessionprovider-generic', (string)$this )->inLanguage( $lang );
-               }
-               return $msg->plain();
-       }
-
-       public function whyNoSession() {
-               return null;
-       }
-
-       /**
-        * Hash data as a session ID
-        *
-        * Generally this will only be used when self::persistsSessionId() is false and
-        * the provider has to base the session ID on the verified user's identity
-        * or other static data.
-        *
-        * @param string $data
-        * @param string|null $key Defaults to $this->config->get( 'SecretKey' )
-        * @return string
-        */
-       final protected function hashToSessionId( $data, $key = null ) {
-               if ( !is_string( $data ) ) {
-                       throw new \InvalidArgumentException(
-                               '$data must be a string, ' . gettype( $data ) . ' was passed'
-                       );
-               }
-               if ( $key !== null && !is_string( $key ) ) {
-                       throw new \InvalidArgumentException(
-                               '$key must be a string or null, ' . gettype( $key ) . ' was passed'
-                       );
-               }
-
-               $hash = \MWCryptHash::hmac( "$this\n$data", $key ?: $this->config->get( 'SecretKey' ), false );
-               if ( strlen( $hash ) < 32 ) {
-                       // Should never happen, even md5 is 128 bits
-                       // @codeCoverageIgnoreStart
-                       throw new \UnexpectedValueException( 'Hash fuction returned less than 128 bits' );
-                       // @codeCoverageIgnoreEnd
-               }
-               if ( strlen( $hash ) >= 40 ) {
-                       $hash = wfBaseConvert( $hash, 16, 32, 32 );
-               }
-               return substr( $hash, -32 );
-       }
-
-}
diff --git a/includes/session/SessionProviderInterface.php b/includes/session/SessionProviderInterface.php
deleted file mode 100644 (file)
index 02ae23d..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * MediaWiki\Session\Provider interface
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use Language;
-
-/**
- * This exists to make IDEs happy, so they don't see the
- * internal-but-required-to-be-public methods on SessionProvider.
- *
- * @ingroup Session
- * @since 1.27
- */
-interface SessionProviderInterface {
-
-       /**
-        * Return an identifier for this session type
-        *
-        * @param Language $lang Language to use.
-        * @return string
-        */
-       public function describe( Language $lang );
-
-       /**
-        * Return a Message for why sessions might not be being persisted.
-        *
-        * For example, "check whether you're blocking our cookies".
-        *
-        * @return Message|null
-        */
-       public function whyNoSession();
-
-}
diff --git a/includes/session/UserInfo.php b/includes/session/UserInfo.php
deleted file mode 100644 (file)
index e844bb6..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-/**
- * MediaWiki session user info
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Session
- */
-
-namespace MediaWiki\Session;
-
-use User;
-
-/**
- * Object holding data about a session's user
- *
- * In general, this class exists for two purposes:
- * - User doesn't distinguish between "anonymous user" and "non-anonymous user
- *   that doesn't exist locally", while we do need to.
- * - We also need the "verified" property described below; tracking it via
- *   another data item to SessionInfo's constructor makes things much more
- *   confusing.
- *
- * A UserInfo may be "verified". This indicates that the creator knows that the
- * request really comes from that user, whether that's by validating OAuth
- * credentials, SSL client certificates, or by having both the user ID and
- * token available from cookies.
- *
- * An "unverified" UserInfo should be used when it's not possible to
- * authenticate the user, e.g. the user ID cookie is set but the user Token
- * cookie isn't. If the Token is available but doesn't match, don't return a
- * UserInfo at all.
- *
- * @ingroup Session
- * @since 1.27
- */
-final class UserInfo {
-       private $verified = false;
-
-       /** @var User|null */
-       private $user = null;
-
-       private function __construct( User $user = null, $verified ) {
-               if ( $user && $user->isAnon() && !User::isUsableName( $user->getName() ) ) {
-                       $this->verified = true;
-                       $this->user = null;
-               } else {
-                       $this->verified = $verified;
-                       $this->user = $user;
-               }
-       }
-
-       /**
-        * Create an instance for an anonymous (i.e. not logged in) user
-        *
-        * Logged-out users are always "verified".
-        *
-        * @return UserInfo
-        */
-       public static function newAnonymous() {
-               return new self( null, true );
-       }
-
-       /**
-        * Create an instance for a logged-in user by ID
-        * @param int $id User ID
-        * @param bool $verified True if the user is verified
-        * @return UserInfo
-        */
-       public static function newFromId( $id, $verified = false ) {
-               $user = User::newFromId( $id );
-
-               // Ensure the ID actually exists
-               $user->load();
-               if ( $user->isAnon() ) {
-                       throw new \InvalidArgumentException( 'Invalid ID' );
-               }
-
-               return new self( $user, $verified );
-       }
-
-       /**
-        * Create an instance for a logged-in user by name
-        * @param string $name User name (need not exist locally)
-        * @param bool $verified True if the user is verified
-        * @return UserInfo
-        */
-       public static function newFromName( $name, $verified = false ) {
-               $user = User::newFromName( $name, 'usable' );
-               if ( !$user ) {
-                       throw new \InvalidArgumentException( 'Invalid user name' );
-               }
-               return new self( $user, $verified );
-       }
-
-       /**
-        * Create an instance from an existing User object
-        * @param User $user (need not exist locally)
-        * @param bool $verified True if the user is verified
-        * @return UserInfo
-        */
-       public static function newFromUser( User $user, $verified = false ) {
-               return new self( $user, $verified );
-       }
-
-       /**
-        * Return whether this is an anonymous user
-        * @return bool
-        */
-       public function isAnon() {
-               return $this->user === null;
-       }
-
-       /**
-        * Return whether this represents a verified user
-        * @return bool
-        */
-       public function isVerified() {
-               return $this->verified;
-       }
-
-       /**
-        * Return the user ID
-        * @note Do not use this to test for anonymous users!
-        * @return int
-        */
-       public function getId() {
-               return $this->user === null ? 0 : $this->user->getId();
-       }
-
-       /**
-        * Return the user name
-        * @return string|null
-        */
-       public function getName() {
-               return $this->user === null ? null : $this->user->getName();
-       }
-
-       /**
-        * Return the user token
-        * @return string|null
-        */
-       public function getToken() {
-               return $this->user === null || $this->user->getId() === 0 ? null : $this->user->getToken( true );
-       }
-
-       /**
-        * Return a User object
-        * @return User
-        */
-       public function getUser() {
-               return $this->user === null ? new User : $this->user;
-       }
-
-       /**
-        * Return a verified version of this object
-        * @return UserInfo
-        */
-       public function verified() {
-               return $this->verified ? $this : new self( $this->user, true );
-       }
-
-       public function __toString() {
-               if ( $this->user === null ) {
-                       return '<anon>';
-               }
-               return '<' .
-                       ( $this->verified ? '+' : '-' ) . ':' .
-                       $this->getId() . ':' . $this->getName() .
-                       '>';
-       }
-
-}
index 2e764ba..3babafd 100644 (file)
@@ -90,7 +90,6 @@ class SpecialPageFactory {
                'Unblock' => 'SpecialUnblock',
                'BlockList' => 'SpecialBlockList',
                'ChangePassword' => 'SpecialChangePassword',
-               'BotPasswords' => 'SpecialBotPasswords',
                'PasswordReset' => 'SpecialPasswordReset',
                'DeletedContributions' => 'DeletedContributionsPage',
                'Preferences' => 'SpecialPreferences',
diff --git a/includes/specials/SpecialBotPasswords.php b/includes/specials/SpecialBotPasswords.php
deleted file mode 100644 (file)
index 93c36ab..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-<?php
-/**
- * Implements Special:BotPasswords
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- */
-
-/**
- * Let users manage bot passwords
- *
- * @ingroup SpecialPage
- */
-class SpecialBotPasswords extends FormSpecialPage {
-
-       /** @var int Central user ID */
-       private $userId = 0;
-
-       /** @var BotPassword|null Bot password being edited, if any */
-       private $botPassword = null;
-
-       /** @var string Operation being performed: create, update, delete */
-       private $operation = null;
-
-       /** @var string New password set, for communication between onSubmit() and onSuccess() */
-       private $password = null;
-
-       public function __construct() {
-               parent::__construct( 'BotPasswords', 'editmyprivateinfo' );
-       }
-
-       /**
-        * @return bool
-        */
-       public function isListed() {
-               return $this->getConfig()->get( 'EnableBotPasswords' );
-       }
-
-       /**
-        * Main execution point
-        * @param string|null $par
-        */
-       function execute( $par ) {
-               $this->getOutput()->disallowUserJs();
-               $this->requireLogin();
-
-               $par = trim( $par );
-               if ( strlen( $par ) === 0 ) {
-                       $par = null;
-               } elseif ( strlen( $par ) > BotPassword::APPID_MAXLENGTH ) {
-                       throw new ErrorPageError( 'botpasswords', 'botpasswords-bad-appid',
-                               array( htmlspecialchars( $par ) ) );
-               }
-
-               parent::execute( $par );
-       }
-
-       protected function checkExecutePermissions( User $user ) {
-               parent::checkExecutePermissions( $user );
-
-               if ( !$this->getConfig()->get( 'EnableBotPasswords' ) ) {
-                       throw new ErrorPageError( 'botpasswords', 'botpasswords-disabled' );
-               }
-
-               $this->userId = CentralIdLookup::factory()->centralIdFromLocalUser( $this->getUser() );
-               if ( !$this->userId ) {
-                       throw new ErrorPageError( 'botpasswords', 'botpasswords-no-central-id' );
-               }
-       }
-
-       protected function getFormFields() {
-               $that = $this;
-               $user = $this->getUser();
-               $request = $this->getRequest();
-
-               $fields = array();
-
-               if ( $this->par !== null ) {
-                       $this->botPassword = BotPassword::newFromCentralId( $this->userId, $this->par );
-                       if ( !$this->botPassword ) {
-                               $this->botPassword = BotPassword::newUnsaved( array(
-                                       'centralId' => $this->userId,
-                                       'appId' => $this->par,
-                               ) );
-                       }
-
-                       $sep = BotPassword::getSeparator();
-                       $fields[] = array(
-                               'type' => 'info',
-                               'label-message' => 'username',
-                               'default' => $this->getUser()->getName() . $sep . $this->par
-                       );
-
-                       if ( $this->botPassword->isSaved() ) {
-                               $fields['resetPassword'] = array(
-                                       'type' => 'check',
-                                       'label-message' => 'botpasswords-label-resetpassword',
-                               );
-                       }
-
-                       $lang = $this->getLanguage();
-                       $showGrants = MWGrants::getValidGrants();
-                       $fields['grants'] = array(
-                               'type' => 'checkmatrix',
-                               'label-message' => 'botpasswords-label-grants',
-                               'help-message' => 'botpasswords-help-grants',
-                               'columns' => array(
-                                       $this->msg( 'botpasswords-label-grants-column' )->escaped() => 'grant'
-                               ),
-                               'rows' => array_combine(
-                                       array_map( 'MWGrants::getGrantsLink', $showGrants ),
-                                       $showGrants
-                               ),
-                               'default' => array_map(
-                                       function( $g ) {
-                                               return "grant-$g";
-                                       },
-                                       $this->botPassword->getGrants()
-                               ),
-                               'tooltips' => array_combine(
-                                       array_map( 'MWGrants::getGrantsLink', $showGrants ),
-                                       array_map(
-                                               function( $rights ) use ( $lang ) {
-                                                       return $lang->semicolonList( array_map( 'User::getRightDescription', $rights ) );
-                                               },
-                                               array_intersect_key( MWGrants::getRightsByGrant(), array_flip( $showGrants ) )
-                                       )
-                               ),
-                               'force-options-on' => array_map(
-                                       function( $g ) {
-                                               return "grant-$g";
-                                       },
-                                       MWGrants::getHiddenGrants()
-                               ),
-                       );
-
-                       $fields['restrictions'] = array(
-                               'type' => 'textarea',
-                               'label-message' => 'botpasswords-label-restrictions',
-                               'required' => true,
-                               'default' => $this->botPassword->getRestrictions()->toJson( true ),
-                               'rows' => 5,
-                               'validation-callback' => function ( $v ) {
-                                       try {
-                                               MWRestrictions::newFromJson( $v );
-                                               return true;
-                                       } catch ( InvalidArgumentException $ex ) {
-                                               return $ex->getMessage();
-                                       }
-                               },
-                       );
-
-               } else {
-                       $dbr = BotPassword::getDB( DB_SLAVE );
-                       $res = $dbr->select(
-                               'bot_passwords',
-                               array( 'bp_app_id' ),
-                               array( 'bp_user' => $this->userId ),
-                               __METHOD__
-                       );
-                       foreach ( $res as $row ) {
-                               $fields[] = array(
-                                       'section' => 'existing',
-                                       'type' => 'info',
-                                       'raw' => true,
-                                       'default' => Linker::link(
-                                               $this->getPageTitle( $row->bp_app_id ),
-                                               htmlspecialchars( $row->bp_app_id ),
-                                               array(),
-                                               array(),
-                                               array( 'known' )
-                                       ),
-                               );
-                       }
-
-                       $fields['appId'] = array(
-                               'section' => 'createnew',
-                               'type' => 'textwithbutton',
-                               'label-message' => 'botpasswords-label-appid',
-                               'buttondefault' => $this->msg( 'botpasswords-label-create' )->text(),
-                               'required' => true,
-                               'size' => BotPassword::APPID_MAXLENGTH,
-                               'maxlength' => BotPassword::APPID_MAXLENGTH,
-                               'validation-callback' => function ( $v ) {
-                                       $v = trim( $v );
-                                       return $v !== '' && strlen( $v ) <= BotPassword::APPID_MAXLENGTH;
-                               },
-                       );
-
-                       $fields[] = array(
-                               'type' => 'hidden',
-                               'default' => 'new',
-                               'name' => 'op',
-                       );
-               }
-
-               return $fields;
-       }
-
-       protected function alterForm( HTMLForm $form ) {
-               $form->setId( 'mw-botpasswords-form' );
-               $form->setTableId( 'mw-botpasswords-table' );
-               $form->addPreText( $this->msg( 'botpasswords-summary' )->parseAsBlock() );
-               $form->suppressDefaultSubmit();
-
-               if ( $this->par !== null ) {
-                       if ( $this->botPassword->isSaved() ) {
-                               $form->setWrapperLegendMsg( 'botpasswords-editexisting' );
-                               $form->addButton( array(
-                                       'name' => 'op',
-                                       'value' => 'update',
-                                       'label-message' => 'botpasswords-label-update',
-                                       'flags' => array( 'primary', 'progressive' ),
-                               ) );
-                               $form->addButton( array(
-                                       'name' => 'op',
-                                       'value' => 'delete',
-                                       'label-message' => 'botpasswords-label-delete',
-                                       'flags' => array( 'destructive' ),
-                               ) );
-                       } else {
-                               $form->setWrapperLegendMsg( 'botpasswords-createnew' );
-                               $form->addButton( array(
-                                       'name' => 'op',
-                                       'value' => 'create',
-                                       'label-message' => 'botpasswords-label-create',
-                                       'flags' => array( 'primary', 'constructive' ),
-                               ) );
-                       }
-
-                       $form->addButton( array(
-                               'name' => 'op',
-                               'value' => 'cancel',
-                               'label-message' => 'botpasswords-label-cancel'
-                       ) );
-               }
-       }
-
-       public function onSubmit( array $data ) {
-               $op = $this->getRequest()->getVal( 'op', '' );
-
-               switch ( $op ) {
-                       case 'new':
-                               $this->getOutput()->redirect( $this->getPageTitle( $data['appId'] )->getFullURL() );
-                               return false;
-
-                       case 'create':
-                               $this->operation = 'insert';
-                               return $this->save( $data );
-
-                       case 'update':
-                               $this->operation = 'update';
-                               return $this->save( $data );
-
-                       case 'delete':
-                               $this->operation = 'delete';
-                               $bp = BotPassword::newFromCentralId( $this->userId, $this->par );
-                               if ( $bp ) {
-                                       $bp->delete();
-                               }
-                               return Status::newGood();
-
-                       case 'cancel':
-                               $this->getOutput()->redirect( $this->getPageTitle()->getFullURL() );
-                               return false;
-               }
-
-               return false;
-       }
-
-       private function save( array $data ) {
-               $bp = BotPassword::newUnsaved( array(
-                       'centralId' => $this->userId,
-                       'appId' => $this->par,
-                       'restrictions' => MWRestrictions::newFromJson( $data['restrictions'] ),
-                       'grants' => array_merge(
-                               MWGrants::getHiddenGrants(),
-                               preg_replace( '/^grant-/', '', $data['grants'] )
-                       )
-               ) );
-
-               if ( $this->operation === 'insert' || !empty( $data['resetPassword'] ) ) {
-                       $this->password = PasswordFactory::generateRandomPasswordString(
-                               max( 32, $this->getConfig()->get( 'MinimalPasswordLength' ) )
-                       );
-                       $passwordFactory = new PasswordFactory();
-                       $passwordFactory->init( RequestContext::getMain()->getConfig() );
-                       $password = $passwordFactory->newFromPlaintext( $this->password );
-               } else {
-                       $password = null;
-               }
-
-               if ( $bp->save( $this->operation, $password ) ) {
-                       return Status::newGood();
-               } else {
-                       // Messages: botpasswords-insert-failed, botpasswords-update-failed
-                       return Status::newFatal( "botpasswords-{$this->operation}-failed", $this->par );
-               }
-       }
-
-       public function onSuccess() {
-               $out = $this->getOutput();
-
-               switch ( $this->operation ) {
-                       case 'insert':
-                               $out->setPageTitle( $this->msg( 'botpasswords-created-title' )->text() );
-                               $out->addWikiMsg( 'botpasswords-created-body', $this->par );
-                               break;
-
-                       case 'update':
-                               $out->setPageTitle( $this->msg( 'botpasswords-updated-title' )->text() );
-                               $out->addWikiMsg( 'botpasswords-updated-body', $this->par );
-                               break;
-
-                       case 'delete':
-                               $out->setPageTitle( $this->msg( 'botpasswords-deleted-title' )->text() );
-                               $out->addWikiMsg( 'botpasswords-deleted-body', $this->par );
-                               $this->password = null;
-                               break;
-               }
-
-               if ( $this->password !== null ) {
-                       $sep = BotPassword::getSeparator();
-                       $out->addWikiMsg(
-                               'botpasswords-newpassword',
-                               htmlspecialchars( $this->getUser()->getName() . $sep . $this->par ),
-                               htmlspecialchars( $this->password )
-                       );
-                       $this->password = null;
-               }
-
-               $out->addReturnTo( $this->getPageTitle() );
-       }
-
-       protected function getGroupName() {
-               return 'users';
-       }
-
-       protected function getDisplayFormat() {
-               return 'ooui';
-       }
-}
index 27d2304..a7e5e02 100644 (file)
@@ -117,9 +117,9 @@ class MovePageForm extends UnlistedSpecialPage {
                $this->moveTalk = $request->getBool( 'wpMovetalk', $def );
                $this->fixRedirects = $request->getBool( 'wpFixRedirects', $def );
                $this->leaveRedirect = $request->getBool( 'wpLeaveRedirect', $def );
-               $this->moveSubpages = $request->getBool( 'wpMovesubpages', false );
-               $this->deleteAndMove = $request->getBool( 'wpDeleteAndMove' ) && $request->getBool( 'wpConfirm' );
-               $this->moveOverShared = $request->getBool( 'wpMoveOverSharedFile', false );
+               $this->moveSubpages = $request->getBool( 'wpMovesubpages' );
+               $this->deleteAndMove = $request->getBool( 'wpDeleteAndMove' );
+               $this->moveOverShared = $request->getBool( 'wpMoveOverSharedFile' );
                $this->watch = $request->getCheck( 'wpWatch' ) && $user->isLoggedIn();
 
                if ( 'submit' == $request->getVal( 'action' ) && $request->wasPosted()
@@ -166,8 +166,8 @@ class MovePageForm extends UnlistedSpecialPage {
                        );
                }
 
-               $submitVar = 'wpMove';
-               $confirm = false;
+               $deleteAndMove = false;
+               $moveOverShared = false;
 
                $newTitle = $this->newTitle;
 
@@ -194,8 +194,7 @@ class MovePageForm extends UnlistedSpecialPage {
                                "<div class='warningbox'>\n$1\n</div>\n",
                                array( 'delete_and_move_text', $newTitle->getPrefixedText() )
                        );
-                       $submitVar = 'wpDeleteAndMove';
-                       $confirm = true;
+                       $deleteAndMove = true;
                        $err = array();
                }
 
@@ -209,7 +208,7 @@ class MovePageForm extends UnlistedSpecialPage {
                                        $newTitle->getPrefixedText()
                                )
                        );
-                       $submitVar = 'wpMoveOverSharedFile';
+                       $moveOverShared = true;
                        $err = array();
                }
 
@@ -440,11 +439,16 @@ class MovePageForm extends UnlistedSpecialPage {
                        );
                }
 
-               if ( $confirm ) {
+               $hiddenFields = '';
+               if ( $moveOverShared ) {
+                       $hiddenFields .= Html::hidden( 'wpMoveOverSharedFile', '1' );
+               }
+
+               if ( $deleteAndMove ) {
                        $fields[] = new OOUI\FieldLayout(
                                new OOUI\CheckboxInputWidget( array(
-                                       'name' => 'wpConfirm',
-                                       'id' => 'wpConfirm',
+                                       'name' => 'wpDeleteAndMove',
+                                       'id' => 'wpDeleteAndMove',
                                        'value' => '1',
                                ) ),
                                array(
@@ -456,7 +460,7 @@ class MovePageForm extends UnlistedSpecialPage {
 
                $fields[] = new OOUI\FieldLayout(
                        new OOUI\ButtonInputWidget( array(
-                               'name' => $submitVar,
+                               'name' => 'wpMove',
                                'value' => $this->msg( 'movepagebtn' )->text(),
                                'label' => $this->msg( 'movepagebtn' )->text(),
                                'flags' => array( 'constructive', 'primary' ),
@@ -481,6 +485,7 @@ class MovePageForm extends UnlistedSpecialPage {
                $form->appendContent(
                        $fieldset,
                        new OOUI\HtmlSnippet(
+                               $hiddenFields .
                                Html::hidden( 'wpOldTitle', $this->oldTitle->getPrefixedText() ) .
                                Html::hidden( 'wpEditToken', $user->getEditToken() )
                        )
index f030231..0bf2485 100644 (file)
@@ -84,10 +84,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $opts->add( 'hideliu', false );
                $opts->add( 'hidepatrolled', $user->getBoolOption( 'hidepatrolled' ) );
                $opts->add( 'hidemyself', false );
-
-               if ( $config->get( 'RCWatchCategoryMembership' ) ) {
-                       $opts->add( 'hidecategorization', $user->getBoolOption( 'hidecategorization' ) );
-               }
+               $opts->add( 'hidecategorization', $user->getBoolOption( 'hidecategorization' ) );
 
                $opts->add( 'categories', '' );
                $opts->add( 'categories_any', false );
index 9473dff..62e200e 100644 (file)
@@ -21,7 +21,6 @@
  * @ingroup SpecialPage
  */
 use MediaWiki\Logger\LoggerFactory;
-use MediaWiki\Session\SessionManager;
 
 /**
  * Implements Special:UserLogin
@@ -268,9 +267,9 @@ class LoginForm extends SpecialPage {
         * @param string|null $subPage
         */
        public function execute( $subPage ) {
-               // Make sure session is persisted
-               $session = MediaWiki\Session\SessionManager::getGlobalSession();
-               $session->persist();
+               if ( session_id() == '' ) {
+                       wfSetupSession();
+               }
 
                $this->load();
 
@@ -281,17 +280,6 @@ class LoginForm extends SpecialPage {
                }
                $this->setHeaders();
 
-               // Make sure it's possible to log in
-               if ( $this->mType !== 'signup' && !$session->canSetUser() ) {
-                       throw new ErrorPageError(
-                               'cannotloginnow-title',
-                               'cannotloginnow-text',
-                               array(
-                                       $session->getProvider()->describe( RequestContext::getMain()->getLanguage() )
-                               )
-                       );
-               }
-
                /**
                 * In the case where the user is already logged in, and was redirected to
                 * the login form from a page that requires login, do not show the login
@@ -1392,7 +1380,7 @@ class LoginForm extends SpecialPage {
                        if ( $user->isLoggedIn() ) {
                                $this->mUsername = $user->getName();
                        } else {
-                               $this->mUsername = $this->getRequest()->getSession()->suggestLoginUsername();
+                               $this->mUsername = $this->getRequest()->getCookie( 'UserName' );
                        }
                }
 
@@ -1566,12 +1554,9 @@ class LoginForm extends SpecialPage {
         * @return bool
         */
        function hasSessionCookie() {
-               global $wgDisableCookieCheck, $wgInitialSessionId;
+               global $wgDisableCookieCheck;
 
-               return $wgDisableCookieCheck || (
-                       $wgInitialSessionId &&
-                       $this->getRequest()->getSession()->getId() === (string)$wgInitialSessionId
-               );
+               return $wgDisableCookieCheck ? true : $this->getRequest()->checkSessionCookie();
        }
 
        /**
@@ -1590,7 +1575,7 @@ class LoginForm extends SpecialPage {
        public static function setLoginToken() {
                global $wgRequest;
                // Generate a token directly instead of using $user->getEditToken()
-               // because the latter reuses wsEditToken in the session
+               // because the latter reuses $_SESSION['wsEditToken']
                $wgRequest->setSessionData( 'wsLoginToken', MWCryptRand::generateHex( 32 ) );
        }
 
@@ -1636,7 +1621,7 @@ class LoginForm extends SpecialPage {
                        $wgCookieSecure = false;
                }
 
-               MediaWiki\Session\SessionManager::getGlobalSession()->resetId();
+               wfResetSessionID();
        }
 
        /**
index 6e34690..722f772 100644 (file)
@@ -48,18 +48,6 @@ class SpecialUserlogout extends UnlistedSpecialPage {
                $this->setHeaders();
                $this->outputHeader();
 
-               // Make sure it's possible to log out
-               $session = MediaWiki\Session\SessionManager::getGlobalSession();
-               if ( !$session->canSetUser() ) {
-                       throw new ErrorPageError(
-                               'cannotlogoutnow-title',
-                               'cannotlogoutnow-text',
-                               array(
-                                       $session->getProvider()->describe( RequestContext::getMain()->getLanguage() )
-                               )
-                       );
-               }
-
                $user = $this->getUser();
                $oldName = $user->getName();
                $user->logout();
index 43228fa..a628902 100644 (file)
@@ -38,12 +38,6 @@ class SpecialVersion extends SpecialPage {
 
        protected static $extensionTypes = false;
 
-       protected static $viewvcUrls = array(
-               'svn+ssh://svn.wikimedia.org/svnroot/mediawiki' => 'http://svn.wikimedia.org/viewvc/mediawiki',
-               'http://svn.wikimedia.org/svnroot/mediawiki' => 'http://svn.wikimedia.org/viewvc/mediawiki',
-               'https://svn.wikimedia.org/svnroot/mediawiki' => 'https://svn.wikimedia.org/viewvc/mediawiki',
-       );
-
        public function __construct() {
                parent::__construct( 'Version' );
        }
@@ -258,7 +252,7 @@ class SpecialVersion extends SpecialPage {
        }
 
        /**
-        * Return a string of the MediaWiki version with SVN revision if available.
+        * Return a string of the MediaWiki version with Git revision if available.
         *
         * @param string $flags
         * @return mixed
@@ -267,25 +261,15 @@ class SpecialVersion extends SpecialPage {
                global $wgVersion, $IP;
 
                $gitInfo = self::getGitHeadSha1( $IP );
-               $svnInfo = self::getSvnInfo( $IP );
-               if ( !$svnInfo && !$gitInfo ) {
+               if ( !$gitInfo ) {
                        $version = $wgVersion;
-               } elseif ( $gitInfo && $flags === 'nodb' ) {
+               } elseif ( $flags === 'nodb' ) {
                        $shortSha1 = substr( $gitInfo, 0, 7 );
                        $version = "$wgVersion ($shortSha1)";
-               } elseif ( $gitInfo ) {
+               } else {
                        $shortSha1 = substr( $gitInfo, 0, 7 );
                        $shortSha1 = wfMessage( 'parentheses' )->params( $shortSha1 )->escaped();
                        $version = "$wgVersion $shortSha1";
-               } elseif ( $flags === 'nodb' ) {
-                       $version = "$wgVersion (r{$svnInfo['checkout-rev']})";
-               } else {
-                       $version = $wgVersion . ' ' .
-                               wfMessage(
-                                       'version-svn-revision',
-                                       isset( $svnInfo['directory-rev'] ) ? $svnInfo['directory-rev'] : '',
-                                       isset( $svnInfo['checkout-rev'] ) ? $svnInfo['checkout-rev'] : ''
-                               )->text();
                }
 
                return $version;
@@ -293,8 +277,7 @@ class SpecialVersion extends SpecialPage {
 
        /**
         * Return a wikitext-formatted string of the MediaWiki version with a link to
-        * the SVN revision or the git SHA1 of head if available.
-        * Git is prefered over Svn
+        * the Git SHA1 of head if available.
         * The fallback is just $wgVersion
         *
         * @return mixed
@@ -306,43 +289,12 @@ class SpecialVersion extends SpecialPage {
                if ( $gitVersion ) {
                        $v = $gitVersion;
                } else {
-                       $svnVersion = self::getVersionLinkedSvn();
-                       if ( $svnVersion ) {
-                               $v = $svnVersion;
-                       } else {
-                               $v = $wgVersion; // fallback
-                       }
+                       $v = $wgVersion; // fallback
                }
 
                return $v;
        }
 
-       /**
-        * @return string Global wgVersion + a link to subversion revision of svn BASE
-        */
-       private static function getVersionLinkedSvn() {
-               global $IP;
-
-               $info = self::getSvnInfo( $IP );
-               if ( !isset( $info['checkout-rev'] ) ) {
-                       return false;
-               }
-
-               $linkText = wfMessage(
-                       'version-svn-revision',
-                       isset( $info['directory-rev'] ) ? $info['directory-rev'] : '',
-                       $info['checkout-rev']
-               )->text();
-
-               if ( isset( $info['viewvc-url'] ) ) {
-                       $version = "[{$info['viewvc-url']} $linkText]";
-               } else {
-                       $version = $linkText;
-               }
-
-               return self::getwgVersionLinked() . " $version";
-       }
-
        /**
         * @return string
         */
@@ -744,7 +696,7 @@ class SpecialVersion extends SpecialPage {
                }
 
                // ... and the version information
-               // If the extension path is set we will check that directory for GIT and SVN
+               // If the extension path is set we will check that directory for GIT
                // metadata in an attempt to extract date and vcs commit metadata.
                $canonicalVersion = '&ndash;';
                $extensionPath = null;
@@ -764,11 +716,6 @@ class SpecialVersion extends SpecialPage {
                                $coreHeadSHA1 = self::getGitHeadSha1( $IP );
                                if ( $coreHeadSHA1 ) {
                                        $this->coreId = $coreHeadSHA1;
-                               } else {
-                                       $svnInfo = self::getSvnInfo( $IP );
-                                       if ( $svnInfo !== false ) {
-                                               $this->coreId = $svnInfo['checkout-rev'];
-                                       }
                                }
                        }
                        $cache = wfGetCache( CACHE_ANYTHING );
@@ -783,12 +730,6 @@ class SpecialVersion extends SpecialPage {
                                        $vcsVersion = substr( $vcsVersion, 0, 7 );
                                        $vcsLink = $gitInfo->getHeadViewUrl();
                                        $vcsDate = $gitInfo->getHeadCommitDate();
-                               } else {
-                                       $svnInfo = self::getSvnInfo( $extensionPath );
-                                       if ( $svnInfo !== false ) {
-                                               $vcsVersion = $this->msg( 'version-svn-revision', $svnInfo['checkout-rev'] )->text();
-                                               $vcsLink = isset( $svnInfo['viewvc-url'] ) ? $svnInfo['viewvc-url'] : '';
-                                       }
                                }
                                $cache->set( $memcKey, array( $vcsVersion, $vcsLink, $vcsDate ), 60 * 60 * 24 );
                        } else {
@@ -1154,108 +1095,6 @@ class SpecialVersion extends SpecialPage {
                }
        }
 
-       /**
-        * Get an associative array of information about a given path, from its .svn
-        * subdirectory. Returns false on error, such as if the directory was not
-        * checked out with subversion.
-        *
-        * Returned keys are:
-        *    Required:
-        *        checkout-rev          The revision which was checked out
-        *    Optional:
-        *        directory-rev         The revision when the directory was last modified
-        *        url                   The subversion URL of the directory
-        *        repo-url              The base URL of the repository
-        *        viewvc-url            A ViewVC URL pointing to the checked-out revision
-        * @param string $dir
-        * @return array|bool
-        */
-       public static function getSvnInfo( $dir ) {
-               // http://svnbook.red-bean.com/nightly/en/svn.developer.insidewc.html
-               $entries = $dir . '/.svn/entries';
-
-               if ( !file_exists( $entries ) ) {
-                       return false;
-               }
-
-               $lines = file( $entries );
-               if ( !count( $lines ) ) {
-                       return false;
-               }
-
-               // check if file is xml (subversion release <= 1.3) or not (subversion release = 1.4)
-               if ( preg_match( '/^<\?xml/', $lines[0] ) ) {
-                       // subversion is release <= 1.3
-                       if ( !function_exists( 'simplexml_load_file' ) ) {
-                               // We could fall back to expat... YUCK
-                               return false;
-                       }
-
-                       // SimpleXml whines about the xmlns...
-                       MediaWiki\suppressWarnings();
-                       $xml = simplexml_load_file( $entries );
-                       MediaWiki\restoreWarnings();
-
-                       if ( $xml ) {
-                               foreach ( $xml->entry as $entry ) {
-                                       if ( $xml->entry[0]['name'] == '' ) {
-                                               // The directory entry should always have a revision marker.
-                                               if ( $entry['revision'] ) {
-                                                       return array( 'checkout-rev' => intval( $entry['revision'] ) );
-                                               }
-                                       }
-                               }
-                       }
-
-                       return false;
-               }
-
-               // Subversion is release 1.4 or above.
-               if ( count( $lines ) < 11 ) {
-                       return false;
-               }
-
-               $info = array(
-                       'checkout-rev' => intval( trim( $lines[3] ) ),
-                       'url' => trim( $lines[4] ),
-                       'repo-url' => trim( $lines[5] ),
-                       'directory-rev' => intval( trim( $lines[10] ) )
-               );
-
-               if ( isset( self::$viewvcUrls[$info['repo-url']] ) ) {
-                       $viewvc = str_replace(
-                               $info['repo-url'],
-                               self::$viewvcUrls[$info['repo-url']],
-                               $info['url']
-                       );
-
-                       $viewvc .= '/?pathrev=';
-                       $viewvc .= urlencode( $info['checkout-rev'] );
-                       $info['viewvc-url'] = $viewvc;
-               }
-
-               return $info;
-       }
-
-       /**
-        * Retrieve the revision number of a Subversion working directory.
-        *
-        * @param string $dir Directory of the svn checkout
-        *
-        * @return int Revision number
-        */
-       public static function getSvnRevision( $dir ) {
-               $info = self::getSvnInfo( $dir );
-
-               if ( $info === false ) {
-                       return false;
-               } elseif ( isset( $info['checkout-rev'] ) ) {
-                       return $info['checkout-rev'];
-               } else {
-                       return false;
-               }
-       }
-
        /**
         * @param string $dir Directory of the git checkout
         * @return bool|string Sha1 of commit HEAD points to
index 6ebe9a8..cc5c150 100644 (file)
@@ -118,10 +118,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                $opts->add( 'hideliu', $user->getBoolOption( 'watchlisthideliu' ) );
                $opts->add( 'hidepatrolled', $user->getBoolOption( 'watchlisthidepatrolled' ) );
                $opts->add( 'hidemyself', $user->getBoolOption( 'watchlisthideown' ) );
-
-               if ( $this->getConfig()->get( 'RCWatchCategoryMembership' ) ) {
-                       $opts->add( 'hidecategorization', $user->getBoolOption( 'watchlisthidecategorization' ) );
-               }
+               $opts->add( 'hidecategorization', $user->getBoolOption( 'watchlisthidecategorization' ) );
 
                return $opts;
        }
diff --git a/includes/user/BotPassword.php b/includes/user/BotPassword.php
deleted file mode 100644 (file)
index 6f713f1..0000000
+++ /dev/null
@@ -1,447 +0,0 @@
-<?php
-/**
- * Utility class for bot passwords
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- */
-
-use MediaWiki\Session\BotPasswordSessionProvider;
-use MediaWiki\Session\SessionInfo;
-
-/**
- * Utility class for bot passwords
- * @since 1.27
- */
-class BotPassword implements IDBAccessObject {
-
-       const APPID_MAXLENGTH = 32;
-
-       /** @var bool */
-       private $isSaved;
-
-       /** @var int */
-       private $centralId;
-
-       /** @var string */
-       private $appId;
-
-       /** @var string */
-       private $token;
-
-       /** @var MWRestrictions */
-       private $restrictions;
-
-       /** @var string[] */
-       private $grants;
-
-       /** @var int */
-       private $flags = self::READ_NORMAL;
-
-       /**
-        * @param object $row bot_passwords database row
-        * @param bool $isSaved Whether the bot password was read from the database
-        * @param int $flags IDBAccessObject read flags
-        */
-       protected function __construct( $row, $isSaved, $flags = self::READ_NORMAL ) {
-               $this->isSaved = $isSaved;
-               $this->flags = $flags;
-
-               $this->centralId = (int)$row->bp_user;
-               $this->appId = $row->bp_app_id;
-               $this->token = $row->bp_token;
-               $this->restrictions = MWRestrictions::newFromJson( $row->bp_restrictions );
-               $this->grants = FormatJson::decode( $row->bp_grants );
-       }
-
-       /**
-        * Get a database connection for the bot passwords database
-        * @param int $db Index of the connection to get, e.g. DB_MASTER or DB_SLAVE.
-        * @return DatabaseBase
-        */
-       public static function getDB( $db ) {
-               global $wgBotPasswordsCluster, $wgBotPasswordsDatabase;
-
-               $lb = $wgBotPasswordsCluster
-                       ? wfGetLBFactory()->getExternalLB( $wgBotPasswordsCluster )
-                       : wfGetLB( $wgBotPasswordsDatabase );
-               return $lb->getConnectionRef( $db, array(), $wgBotPasswordsDatabase );
-       }
-
-       /**
-        * Load a BotPassword from the database
-        * @param User $user
-        * @param string $appId
-        * @param int $flags IDBAccessObject read flags
-        * @return BotPassword|null
-        */
-       public static function newFromUser( User $user, $appId, $flags = self::READ_NORMAL ) {
-               $centralId = CentralIdLookup::factory()->centralIdFromLocalUser(
-                       $user, CentralIdLookup::AUDIENCE_RAW, $flags
-               );
-               return $centralId ? self::newFromCentralId( $centralId, $appId, $flags ) : null;
-       }
-
-       /**
-        * Load a BotPassword from the database
-        * @param int $centralId from CentralIdLookup
-        * @param string $appId
-        * @param int $flags IDBAccessObject read flags
-        * @return BotPassword|null
-        */
-       public static function newFromCentralId( $centralId, $appId, $flags = self::READ_NORMAL ) {
-               global $wgEnableBotPasswords;
-
-               if ( !$wgEnableBotPasswords ) {
-                       return null;
-               }
-
-               list( $index, $options ) = DBAccessObjectUtils::getDBOptions( $flags );
-               $db = self::getDB( $index );
-               $row = $db->selectRow(
-                       'bot_passwords',
-                       array( 'bp_user', 'bp_app_id', 'bp_token', 'bp_restrictions', 'bp_grants' ),
-                       array( 'bp_user' => $centralId, 'bp_app_id' => $appId ),
-                       __METHOD__,
-                       $options
-               );
-               return $row ? new self( $row, true, $flags ) : null;
-       }
-
-       /**
-        * Create an unsaved BotPassword
-        * @param array $data Data to use to create the bot password. Keys are:
-        *  - user: (User) User object to create the password for. Overrides username and centralId.
-        *  - username: (string) Username to create the password for. Overrides centralId.
-        *  - centralId: (int) User central ID to create the password for.
-        *  - appId: (string) App ID for the password.
-        *  - restrictions: (MWRestrictions, optional) Restrictions.
-        *  - grants: (string[], optional) Grants.
-        * @param int $flags IDBAccessObject read flags
-        * @return BotPassword|null
-        */
-       public static function newUnsaved( array $data, $flags = self::READ_NORMAL ) {
-               $row = (object)array(
-                       'bp_user' => 0,
-                       'bp_app_id' => isset( $data['appId'] ) ? trim( $data['appId'] ) : '',
-                       'bp_token' => '**unsaved**',
-                       'bp_restrictions' => isset( $data['restrictions'] )
-                               ? $data['restrictions']
-                               : MWRestrictions::newDefault(),
-                       'bp_grants' => isset( $data['grants'] ) ? $data['grants'] : array(),
-               );
-
-               if (
-                       $row->bp_app_id === '' || strlen( $row->bp_app_id ) > self::APPID_MAXLENGTH ||
-                       !$row->bp_restrictions instanceof MWRestrictions ||
-                       !is_array( $row->bp_grants )
-               ) {
-                       return null;
-               }
-
-               $row->bp_restrictions = $row->bp_restrictions->toJson();
-               $row->bp_grants = FormatJson::encode( $row->bp_grants );
-
-               if ( isset( $data['user'] ) ) {
-                       if ( !$data['user'] instanceof User ) {
-                               return null;
-                       }
-                       $row->bp_user = CentralIdLookup::factory()->centralIdFromLocalUser(
-                               $data['user'], CentralIdLookup::AUDIENCE_RAW, $flags
-                       );
-               } elseif ( isset( $data['username'] ) ) {
-                       $row->bp_user = CentralIdLookup::factory()->centralIdFromName(
-                               $data['username'], CentralIdLookup::AUDIENCE_RAW, $flags
-                       );
-               } elseif ( isset( $data['centralId'] ) ) {
-                       $row->bp_user = $data['centralId'];
-               }
-               if ( !$row->bp_user ) {
-                       return null;
-               }
-
-               return new self( $row, false, $flags );
-       }
-
-       /**
-        * Indicate whether this is known to be saved
-        * @return bool
-        */
-       public function isSaved() {
-               return $this->isSaved;
-       }
-
-       /**
-        * Get the central user ID
-        * @return int
-        */
-       public function getUserCentralId() {
-               return $this->centralId;
-       }
-
-       /**
-        * Get the app ID
-        * @return string
-        */
-       public function getAppId() {
-               return $this->appId;
-       }
-
-       /**
-        * Get the token
-        * @return string
-        */
-       public function getToken() {
-               return $this->token;
-       }
-
-       /**
-        * Get the restrictions
-        * @return MWRestrictions
-        */
-       public function getRestrictions() {
-               return $this->restrictions;
-       }
-
-       /**
-        * Get the grants
-        * @return string[]
-        */
-       public function getGrants() {
-               return $this->grants;
-       }
-
-       /**
-        * Get the separator for combined user name + app ID
-        * @return string
-        */
-       public static function getSeparator() {
-               global $wgUserrightsInterwikiDelimiter;
-               return $wgUserrightsInterwikiDelimiter;
-       }
-
-       /**
-        * Get the password
-        * @return Password
-        */
-       protected function getPassword() {
-               list( $index, $options ) = DBAccessObjectUtils::getDBOptions( $this->flags );
-               $db = self::getDB( $index );
-               $password = $db->selectField(
-                       'bot_passwords',
-                       'bp_password',
-                       array( 'bp_user' => $this->centralId, 'bp_app_id' => $this->appId ),
-                       __METHOD__,
-                       $options
-               );
-               if ( $password === false ) {
-                       return PasswordFactory::newInvalidPassword();
-               }
-
-               $passwordFactory = new \PasswordFactory();
-               $passwordFactory->init( \RequestContext::getMain()->getConfig() );
-               try {
-                       return $passwordFactory->newFromCiphertext( $password );
-               } catch ( PasswordError $ex ) {
-                       return PasswordFactory::newInvalidPassword();
-               }
-       }
-
-       /**
-        * Save the BotPassword to the database
-        * @param string $operation 'update' or 'insert'
-        * @param Password|null $password Password to set.
-        * @return bool Success
-        */
-       public function save( $operation, Password $password = null ) {
-               $conds = array(
-                       'bp_user' => $this->centralId,
-                       'bp_app_id' => $this->appId,
-               );
-               $fields = array(
-                       'bp_token' => MWCryptRand::generateHex( User::TOKEN_LENGTH ),
-                       'bp_restrictions' => $this->restrictions->toJson(),
-                       'bp_grants' => FormatJson::encode( $this->grants ),
-               );
-
-               if ( $password !== null ) {
-                       $fields['bp_password'] = $password->toString();
-               } elseif ( $operation === 'insert' ) {
-                       $fields['bp_password'] = PasswordFactory::newInvalidPassword()->toString();
-               }
-
-               $dbw = self::getDB( DB_MASTER );
-               switch ( $operation ) {
-                       case 'insert':
-                               $dbw->insert( 'bot_passwords', $fields + $conds, __METHOD__, array( 'IGNORE' ) );
-                               break;
-
-                       case 'update':
-                               $dbw->update( 'bot_passwords', $fields, $conds, __METHOD__ );
-                               break;
-
-                       default:
-                               return false;
-               }
-               $ok = (bool)$dbw->affectedRows();
-               if ( $ok ) {
-                       $this->token = $dbw->selectField( 'bot_passwords', 'bp_token', $conds, __METHOD__ );
-                       $this->isSaved = true;
-               }
-               return $ok;
-       }
-
-       /**
-        * Delete the BotPassword from the database
-        * @return bool Success
-        */
-       public function delete() {
-               $conds = array(
-                       'bp_user' => $this->centralId,
-                       'bp_app_id' => $this->appId,
-               );
-               $dbw = self::getDB( DB_MASTER );
-               $dbw->delete( 'bot_passwords', $conds, __METHOD__ );
-               $ok = (bool)$dbw->affectedRows();
-               if ( $ok ) {
-                       $this->token = '**unsaved**';
-                       $this->isSaved = false;
-               }
-               return $ok;
-       }
-
-       /**
-        * Invalidate all passwords for a user, by name
-        * @param string $username User name
-        * @return bool Whether any passwords were invalidated
-        */
-       public static function invalidateAllPasswordsForUser( $username ) {
-               $centralId = CentralIdLookup::factory()->centralIdFromName(
-                       $username, CentralIdLookup::AUDIENCE_RAW, CentralIdLookup::READ_LATEST
-               );
-               return $centralId && self::invalidateAllPasswordsForCentralId( $centralId );
-       }
-
-       /**
-        * Invalidate all passwords for a user, by central ID
-        * @param int $centralId
-        * @return bool Whether any passwords were invalidated
-        */
-       public static function invalidateAllPasswordsForCentralId( $centralId ) {
-               global $wgEnableBotPasswords;
-
-               if ( !$wgEnableBotPasswords ) {
-                       return false;
-               }
-
-               $dbw = self::getDB( DB_MASTER );
-               $dbw->update(
-                       'bot_passwords',
-                       array( 'bp_password' => PasswordFactory::newInvalidPassword()->toString() ),
-                       array( 'bp_user' => $centralId ),
-                       __METHOD__
-               );
-               return (bool)$dbw->affectedRows();
-       }
-
-       /**
-        * Remove all passwords for a user, by name
-        * @param string $username User name
-        * @return bool Whether any passwords were removed
-        */
-       public static function removeAllPasswordsForUser( $username ) {
-               $centralId = CentralIdLookup::factory()->centralIdFromName(
-                       $username, CentralIdLookup::AUDIENCE_RAW, CentralIdLookup::READ_LATEST
-               );
-               return $centralId && self::removeAllPasswordsForCentralId( $centralId );
-       }
-
-       /**
-        * Remove all passwords for a user, by central ID
-        * @param int $centralId
-        * @return bool Whether any passwords were removed
-        */
-       public static function removeAllPasswordsForCentralId( $centralId ) {
-               global $wgEnableBotPasswords;
-
-               if ( !$wgEnableBotPasswords ) {
-                       return false;
-               }
-
-               $dbw = self::getDB( DB_MASTER );
-               $dbw->delete(
-                       'bot_passwords',
-                       array( 'bp_user' => $centralId ),
-                       __METHOD__
-               );
-               return (bool)$dbw->affectedRows();
-       }
-
-       /**
-        * Try to log the user in
-        * @param string $username Combined user name and app ID
-        * @param string $password Supplied password
-        * @param WebRequest $request
-        * @return Status On success, the good status's value is the new Session object
-        */
-       public static function login( $username, $password, WebRequest $request ) {
-               global $wgEnableBotPasswords;
-
-               if ( !$wgEnableBotPasswords ) {
-                       return Status::newFatal( 'botpasswords-disabled' );
-               }
-
-               $manager = MediaWiki\Session\SessionManager::singleton();
-               $provider = $manager->getProvider(
-                       'MediaWiki\\Session\\BotPasswordSessionProvider'
-               );
-               if ( !$provider ) {
-                       return Status::newFatal( 'botpasswords-no-provider' );
-               }
-
-               // Split name into name+appId
-               $sep = self::getSeparator();
-               if ( strpos( $username, $sep ) === false ) {
-                       return Status::newFatal( 'botpasswords-invalid-name', $sep );
-               }
-               list( $name, $appId ) = explode( $sep, $username, 2 );
-
-               // Find the named user
-               $user = User::newFromName( $name );
-               if ( !$user || $user->isAnon() ) {
-                       return Status::newFatal( 'nosuchuser', $name );
-               }
-
-               // Get the bot password
-               $bp = self::newFromUser( $user, $appId );
-               if ( !$bp ) {
-                       return Status::newFatal( 'botpasswords-not-exist', $name, $appId );
-               }
-
-               // Check restrictions
-               $status = $bp->getRestrictions()->check( $request );
-               if ( !$status->isOk() ) {
-                       return Status::newFatal( 'botpasswords-restriction-failed' );
-               }
-
-               // Check the password
-               if ( !$bp->getPassword()->equals( $password ) ) {
-                       return Status::newFatal( 'wrongpassword' );
-               }
-
-               // Ok! Create the session.
-               return Status::newGood( $provider->newSessionForRequest( $user, $bp, $request ) );
-       }
-}
index 2fadd6b..d71e5e1 100644 (file)
@@ -20,8 +20,6 @@
  * @file
  */
 
-use MediaWiki\Session\SessionManager;
-
 /**
  * String Some punctuation to prevent editing from broken text-mangling proxies.
  * @ingroup Constants
@@ -101,7 +99,6 @@ class User implements IDBAccessObject {
                'apihighlimits',
                'applychangetags',
                'autoconfirmed',
-               'autocreateaccount',
                'autopatrol',
                'bigdelete',
                'block',
@@ -229,7 +226,7 @@ class User implements IDBAccessObject {
         *  - 'defaults'   anonymous user initialised from class defaults
         *  - 'name'       initialise from mName
         *  - 'id'         initialise from mId
-        *  - 'session'    log in from session if possible
+        *  - 'session'    log in from cookies or session if possible
         *
         * Use the User::newFrom*() family of functions to set this.
         */
@@ -313,28 +310,14 @@ class User implements IDBAccessObject {
         * @param integer $flags User::READ_* constant bitfield
         */
        public function load( $flags = self::READ_NORMAL ) {
-               global $wgFullyInitialised;
-
                if ( $this->mLoadedItems === true ) {
                        return;
                }
 
                // Set it now to avoid infinite recursion in accessors
-               $oldLoadedItems = $this->mLoadedItems;
                $this->mLoadedItems = true;
                $this->queryFlagsUsed = $flags;
 
-               // If this is called too early, things are likely to break.
-               if ( $this->mFrom === 'session' && empty( $wgFullyInitialised ) ) {
-                       \MediaWiki\Logger\LoggerFactory::getInstance( 'session' )
-                               ->warning( 'User::loadFromSession called before the end of Setup.php', array(
-                                       'exception' => new Exception( 'User::loadFromSession called before the end of Setup.php' ),
-                               ) );
-                       $this->loadDefaults();
-                       $this->mLoadedItems = $oldLoadedItems;
-                       return;
-               }
-
                switch ( $this->mFrom ) {
                        case 'defaults':
                                $this->loadDefaults();
@@ -557,8 +540,8 @@ class User implements IDBAccessObject {
        }
 
        /**
-        * Create a new user object using data from session. If the login
-        * credentials are invalid, the result is an anonymous user.
+        * Create a new user object using data from session or cookies. If the
+        * login credentials are invalid, the result is an anonymous user.
         *
         * @param WebRequest|null $request Object to use; $wgRequest will be used if omitted.
         * @return User
@@ -678,8 +661,6 @@ class User implements IDBAccessObject {
                        $user->saveSettings();
                }
 
-               SessionManager::singleton()->preventSessionsForUser( $user->getName() );
-
                return $user;
        }
 
@@ -1087,8 +1068,8 @@ class User implements IDBAccessObject {
                $this->mOptionOverrides = null;
                $this->mOptionsLoaded = false;
 
-               $loggedOut = $this->mRequest ? $this->mRequest->getSession()->getLoggedOutTimestamp() : 0;
-               if ( $loggedOut !== 0 ) {
+               $loggedOut = $this->getRequest()->getCookie( 'LoggedOut' );
+               if ( $loggedOut !== null ) {
                        $this->mTouched = wfTimestamp( TS_MW, $loggedOut );
                } else {
                        $this->mTouched = '1'; # Allow any pages to be cached
@@ -1133,32 +1114,84 @@ class User implements IDBAccessObject {
        }
 
        /**
-        * Load user data from the session.
+        * Load user data from the session or login cookie.
         *
         * @return bool True if the user is logged in, false otherwise.
         */
        private function loadFromSession() {
-               // Deprecated hook
                $result = null;
-               Hooks::run( 'UserLoadFromSession', array( $this, &$result ), '1.27' );
+               Hooks::run( 'UserLoadFromSession', array( $this, &$result ) );
                if ( $result !== null ) {
                        return $result;
                }
 
-               // MediaWiki\Session\Session already did the necessary authentication of the user
-               // returned here, so just use it if applicable.
-               $session = $this->getRequest()->getSession();
-               $user = $session->getUser();
-               if ( $user->isLoggedIn() ) {
-                       $this->loadFromUserObject( $user );
-                       // Other code expects these to be set in the session, so set them.
-                       $session->set( 'wsUserID', $this->getId() );
-                       $session->set( 'wsUserName', $this->getName() );
-                       $session->set( 'wsToken', $this->mToken );
-                       return true;
+               $request = $this->getRequest();
+
+               $cookieId = $request->getCookie( 'UserID' );
+               $sessId = $request->getSessionData( 'wsUserID' );
+
+               if ( $cookieId !== null ) {
+                       $sId = intval( $cookieId );
+                       if ( $sessId !== null && $cookieId != $sessId ) {
+                               wfDebugLog( 'loginSessions', "Session user ID ($sessId) and
+                                       cookie user ID ($sId) don't match!" );
+                               return false;
+                       }
+                       $request->setSessionData( 'wsUserID', $sId );
+               } elseif ( $sessId !== null && $sessId != 0 ) {
+                       $sId = $sessId;
+               } else {
+                       return false;
                }
 
-               return false;
+               if ( $request->getSessionData( 'wsUserName' ) !== null ) {
+                       $sName = $request->getSessionData( 'wsUserName' );
+               } elseif ( $request->getCookie( 'UserName' ) !== null ) {
+                       $sName = $request->getCookie( 'UserName' );
+                       $request->setSessionData( 'wsUserName', $sName );
+               } else {
+                       return false;
+               }
+
+               $proposedUser = User::newFromId( $sId );
+               if ( !$proposedUser->isLoggedIn() ) {
+                       // Not a valid ID
+                       return false;
+               }
+
+               global $wgBlockDisablesLogin;
+               if ( $wgBlockDisablesLogin && $proposedUser->isBlocked() ) {
+                       // User blocked and we've disabled blocked user logins
+                       return false;
+               }
+
+               if ( $request->getSessionData( 'wsToken' ) ) {
+                       $passwordCorrect =
+                               ( $proposedUser->getToken( false ) === $request->getSessionData( 'wsToken' ) );
+                       $from = 'session';
+               } elseif ( $request->getCookie( 'Token' ) ) {
+                       # Get the token from DB/cache and clean it up to remove garbage padding.
+                       # This deals with historical problems with bugs and the default column value.
+                       $token = rtrim( $proposedUser->getToken( false ) ); // correct token
+                       // Make comparison in constant time (bug 61346)
+                       $passwordCorrect = strlen( $token )
+                               && hash_equals( $token, $request->getCookie( 'Token' ) );
+                       $from = 'cookie';
+               } else {
+                       // No session or persistent login cookie
+                       return false;
+               }
+
+               if ( ( $sName === $proposedUser->getName() ) && $passwordCorrect ) {
+                       $this->loadFromUserObject( $proposedUser );
+                       $request->setSessionData( 'wsToken', $this->mToken );
+                       wfDebug( "User: logged in from $from\n" );
+                       return true;
+               } else {
+                       // Invalid credentials
+                       wfDebug( "User: can't log in from $from, invalid credentials\n" );
+                       return false;
+               }
        }
 
        /**
@@ -1259,12 +1292,20 @@ class User implements IDBAccessObject {
                        $all = false;
                }
 
-               if ( isset( $row->user_email ) ) {
-                       $this->mEmail = $row->user_email;
-                       $this->mToken = $row->user_token;
-                       if ( $this->mToken == '' ) {
+               if ( isset( $row->user_token ) ) {
+                       // The definition for the column is binary(32), so trim the NULs
+                       // that appends. The previous definition was char(32), so trim
+                       // spaces too.
+                       $this->mToken = rtrim( $row->user_token, " \0" );
+                       if ( $this->mToken === '' ) {
                                $this->mToken = null;
                        }
+               } else {
+                       $all = false;
+               }
+
+               if ( isset( $row->user_email ) ) {
+                       $this->mEmail = $row->user_email;
                        $this->mEmailAuthenticated = wfTimestampOrNull( TS_MW, $row->user_email_authenticated );
                        $this->mEmailToken = $row->user_email_token;
                        $this->mEmailTokenExpires = wfTimestampOrNull( TS_MW, $row->user_email_token_expires );
@@ -2410,9 +2451,6 @@ class User implements IDBAccessObject {
                        ),
                        __METHOD__
                );
-
-               // When the main password is changed, invalidate all bot passwords too
-               BotPassword::invalidateAllPasswordsForUser( $this->getName() );
        }
 
        /**
@@ -2986,12 +3024,6 @@ class User implements IDBAccessObject {
        public function getRights() {
                if ( is_null( $this->mRights ) ) {
                        $this->mRights = self::getGroupPermissions( $this->getEffectiveGroups() );
-
-                       $allowedRights = $this->getRequest()->getSession()->getAllowedUserRights();
-                       if ( $allowedRights !== null ) {
-                               $this->mRights = array_intersect( $this->mRights, $allowedRights );
-                       }
-
                        Hooks::run( 'UserGetRights', array( $this, &$this->mRights ) );
                        // Force reindexation of rights when a hook has unset one of them
                        $this->mRights = array_values( array_unique( $this->mRights ) );
@@ -3431,7 +3463,7 @@ class User implements IDBAccessObject {
                }
 
                $this->getWatchedItem( $title )->resetNotificationTimestamp(
-                       $force, $oldid, WatchedItem::DEFERRED
+                       $force, $oldid
                );
        }
 
@@ -3472,7 +3504,6 @@ class User implements IDBAccessObject {
        /**
         * Set a cookie on the user's client. Wrapper for
         * WebResponse::setCookie
-        * @deprecated since 1.27
         * @param string $name Name of the cookie to set
         * @param string $value Value to set
         * @param int $exp Expiration time, as a UNIX time value;
@@ -3488,7 +3519,6 @@ class User implements IDBAccessObject {
        protected function setCookie(
                $name, $value, $exp = 0, $secure = null, $params = array(), $request = null
        ) {
-               wfDeprecated( __METHOD__, '1.27' );
                if ( $request === null ) {
                        $request = $this->getRequest();
                }
@@ -3498,7 +3528,6 @@ class User implements IDBAccessObject {
 
        /**
         * Clear a cookie on the user's client
-        * @deprecated since 1.27
         * @param string $name Name of the cookie to clear
         * @param bool $secure
         *  true: Force setting the secure attribute when setting the cookie
@@ -3507,7 +3536,6 @@ class User implements IDBAccessObject {
         * @param array $params Array of options sent passed to WebResponse::setcookie()
         */
        protected function clearCookie( $name, $secure = null, $params = array() ) {
-               wfDeprecated( __METHOD__, '1.27' );
                $this->setCookie( $name, '', time() - 86400, $secure, $params );
        }
 
@@ -3518,7 +3546,6 @@ class User implements IDBAccessObject {
         *
         * @see User::setCookie
         *
-        * @deprecated since 1.27
         * @param string $name Name of the cookie to set
         * @param string $value Value to set
         * @param bool $secure
@@ -3529,8 +3556,6 @@ class User implements IDBAccessObject {
        protected function setExtendedLoginCookie( $name, $value, $secure ) {
                global $wgExtendedLoginCookieExpiration, $wgCookieExpiration;
 
-               wfDeprecated( __METHOD__, '1.27' );
-
                $exp = time();
                $exp += $wgExtendedLoginCookieExpiration !== null
                        ? $wgExtendedLoginCookieExpiration
@@ -3540,7 +3565,7 @@ class User implements IDBAccessObject {
        }
 
        /**
-        * Persist this user's session (e.g. set cookies)
+        * Set the default cookies for this session on the user's client.
         *
         * @param WebRequest|null $request WebRequest object to use; $wgRequest will be used if null
         *        is passed.
@@ -3548,36 +3573,72 @@ class User implements IDBAccessObject {
         * @param bool $rememberMe Whether to add a Token cookie for elongated sessions
         */
        public function setCookies( $request = null, $secure = null, $rememberMe = false ) {
+               global $wgExtendedLoginCookies;
+
+               if ( $request === null ) {
+                       $request = $this->getRequest();
+               }
+
                $this->load();
                if ( 0 == $this->mId ) {
                        return;
                }
-
-               $session = $this->getRequest()->getSession();
-               if ( $request && $session->getRequest() !== $request ) {
-                       $session = $session->sessionWithRequest( $request );
+               if ( !$this->mToken ) {
+                       // When token is empty or NULL generate a new one and then save it to the database
+                       // This allows a wiki to re-secure itself after a leak of it's user table or $wgSecretKey
+                       // Simply by setting every cell in the user_token column to NULL and letting them be
+                       // regenerated as users log back into the wiki.
+                       $this->setToken();
+                       if ( !wfReadOnly() ) {
+                               $this->saveSettings();
+                       }
+               }
+               $session = array(
+                       'wsUserID' => $this->mId,
+                       'wsToken' => $this->mToken,
+                       'wsUserName' => $this->getName()
+               );
+               $cookies = array(
+                       'UserID' => $this->mId,
+                       'UserName' => $this->getName(),
+               );
+               if ( $rememberMe ) {
+                       $cookies['Token'] = $this->mToken;
+               } else {
+                       $cookies['Token'] = false;
                }
-               $delay = $session->delaySave();
 
-               if ( !$session->getUser()->equals( $this ) ) {
-                       if ( !$session->canSetUser() ) {
-                               \MediaWiki\Logger\LoggerFactory::getInstance( 'session' )
-                                       ->warning( __METHOD__ .
-                                               ": Cannot save user \"$this\" to a user \"{$session->getUser()}\"'s immutable session"
-                                       );
-                               return;
+               Hooks::run( 'UserSetCookies', array( $this, &$session, &$cookies ) );
+
+               foreach ( $session as $name => $value ) {
+                       $request->setSessionData( $name, $value );
+               }
+               foreach ( $cookies as $name => $value ) {
+                       if ( $value === false ) {
+                               $this->clearCookie( $name );
+                       } elseif ( $rememberMe && in_array( $name, $wgExtendedLoginCookies ) ) {
+                               $this->setExtendedLoginCookie( $name, $value, $secure );
+                       } else {
+                               $this->setCookie( $name, $value, 0, $secure, array(), $request );
                        }
-                       $session->setUser( $this );
                }
 
-               $session->setRememberUser( $rememberMe );
-               if ( $secure !== null ) {
-                       $session->setForceHTTPS( $secure );
+               /**
+                * If wpStickHTTPS was selected, also set an insecure cookie that
+                * will cause the site to redirect the user to HTTPS, if they access
+                * it over HTTP. Bug 29898. Use an un-prefixed cookie, so it's the same
+                * as the one set by centralauth (bug 53538). Also set it to session, or
+                * standard time setting, based on if rememberme was set.
+                */
+               if ( $request->getCheck( 'wpStickHTTPS' ) || $this->requiresHTTPS() ) {
+                       $this->setCookie(
+                               'forceHTTPS',
+                               'true',
+                               $rememberMe ? 0 : null,
+                               false,
+                               array( 'prefix' => '' ) // no prefix
+                       );
                }
-
-               $session->persist();
-
-               ScopedCallback::consume( $delay );
        }
 
        /**
@@ -3590,29 +3651,20 @@ class User implements IDBAccessObject {
        }
 
        /**
-        * Clear the user's session, and reset the instance cache.
+        * Clear the user's cookies and session, and reset the instance cache.
         * @see logout()
         */
        public function doLogout() {
-               $session = $this->getRequest()->getSession();
-               if ( !$session->canSetUser() ) {
-                       \MediaWiki\Logger\LoggerFactory::getInstance( 'session' )
-                               ->warning( __METHOD__ . ": Cannot log out of an immutable session" );
-               } elseif ( !$session->getUser()->equals( $this ) ) {
-                       \MediaWiki\Logger\LoggerFactory::getInstance( 'session' )
-                               ->warning( __METHOD__ .
-                                       ": Cannot log user \"$this\" out of a user \"{$session->getUser()}\"'s session"
-                               );
-                       // But we still may as well make this user object anon
-                       $this->clearInstanceCache( 'defaults' );
-               } else {
-                       $this->clearInstanceCache( 'defaults' );
-                       $delay = $session->delaySave();
-                       $session->setLoggedOutTimestamp( time() );
-                       $session->setUser( new User );
-                       $session->set( 'wsUserID', 0 ); // Other code expects this
-                       ScopedCallback::consume( $delay );
-               }
+               $this->clearInstanceCache( 'defaults' );
+
+               $this->getRequest()->setSessionData( 'wsUserID', 0 );
+
+               $this->clearCookie( 'UserID' );
+               $this->clearCookie( 'Token' );
+               $this->clearCookie( 'forceHTTPS', false, array( 'prefix' => '' ) );
+
+               // Remember when user logged out, to prevent seeing cached pages
+               $this->setCookie( 'LoggedOut', time(), time() + 86400 );
        }
 
        /**
@@ -4545,13 +4597,6 @@ class User implements IDBAccessObject {
                        }
                }
 
-               // Remove any rights that aren't allowed to the global-session user
-               $allowedRights = SessionManager::getGlobalSession()->getAllowedUserRights();
-               if ( $allowedRights !== null && !in_array( $right, $allowedRights, true ) ) {
-                       $cache[$right] = false;
-                       return false;
-               }
-
                // Allow extensions to say false
                if ( !Hooks::run( 'UserIsEveryoneAllowed', array( $right ) ) ) {
                        $cache[$right] = false;
index 13cab5b..ffb7053 100644 (file)
@@ -66,6 +66,6 @@ class BatchRowWriter {
                }
 
                $this->db->commit();
-               wfWaitForSlaves( false, false, $this->clusterName );
+               wfGetLBFactory()->waitForReplication();
        }
 }
index cb2d24f..42c5a57 100644 (file)
@@ -383,20 +383,13 @@ class Language {
         * @return bool
         */
        public static function isKnownLanguageTag( $tag ) {
-               static $coreLanguageNames;
-
                // Quick escape for invalid input to avoid exceptions down the line
                // when code tries to process tags which are not valid at all.
                if ( !self::isValidBuiltInCode( $tag ) ) {
                        return false;
                }
 
-               if ( $coreLanguageNames === null ) {
-                       global $IP;
-                       include "$IP/languages/Names.php";
-               }
-
-               if ( isset( $coreLanguageNames[$tag] )
+               if ( isset( MediaWiki\Languages\Data\Names::$names[$tag] )
                        || self::fetchLanguageName( $tag, $tag ) !== ''
                ) {
                        return true;
@@ -874,12 +867,6 @@ class Language {
         */
        private static function fetchLanguageNamesUncached( $inLanguage = null, $include = 'mw' ) {
                global $wgExtraLanguageNames;
-               static $coreLanguageNames;
-
-               if ( $coreLanguageNames === null ) {
-                       global $IP;
-                       include "$IP/languages/Names.php";
-               }
 
                // If passed an invalid language code to use, fallback to en
                if ( $inLanguage !== null && !Language::isValidCode( $inLanguage ) ) {
@@ -893,7 +880,7 @@ class Language {
                        Hooks::run( 'LanguageGetTranslatedLanguageNames', array( &$names, $inLanguage ) );
                }
 
-               $mwNames = $wgExtraLanguageNames + $coreLanguageNames;
+               $mwNames = $wgExtraLanguageNames + MediaWiki\Languages\Data\Names::$names;
                foreach ( $mwNames as $mwCode => $mwName ) {
                        # - Prefer own MediaWiki native name when not using the hook
                        # - For other names just add if not added through the hook
diff --git a/languages/Names.php b/languages/Names.php
deleted file mode 100644 (file)
index c27755e..0000000
+++ /dev/null
@@ -1,458 +0,0 @@
-<?php
-/**
- * Language names.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * These determine things like interwikis, language selectors, and so on.
- * Safe to change without running scripts on the respective sites.
- *
- * \xE2\x80\x8E is the left-to-right marker and
- * \xE2\x80\x8F is the right-to-left marker.
- * They are required for ensuring the correct display of brackets in
- * mixed rtl/ltr environment.
- *
- * Some writing systems require some line-height fixes. This includes
- * most Indic scripts, like Devanagari.
- * If you are adding support for such a language, add it also to
- * the relevant section in shared.css.
- *
- * @ingroup Language
- */
-/* private */ $coreLanguageNames = array(
-       'aa' => 'Qafár af',    # Afar
-       'ab' => 'Аҧсшәа', # Abkhaz
-       'ace' => 'Acèh',       # Aceh
-       'ady' => 'адыгабзэ',    # Adyghe
-       'ady-cyrl' => 'адыгабзэ',       # Adyghe
-       'aeb' => 'تونسي/Tûnsî',  # Tunisian Arabic (multiple scripts - defaults to Arabic)
-       'aeb-arab' => 'تونسي',     # Tunisian Arabic (Arabic Script)
-       'aeb-latn' => 'Tûnsî',        # Tunisian Arabic (Latin Script)
-       'af' => 'Afrikaans',    # Afrikaans
-       'ak' => 'Akan',         # Akan
-       'aln' => 'Gegë',       # Gheg Albanian
-       'als' => 'Alemannisch', # Alemannic -- not a valid code, for compatibility. See gsw.
-       'am' => 'አማርኛ', # Amharic
-       'an' => 'aragonés',    # Aragonese
-       'ang' => 'Ænglisc',    # Old English, bug 23283
-       'anp' => 'अङ्गिका',       # Angika
-       'ar' => 'العربية',       # Arabic
-       'arc' => 'ܐܪܡܝܐ',  # Aramaic
-       'arn' => 'mapudungun',  # Mapuche, Mapudungu, Araucanian (Araucano)
-       'arq' => 'جازايرية', # Algerian Spoken Arabic
-       'ary' => 'Maġribi',    # Moroccan Spoken Arabic
-       'arz' => 'مصرى',    # Egyptian Spoken Arabic
-       'as' => 'অসমীয়া',        # Assamese
-       'ase' => 'American sign language',      # American sign language
-       'ast' => 'asturianu',   # Asturian
-       'av' => 'авар',     # Avar
-       'avk' => 'Kotava', # Kotava
-       'awa' => 'अवधी',        # Awadhi
-       'ay' => 'Aymar aru',    # Aymara
-       'az' => 'azərbaycanca',        # Azerbaijani
-       'azb' => 'تۆرکجه',        # South Azerbaijani
-       'ba' => 'башҡортса',   # Bashkir
-       'bar' => 'Boarisch',    # Bavarian (Austro-Bavarian and South Tyrolean)
-       'bat-smg' => 'žemaitėška', # Samogitian (deprecated code, 'sgs' in ISO 693-3 since 2010-06-30 )
-       'bbc' => 'Batak Toba', # Batak Toba (falls back to bbc-latn)
-       'bbc-latn' => 'Batak Toba', # Batak Toba
-       'bcc' => 'جهلسری بلوچی', # Southern Balochi
-       'bcl' => 'Bikol Central', # Bikol: Central Bicolano language
-       'be' => 'беларуская', #  Belarusian normative
-       'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E",     # Belarusian in Taraskievica orthography
-       'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E",      # (be-tarask compat)
-       'bg' => 'български',   # Bulgarian
-       'bgn' => 'روچ کپتین بلوچی', # Western Balochi
-       'bh' => 'भोजपुरी',        # Bihari macro language. Falls back to Bhojpuri (bho)
-       'bho' => 'भोजपुरी',       # Bhojpuri
-       'bi' => 'Bislama',              # Bislama
-       'bjn' => 'Bahasa Banjar',       # Banjarese
-       'bm' => 'bamanankan',   # Bambara
-       'bn' => 'বাংলা',      # Bengali
-       'bo' => 'བོད་ཡིག',        # Tibetan
-       'bpy' => 'বিষ্ণুপ্রিয়া মণিপুরী',       # Bishnupriya Manipuri
-       'bqi' => 'بختیاری',      # Bakthiari
-       'br' => 'brezhoneg',    # Breton
-       'brh' => 'Bráhuí',    # Brahui
-       'bs' => 'bosanski',             # Bosnian
-       'bto' => 'Iriga Bicolano',      # Rinconada Bikol
-       'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Buginese
-       'bxr' => 'буряад',        # Buryat (Russia)
-       'ca' => 'català',      # Catalan
-       'cbk-zam' => 'Chavacano de Zamboanga',  # Zamboanga Chavacano
-       'cdo' => 'Mìng-dĕ̤ng-ngṳ̄',       # Min Dong
-       'ce' => 'нохчийн',       # Chechen
-       'ceb' => 'Cebuano',     # Cebuano
-       'ch' => 'Chamoru',              # Chamorro
-       'cho' => 'Choctaw',             # Choctaw
-       'chr' => 'ᏣᎳᎩ', # Cherokee
-       'chy' => 'Tsetsêhestâhese',   # Cheyenne
-       'ckb' => 'کوردیی ناوەندی', # Central Kurdish
-       'co' => 'corsu',                # Corsican
-       'cps' => 'Capiceño', # Capiznon
-       'cr' => 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ',                # Cree
-       'crh' => 'qırımtatarca',   # Crimean Tatar (multiple scripts - defaults to Latin)
-       'crh-latn' => "qırımtatarca (Latin)\xE2\x80\x8E",       # Crimean Tatar (Latin)
-       'crh-cyrl' => "къырымтатарджа (Кирилл)\xE2\x80\x8E",       # Crimean Tatar (Cyrillic)
-       'cs' => 'čeština',    # Czech
-       'csb' => 'kaszëbsczi', # Cassubian
-       'cu' => 'словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ',        # Old Church Slavonic (ancient language)
-       'cv' => 'Чӑвашла',       # Chuvash
-       'cy' => 'Cymraeg',              # Welsh
-       'da' => 'dansk',                # Danish
-       'de' => 'Deutsch',              # German ("Du")
-       'de-at' => 'Österreichisches Deutsch',         # Austrian German
-       'de-ch' => 'Schweizer Hochdeutsch',             # Swiss Standard German
-       'de-formal' => "Deutsch (Sie-Form)\xE2\x80\x8E",                # German - formal address ("Sie")
-       'diq' => 'Zazaki',              # Zazaki
-       'dsb' => 'dolnoserbski', # Lower Sorbian
-       'dtp' => 'Dusun Bundu-liwan', # Central Dusun
-       'dty' => 'डोटेली', # Doteli
-       'dv' => 'ދިވެހިބަސް',         # Dhivehi
-       'dz' => 'ཇོང་ཁ',              # Dzongkha (Bhutan)
-       'ee' => 'eʋegbe',      # Éwé
-       'egl' => 'Emiliàn',    # Emilian
-       'el' => 'Ελληνικά',     # Greek
-       'eml' => 'emiliàn e rumagnòl',        # Emiliano-Romagnolo / Sammarinese
-       'en' => 'English',              # English
-       'en-ca' => 'Canadian English',  # Canadian English
-       'en-gb' => 'British English',   # British English
-       'eo' => 'Esperanto',    # Esperanto
-       'es' => 'español',     # Spanish
-       'et' => 'eesti',                # Estonian
-       'eu' => 'euskara',              # Basque
-       'ext' => 'estremeñu', # Extremaduran
-       'fa' => 'فارسی',   # Persian
-       'ff' => 'Fulfulde',             # Fulfulde, Maasina
-       'fi' => 'suomi',                # Finnish
-       'fit' => 'meänkieli', # Tornedalen Finnish
-       'fiu-vro' => 'Võro',    # Võro (deprecated code, 'vro' in ISO 639-3 since 2009-01-16)
-       'fj' => 'Na Vosa Vakaviti',     # Fijian
-       'fo' => 'føroyskt',    # Faroese
-       'fr' => 'français',    # French
-       'frc' => 'français cadien', # Cajun French
-       'frp' => 'arpetan',     # Franco-Provençal/Arpitan
-       'frr' => 'Nordfriisk',  # North Frisian
-       'fur' => 'furlan',              # Friulian
-       'fy' => 'Frysk',                # Frisian
-       'ga' => 'Gaeilge',              # Irish
-       'gag' => 'Gagauz',              # Gagauz
-       'gan' => '贛語',              # Gan (multiple scripts - defaults to Traditional)
-       'gan-hans' => "赣语(简体)\xE2\x80\x8E", # Gan (Simplified Han)
-       'gan-hant' => "贛語(繁體)\xE2\x80\x8E", # Gan (Traditional Han)
-       'gd' => 'Gàidhlig',    # Scots Gaelic
-       'gl' => 'galego',               # Galician
-       'glk' => 'گیلکی',  # Gilaki
-       'gn' => 'Avañe\'ẽ',  # Guaraní, Paraguayan
-       'gom' => 'गोवा कोंकणी / Gova Konknni',      # Goan Konkani
-       'gom-deva' => 'गोवा कोंकणी',        # Goan Konkani (Devanagari script)
-       'gom-latn' => 'Gova Konknni',   # Goan Konkani (Latin script)
-       'got' => '𐌲𐌿𐍄𐌹𐍃𐌺',    # Gothic
-       'grc' => 'Ἀρχαία ἑλληνικὴ', # Ancient Greek
-       'gsw' => 'Alemannisch', # Alemannic
-       'gu' => 'ગુજરાતી',        # Gujarati
-       'gv' => 'Gaelg',                # Manx
-       'ha' => 'Hausa',        # Hausa
-       'hak' => '客家語/Hak-kâ-ngî',      # Hakka
-       'haw' => 'Hawai`i',             # Hawaiian
-       'he' => 'עברית',   # Hebrew
-       'hi' => 'हिन्दी',   # Hindi
-       'hif' => 'Fiji Hindi',  # Fijian Hindi (multiple scripts - defaults to Latin)
-       'hif-latn' => 'Fiji Hindi',     # Fiji Hindi (latin)
-       'hil' => 'Ilonggo',     # Hiligaynon
-       'ho' => 'Hiri Motu',    # Hiri Motu
-       'hr' => 'hrvatski',             # Croatian
-       'hrx' => 'Hunsrik', # Riograndenser Hunsrückisch
-       'hsb' => 'hornjoserbsce',       # Upper Sorbian
-       'ht' => 'Kreyòl ayisyen',              # Haitian Creole French
-       'hu' => 'magyar',               # Hungarian
-       'hy' => 'Հայերեն',       # Armenian
-       'hz' => 'Otsiherero',   # Herero
-       'ia' => 'interlingua',  # Interlingua (IALA)
-       'id' => 'Bahasa Indonesia',     # Indonesian
-       'ie' => 'Interlingue',  # Interlingue (Occidental)
-       'ig' => 'Igbo',                 # Igbo
-       'ii' => 'ꆇꉙ',       # Sichuan Yi
-       'ik' => 'Iñupiak',     # Inupiak (Inupiatun, Northwest Alaska / Inupiatun, North Alaskan)
-       'ike-cans' => 'ᐃᓄᒃᑎᑐᑦ',     # Inuktitut, Eastern Canadian (Unified Canadian Aboriginal Syllabics)
-       'ike-latn' => 'inuktitut',      # Inuktitut, Eastern Canadian (Latin script)
-       'ilo' => 'Ilokano',     # Ilokano
-       'inh' => 'ГӀалгӀай',    # Ingush
-       'io' => 'Ido',                  # Ido
-       'is' => 'íslenska',    # Icelandic
-       'it' => 'italiano',             # Italian
-       'iu' => 'ᐃᓄᒃᑎᑐᑦ/inuktitut', # Inuktitut (macro language, see ike/ikt, falls back to ike-cans)
-       'ja' => '日本語',    # Japanese
-       'jam' => 'Patois',      # Jamaican Creole English
-       'jbo' => 'la .lojban.',         # Lojban
-       'jut' => 'jysk',        # Jutish / Jutlandic
-       'jv' => 'Basa Jawa',    # Javanese
-       'ka' => 'ქართული',        # Georgian
-       'kaa' => 'Qaraqalpaqsha',       # Karakalpak
-       'kab' => 'Taqbaylit',   # Kabyle
-       'kbd' => 'Адыгэбзэ',    # Kabardian
-       'kbd-cyrl' => 'Адыгэбзэ',       # Kabardian (Cyrillic)
-       'kg' => 'Kongo',        # Kongo, (FIXME!) should probaly be KiKongo or KiKoongo
-       'khw' => 'کھوار',  # Khowar
-       'ki' => 'Gĩkũyũ',    # Gikuyu
-       'kiu' => 'Kırmancki',  # Kirmanjki
-       'kj' => 'Kwanyama',     # Kwanyama
-       'kk' => 'қазақша',       # Kazakh (multiple scripts - defaults to Cyrillic)
-       'kk-arab' => "قازاقشا (تٴوتە)\xE2\x80\x8F", # Kazakh Arabic
-       'kk-cyrl' => "қазақша (кирил)\xE2\x80\x8E", # Kazakh Cyrillic
-       'kk-latn' => "qazaqşa (latın)\xE2\x80\x8E",   # Kazakh Latin
-       'kk-cn' => "قازاقشا (جۇنگو)\xE2\x80\x8F",   # Kazakh (China)
-       'kk-kz' => "қазақша (Қазақстан)\xE2\x80\x8E",   # Kazakh (Kazakhstan)
-       'kk-tr' => "qazaqşa (Türkïya)\xE2\x80\x8E",  # Kazakh (Turkey)
-       'kl' => 'kalaallisut',  # Inuktitut, Greenlandic/Greenlandic/Kalaallisut (kal)
-       'km' => 'ភាសាខ្មែរ',  # Khmer, Central
-       'kn' => 'ಕನ್ನಡ',      # Kannada
-       'ko' => '한국어',    # Korean
-       'ko-kp' => '한국어 (조선)',        # Korean (DPRK)
-       'koi' => 'Перем Коми', # Komi-Permyak
-       'kr' => 'Kanuri',               # Kanuri, Central
-       'krc' => 'къарачай-малкъар', # Karachay-Balkar
-       'kri' => 'Krio', # Krio
-       'krj' => 'Kinaray-a', # Kinaray-a
-       'ks' => 'कॉशुर / کٲشُر', # Kashmiri (multiple scripts - defaults to Perso-Arabic)
-       'ks-arab' => 'کٲشُر',      # Kashmiri (Perso-Arabic script)
-       'ks-deva' => 'कॉशुर', # Kashmiri (Devanagari script)
-       'ksh' => 'Ripoarisch',  # Ripuarian
-       'ku' => 'Kurdî',       # Kurdish (multiple scripts - defaults to Latin)
-       'ku-latn' => "Kurdî (latînî)\xE2\x80\x8E",   # Northern Kurdish (Latin script)
-       'ku-arab' => "كوردي (عەرەبی)\xE2\x80\x8F",   # Northern Kurdish (Arabic script) (falls back to ckb)
-       'kv' => 'коми',     # Komi-Zyrian (Cyrillic is common script but also written in Latin script)
-       'kw' => 'kernowek',             # Cornish
-       'ky' => 'Кыргызча',     # Kirghiz
-       'la' => 'Latina',               # Latin
-       'lad' => 'Ladino',      # Ladino
-       'lb' => 'Lëtzebuergesch',      # Luxemburguish
-       'lbe' => 'лакку',  # Lak
-       'lez' => 'лезги',  # Lezgi
-       'lfn' => 'Lingua Franca Nova',  # Lingua Franca Nova
-       'lg' => 'Luganda',              # Ganda
-       'li' => 'Limburgs',     # Limburgian
-       'lij' => 'Ligure',      # Ligurian
-       'liv' => 'Līvõ kēļ',        # Livonian
-       'lmo' => 'lumbaart',    # Lombard
-       'ln' => 'lingála',             # Lingala
-       'lo' => 'ລາວ',    # Laotian
-       'lrc' => 'لۊری شومالی',       # Northern Luri
-       'loz' => 'Silozi', # Lozi
-       'lt' => 'lietuvių',    # Lithuanian
-       'ltg' => 'latgaļu',    # Latgalian
-       'lus' => 'Mizo ţawng', # Mizo/Lushai
-       'luz' => 'لئری دوٙمینی', # Southern Luri
-       'lv' => 'latviešu',    # Latvian
-       'lzh' => '文言',      # Literary Chinese, bug 8217
-       'lzz' => 'Lazuri',      # Laz
-       'mai' => 'मैथिली', # Maithili
-       'map-bms' => 'Basa Banyumasan', # Banyumasan
-       'mdf' => 'мокшень',              # Moksha
-       'mg' => 'Malagasy',             # Malagasy
-       'mh' => 'Ebon',                 # Marshallese
-       'mhr' => 'олык марий', # Eastern Mari
-       'mi' => 'Māori',       # Maori
-       'min' => 'Baso Minangkabau',    # Minangkabau
-       'mk' => 'македонски', # Macedonian
-       'ml' => 'മലയാളം',   # Malayalam
-       'mn' => 'монгол', # Halh Mongolian (Cyrillic) (ISO 639-3: khk)
-       'mo' => 'молдовеняскэ',     # Moldovan, deprecated
-       'mr' => 'मराठी',      # Marathi
-       'mrj' => 'кырык мары', # Hill Mari
-       'ms' => 'Bahasa Melayu',        # Malay
-       'mt' => 'Malti',        # Maltese
-       'mus' => 'Mvskoke',     # Muskogee/Creek
-       'mwl' => 'Mirandés',   # Mirandese
-       'my' => 'မြန်မာဘာသာ',               # Burmese
-       'myv' => 'эрзянь',        # Erzya
-       'mzn' => 'مازِرونی',            # Mazanderani
-       'na' => 'Dorerin Naoero',               # Nauruan
-       'nah' => 'Nāhuatl',            # Nahuatl (not in ISO 639-3)
-       'nan' => 'Bân-lâm-gú', # Min-nan, bug 8217
-       'nap' => 'Napulitano',  # Neapolitan, bug 43793
-       'nb' => "norsk bokmål",                # Norwegian (Bokmal)
-       'nds' => 'Plattdüütsch',      # Low German ''or'' Low Saxon
-       'nds-nl' => 'Nedersaksies',     # aka Nedersaksisch: Dutch Low Saxon
-       'ne' => 'नेपाली',   # Nepali
-       'new' => 'नेपाल भाषा',                # Newar / Nepal Bhasha
-       'ng' => 'Oshiwambo',            # Ndonga
-       'niu' => 'Niuē',       # Niuean
-       'nl' => 'Nederlands',   # Dutch
-       'nl-informal' => "Nederlands (informeel)\xE2\x80\x8E",  # Dutch (informal address ("je"))
-       'nn' => "norsk nynorsk",        # Norwegian (Nynorsk)
-       'no' => "norsk bokmål",                # Norwegian (falls back to nb).
-       'nov' => 'Novial',              # Novial
-       'nrm' => 'Nouormand',   # Norman
-       'nso' => 'Sesotho sa Leboa',    # Northern Sotho
-       'nv' => 'Diné bizaad', # Navajo
-       'ny' => 'Chi-Chewa',    # Chichewa
-       'oc' => 'occitan',              # Occitan
-       'olo' => 'Livvinкarjala',              # Livvi-Karelian
-       'om' => 'Oromoo',               # Oromo
-       'or' => 'ଓଡ଼ିଆ',              # Oriya
-       'os' => 'Ирон', # Ossetic, bug 29091
-       'pa' => 'ਪੰਜਾਬੀ', # Eastern Punjabi (Gurmukhi script) (pan)
-       'pag' => 'Pangasinan',  # Pangasinan
-       'pam' => 'Kapampangan',   # Pampanga
-       'pap' => 'Papiamentu',  # Papiamentu
-       'pcd' => 'Picard',      # Picard
-       'pdc' => 'Deitsch',     # Pennsylvania German
-       'pdt' => 'Plautdietsch',        # Plautdietsch/Mennonite Low German
-       'pfl' => 'Pälzisch',   # Palatinate German
-       'pi' => 'पालि', # Pali
-       'pih' => 'Norfuk / Pitkern', # Norfuk/Pitcairn/Norfolk
-       'pl' => 'polski',               # Polish
-       'pms' => 'Piemontèis', # Piedmontese
-       'pnb' => 'پنجابی',        # Western Punjabi
-       'pnt' => 'Ποντιακά',    # Pontic/Pontic Greek
-       'prg' => 'Prūsiskan',  # Prussian
-       'ps' => 'پښتو',     # Pashto, Northern/Paktu/Pakhtu/Pakhtoo/Afghan/Pakhto/Pashtu/Pushto/Yusufzai Pashto
-       'pt' => 'português',   # Portuguese
-       'pt-br' => 'português do Brasil',      # Brazilian Portuguese
-       'qu' => 'Runa Simi',    # Southern Quechua
-       'qug' => 'Runa shimi',  # Kichwa/Northern Quechua (temporarily used until Kichwa has its own)
-       'rgn' => 'Rumagnôl',   # Romagnol
-       'rif' => 'Tarifit',     # Tarifit
-       'rm' => 'rumantsch',    # Raeto-Romance
-       'rmy' => 'Romani',      # Vlax Romany
-       'rn' => 'Kirundi',              # Rundi/Kirundi/Urundi
-       'ro' => 'română',     # Romanian
-       'roa-rup' => 'armãneashti', # Aromanian (deprecated code, 'rup' exists in ISO 693-3)
-       'roa-tara' => 'tarandíne',     # Tarantino
-       'ru' => 'русский',       # Russian
-       'rue' => 'русиньскый',        # Rusyn
-       'rup' => 'armãneashti', # Aromanian
-       'ruq' => 'Vlăheşte',  # Megleno-Romanian (multiple scripts - defaults to Latin)
-       'ruq-cyrl' => 'Влахесте',       # Megleno-Romanian (Cyrillic script)
-       # 'ruq-grek' => 'Βλαεστε',       # Megleno-Romanian (Greek script)
-       'ruq-latn' => 'Vlăheşte',     # Megleno-Romanian (Latin script)
-       'rw' => 'Kinyarwanda',  # Kinyarwanda, should possibly be Kinyarwandi
-       'sa' => 'संस्कृतम्',  # Sanskrit
-       'sah' => 'саха тыла', # Sakha
-       'sat' => 'Santali',     # Santali
-       'sc' => 'sardu',                # Sardinian
-       'scn' => 'sicilianu',   # Sicilian
-       'sco' => 'Scots',       # Scots
-       'sd' => 'سنڌي',     # Sindhi
-       'sdc' => 'Sassaresu',   # Sassarese
-       'sdh' => 'کوردی خوارگ',       # Southern Kurdish
-       'se' => 'sámegiella',  # Northern Sami
-       'sei' => 'Cmique Itom', # Seri
-       'ses' => 'Koyraboro Senni',     # Koyraboro Senni
-       'sg' => 'Sängö',              # Sango/Sangho
-       'sgs' => 'žemaitėška', # Samogitian
-       'sh' => 'srpskohrvatski / српскохрватски', # Serbocroatian
-       'shi' => 'Tašlḥiyt/ⵜⴰⵛⵍⵃⵉⵜ',    # Tachelhit (multiple scripts - defaults to Latin)
-       'shi-tfng' => 'ⵜⴰⵛⵍⵃⵉⵜ',    # Tachelhit (Tifinagh script)
-       'shi-latn' => 'Tašlḥiyt',    # Tachelhit (Latin script)
-       'si' => 'සිංහල',      # Sinhalese
-       'simple' => 'Simple English',   # Simple English
-       'sk' => 'slovenčina',  # Slovak
-       'sl' => 'slovenščina',        # Slovenian
-       'sli' => 'Schläsch',   # Lower Selisian
-       'sm' => 'Gagana Samoa', # Samoan
-       'sma' => 'Åarjelsaemien',      # Southern Sami
-       'sn' => 'chiShona',             # Shona
-       'so' => 'Soomaaliga',   # Somali
-       'sq' => 'shqip',                # Albanian
-       'sr' => 'српски / srpski',        # Serbian (multiple scripts - defaults to Cyrillic)
-       'sr-ec' => "српски (ћирилица)\xE2\x80\x8E",       # Serbian Cyrillic ekavian
-       'sr-el' => "srpski (latinica)\xE2\x80\x8E",     # Serbian Latin ekavian
-       'srn' => 'Sranantongo',         # Sranan Tongo
-       'ss' => 'SiSwati',              # Swati
-       'st' => 'Sesotho',              # Southern Sotho
-       'stq' => 'Seeltersk',           # Saterland Frisian
-       'su' => 'Basa Sunda',   # Sundanese
-       'sv' => 'svenska',              # Swedish
-       'sw' => 'Kiswahili',    # Swahili
-       'szl' => 'ślůnski',   # Silesian
-       'ta' => 'தமிழ்',      # Tamil
-       'tcy' => 'ತುಳು', # Tulu
-       'te' => 'తెలుగు',   # Telugu
-       'tet' => 'tetun',       # Tetun
-       'tg' => 'тоҷикӣ', # Tajiki (falls back to tg-cyrl)
-       'tg-cyrl' => 'тоҷикӣ',    # Tajiki (Cyrllic script) (default)
-       'tg-latn' => 'tojikī', # Tajiki (Latin script)
-       'th' => 'ไทย',    # Thai
-       'ti' => 'ትግርኛ',         # Tigrinya
-       'tk' => 'Türkmençe',  # Turkmen
-       'tl' => 'Tagalog',              # Tagalog
-       'tly' => 'толышә зывон',     # Talysh
-       'tn' => 'Setswana',             # Setswana
-       'to' => 'lea faka-Tonga',               # Tonga (Tonga Islands)
-       'tokipona' => 'Toki Pona',      # Toki Pona
-       'tpi' => 'Tok Pisin',   # Tok Pisin
-       'tr' => 'Türkçe',     # Turkish
-       'tru' => 'Ṫuroyo', # Turoyo
-       'ts' => 'Xitsonga',             # Tsonga
-       'tt' => 'татарча/tatarça',      # Tatar (multiple scripts - defaults to Cyrillic)
-       'tt-cyrl' => 'татарча',  # Tatar (Cyrillic script) (default)
-       'tt-latn' => 'tatarça',        # Tatar (Latin script)
-       'tum' => 'chiTumbuka',  # Tumbuka
-       'tw' => 'Twi',                  # Twi, (FIXME!)
-       'ty' => 'reo tahiti',   # Tahitian
-       'tyv' => 'тыва дыл',     # Tyvan
-       'tzm' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ',    # Tamazight
-       'udm' => 'удмурт',        # Udmurt
-       'ug' => 'ئۇيغۇرچە / Uyghurche', # Uyghur (multiple scripts - defaults to Arabic)
-       'ug-arab' => 'ئۇيغۇرچە', # Uyghur (Arabic script) (default)
-       'ug-latn' => 'Uyghurche', # Uyghur (Latin script)
-       'uk' => 'українська', # Ukrainian
-       'ur' => 'اردو',     # Urdu
-       'uz' => "oʻzbekcha/ўзбекча",    # Uzbek (multiple scripts - defaults to Latin)
-       'uz-cyrl' => "ўзбекча",  # Uzbek Cyrillic
-       'uz-latn' => "oʻzbekcha",      # Uzbek Latin (default)
-       've' => 'Tshivenda',            # Venda
-       'vec' => 'vèneto',     # Venetian
-       'vep' => 'vepsän kel’',      # Veps
-       'vi' => 'Tiếng Việt',       # Vietnamese
-       'vls' => 'West-Vlams', # West Flemish
-       'vmf' => 'Mainfränkisch', # Upper Franconian, Main-Franconian
-       'vo' => 'Volapük',     # Volapük
-       'vot' => 'Vaďďa',     # Vod/Votian
-       'vro' => 'Võro',    # Võro
-       'wa' => 'walon',                # Walloon
-       'war' => 'Winaray', # Waray-Waray
-       'wo' => 'Wolof',                # Wolof
-       'wuu' => '吴语',              # Wu Chinese
-       'xal' => 'хальмг',                # Kalmyk-Oirat
-       'xh' => 'isiXhosa',             # Xhosan
-       'xmf' => 'მარგალური', # Mingrelian
-       'yi' => 'ייִדיש', # Yiddish
-       'yo' => 'Yorùbá',     # Yoruba
-       'yue' => '粵語',      # Cantonese
-       'za' => 'Vahcuengh',    # Zhuang
-       'zea' => 'Zeêuws',     # Zeeuws/Zeaws
-       'zh' => '中文',                                               # (Zhōng Wén) - Chinese
-       'zh-classical' => '文言',                     # Classical Chinese/Literary Chinese -- (see bug 8217)
-       'zh-cn' => "中文(中国大陆)\xE2\x80\x8E",      # Chinese (PRC)
-       'zh-hans' => "中文(简体)\xE2\x80\x8E",  # Mandarin Chinese (Simplified Chinese script) (cmn-hans)
-       'zh-hant' => "中文(繁體)\xE2\x80\x8E",  # Mandarin Chinese (Traditional Chinese script) (cmn-hant)
-       'zh-hk' => "中文(香港)\xE2\x80\x8E",    # Chinese (Hong Kong)
-       'zh-min-nan' => 'Bân-lâm-gú',                                # Min-nan -- (see bug 8217)
-       'zh-mo' => "中文(澳門)\xE2\x80\x8E",    # Chinese (Macau)
-       'zh-my' => "中文(马来西亚)\xE2\x80\x8E",      # Chinese (Malaysia)
-       'zh-sg' => "中文(新加坡)\xE2\x80\x8E", # Chinese (Singapore)
-       'zh-tw' => "中文(台灣)\xE2\x80\x8E",    # Chinese (Taiwan)
-       'zh-yue' => '粵語',                                   # Cantonese -- (see bug 8217)
-       'zu' => 'isiZulu'               # Zulu
-);
index a012f59..9dc3a86 100644 (file)
@@ -21,9 +21,6 @@
  * @ingroup Language
  */
 
-require_once __DIR__ . '/../LanguageConverter.php';
-require_once __DIR__ . '/LanguageZh.php';
-
 /**
  * @ingroup Language
  */
@@ -57,10 +54,9 @@ class GanConverter extends LanguageConverter {
        }
 
        function loadDefaultTables() {
-               require __DIR__ . '/../../includes/ZhConversion.php';
                $this->mTables = array(
-                       'gan-hans' => new ReplacementArray( $zh2Hans ),
-                       'gan-hant' => new ReplacementArray( $zh2Hant ),
+                       'gan-hans' => new ReplacementArray( MediaWiki\Languages\Data\ZhConversion::$zh2Hans ),
+                       'gan-hant' => new ReplacementArray( MediaWiki\Languages\Data\ZhConversion::$zh2Hant ),
                        'gan' => new ReplacementArray
                );
        }
index db3a22c..af0431f 100644 (file)
@@ -21,8 +21,6 @@
  * @ingroup Language
  */
 
-require_once __DIR__ . '/../LanguageConverter.php';
-
 /**
  * Conversion script between Latin and Syllabics for Inuktitut.
  * - Syllabics -> lowercase Latin
index 0f60889..0357730 100644 (file)
@@ -21,9 +21,6 @@
  * @ingroup Language
  */
 
-require_once __DIR__ . '/../LanguageConverter.php';
-require_once __DIR__ . '/LanguageKk_cyrl.php';
-
 define( 'KK_C_UC', 'АӘБВГҒДЕЁЖЗИЙКҚЛМНҢОӨПРСТУҰҮФХҺЦЧШЩЪЫІЬЭЮЯ' ); # Kazakh Cyrillic uppercase
 define( 'KK_C_LC', 'аәбвгғдеёжзийкқлмнңоөпрстуұүфхһцчшщъыіьэюя' ); # Kazakh Cyrillic lowercase
 define( 'KK_L_UC', 'AÄBCÇDEÉFGĞHIİÏJKLMNÑOÖPQRSŞTUÜVWXYÝZ' ); # Kazakh Latin uppercase
index 1fdebc2..c14f468 100644 (file)
@@ -21,9 +21,6 @@
  * @ingroup Language
  */
 
-require_once __DIR__ . '/../LanguageConverter.php';
-require_once __DIR__ . '/LanguageKu_ku.php';
-
 /**
  * Kurdish converter routines
  *
index 105a3af..afd7283 100644 (file)
@@ -21,8 +21,6 @@
  * @ingroup Language
  */
 
-require_once __DIR__ . '/../LanguageConverter.php';
-
 /**
  * Conversion script between Latin and Tifinagh for Tachelhit.
  * - Tifinagh -> lowercase Latin
index bdf1ec4..ece50e8 100644 (file)
@@ -21,8 +21,6 @@
  * @ingroup Language
  */
 
-require_once __DIR__ . '/../LanguageConverter.php';
-
 /**
  * There are two levels of conversion for Serbian: the script level
  * (Cyrillics <-> Latin), and the variant level (ekavian
index 10755b4..6518e65 100644 (file)
@@ -21,8 +21,6 @@
  * @ingroup Language
  */
 
-require_once __DIR__ . '/../LanguageConverter.php';
-
 /**
  * Converts Tajiki to latin orthography
  *
index 985de68..6910d9c 100644 (file)
@@ -21,8 +21,6 @@
  * @ingroup Language
  */
 
-require_once __DIR__ . '/../LanguageConverter.php';
-
 /**
  * @ingroup Language
  */
index 0f47c38..51b09f6 100644 (file)
@@ -21,9 +21,6 @@
  * @ingroup Language
  */
 
-require_once __DIR__ . '/../LanguageConverter.php';
-require_once __DIR__ . '/LanguageZh_hans.php';
-
 /**
  * @ingroup Language
  */
@@ -63,16 +60,15 @@ class ZhConverter extends LanguageConverter {
        }
 
        function loadDefaultTables() {
-               require __DIR__ . "/../../includes/ZhConversion.php";
                $this->mTables = array(
-                       'zh-hans' => new ReplacementArray( $zh2Hans ),
-                       'zh-hant' => new ReplacementArray( $zh2Hant ),
-                       'zh-cn' => new ReplacementArray( $zh2CN ),
-                       'zh-hk' => new ReplacementArray( $zh2HK ),
-                       'zh-mo' => new ReplacementArray( $zh2HK ),
-                       'zh-my' => new ReplacementArray( $zh2CN ),
-                       'zh-sg' => new ReplacementArray( $zh2CN ),
-                       'zh-tw' => new ReplacementArray( $zh2TW ),
+                       'zh-hans' => new ReplacementArray( MediaWiki\Languages\Data\ZhConversion::$zh2Hans ),
+                       'zh-hant' => new ReplacementArray( MediaWiki\Languages\Data\ZhConversion::$zh2Hant ),
+                       'zh-cn' => new ReplacementArray( MediaWiki\Languages\Data\ZhConversion::$zh2CN ),
+                       'zh-hk' => new ReplacementArray( MediaWiki\Languages\Data\ZhConversion::$zh2HK ),
+                       'zh-mo' => new ReplacementArray( MediaWiki\Languages\Data\ZhConversion::$zh2HK ),
+                       'zh-my' => new ReplacementArray( MediaWiki\Languages\Data\ZhConversion::$zh2CN ),
+                       'zh-sg' => new ReplacementArray( MediaWiki\Languages\Data\ZhConversion::$zh2CN ),
+                       'zh-tw' => new ReplacementArray( MediaWiki\Languages\Data\ZhConversion::$zh2TW ),
                        'zh' => new ReplacementArray
                );
        }
diff --git a/languages/data/Names.php b/languages/data/Names.php
new file mode 100644 (file)
index 0000000..7711d8f
--- /dev/null
@@ -0,0 +1,467 @@
+<?php
+/**
+ * Language names.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Language
+ */
+
+namespace MediaWiki\Languages\Data;
+
+/**
+ * Language names in their own languages (language autonyms).
+ *
+ * These determine things like interwikis, language selectors, and so on.
+ * Safe to change without running scripts on the respective sites.
+ *
+ * \xE2\x80\x8E is the left-to-right marker and
+ * \xE2\x80\x8F is the right-to-left marker.
+ * They are required for ensuring the correct display of brackets in
+ * mixed rtl/ltr environment.
+ *
+ * Some writing systems require some line-height fixes. This includes
+ * most Indic scripts, like Devanagari.
+ * If you are adding support for such a language, add it also to
+ * the relevant section in shared.css.
+ *
+ * Do not use this class directly. Use Language::fetchLanguageNames(), which
+ * includes support for the CLDR extension.
+ *
+ * @ingroup Language
+ */
+class Names {
+       public static $names = array(
+               'aa' => 'Qafár af',    # Afar
+               'ab' => 'Аҧсшәа', # Abkhaz
+               'ace' => 'Acèh',       # Aceh
+               'ady' => 'адыгабзэ',    # Adyghe
+               'ady-cyrl' => 'адыгабзэ',       # Adyghe
+               'aeb' => 'تونسي/Tûnsî',  # Tunisian Arabic (multiple scripts - defaults to Arabic)
+               'aeb-arab' => 'تونسي',     # Tunisian Arabic (Arabic Script)
+               'aeb-latn' => 'Tûnsî',        # Tunisian Arabic (Latin Script)
+               'af' => 'Afrikaans',    # Afrikaans
+               'ak' => 'Akan',         # Akan
+               'aln' => 'Gegë',       # Gheg Albanian
+               'als' => 'Alemannisch', # Alemannic -- not a valid code, for compatibility. See gsw.
+               'am' => 'አማርኛ', # Amharic
+               'an' => 'aragonés',    # Aragonese
+               'ang' => 'Ænglisc',    # Old English, bug 23283
+               'anp' => 'अङ्गिका',       # Angika
+               'ar' => 'العربية',       # Arabic
+               'arc' => 'ܐܪܡܝܐ',  # Aramaic
+               'arn' => 'mapudungun',  # Mapuche, Mapudungu, Araucanian (Araucano)
+               'arq' => 'جازايرية', # Algerian Spoken Arabic
+               'ary' => 'Maġribi',    # Moroccan Spoken Arabic
+               'arz' => 'مصرى',    # Egyptian Spoken Arabic
+               'as' => 'অসমীয়া',        # Assamese
+               'ase' => 'American sign language',      # American sign language
+               'ast' => 'asturianu',   # Asturian
+               'av' => 'авар',     # Avar
+               'avk' => 'Kotava', # Kotava
+               'awa' => 'अवधी',        # Awadhi
+               'ay' => 'Aymar aru',    # Aymara
+               'az' => 'azərbaycanca',        # Azerbaijani
+               'azb' => 'تۆرکجه',        # South Azerbaijani
+               'ba' => 'башҡортса',   # Bashkir
+               'bar' => 'Boarisch',    # Bavarian (Austro-Bavarian and South Tyrolean)
+               'bat-smg' => 'žemaitėška', # Samogitian (deprecated code, 'sgs' in ISO 693-3 since 2010-06-30 )
+               'bbc' => 'Batak Toba', # Batak Toba (falls back to bbc-latn)
+               'bbc-latn' => 'Batak Toba', # Batak Toba
+               'bcc' => 'جهلسری بلوچی', # Southern Balochi
+               'bcl' => 'Bikol Central', # Bikol: Central Bicolano language
+               'be' => 'беларуская', #  Belarusian normative
+               'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E",     # Belarusian in Taraskievica orthography
+               'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E",      # (be-tarask compat)
+               'bg' => 'български',   # Bulgarian
+               'bgn' => 'روچ کپتین بلوچی', # Western Balochi
+               'bh' => 'भोजपुरी',        # Bihari macro language. Falls back to Bhojpuri (bho)
+               'bho' => 'भोजपुरी',       # Bhojpuri
+               'bi' => 'Bislama',              # Bislama
+               'bjn' => 'Bahasa Banjar',       # Banjarese
+               'bm' => 'bamanankan',   # Bambara
+               'bn' => 'বাংলা',      # Bengali
+               'bo' => 'བོད་ཡིག',        # Tibetan
+               'bpy' => 'বিষ্ণুপ্রিয়া মণিপুরী',       # Bishnupriya Manipuri
+               'bqi' => 'بختیاری',      # Bakthiari
+               'br' => 'brezhoneg',    # Breton
+               'brh' => 'Bráhuí',    # Brahui
+               'bs' => 'bosanski',             # Bosnian
+               'bto' => 'Iriga Bicolano',      # Rinconada Bikol
+               'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Buginese
+               'bxr' => 'буряад',        # Buryat (Russia)
+               'ca' => 'català',      # Catalan
+               'cbk-zam' => 'Chavacano de Zamboanga',  # Zamboanga Chavacano
+               'cdo' => 'Mìng-dĕ̤ng-ngṳ̄',       # Min Dong
+               'ce' => 'нохчийн',       # Chechen
+               'ceb' => 'Cebuano',     # Cebuano
+               'ch' => 'Chamoru',              # Chamorro
+               'cho' => 'Choctaw',             # Choctaw
+               'chr' => 'ᏣᎳᎩ', # Cherokee
+               'chy' => 'Tsetsêhestâhese',   # Cheyenne
+               'ckb' => 'کوردیی ناوەندی', # Central Kurdish
+               'co' => 'corsu',                # Corsican
+               'cps' => 'Capiceño', # Capiznon
+               'cr' => 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ',                # Cree
+               'crh' => 'qırımtatarca',   # Crimean Tatar (multiple scripts - defaults to Latin)
+               'crh-latn' => "qırımtatarca (Latin)\xE2\x80\x8E",       # Crimean Tatar (Latin)
+               'crh-cyrl' => "къырымтатарджа (Кирилл)\xE2\x80\x8E",       # Crimean Tatar (Cyrillic)
+               'cs' => 'čeština',    # Czech
+               'csb' => 'kaszëbsczi', # Cassubian
+               'cu' => 'словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ',        # Old Church Slavonic (ancient language)
+               'cv' => 'Чӑвашла',       # Chuvash
+               'cy' => 'Cymraeg',              # Welsh
+               'da' => 'dansk',                # Danish
+               'de' => 'Deutsch',              # German ("Du")
+               'de-at' => 'Österreichisches Deutsch',         # Austrian German
+               'de-ch' => 'Schweizer Hochdeutsch',             # Swiss Standard German
+               'de-formal' => "Deutsch (Sie-Form)\xE2\x80\x8E",                # German - formal address ("Sie")
+               'diq' => 'Zazaki',              # Zazaki
+               'dsb' => 'dolnoserbski', # Lower Sorbian
+               'dtp' => 'Dusun Bundu-liwan', # Central Dusun
+               'dty' => 'डोटेली', # Doteli
+               'dv' => 'ދިވެހިބަސް',         # Dhivehi
+               'dz' => 'ཇོང་ཁ',              # Dzongkha (Bhutan)
+               'ee' => 'eʋegbe',      # Éwé
+               'egl' => 'Emiliàn',    # Emilian
+               'el' => 'Ελληνικά',     # Greek
+               'eml' => 'emiliàn e rumagnòl',        # Emiliano-Romagnolo / Sammarinese
+               'en' => 'English',              # English
+               'en-ca' => 'Canadian English',  # Canadian English
+               'en-gb' => 'British English',   # British English
+               'eo' => 'Esperanto',    # Esperanto
+               'es' => 'español',     # Spanish
+               'et' => 'eesti',                # Estonian
+               'eu' => 'euskara',              # Basque
+               'ext' => 'estremeñu', # Extremaduran
+               'fa' => 'فارسی',   # Persian
+               'ff' => 'Fulfulde',             # Fulfulde, Maasina
+               'fi' => 'suomi',                # Finnish
+               'fit' => 'meänkieli', # Tornedalen Finnish
+               'fiu-vro' => 'Võro',    # Võro (deprecated code, 'vro' in ISO 639-3 since 2009-01-16)
+               'fj' => 'Na Vosa Vakaviti',     # Fijian
+               'fo' => 'føroyskt',    # Faroese
+               'fr' => 'français',    # French
+               'frc' => 'français cadien', # Cajun French
+               'frp' => 'arpetan',     # Franco-Provençal/Arpitan
+               'frr' => 'Nordfriisk',  # North Frisian
+               'fur' => 'furlan',              # Friulian
+               'fy' => 'Frysk',                # Frisian
+               'ga' => 'Gaeilge',              # Irish
+               'gag' => 'Gagauz',              # Gagauz
+               'gan' => '贛語',              # Gan (multiple scripts - defaults to Traditional)
+               'gan-hans' => "赣语(简体)\xE2\x80\x8E", # Gan (Simplified Han)
+               'gan-hant' => "贛語(繁體)\xE2\x80\x8E", # Gan (Traditional Han)
+               'gd' => 'Gàidhlig',    # Scots Gaelic
+               'gl' => 'galego',               # Galician
+               'glk' => 'گیلکی',  # Gilaki
+               'gn' => 'Avañe\'ẽ',  # Guaraní, Paraguayan
+               'gom' => 'गोवा कोंकणी / Gova Konknni',      # Goan Konkani
+               'gom-deva' => 'गोवा कोंकणी',        # Goan Konkani (Devanagari script)
+               'gom-latn' => 'Gova Konknni',   # Goan Konkani (Latin script)
+               'got' => '𐌲𐌿𐍄𐌹𐍃𐌺',    # Gothic
+               'grc' => 'Ἀρχαία ἑλληνικὴ', # Ancient Greek
+               'gsw' => 'Alemannisch', # Alemannic
+               'gu' => 'ગુજરાતી',        # Gujarati
+               'gv' => 'Gaelg',                # Manx
+               'ha' => 'Hausa',        # Hausa
+               'hak' => '客家語/Hak-kâ-ngî',      # Hakka
+               'haw' => 'Hawai`i',             # Hawaiian
+               'he' => 'עברית',   # Hebrew
+               'hi' => 'हिन्दी',   # Hindi
+               'hif' => 'Fiji Hindi',  # Fijian Hindi (multiple scripts - defaults to Latin)
+               'hif-latn' => 'Fiji Hindi',     # Fiji Hindi (latin)
+               'hil' => 'Ilonggo',     # Hiligaynon
+               'ho' => 'Hiri Motu',    # Hiri Motu
+               'hr' => 'hrvatski',             # Croatian
+               'hrx' => 'Hunsrik', # Riograndenser Hunsrückisch
+               'hsb' => 'hornjoserbsce',       # Upper Sorbian
+               'ht' => 'Kreyòl ayisyen',              # Haitian Creole French
+               'hu' => 'magyar',               # Hungarian
+               'hy' => 'Հայերեն',       # Armenian
+               'hz' => 'Otsiherero',   # Herero
+               'ia' => 'interlingua',  # Interlingua (IALA)
+               'id' => 'Bahasa Indonesia',     # Indonesian
+               'ie' => 'Interlingue',  # Interlingue (Occidental)
+               'ig' => 'Igbo',                 # Igbo
+               'ii' => 'ꆇꉙ',       # Sichuan Yi
+               'ik' => 'Iñupiak',     # Inupiak (Inupiatun, Northwest Alaska / Inupiatun, North Alaskan)
+               'ike-cans' => 'ᐃᓄᒃᑎᑐᑦ',     # Inuktitut, Eastern Canadian (Unified Canadian Aboriginal Syllabics)
+               'ike-latn' => 'inuktitut',      # Inuktitut, Eastern Canadian (Latin script)
+               'ilo' => 'Ilokano',     # Ilokano
+               'inh' => 'ГӀалгӀай',    # Ingush
+               'io' => 'Ido',                  # Ido
+               'is' => 'íslenska',    # Icelandic
+               'it' => 'italiano',             # Italian
+               'iu' => 'ᐃᓄᒃᑎᑐᑦ/inuktitut', # Inuktitut (macro language, see ike/ikt, falls back to ike-cans)
+               'ja' => '日本語',    # Japanese
+               'jam' => 'Patois',      # Jamaican Creole English
+               'jbo' => 'la .lojban.',         # Lojban
+               'jut' => 'jysk',        # Jutish / Jutlandic
+               'jv' => 'Basa Jawa',    # Javanese
+               'ka' => 'ქართული',        # Georgian
+               'kaa' => 'Qaraqalpaqsha',       # Karakalpak
+               'kab' => 'Taqbaylit',   # Kabyle
+               'kbd' => 'Адыгэбзэ',    # Kabardian
+               'kbd-cyrl' => 'Адыгэбзэ',       # Kabardian (Cyrillic)
+               'kg' => 'Kongo',        # Kongo, (FIXME!) should probaly be KiKongo or KiKoongo
+               'khw' => 'کھوار',  # Khowar
+               'ki' => 'Gĩkũyũ',    # Gikuyu
+               'kiu' => 'Kırmancki',  # Kirmanjki
+               'kj' => 'Kwanyama',     # Kwanyama
+               'kk' => 'қазақша',       # Kazakh (multiple scripts - defaults to Cyrillic)
+               'kk-arab' => "قازاقشا (تٴوتە)\xE2\x80\x8F", # Kazakh Arabic
+               'kk-cyrl' => "қазақша (кирил)\xE2\x80\x8E", # Kazakh Cyrillic
+               'kk-latn' => "qazaqşa (latın)\xE2\x80\x8E",   # Kazakh Latin
+               'kk-cn' => "قازاقشا (جۇنگو)\xE2\x80\x8F",   # Kazakh (China)
+               'kk-kz' => "қазақша (Қазақстан)\xE2\x80\x8E",   # Kazakh (Kazakhstan)
+               'kk-tr' => "qazaqşa (Türkïya)\xE2\x80\x8E",  # Kazakh (Turkey)
+               'kl' => 'kalaallisut',  # Inuktitut, Greenlandic/Greenlandic/Kalaallisut (kal)
+               'km' => 'ភាសាខ្មែរ',  # Khmer, Central
+               'kn' => 'ಕನ್ನಡ',      # Kannada
+               'ko' => '한국어',    # Korean
+               'ko-kp' => '한국어 (조선)',        # Korean (DPRK)
+               'koi' => 'Перем Коми', # Komi-Permyak
+               'kr' => 'Kanuri',               # Kanuri, Central
+               'krc' => 'къарачай-малкъар', # Karachay-Balkar
+               'kri' => 'Krio', # Krio
+               'krj' => 'Kinaray-a', # Kinaray-a
+               'ks' => 'कॉशुर / کٲشُر', # Kashmiri (multiple scripts - defaults to Perso-Arabic)
+               'ks-arab' => 'کٲشُر',      # Kashmiri (Perso-Arabic script)
+               'ks-deva' => 'कॉशुर', # Kashmiri (Devanagari script)
+               'ksh' => 'Ripoarisch',  # Ripuarian
+               'ku' => 'Kurdî',       # Kurdish (multiple scripts - defaults to Latin)
+               'ku-latn' => "Kurdî (latînî)\xE2\x80\x8E",   # Northern Kurdish (Latin script)
+               'ku-arab' => "كوردي (عەرەبی)\xE2\x80\x8F",   # Northern Kurdish (Arabic script) (falls back to ckb)
+               'kv' => 'коми',     # Komi-Zyrian (Cyrillic is common script but also written in Latin script)
+               'kw' => 'kernowek',             # Cornish
+               'ky' => 'Кыргызча',     # Kirghiz
+               'la' => 'Latina',               # Latin
+               'lad' => 'Ladino',      # Ladino
+               'lb' => 'Lëtzebuergesch',      # Luxemburguish
+               'lbe' => 'лакку',  # Lak
+               'lez' => 'лезги',  # Lezgi
+               'lfn' => 'Lingua Franca Nova',  # Lingua Franca Nova
+               'lg' => 'Luganda',              # Ganda
+               'li' => 'Limburgs',     # Limburgian
+               'lij' => 'Ligure',      # Ligurian
+               'liv' => 'Līvõ kēļ',        # Livonian
+               'lmo' => 'lumbaart',    # Lombard
+               'ln' => 'lingála',             # Lingala
+               'lo' => 'ລາວ',    # Laotian
+               'lrc' => 'لۊری شومالی',       # Northern Luri
+               'loz' => 'Silozi', # Lozi
+               'lt' => 'lietuvių',    # Lithuanian
+               'ltg' => 'latgaļu',    # Latgalian
+               'lus' => 'Mizo ţawng', # Mizo/Lushai
+               'luz' => 'لئری دوٙمینی', # Southern Luri
+               'lv' => 'latviešu',    # Latvian
+               'lzh' => '文言',      # Literary Chinese, bug 8217
+               'lzz' => 'Lazuri',      # Laz
+               'mai' => 'मैथिली', # Maithili
+               'map-bms' => 'Basa Banyumasan', # Banyumasan
+               'mdf' => 'мокшень',              # Moksha
+               'mg' => 'Malagasy',             # Malagasy
+               'mh' => 'Ebon',                 # Marshallese
+               'mhr' => 'олык марий', # Eastern Mari
+               'mi' => 'Māori',       # Maori
+               'min' => 'Baso Minangkabau',    # Minangkabau
+               'mk' => 'македонски', # Macedonian
+               'ml' => 'മലയാളം',   # Malayalam
+               'mn' => 'монгол', # Halh Mongolian (Cyrillic) (ISO 639-3: khk)
+               'mo' => 'молдовеняскэ',     # Moldovan, deprecated
+               'mr' => 'मराठी',      # Marathi
+               'mrj' => 'кырык мары', # Hill Mari
+               'ms' => 'Bahasa Melayu',        # Malay
+               'mt' => 'Malti',        # Maltese
+               'mus' => 'Mvskoke',     # Muskogee/Creek
+               'mwl' => 'Mirandés',   # Mirandese
+               'my' => 'မြန်မာဘာသာ',               # Burmese
+               'myv' => 'эрзянь',        # Erzya
+               'mzn' => 'مازِرونی',            # Mazanderani
+               'na' => 'Dorerin Naoero',               # Nauruan
+               'nah' => 'Nāhuatl',            # Nahuatl (not in ISO 639-3)
+               'nan' => 'Bân-lâm-gú', # Min-nan, bug 8217
+               'nap' => 'Napulitano',  # Neapolitan, bug 43793
+               'nb' => "norsk bokmål",                # Norwegian (Bokmal)
+               'nds' => 'Plattdüütsch',      # Low German ''or'' Low Saxon
+               'nds-nl' => 'Nedersaksies',     # aka Nedersaksisch: Dutch Low Saxon
+               'ne' => 'नेपाली',   # Nepali
+               'new' => 'नेपाल भाषा',                # Newar / Nepal Bhasha
+               'ng' => 'Oshiwambo',            # Ndonga
+               'niu' => 'Niuē',       # Niuean
+               'nl' => 'Nederlands',   # Dutch
+               'nl-informal' => "Nederlands (informeel)\xE2\x80\x8E",  # Dutch (informal address ("je"))
+               'nn' => "norsk nynorsk",        # Norwegian (Nynorsk)
+               'no' => "norsk bokmål",                # Norwegian (falls back to nb).
+               'nov' => 'Novial',              # Novial
+               'nrm' => 'Nouormand',   # Norman
+               'nso' => 'Sesotho sa Leboa',    # Northern Sotho
+               'nv' => 'Diné bizaad', # Navajo
+               'ny' => 'Chi-Chewa',    # Chichewa
+               'oc' => 'occitan',              # Occitan
+               'olo' => 'Livvinкarjala',              # Livvi-Karelian
+               'om' => 'Oromoo',               # Oromo
+               'or' => 'ଓଡ଼ିଆ',              # Oriya
+               'os' => 'Ирон', # Ossetic, bug 29091
+               'pa' => 'ਪੰਜਾਬੀ', # Eastern Punjabi (Gurmukhi script) (pan)
+               'pag' => 'Pangasinan',  # Pangasinan
+               'pam' => 'Kapampangan',   # Pampanga
+               'pap' => 'Papiamentu',  # Papiamentu
+               'pcd' => 'Picard',      # Picard
+               'pdc' => 'Deitsch',     # Pennsylvania German
+               'pdt' => 'Plautdietsch',        # Plautdietsch/Mennonite Low German
+               'pfl' => 'Pälzisch',   # Palatinate German
+               'pi' => 'पालि', # Pali
+               'pih' => 'Norfuk / Pitkern', # Norfuk/Pitcairn/Norfolk
+               'pl' => 'polski',               # Polish
+               'pms' => 'Piemontèis', # Piedmontese
+               'pnb' => 'پنجابی',        # Western Punjabi
+               'pnt' => 'Ποντιακά',    # Pontic/Pontic Greek
+               'prg' => 'Prūsiskan',  # Prussian
+               'ps' => 'پښتو',     # Pashto
+               'pt' => 'português',   # Portuguese
+               'pt-br' => 'português do Brasil',      # Brazilian Portuguese
+               'qu' => 'Runa Simi',    # Southern Quechua
+               'qug' => 'Runa shimi',  # Kichwa/Northern Quechua (temporarily used until Kichwa has its own)
+               'rgn' => 'Rumagnôl',   # Romagnol
+               'rif' => 'Tarifit',     # Tarifit
+               'rm' => 'rumantsch',    # Raeto-Romance
+               'rmy' => 'Romani',      # Vlax Romany
+               'rn' => 'Kirundi',              # Rundi/Kirundi/Urundi
+               'ro' => 'română',     # Romanian
+               'roa-rup' => 'armãneashti', # Aromanian (deprecated code, 'rup' exists in ISO 693-3)
+               'roa-tara' => 'tarandíne',     # Tarantino
+               'ru' => 'русский',       # Russian
+               'rue' => 'русиньскый',        # Rusyn
+               'rup' => 'armãneashti', # Aromanian
+               'ruq' => 'Vlăheşte',  # Megleno-Romanian (multiple scripts - defaults to Latin)
+               'ruq-cyrl' => 'Влахесте',       # Megleno-Romanian (Cyrillic script)
+               # 'ruq-grek' => 'Βλαεστε',       # Megleno-Romanian (Greek script)
+               'ruq-latn' => 'Vlăheşte',     # Megleno-Romanian (Latin script)
+               'rw' => 'Kinyarwanda',  # Kinyarwanda, should possibly be Kinyarwandi
+               'sa' => 'संस्कृतम्',  # Sanskrit
+               'sah' => 'саха тыла', # Sakha
+               'sat' => 'Santali',     # Santali
+               'sc' => 'sardu',                # Sardinian
+               'scn' => 'sicilianu',   # Sicilian
+               'sco' => 'Scots',       # Scots
+               'sd' => 'سنڌي',     # Sindhi
+               'sdc' => 'Sassaresu',   # Sassarese
+               'sdh' => 'کوردی خوارگ',       # Southern Kurdish
+               'se' => 'sámegiella',  # Northern Sami
+               'sei' => 'Cmique Itom', # Seri
+               'ses' => 'Koyraboro Senni',     # Koyraboro Senni
+               'sg' => 'Sängö',              # Sango/Sangho
+               'sgs' => 'žemaitėška', # Samogitian
+               'sh' => 'srpskohrvatski / српскохрватски', # Serbocroatian
+               'shi' => 'Tašlḥiyt/ⵜⴰⵛⵍⵃⵉⵜ',    # Tachelhit (multiple scripts - defaults to Latin)
+               'shi-tfng' => 'ⵜⴰⵛⵍⵃⵉⵜ',    # Tachelhit (Tifinagh script)
+               'shi-latn' => 'Tašlḥiyt',    # Tachelhit (Latin script)
+               'si' => 'සිංහල',      # Sinhalese
+               'simple' => 'Simple English',   # Simple English
+               'sk' => 'slovenčina',  # Slovak
+               'sl' => 'slovenščina',        # Slovenian
+               'sli' => 'Schläsch',   # Lower Selisian
+               'sm' => 'Gagana Samoa', # Samoan
+               'sma' => 'Åarjelsaemien',      # Southern Sami
+               'sn' => 'chiShona',             # Shona
+               'so' => 'Soomaaliga',   # Somali
+               'sq' => 'shqip',                # Albanian
+               'sr' => 'српски / srpski',        # Serbian (multiple scripts - defaults to Cyrillic)
+               'sr-ec' => "српски (ћирилица)\xE2\x80\x8E",       # Serbian Cyrillic ekavian
+               'sr-el' => "srpski (latinica)\xE2\x80\x8E",     # Serbian Latin ekavian
+               'srn' => 'Sranantongo',         # Sranan Tongo
+               'ss' => 'SiSwati',              # Swati
+               'st' => 'Sesotho',              # Southern Sotho
+               'stq' => 'Seeltersk',           # Saterland Frisian
+               'su' => 'Basa Sunda',   # Sundanese
+               'sv' => 'svenska',              # Swedish
+               'sw' => 'Kiswahili',    # Swahili
+               'szl' => 'ślůnski',   # Silesian
+               'ta' => 'தமிழ்',      # Tamil
+               'tcy' => 'ತುಳು', # Tulu
+               'te' => 'తెలుగు',   # Telugu
+               'tet' => 'tetun',       # Tetun
+               'tg' => 'тоҷикӣ', # Tajiki (falls back to tg-cyrl)
+               'tg-cyrl' => 'тоҷикӣ',    # Tajiki (Cyrllic script) (default)
+               'tg-latn' => 'tojikī', # Tajiki (Latin script)
+               'th' => 'ไทย',    # Thai
+               'ti' => 'ትግርኛ',         # Tigrinya
+               'tk' => 'Türkmençe',  # Turkmen
+               'tl' => 'Tagalog',              # Tagalog
+               'tly' => 'толышә зывон',     # Talysh
+               'tn' => 'Setswana',             # Setswana
+               'to' => 'lea faka-Tonga',               # Tonga (Tonga Islands)
+               'tokipona' => 'Toki Pona',      # Toki Pona
+               'tpi' => 'Tok Pisin',   # Tok Pisin
+               'tr' => 'Türkçe',     # Turkish
+               'tru' => 'Ṫuroyo', # Turoyo
+               'ts' => 'Xitsonga',             # Tsonga
+               'tt' => 'татарча/tatarça',      # Tatar (multiple scripts - defaults to Cyrillic)
+               'tt-cyrl' => 'татарча',  # Tatar (Cyrillic script) (default)
+               'tt-latn' => 'tatarça',        # Tatar (Latin script)
+               'tum' => 'chiTumbuka',  # Tumbuka
+               'tw' => 'Twi',                  # Twi, (FIXME!)
+               'ty' => 'reo tahiti',   # Tahitian
+               'tyv' => 'тыва дыл',     # Tyvan
+               'tzm' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ',    # Tamazight
+               'udm' => 'удмурт',        # Udmurt
+               'ug' => 'ئۇيغۇرچە / Uyghurche', # Uyghur (multiple scripts - defaults to Arabic)
+               'ug-arab' => 'ئۇيغۇرچە', # Uyghur (Arabic script) (default)
+               'ug-latn' => 'Uyghurche', # Uyghur (Latin script)
+               'uk' => 'українська', # Ukrainian
+               'ur' => 'اردو',     # Urdu
+               'uz' => "oʻzbekcha/ўзбекча",    # Uzbek (multiple scripts - defaults to Latin)
+               'uz-cyrl' => "ўзбекча",  # Uzbek Cyrillic
+               'uz-latn' => "oʻzbekcha",      # Uzbek Latin (default)
+               've' => 'Tshivenda',            # Venda
+               'vec' => 'vèneto',     # Venetian
+               'vep' => 'vepsän kel’',      # Veps
+               'vi' => 'Tiếng Việt',       # Vietnamese
+               'vls' => 'West-Vlams', # West Flemish
+               'vmf' => 'Mainfränkisch', # Upper Franconian, Main-Franconian
+               'vo' => 'Volapük',     # Volapük
+               'vot' => 'Vaďďa',     # Vod/Votian
+               'vro' => 'Võro',    # Võro
+               'wa' => 'walon',                # Walloon
+               'war' => 'Winaray', # Waray-Waray
+               'wo' => 'Wolof',                # Wolof
+               'wuu' => '吴语',              # Wu Chinese
+               'xal' => 'хальмг',                # Kalmyk-Oirat
+               'xh' => 'isiXhosa',             # Xhosan
+               'xmf' => 'მარგალური', # Mingrelian
+               'yi' => 'ייִדיש', # Yiddish
+               'yo' => 'Yorùbá',     # Yoruba
+               'yue' => '粵語',      # Cantonese
+               'za' => 'Vahcuengh',    # Zhuang
+               'zea' => 'Zeêuws',     # Zeeuws/Zeaws
+               'zh' => '中文',                                               # (Zhōng Wén) - Chinese
+               'zh-classical' => '文言',                     # Classical Chinese/Literary Chinese -- (see bug 8217)
+               'zh-cn' => "中文(中国大陆)\xE2\x80\x8E",      # Chinese (PRC)
+               'zh-hans' => "中文(简体)\xE2\x80\x8E",  # Mandarin Chinese (Simplified Chinese script) (cmn-hans)
+               'zh-hant' => "中文(繁體)\xE2\x80\x8E",  # Mandarin Chinese (Traditional Chinese script) (cmn-hant)
+               'zh-hk' => "中文(香港)\xE2\x80\x8E",    # Chinese (Hong Kong)
+               'zh-min-nan' => 'Bân-lâm-gú',                                # Min-nan -- (see bug 8217)
+               'zh-mo' => "中文(澳門)\xE2\x80\x8E",    # Chinese (Macau)
+               'zh-my' => "中文(马来西亚)\xE2\x80\x8E",      # Chinese (Malaysia)
+               'zh-sg' => "中文(新加坡)\xE2\x80\x8E", # Chinese (Singapore)
+               'zh-tw' => "中文(台灣)\xE2\x80\x8E",    # Chinese (Taiwan)
+               'zh-yue' => '粵語',                                   # Cantonese -- (see bug 8217)
+               'zu' => 'isiZulu'               # Zulu
+       );
+}
diff --git a/languages/data/ZhConversion.php b/languages/data/ZhConversion.php
new file mode 100644 (file)
index 0000000..8652975
--- /dev/null
@@ -0,0 +1,20281 @@
+<?php
+/**
+ * Simplified / Traditional Chinese conversion tables
+ *
+ * Automatically generated using code and data in maintenance/language/zhtable/
+ * Do not modify directly!
+ *
+ * @file
+ */
+
+namespace MediaWiki\Languages\Data;
+
+class ZhConversion {
+public static $zh2Hant = array(
+'㐷' => '傌',
+'㐹' => '㑶',
+'㐽' => '偑',
+'㑇' => '㑳',
+'㑈' => '倲',
+'㑔' => '㑯',
+'㑩' => '儸',
+'㓥' => '劏',
+'㔉' => '劚',
+'㖊' => '噚',
+'㖞' => '喎',
+'㘎' => '㘚',
+'㚯' => '㜄',
+'㛀' => '媰',
+'㛟' => '𡞵',
+'㛠' => '𡢃',
+'㛣' => '㜏',
+'㛤' => '孋',
+'㛿' => '𡠹',
+'㟆' => '㠏',
+'㟜' => '𡾱',
+'㤘' => '㥮',
+'㧏' => '掆',
+'㧐' => '㩳',
+'㧑' => '撝',
+'㧟' => '擓',
+'㧰' => '擽',
+'㨫' => '㩜',
+'㭎' => '棡',
+'㭏' => '椲',
+'㭣' => '𣙎',
+'㭤' => '樢',
+'㭴' => '樫',
+'㱩' => '殰',
+'㱮' => '殨',
+'㲿' => '瀇',
+'㳔' => '濧',
+'㳠' => '澾',
+'㳡' => '濄',
+'㳢' => '𣾷',
+'㳽' => '瀰',
+'㶉' => '鸂',
+'㶶' => '燶',
+'㶽' => '煱',
+'㺍' => '獱',
+'㻅' => '璯',
+'㻏' => '𤫩',
+'㻘' => '𤪺',
+'䀥' => '䁻',
+'䁖' => '瞜',
+'䂵' => '碽',
+'䅉' => '稏',
+'䅪' => '𥢢',
+'䇲' => '筴',
+'䉤' => '籔',
+'䌶' => '䊷',
+'䌷' => '紬',
+'䌸' => '縳',
+'䌹' => '絅',
+'䌺' => '䋙',
+'䌻' => '䋚',
+'䌼' => '綐',
+'䌽' => '綵',
+'䌾' => '䋻',
+'䌿' => '䋹',
+'䍀' => '繿',
+'䍁' => '繸',
+'䎬' => '䎱',
+'䏝' => '膞',
+'䓖' => '藭',
+'䗖' => '螮',
+'䘛' => '𧝞',
+'䘞' => '𧜗',
+'䙊' => '𧜵',
+'䙌' => '䙡',
+'䙓' => '襬',
+'䜣' => '訢',
+'䜥' => '𧩙',
+'䜧' => '䜀',
+'䜩' => '讌',
+'䝙' => '貙',
+'䞌' => '𧵳',
+'䞍' => '䝼',
+'䞎' => '𧶧',
+'䞐' => '賰',
+'䟢' => '躎',
+'䢀' => '𨊰',
+'䢁' => '𨊸',
+'䢂' => '𨋢',
+'䥺' => '釾',
+'䥽' => '鏺',
+'䥾' => '䥱',
+'䥿' => '𨯅',
+'䦀' => '𨦫',
+'䦁' => '𨧜',
+'䦂' => '䥇',
+'䦃' => '鐯',
+'䦅' => '鐥',
+'䦶' => '䦛',
+'䦷' => '䦟',
+'䭪' => '𩞯',
+'䯃' => '𩣑',
+'䯄' => '騧',
+'䯅' => '䯀',
+'䲝' => '䱽',
+'䲞' => '𩶘',
+'䲟' => '鮣',
+'䲠' => '鰆',
+'䲡' => '鰌',
+'䲢' => '鰧',
+'䲣' => '䱷',
+'䴓' => '鳾',
+'䴔' => '鵁',
+'䴕' => '鴷',
+'䴖' => '鶄',
+'䴗' => '鶪',
+'䴘' => '鷈',
+'䴙' => '鷿',
+'䶮' => '龑',
+'万' => '萬',
+'与' => '與',
+'专' => '專',
+'业' => '業',
+'丛' => '叢',
+'东' => '東',
+'丝' => '絲',
+'丢' => '丟',
+'两' => '兩',
+'严' => '嚴',
+'丧' => '喪',
+'个' => '個',
+'丰' => '豐',
+'临' => '臨',
+'为' => '為',
+'丽' => '麗',
+'举' => '舉',
+'么' => '麼',
+'义' => '義',
+'乌' => '烏',
+'乐' => '樂',
+'乔' => '喬',
+'习' => '習',
+'乡' => '鄉',
+'书' => '書',
+'买' => '買',
+'乱' => '亂',
+'争' => '爭',
+'于' => '於',
+'亏' => '虧',
+'云' => '雲',
+'亚' => '亞',
+'产' => '產',
+'亩' => '畝',
+'亲' => '親',
+'亵' => '褻',
+'亸' => '嚲',
+'亿' => '億',
+'仅' => '僅',
+'从' => '從',
+'仑' => '侖',
+'仓' => '倉',
+'仪' => '儀',
+'们' => '們',
+'价' => '價',
+'众' => '眾',
+'优' => '優',
+'会' => '會',
+'伛' => '傴',
+'伞' => '傘',
+'伟' => '偉',
+'传' => '傳',
+'伡' => '俥',
+'伣' => '俔',
+'伤' => '傷',
+'伥' => '倀',
+'伦' => '倫',
+'伧' => '傖',
+'伪' => '偽',
+'伫' => '佇',
+'体' => '體',
+'佣' => '傭',
+'佥' => '僉',
+'侠' => '俠',
+'侣' => '侶',
+'侥' => '僥',
+'侦' => '偵',
+'侧' => '側',
+'侨' => '僑',
+'侩' => '儈',
+'侪' => '儕',
+'侬' => '儂',
+'俣' => '俁',
+'俦' => '儔',
+'俨' => '儼',
+'俩' => '倆',
+'俪' => '儷',
+'俫' => '倈',
+'俭' => '儉',
+'债' => '債',
+'倾' => '傾',
+'偬' => '傯',
+'偻' => '僂',
+'偾' => '僨',
+'偿' => '償',
+'傥' => '儻',
+'傧' => '儐',
+'储' => '儲',
+'傩' => '儺',
+'儿' => '兒',
+'兑' => '兌',
+'兖' => '兗',
+'党' => '黨',
+'兰' => '蘭',
+'关' => '關',
+'兴' => '興',
+'兹' => '茲',
+'养' => '養',
+'兽' => '獸',
+'冁' => '囅',
+'内' => '內',
+'冈' => '岡',
+'册' => '冊',
+'写' => '寫',
+'军' => '軍',
+'农' => '農',
+'冯' => '馮',
+'冲' => '沖',
+'决' => '決',
+'况' => '況',
+'冻' => '凍',
+'净' => '淨',
+'凄' => '淒',
+'凉' => '涼',
+'减' => '減',
+'凑' => '湊',
+'凛' => '凜',
+'几' => '幾',
+'凤' => '鳳',
+'凫' => '鳧',
+'凭' => '憑',
+'凯' => '凱',
+'击' => '擊',
+'凿' => '鑿',
+'刍' => '芻',
+'划' => '劃',
+'刘' => '劉',
+'则' => '則',
+'刚' => '剛',
+'创' => '創',
+'删' => '刪',
+'别' => '別',
+'刬' => '剗',
+'刭' => '剄',
+'刹' => '剎',
+'刽' => '劊',
+'刾' => '㓨',
+'刿' => '劌',
+'剀' => '剴',
+'剂' => '劑',
+'剐' => '剮',
+'剑' => '劍',
+'剥' => '剝',
+'剧' => '劇',
+'劝' => '勸',
+'办' => '辦',
+'务' => '務',
+'劢' => '勱',
+'动' => '動',
+'励' => '勵',
+'劲' => '勁',
+'劳' => '勞',
+'势' => '勢',
+'勋' => '勛',
+'勚' => '勩',
+'匀' => '勻',
+'匦' => '匭',
+'匮' => '匱',
+'区' => '區',
+'医' => '醫',
+'华' => '華',
+'协' => '協',
+'单' => '單',
+'卖' => '賣',
+'卢' => '盧',
+'卤' => '鹵',
+'卧' => '臥',
+'卫' => '衛',
+'却' => '卻',
+'厂' => '廠',
+'厅' => '廳',
+'历' => '歷',
+'厉' => '厲',
+'压' => '壓',
+'厌' => '厭',
+'厍' => '厙',
+'厐' => '龎',
+'厕' => '廁',
+'厢' => '廂',
+'厣' => '厴',
+'厦' => '廈',
+'厨' => '廚',
+'厩' => '廄',
+'厮' => '廝',
+'县' => '縣',
+'叁' => '叄',
+'参' => '參',
+'叆' => '靉',
+'叇' => '靆',
+'双' => '雙',
+'发' => '發',
+'变' => '變',
+'叙' => '敘',
+'叠' => '疊',
+'叶' => '葉',
+'号' => '號',
+'叹' => '嘆',
+'叽' => '嘰',
+'后' => '後',
+'吓' => '嚇',
+'吕' => '呂',
+'吗' => '嗎',
+'吣' => '唚',
+'吨' => '噸',
+'听' => '聽',
+'启' => '啟',
+'吴' => '吳',
+'呐' => '吶',
+'呒' => '嘸',
+'呓' => '囈',
+'呕' => '嘔',
+'呖' => '嚦',
+'呗' => '唄',
+'员' => '員',
+'呙' => '咼',
+'呛' => '嗆',
+'呜' => '嗚',
+'咏' => '詠',
+'咙' => '嚨',
+'咛' => '嚀',
+'咝' => '噝',
+'响' => '響',
+'哑' => '啞',
+'哒' => '噠',
+'哓' => '嘵',
+'哔' => '嗶',
+'哕' => '噦',
+'哗' => '嘩',
+'哙' => '噲',
+'哜' => '嚌',
+'哝' => '噥',
+'哟' => '喲',
+'唛' => '嘜',
+'唝' => '嗊',
+'唠' => '嘮',
+'唡' => '啢',
+'唢' => '嗩',
+'唤' => '喚',
+'啧' => '嘖',
+'啬' => '嗇',
+'啭' => '囀',
+'啮' => '齧',
+'啯' => '嘓',
+'啰' => '囉',
+'啴' => '嘽',
+'啸' => '嘯',
+'喂' => '餵',
+'喷' => '噴',
+'喽' => '嘍',
+'喾' => '嚳',
+'嗫' => '囁',
+'嗳' => '噯',
+'嘘' => '噓',
+'嘤' => '嚶',
+'嘱' => '囑',
+'噜' => '嚕',
+'嚣' => '囂',
+'团' => '團',
+'园' => '園',
+'囱' => '囪',
+'围' => '圍',
+'囵' => '圇',
+'国' => '國',
+'图' => '圖',
+'圆' => '圓',
+'圣' => '聖',
+'圹' => '壙',
+'场' => '場',
+'坏' => '壞',
+'块' => '塊',
+'坚' => '堅',
+'坛' => '壇',
+'坜' => '壢',
+'坝' => '壩',
+'坞' => '塢',
+'坟' => '墳',
+'坠' => '墜',
+'垄' => '壟',
+'垅' => '壠',
+'垆' => '壚',
+'垒' => '壘',
+'垦' => '墾',
+'垩' => '堊',
+'垫' => '墊',
+'垭' => '埡',
+'垱' => '壋',
+'垲' => '塏',
+'埘' => '塒',
+'埙' => '塤',
+'埚' => '堝',
+'埯' => '垵',
+'堑' => '塹',
+'堕' => '墮',
+'墙' => '牆',
+'壮' => '壯',
+'声' => '聲',
+'壳' => '殼',
+'壶' => '壺',
+'壸' => '壼',
+'处' => '處',
+'备' => '備',
+'复' => '復',
+'够' => '夠',
+'头' => '頭',
+'夹' => '夾',
+'夺' => '奪',
+'奁' => '奩',
+'奂' => '奐',
+'奋' => '奮',
+'奖' => '獎',
+'奥' => '奧',
+'妆' => '妝',
+'妇' => '婦',
+'妈' => '媽',
+'妩' => '嫵',
+'妪' => '嫗',
+'妫' => '媯',
+'姗' => '姍',
+'姹' => '奼',
+'娄' => '婁',
+'娅' => '婭',
+'娆' => '嬈',
+'娇' => '嬌',
+'娈' => '孌',
+'娱' => '娛',
+'娲' => '媧',
+'娴' => '嫻',
+'婳' => '嫿',
+'婴' => '嬰',
+'婵' => '嬋',
+'婶' => '嬸',
+'媪' => '媼',
+'媭' => '嬃',
+'嫒' => '嬡',
+'嫔' => '嬪',
+'嫱' => '嬙',
+'嬷' => '嬤',
+'孙' => '孫',
+'学' => '學',
+'孪' => '孿',
+'宁' => '寧',
+'宝' => '寶',
+'实' => '實',
+'宠' => '寵',
+'审' => '審',
+'宪' => '憲',
+'宫' => '宮',
+'宽' => '寬',
+'宾' => '賓',
+'寝' => '寢',
+'对' => '對',
+'寻' => '尋',
+'导' => '導',
+'寿' => '壽',
+'将' => '將',
+'尔' => '爾',
+'尘' => '塵',
+'尝' => '嘗',
+'尧' => '堯',
+'尴' => '尷',
+'尸' => '屍',
+'尽' => '盡',
+'层' => '層',
+'屃' => '屓',
+'屉' => '屜',
+'届' => '屆',
+'属' => '屬',
+'屡' => '屢',
+'屦' => '屨',
+'屿' => '嶼',
+'岁' => '歲',
+'岂' => '豈',
+'岖' => '嶇',
+'岗' => '崗',
+'岘' => '峴',
+'岚' => '嵐',
+'岛' => '島',
+'岭' => '嶺',
+'岽' => '崬',
+'岿' => '巋',
+'峃' => '嶨',
+'峄' => '嶧',
+'峡' => '峽',
+'峣' => '嶢',
+'峤' => '嶠',
+'峥' => '崢',
+'峦' => '巒',
+'崂' => '嶗',
+'崃' => '崍',
+'崄' => '嶮',
+'崭' => '嶄',
+'嵘' => '嶸',
+'嵚' => '嶔',
+'嵝' => '嶁',
+'巅' => '巔',
+'巩' => '鞏',
+'巯' => '巰',
+'币' => '幣',
+'帅' => '帥',
+'师' => '師',
+'帏' => '幃',
+'帐' => '帳',
+'帘' => '簾',
+'帜' => '幟',
+'带' => '帶',
+'帧' => '幀',
+'帮' => '幫',
+'帱' => '幬',
+'帻' => '幘',
+'帼' => '幗',
+'幂' => '冪',
+'并' => '並',
+'幺' => '么',
+'广' => '廣',
+'庄' => '莊',
+'庆' => '慶',
+'庐' => '廬',
+'庑' => '廡',
+'库' => '庫',
+'应' => '應',
+'庙' => '廟',
+'庞' => '龐',
+'废' => '廢',
+'庼' => '廎',
+'廪' => '廩',
+'开' => '開',
+'异' => '異',
+'弃' => '棄',
+'弑' => '弒',
+'张' => '張',
+'弥' => '彌',
+'弪' => '弳',
+'弯' => '彎',
+'弹' => '彈',
+'强' => '強',
+'归' => '歸',
+'当' => '當',
+'录' => '錄',
+'彟' => '彠',
+'彦' => '彥',
+'彨' => '彲',
+'彻' => '徹',
+'径' => '徑',
+'徕' => '徠',
+'忆' => '憶',
+'忏' => '懺',
+'忧' => '憂',
+'忾' => '愾',
+'怀' => '懷',
+'态' => '態',
+'怂' => '慫',
+'怃' => '憮',
+'怄' => '慪',
+'怅' => '悵',
+'怆' => '愴',
+'怜' => '憐',
+'总' => '總',
+'怼' => '懟',
+'怿' => '懌',
+'恋' => '戀',
+'恒' => '恆',
+'恳' => '懇',
+'恶' => '惡',
+'恸' => '慟',
+'恹' => '懨',
+'恺' => '愷',
+'恻' => '惻',
+'恼' => '惱',
+'恽' => '惲',
+'悦' => '悅',
+'悫' => '愨',
+'悬' => '懸',
+'悭' => '慳',
+'悮' => '悞',
+'悯' => '憫',
+'惊' => '驚',
+'惧' => '懼',
+'惨' => '慘',
+'惩' => '懲',
+'惫' => '憊',
+'惬' => '愜',
+'惭' => '慚',
+'惮' => '憚',
+'惯' => '慣',
+'愠' => '慍',
+'愤' => '憤',
+'愦' => '憒',
+'愿' => '願',
+'慑' => '懾',
+'懑' => '懣',
+'懒' => '懶',
+'懔' => '懍',
+'戆' => '戇',
+'戋' => '戔',
+'戏' => '戲',
+'戗' => '戧',
+'战' => '戰',
+'戬' => '戩',
+'戯' => '戱',
+'户' => '戶',
+'扑' => '撲',
+'执' => '執',
+'扩' => '擴',
+'扪' => '捫',
+'扫' => '掃',
+'扬' => '揚',
+'扰' => '擾',
+'抚' => '撫',
+'抛' => '拋',
+'抟' => '摶',
+'抠' => '摳',
+'抡' => '掄',
+'抢' => '搶',
+'护' => '護',
+'报' => '報',
+'担' => '擔',
+'拟' => '擬',
+'拢' => '攏',
+'拣' => '揀',
+'拥' => '擁',
+'拦' => '攔',
+'拧' => '擰',
+'拨' => '撥',
+'择' => '擇',
+'挂' => '掛',
+'挚' => '摯',
+'挛' => '攣',
+'挜' => '掗',
+'挝' => '撾',
+'挞' => '撻',
+'挟' => '挾',
+'挠' => '撓',
+'挡' => '擋',
+'挢' => '撟',
+'挣' => '掙',
+'挤' => '擠',
+'挥' => '揮',
+'挦' => '撏',
+'捝' => '挩',
+'捞' => '撈',
+'损' => '損',
+'捡' => '撿',
+'换' => '換',
+'捣' => '搗',
+'据' => '據',
+'掳' => '擄',
+'掴' => '摑',
+'掷' => '擲',
+'掸' => '撣',
+'掺' => '摻',
+'掼' => '摜',
+'揽' => '攬',
+'揾' => '搵',
+'揿' => '撳',
+'搀' => '攙',
+'搁' => '擱',
+'搂' => '摟',
+'搅' => '攪',
+'携' => '攜',
+'摄' => '攝',
+'摅' => '攄',
+'摆' => '擺',
+'摇' => '搖',
+'摈' => '擯',
+'摊' => '攤',
+'撄' => '攖',
+'撑' => '撐',
+'撵' => '攆',
+'撷' => '擷',
+'撸' => '擼',
+'撺' => '攛',
+'擞' => '擻',
+'攒' => '攢',
+'敌' => '敵',
+'敛' => '斂',
+'敩' => '斆',
+'数' => '數',
+'斋' => '齋',
+'斓' => '斕',
+'斩' => '斬',
+'断' => '斷',
+'无' => '無',
+'旧' => '舊',
+'时' => '時',
+'旷' => '曠',
+'旸' => '暘',
+'昙' => '曇',
+'昼' => '晝',
+'昽' => '曨',
+'显' => '顯',
+'晋' => '晉',
+'晒' => '曬',
+'晓' => '曉',
+'晔' => '曄',
+'晕' => '暈',
+'晖' => '暉',
+'暂' => '暫',
+'暧' => '曖',
+'术' => '術',
+'机' => '機',
+'杀' => '殺',
+'杂' => '雜',
+'权' => '權',
+'杠' => '槓',
+'条' => '條',
+'来' => '來',
+'杨' => '楊',
+'杩' => '榪',
+'杰' => '傑',
+'极' => '極',
+'构' => '構',
+'枞' => '樅',
+'枢' => '樞',
+'枣' => '棗',
+'枥' => '櫪',
+'枧' => '梘',
+'枨' => '棖',
+'枪' => '槍',
+'枫' => '楓',
+'枭' => '梟',
+'柜' => '櫃',
+'柠' => '檸',
+'柽' => '檉',
+'栀' => '梔',
+'栅' => '柵',
+'标' => '標',
+'栈' => '棧',
+'栉' => '櫛',
+'栊' => '櫳',
+'栋' => '棟',
+'栌' => '櫨',
+'栎' => '櫟',
+'栏' => '欄',
+'树' => '樹',
+'栖' => '棲',
+'样' => '樣',
+'栾' => '欒',
+'桠' => '椏',
+'桡' => '橈',
+'桢' => '楨',
+'档' => '檔',
+'桤' => '榿',
+'桥' => '橋',
+'桦' => '樺',
+'桧' => '檜',
+'桨' => '槳',
+'桩' => '樁',
+'桪' => '樳',
+'梦' => '夢',
+'梼' => '檮',
+'梾' => '棶',
+'梿' => '槤',
+'检' => '檢',
+'棁' => '梲',
+'棂' => '欞',
+'椁' => '槨',
+'椝' => '槼',
+'椟' => '櫝',
+'椠' => '槧',
+'椢' => '槶',
+'椤' => '欏',
+'椫' => '樿',
+'椭' => '橢',
+'椮' => '槮',
+'楼' => '樓',
+'榄' => '欖',
+'榅' => '榲',
+'榇' => '櫬',
+'榈' => '櫚',
+'榉' => '櫸',
+'槚' => '檟',
+'槛' => '檻',
+'槟' => '檳',
+'槠' => '櫧',
+'横' => '橫',
+'樯' => '檣',
+'樱' => '櫻',
+'橥' => '櫫',
+'橱' => '櫥',
+'橹' => '櫓',
+'橼' => '櫞',
+'檩' => '檁',
+'欢' => '歡',
+'欤' => '歟',
+'欧' => '歐',
+'歼' => '殲',
+'殁' => '歿',
+'殇' => '殤',
+'残' => '殘',
+'殒' => '殞',
+'殓' => '殮',
+'殚' => '殫',
+'殡' => '殯',
+'殴' => '毆',
+'毁' => '毀',
+'毂' => '轂',
+'毕' => '畢',
+'毙' => '斃',
+'毡' => '氈',
+'毵' => '毿',
+'氇' => '氌',
+'气' => '氣',
+'氢' => '氫',
+'氩' => '氬',
+'氲' => '氳',
+'汇' => '匯',
+'汉' => '漢',
+'汤' => '湯',
+'汹' => '洶',
+'沟' => '溝',
+'没' => '沒',
+'沣' => '灃',
+'沤' => '漚',
+'沥' => '瀝',
+'沦' => '淪',
+'沧' => '滄',
+'沨' => '渢',
+'沩' => '溈',
+'沪' => '滬',
+'泞' => '濘',
+'泪' => '淚',
+'泶' => '澩',
+'泷' => '瀧',
+'泸' => '瀘',
+'泺' => '濼',
+'泻' => '瀉',
+'泼' => '潑',
+'泽' => '澤',
+'泾' => '涇',
+'洁' => '潔',
+'洒' => '灑',
+'洼' => '窪',
+'浃' => '浹',
+'浅' => '淺',
+'浆' => '漿',
+'浇' => '澆',
+'浈' => '湞',
+'浉' => '溮',
+'浊' => '濁',
+'测' => '測',
+'浍' => '澮',
+'济' => '濟',
+'浏' => '瀏',
+'浐' => '滻',
+'浑' => '渾',
+'浒' => '滸',
+'浓' => '濃',
+'浔' => '潯',
+'浕' => '濜',
+'涂' => '塗',
+'涛' => '濤',
+'涝' => '澇',
+'涞' => '淶',
+'涟' => '漣',
+'涠' => '潿',
+'涡' => '渦',
+'涢' => '溳',
+'涣' => '渙',
+'涤' => '滌',
+'润' => '潤',
+'涧' => '澗',
+'涨' => '漲',
+'涩' => '澀',
+'渊' => '淵',
+'渌' => '淥',
+'渍' => '漬',
+'渎' => '瀆',
+'渐' => '漸',
+'渑' => '澠',
+'渔' => '漁',
+'渖' => '瀋',
+'渗' => '滲',
+'温' => '溫',
+'湾' => '灣',
+'湿' => '濕',
+'溃' => '潰',
+'溅' => '濺',
+'溆' => '漵',
+'溇' => '漊',
+'滗' => '潷',
+'滚' => '滾',
+'滞' => '滯',
+'滟' => '灩',
+'滠' => '灄',
+'满' => '滿',
+'滢' => '瀅',
+'滤' => '濾',
+'滥' => '濫',
+'滦' => '灤',
+'滨' => '濱',
+'滩' => '灘',
+'滪' => '澦',
+'漤' => '灠',
+'潆' => '瀠',
+'潇' => '瀟',
+'潋' => '瀲',
+'潍' => '濰',
+'潜' => '潛',
+'潴' => '瀦',
+'澛' => '瀂',
+'澜' => '瀾',
+'濑' => '瀨',
+'濒' => '瀕',
+'灏' => '灝',
+'灭' => '滅',
+'灯' => '燈',
+'灵' => '靈',
+'灾' => '災',
+'灿' => '燦',
+'炀' => '煬',
+'炉' => '爐',
+'炖' => '燉',
+'炜' => '煒',
+'炝' => '熗',
+'点' => '點',
+'炼' => '煉',
+'炽' => '熾',
+'烁' => '爍',
+'烂' => '爛',
+'烃' => '烴',
+'烛' => '燭',
+'烟' => '煙',
+'烦' => '煩',
+'烧' => '燒',
+'烨' => '燁',
+'烩' => '燴',
+'烫' => '燙',
+'烬' => '燼',
+'热' => '熱',
+'焕' => '煥',
+'焖' => '燜',
+'焘' => '燾',
+'煴' => '熅',
+'爱' => '愛',
+'爷' => '爺',
+'牍' => '牘',
+'牦' => '氂',
+'牵' => '牽',
+'牺' => '犧',
+'犊' => '犢',
+'状' => '狀',
+'犷' => '獷',
+'犸' => '獁',
+'犹' => '猶',
+'狈' => '狽',
+'狝' => '獮',
+'狞' => '獰',
+'独' => '獨',
+'狭' => '狹',
+'狮' => '獅',
+'狯' => '獪',
+'狰' => '猙',
+'狱' => '獄',
+'狲' => '猻',
+'猃' => '獫',
+'猎' => '獵',
+'猕' => '獼',
+'猡' => '玀',
+'猪' => '豬',
+'猫' => '貓',
+'猬' => '蝟',
+'献' => '獻',
+'獭' => '獺',
+'玑' => '璣',
+'玙' => '璵',
+'玚' => '瑒',
+'玛' => '瑪',
+'玮' => '瑋',
+'环' => '環',
+'现' => '現',
+'玱' => '瑲',
+'玺' => '璽',
+'珐' => '琺',
+'珑' => '瓏',
+'珰' => '璫',
+'珲' => '琿',
+'琎' => '璡',
+'琏' => '璉',
+'琐' => '瑣',
+'琼' => '瓊',
+'瑶' => '瑤',
+'瑷' => '璦',
+'瑸' => '璸',
+'璎' => '瓔',
+'瓒' => '瓚',
+'瓯' => '甌',
+'电' => '電',
+'画' => '畫',
+'畅' => '暢',
+'畴' => '疇',
+'疖' => '癤',
+'疗' => '療',
+'疟' => '瘧',
+'疠' => '癘',
+'疡' => '瘍',
+'疬' => '癧',
+'疭' => '瘲',
+'疮' => '瘡',
+'疯' => '瘋',
+'疱' => '皰',
+'痈' => '癰',
+'痉' => '痙',
+'痒' => '癢',
+'痖' => '瘂',
+'痨' => '癆',
+'痪' => '瘓',
+'痫' => '癇',
+'痳' => '痲',
+'瘅' => '癉',
+'瘆' => '瘮',
+'瘗' => '瘞',
+'瘘' => '瘺',
+'瘪' => '癟',
+'瘫' => '癱',
+'瘾' => '癮',
+'瘿' => '癭',
+'癞' => '癩',
+'癣' => '癬',
+'癫' => '癲',
+'皑' => '皚',
+'皱' => '皺',
+'皲' => '皸',
+'盏' => '盞',
+'盐' => '鹽',
+'监' => '監',
+'盖' => '蓋',
+'盗' => '盜',
+'盘' => '盤',
+'眍' => '瞘',
+'眦' => '眥',
+'眬' => '矓',
+'睁' => '睜',
+'睐' => '睞',
+'睑' => '瞼',
+'瞆' => '瞶',
+'瞒' => '瞞',
+'瞩' => '矚',
+'矫' => '矯',
+'矶' => '磯',
+'矾' => '礬',
+'矿' => '礦',
+'砀' => '碭',
+'码' => '碼',
+'砖' => '磚',
+'砗' => '硨',
+'砚' => '硯',
+'砜' => '碸',
+'砺' => '礪',
+'砻' => '礱',
+'砾' => '礫',
+'础' => '礎',
+'硁' => '硜',
+'硕' => '碩',
+'硖' => '硤',
+'硗' => '磽',
+'硙' => '磑',
+'硚' => '礄',
+'确' => '確',
+'硵' => '磠',
+'硷' => '鹼',
+'碍' => '礙',
+'碛' => '磧',
+'碜' => '磣',
+'碱' => '鹼',
+'礼' => '禮',
+'祃' => '禡',
+'祎' => '禕',
+'祢' => '禰',
+'祯' => '禎',
+'祷' => '禱',
+'祸' => '禍',
+'禀' => '稟',
+'禄' => '祿',
+'禅' => '禪',
+'离' => '離',
+'秃' => '禿',
+'秆' => '稈',
+'种' => '種',
+'积' => '積',
+'称' => '稱',
+'秽' => '穢',
+'秾' => '穠',
+'稆' => '穭',
+'税' => '稅',
+'稣' => '穌',
+'稳' => '穩',
+'穑' => '穡',
+'穷' => '窮',
+'窃' => '竊',
+'窍' => '竅',
+'窎' => '窵',
+'窑' => '窯',
+'窜' => '竄',
+'窝' => '窩',
+'窥' => '窺',
+'窦' => '竇',
+'窭' => '窶',
+'竖' => '豎',
+'竞' => '競',
+'笃' => '篤',
+'笋' => '筍',
+'笔' => '筆',
+'笕' => '筧',
+'笺' => '箋',
+'笼' => '籠',
+'笾' => '籩',
+'筑' => '築',
+'筚' => '篳',
+'筛' => '篩',
+'筜' => '簹',
+'筝' => '箏',
+'筹' => '籌',
+'筼' => '篔',
+'签' => '簽',
+'简' => '簡',
+'箓' => '籙',
+'箦' => '簀',
+'箧' => '篋',
+'箨' => '籜',
+'箩' => '籮',
+'箪' => '簞',
+'箫' => '簫',
+'篑' => '簣',
+'篓' => '簍',
+'篮' => '籃',
+'篯' => '籛',
+'篱' => '籬',
+'簖' => '籪',
+'籁' => '籟',
+'籴' => '糴',
+'类' => '類',
+'籼' => '秈',
+'粜' => '糶',
+'粝' => '糲',
+'粤' => '粵',
+'粪' => '糞',
+'粮' => '糧',
+'糁' => '糝',
+'糇' => '餱',
+'紧' => '緊',
+'絷' => '縶',
+'纟' => '糹',
+'纠' => '糾',
+'纡' => '紆',
+'红' => '紅',
+'纣' => '紂',
+'纤' => '纖',
+'纥' => '紇',
+'约' => '約',
+'级' => '級',
+'纨' => '紈',
+'纩' => '纊',
+'纪' => '紀',
+'纫' => '紉',
+'纬' => '緯',
+'纭' => '紜',
+'纮' => '紘',
+'纯' => '純',
+'纰' => '紕',
+'纱' => '紗',
+'纲' => '綱',
+'纳' => '納',
+'纴' => '紝',
+'纵' => '縱',
+'纶' => '綸',
+'纷' => '紛',
+'纸' => '紙',
+'纹' => '紋',
+'纺' => '紡',
+'纻' => '紵',
+'纼' => '紖',
+'纽' => '紐',
+'纾' => '紓',
+'线' => '線',
+'绀' => '紺',
+'绁' => '紲',
+'绂' => '紱',
+'练' => '練',
+'组' => '組',
+'绅' => '紳',
+'细' => '細',
+'织' => '織',
+'终' => '終',
+'绉' => '縐',
+'绊' => '絆',
+'绋' => '紼',
+'绌' => '絀',
+'绍' => '紹',
+'绎' => '繹',
+'经' => '經',
+'绐' => '紿',
+'绑' => '綁',
+'绒' => '絨',
+'结' => '結',
+'绔' => '絝',
+'绕' => '繞',
+'绖' => '絰',
+'绗' => '絎',
+'绘' => '繪',
+'给' => '給',
+'绚' => '絢',
+'绛' => '絳',
+'络' => '絡',
+'绝' => '絕',
+'绞' => '絞',
+'统' => '統',
+'绠' => '綆',
+'绡' => '綃',
+'绢' => '絹',
+'绣' => '繡',
+'绤' => '綌',
+'绥' => '綏',
+'绦' => '絛',
+'继' => '繼',
+'绨' => '綈',
+'绩' => '績',
+'绪' => '緒',
+'绫' => '綾',
+'绬' => '緓',
+'续' => '續',
+'绮' => '綺',
+'绯' => '緋',
+'绰' => '綽',
+'绱' => '鞝',
+'绲' => '緄',
+'绳' => '繩',
+'维' => '維',
+'绵' => '綿',
+'绶' => '綬',
+'绷' => '繃',
+'绸' => '綢',
+'绹' => '綯',
+'绺' => '綹',
+'绻' => '綣',
+'综' => '綜',
+'绽' => '綻',
+'绾' => '綰',
+'绿' => '綠',
+'缀' => '綴',
+'缁' => '緇',
+'缂' => '緙',
+'缃' => '緗',
+'缄' => '緘',
+'缅' => '緬',
+'缆' => '纜',
+'缇' => '緹',
+'缈' => '緲',
+'缉' => '緝',
+'缊' => '縕',
+'缋' => '繢',
+'缌' => '緦',
+'缍' => '綞',
+'缎' => '緞',
+'缏' => '緶',
+'缐' => '線',
+'缑' => '緱',
+'缒' => '縋',
+'缓' => '緩',
+'缔' => '締',
+'缕' => '縷',
+'编' => '編',
+'缗' => '緡',
+'缘' => '緣',
+'缙' => '縉',
+'缚' => '縛',
+'缛' => '縟',
+'缜' => '縝',
+'缝' => '縫',
+'缞' => '縗',
+'缟' => '縞',
+'缠' => '纏',
+'缡' => '縭',
+'缢' => '縊',
+'缣' => '縑',
+'缤' => '繽',
+'缥' => '縹',
+'缦' => '縵',
+'缧' => '縲',
+'缨' => '纓',
+'缩' => '縮',
+'缪' => '繆',
+'缫' => '繅',
+'缬' => '纈',
+'缭' => '繚',
+'缮' => '繕',
+'缯' => '繒',
+'缰' => '韁',
+'缱' => '繾',
+'缲' => '繰',
+'缳' => '繯',
+'缴' => '繳',
+'缵' => '纘',
+'罂' => '罌',
+'网' => '網',
+'罗' => '羅',
+'罚' => '罰',
+'罢' => '罷',
+'罴' => '羆',
+'羁' => '羈',
+'羟' => '羥',
+'羡' => '羨',
+'翘' => '翹',
+'翙' => '翽',
+'翚' => '翬',
+'耢' => '耮',
+'耧' => '耬',
+'耸' => '聳',
+'耻' => '恥',
+'聂' => '聶',
+'聋' => '聾',
+'职' => '職',
+'聍' => '聹',
+'联' => '聯',
+'聩' => '聵',
+'聪' => '聰',
+'肃' => '肅',
+'肠' => '腸',
+'肤' => '膚',
+'肮' => '骯',
+'肴' => '餚',
+'肾' => '腎',
+'肿' => '腫',
+'胀' => '脹',
+'胁' => '脅',
+'胆' => '膽',
+'胜' => '勝',
+'胧' => '朧',
+'胨' => '腖',
+'胪' => '臚',
+'胫' => '脛',
+'胶' => '膠',
+'脉' => '脈',
+'脍' => '膾',
+'脏' => '髒',
+'脐' => '臍',
+'脑' => '腦',
+'脓' => '膿',
+'脔' => '臠',
+'脚' => '腳',
+'脱' => '脫',
+'脶' => '腡',
+'脸' => '臉',
+'腊' => '臘',
+'腌' => '醃',
+'腘' => '膕',
+'腭' => '齶',
+'腻' => '膩',
+'腼' => '靦',
+'腽' => '膃',
+'腾' => '騰',
+'膑' => '臏',
+'臜' => '臢',
+'舆' => '輿',
+'舣' => '艤',
+'舰' => '艦',
+'舱' => '艙',
+'舻' => '艫',
+'艰' => '艱',
+'艳' => '艷',
+'艺' => '藝',
+'节' => '節',
+'芈' => '羋',
+'芗' => '薌',
+'芜' => '蕪',
+'芦' => '蘆',
+'苁' => '蓯',
+'苇' => '葦',
+'苈' => '藶',
+'苋' => '莧',
+'苌' => '萇',
+'苍' => '蒼',
+'苎' => '苧',
+'苏' => '蘇',
+'苧' => '薴',
+'茎' => '莖',
+'茏' => '蘢',
+'茑' => '蔦',
+'茔' => '塋',
+'茕' => '煢',
+'茧' => '繭',
+'荆' => '荊',
+'荐' => '薦',
+'荙' => '薘',
+'荚' => '莢',
+'荛' => '蕘',
+'荜' => '蓽',
+'荝' => '萴',
+'荞' => '蕎',
+'荟' => '薈',
+'荠' => '薺',
+'荡' => '盪',
+'荣' => '榮',
+'荤' => '葷',
+'荥' => '滎',
+'荦' => '犖',
+'荧' => '熒',
+'荨' => '蕁',
+'荩' => '藎',
+'荪' => '蓀',
+'荫' => '蔭',
+'荬' => '蕒',
+'荭' => '葒',
+'荮' => '葤',
+'药' => '藥',
+'莅' => '蒞',
+'莱' => '萊',
+'莲' => '蓮',
+'莳' => '蒔',
+'莴' => '萵',
+'莶' => '薟',
+'获' => '獲',
+'莸' => '蕕',
+'莹' => '瑩',
+'莺' => '鶯',
+'莼' => '蓴',
+'萚' => '蘀',
+'萝' => '蘿',
+'萤' => '螢',
+'营' => '營',
+'萦' => '縈',
+'萧' => '蕭',
+'萨' => '薩',
+'葱' => '蔥',
+'蒇' => '蕆',
+'蒉' => '蕢',
+'蒋' => '蔣',
+'蒌' => '蔞',
+'蓝' => '藍',
+'蓟' => '薊',
+'蓠' => '蘺',
+'蓣' => '蕷',
+'蓥' => '鎣',
+'蓦' => '驀',
+'蔂' => '虆',
+'蔷' => '薔',
+'蔹' => '蘞',
+'蔺' => '藺',
+'蔼' => '藹',
+'蕰' => '薀',
+'蕲' => '蘄',
+'蕴' => '蘊',
+'薮' => '藪',
+'藓' => '蘚',
+'蘖' => '櫱',
+'虏' => '虜',
+'虑' => '慮',
+'虚' => '虛',
+'虫' => '蟲',
+'虮' => '蟣',
+'虽' => '雖',
+'虾' => '蝦',
+'虿' => '蠆',
+'蚀' => '蝕',
+'蚁' => '蟻',
+'蚂' => '螞',
+'蚃' => '蠁',
+'蚕' => '蠶',
+'蚬' => '蜆',
+'蛊' => '蠱',
+'蛎' => '蠣',
+'蛏' => '蟶',
+'蛮' => '蠻',
+'蛰' => '蟄',
+'蛱' => '蛺',
+'蛲' => '蟯',
+'蛳' => '螄',
+'蛴' => '蠐',
+'蜕' => '蛻',
+'蜗' => '蝸',
+'蜡' => '蠟',
+'蝇' => '蠅',
+'蝈' => '蟈',
+'蝉' => '蟬',
+'蝎' => '蠍',
+'蝼' => '螻',
+'蝾' => '蠑',
+'螀' => '螿',
+'螨' => '蟎',
+'蟏' => '蠨',
+'衅' => '釁',
+'衔' => '銜',
+'补' => '補',
+'衬' => '襯',
+'衮' => '袞',
+'袄' => '襖',
+'袅' => '裊',
+'袆' => '褘',
+'袜' => '襪',
+'袭' => '襲',
+'袯' => '襏',
+'装' => '裝',
+'裆' => '襠',
+'裈' => '褌',
+'裢' => '褳',
+'裣' => '襝',
+'裤' => '褲',
+'裥' => '襉',
+'褛' => '褸',
+'褴' => '襤',
+'襕' => '襴',
+'见' => '見',
+'观' => '觀',
+'觃' => '覎',
+'规' => '規',
+'觅' => '覓',
+'视' => '視',
+'觇' => '覘',
+'览' => '覽',
+'觉' => '覺',
+'觊' => '覬',
+'觋' => '覡',
+'觌' => '覿',
+'觍' => '覥',
+'觎' => '覦',
+'觏' => '覯',
+'觐' => '覲',
+'觑' => '覷',
+'觞' => '觴',
+'触' => '觸',
+'觯' => '觶',
+'訚' => '誾',
+'詟' => '讋',
+'誉' => '譽',
+'誊' => '謄',
+'讠' => '訁',
+'计' => '計',
+'订' => '訂',
+'讣' => '訃',
+'认' => '認',
+'讥' => '譏',
+'讦' => '訐',
+'讧' => '訌',
+'讨' => '討',
+'让' => '讓',
+'讪' => '訕',
+'讫' => '訖',
+'讬' => '託',
+'训' => '訓',
+'议' => '議',
+'讯' => '訊',
+'记' => '記',
+'讱' => '訒',
+'讲' => '講',
+'讳' => '諱',
+'讴' => '謳',
+'讵' => '詎',
+'讶' => '訝',
+'讷' => '訥',
+'许' => '許',
+'讹' => '訛',
+'论' => '論',
+'讻' => '訩',
+'讼' => '訟',
+'讽' => '諷',
+'设' => '設',
+'访' => '訪',
+'诀' => '訣',
+'证' => '證',
+'诂' => '詁',
+'诃' => '訶',
+'评' => '評',
+'诅' => '詛',
+'识' => '識',
+'诇' => '詗',
+'诈' => '詐',
+'诉' => '訴',
+'诊' => '診',
+'诋' => '詆',
+'诌' => '謅',
+'词' => '詞',
+'诎' => '詘',
+'诏' => '詔',
+'诐' => '詖',
+'译' => '譯',
+'诒' => '詒',
+'诓' => '誆',
+'诔' => '誄',
+'试' => '試',
+'诖' => '詿',
+'诗' => '詩',
+'诘' => '詰',
+'诙' => '詼',
+'诚' => '誠',
+'诛' => '誅',
+'诜' => '詵',
+'话' => '話',
+'诞' => '誕',
+'诟' => '詬',
+'诠' => '詮',
+'诡' => '詭',
+'询' => '詢',
+'诣' => '詣',
+'诤' => '諍',
+'该' => '該',
+'详' => '詳',
+'诧' => '詫',
+'诨' => '諢',
+'诩' => '詡',
+'诪' => '譸',
+'诫' => '誡',
+'诬' => '誣',
+'语' => '語',
+'诮' => '誚',
+'误' => '誤',
+'诰' => '誥',
+'诱' => '誘',
+'诲' => '誨',
+'诳' => '誑',
+'说' => '說',
+'诵' => '誦',
+'诶' => '誒',
+'请' => '請',
+'诸' => '諸',
+'诹' => '諏',
+'诺' => '諾',
+'读' => '讀',
+'诼' => '諑',
+'诽' => '誹',
+'课' => '課',
+'诿' => '諉',
+'谀' => '諛',
+'谁' => '誰',
+'谂' => '諗',
+'调' => '調',
+'谄' => '諂',
+'谅' => '諒',
+'谆' => '諄',
+'谇' => '誶',
+'谈' => '談',
+'谊' => '誼',
+'谋' => '謀',
+'谌' => '諶',
+'谍' => '諜',
+'谎' => '謊',
+'谏' => '諫',
+'谐' => '諧',
+'谑' => '謔',
+'谒' => '謁',
+'谓' => '謂',
+'谔' => '諤',
+'谕' => '諭',
+'谖' => '諼',
+'谗' => '讒',
+'谘' => '諮',
+'谙' => '諳',
+'谚' => '諺',
+'谛' => '諦',
+'谜' => '謎',
+'谝' => '諞',
+'谞' => '諝',
+'谟' => '謨',
+'谠' => '讜',
+'谡' => '謖',
+'谢' => '謝',
+'谣' => '謠',
+'谤' => '謗',
+'谥' => '諡',
+'谦' => '謙',
+'谧' => '謐',
+'谨' => '謹',
+'谩' => '謾',
+'谪' => '謫',
+'谫' => '譾',
+'谬' => '謬',
+'谭' => '譚',
+'谮' => '譖',
+'谯' => '譙',
+'谰' => '讕',
+'谱' => '譜',
+'谲' => '譎',
+'谳' => '讞',
+'谴' => '譴',
+'谵' => '譫',
+'谶' => '讖',
+'豮' => '豶',
+'贝' => '貝',
+'贞' => '貞',
+'负' => '負',
+'贠' => '貟',
+'贡' => '貢',
+'财' => '財',
+'责' => '責',
+'贤' => '賢',
+'败' => '敗',
+'账' => '賬',
+'货' => '貨',
+'质' => '質',
+'贩' => '販',
+'贪' => '貪',
+'贫' => '貧',
+'贬' => '貶',
+'购' => '購',
+'贮' => '貯',
+'贯' => '貫',
+'贰' => '貳',
+'贱' => '賤',
+'贲' => '賁',
+'贳' => '貰',
+'贴' => '貼',
+'贵' => '貴',
+'贶' => '貺',
+'贷' => '貸',
+'贸' => '貿',
+'费' => '費',
+'贺' => '賀',
+'贻' => '貽',
+'贼' => '賊',
+'贽' => '贄',
+'贾' => '賈',
+'贿' => '賄',
+'赀' => '貲',
+'赁' => '賃',
+'赂' => '賂',
+'赃' => '贓',
+'资' => '資',
+'赅' => '賅',
+'赆' => '贐',
+'赇' => '賕',
+'赈' => '賑',
+'赉' => '賚',
+'赊' => '賒',
+'赋' => '賦',
+'赌' => '賭',
+'赍' => '齎',
+'赎' => '贖',
+'赏' => '賞',
+'赐' => '賜',
+'赑' => '贔',
+'赒' => '賙',
+'赓' => '賡',
+'赔' => '賠',
+'赕' => '賧',
+'赖' => '賴',
+'赗' => '賵',
+'赘' => '贅',
+'赙' => '賻',
+'赚' => '賺',
+'赛' => '賽',
+'赜' => '賾',
+'赝' => '贗',
+'赞' => '贊',
+'赟' => '贇',
+'赠' => '贈',
+'赡' => '贍',
+'赢' => '贏',
+'赣' => '贛',
+'赪' => '赬',
+'赵' => '趙',
+'赶' => '趕',
+'趋' => '趨',
+'趱' => '趲',
+'趸' => '躉',
+'跃' => '躍',
+'跄' => '蹌',
+'跞' => '躒',
+'践' => '踐',
+'跶' => '躂',
+'跷' => '蹺',
+'跸' => '蹕',
+'跹' => '躚',
+'跻' => '躋',
+'踊' => '踴',
+'踌' => '躊',
+'踪' => '蹤',
+'踬' => '躓',
+'踯' => '躑',
+'蹑' => '躡',
+'蹒' => '蹣',
+'蹰' => '躕',
+'蹿' => '躥',
+'躏' => '躪',
+'躜' => '躦',
+'躯' => '軀',
+'车' => '車',
+'轧' => '軋',
+'轨' => '軌',
+'轩' => '軒',
+'轪' => '軑',
+'轫' => '軔',
+'转' => '轉',
+'轭' => '軛',
+'轮' => '輪',
+'软' => '軟',
+'轰' => '轟',
+'轱' => '軲',
+'轲' => '軻',
+'轳' => '轤',
+'轴' => '軸',
+'轵' => '軹',
+'轶' => '軼',
+'轷' => '軤',
+'轸' => '軫',
+'轹' => '轢',
+'轺' => '軺',
+'轻' => '輕',
+'轼' => '軾',
+'载' => '載',
+'轾' => '輊',
+'轿' => '轎',
+'辀' => '輈',
+'辁' => '輇',
+'辂' => '輅',
+'较' => '較',
+'辄' => '輒',
+'辅' => '輔',
+'辆' => '輛',
+'辇' => '輦',
+'辈' => '輩',
+'辉' => '輝',
+'辊' => '輥',
+'辋' => '輞',
+'辌' => '輬',
+'辍' => '輟',
+'辎' => '輜',
+'辏' => '輳',
+'辐' => '輻',
+'辑' => '輯',
+'辒' => '轀',
+'输' => '輸',
+'辔' => '轡',
+'辕' => '轅',
+'辖' => '轄',
+'辗' => '輾',
+'辘' => '轆',
+'辙' => '轍',
+'辚' => '轔',
+'辞' => '辭',
+'辩' => '辯',
+'辫' => '辮',
+'边' => '邊',
+'辽' => '遼',
+'达' => '達',
+'迁' => '遷',
+'过' => '過',
+'迈' => '邁',
+'运' => '運',
+'还' => '還',
+'这' => '這',
+'进' => '進',
+'远' => '遠',
+'违' => '違',
+'连' => '連',
+'迟' => '遲',
+'迩' => '邇',
+'迳' => '逕',
+'迹' => '跡',
+'适' => '適',
+'选' => '選',
+'逊' => '遜',
+'递' => '遞',
+'逦' => '邐',
+'逻' => '邏',
+'遗' => '遺',
+'遥' => '遙',
+'邓' => '鄧',
+'邝' => '鄺',
+'邬' => '鄔',
+'邮' => '郵',
+'邹' => '鄒',
+'邺' => '鄴',
+'邻' => '鄰',
+'郏' => '郟',
+'郐' => '鄶',
+'郑' => '鄭',
+'郓' => '鄆',
+'郦' => '酈',
+'郧' => '鄖',
+'郸' => '鄲',
+'酂' => '酇',
+'酝' => '醞',
+'酦' => '醱',
+'酱' => '醬',
+'酽' => '釅',
+'酾' => '釃',
+'酿' => '釀',
+'释' => '釋',
+'鉴' => '鑒',
+'銮' => '鑾',
+'錾' => '鏨',
+'钅' => '釒',
+'钆' => '釓',
+'钇' => '釔',
+'针' => '針',
+'钉' => '釘',
+'钊' => '釗',
+'钋' => '釙',
+'钌' => '釕',
+'钍' => '釷',
+'钎' => '釺',
+'钏' => '釧',
+'钐' => '釤',
+'钑' => '鈒',
+'钒' => '釩',
+'钓' => '釣',
+'钔' => '鍆',
+'钕' => '釹',
+'钖' => '鍚',
+'钗' => '釵',
+'钘' => '鈃',
+'钙' => '鈣',
+'钚' => '鈈',
+'钛' => '鈦',
+'钜' => '鉅',
+'钝' => '鈍',
+'钞' => '鈔',
+'钟' => '鍾',
+'钠' => '鈉',
+'钡' => '鋇',
+'钢' => '鋼',
+'钣' => '鈑',
+'钤' => '鈐',
+'钥' => '鑰',
+'钦' => '欽',
+'钧' => '鈞',
+'钨' => '鎢',
+'钩' => '鈎',
+'钪' => '鈧',
+'钫' => '鈁',
+'钬' => '鈥',
+'钭' => '鈄',
+'钮' => '鈕',
+'钯' => '鈀',
+'钰' => '鈺',
+'钱' => '錢',
+'钲' => '鉦',
+'钳' => '鉗',
+'钴' => '鈷',
+'钵' => '缽',
+'钶' => '鈳',
+'钷' => '鉕',
+'钸' => '鈽',
+'钹' => '鈸',
+'钺' => '鉞',
+'钻' => '鑽',
+'钼' => '鉬',
+'钽' => '鉭',
+'钾' => '鉀',
+'钿' => '鈿',
+'铀' => '鈾',
+'铁' => '鐵',
+'铂' => '鉑',
+'铃' => '鈴',
+'铄' => '鑠',
+'铅' => '鉛',
+'铆' => '鉚',
+'铇' => '鉋',
+'铈' => '鈰',
+'铉' => '鉉',
+'铊' => '鉈',
+'铋' => '鉍',
+'铌' => '鈮',
+'铍' => '鈹',
+'铎' => '鐸',
+'铏' => '鉶',
+'铐' => '銬',
+'铑' => '銠',
+'铒' => '鉺',
+'铓' => '鋩',
+'铔' => '錏',
+'铕' => '銪',
+'铖' => '鋮',
+'铗' => '鋏',
+'铘' => '鋣',
+'铙' => '鐃',
+'铚' => '銍',
+'铛' => '鐺',
+'铜' => '銅',
+'铝' => '鋁',
+'铞' => '銱',
+'铟' => '銦',
+'铠' => '鎧',
+'铡' => '鍘',
+'铢' => '銖',
+'铣' => '銑',
+'铤' => '鋌',
+'铥' => '銩',
+'铦' => '銛',
+'铧' => '鏵',
+'铨' => '銓',
+'铩' => '鎩',
+'铪' => '鉿',
+'铫' => '銚',
+'铬' => '鉻',
+'铭' => '銘',
+'铮' => '錚',
+'铯' => '銫',
+'铰' => '鉸',
+'铱' => '銥',
+'铲' => '鏟',
+'铳' => '銃',
+'铴' => '鐋',
+'铵' => '銨',
+'银' => '銀',
+'铷' => '銣',
+'铸' => '鑄',
+'铹' => '鐒',
+'铺' => '鋪',
+'铻' => '鋙',
+'铼' => '錸',
+'铽' => '鋱',
+'链' => '鏈',
+'铿' => '鏗',
+'销' => '銷',
+'锁' => '鎖',
+'锂' => '鋰',
+'锃' => '鋥',
+'锄' => '鋤',
+'锅' => '鍋',
+'锆' => '鋯',
+'锇' => '鋨',
+'锈' => '銹',
+'锉' => '銼',
+'锊' => '鋝',
+'锋' => '鋒',
+'锌' => '鋅',
+'锍' => '鋶',
+'锎' => '鐦',
+'锏' => '鐧',
+'锐' => '銳',
+'锑' => '銻',
+'锒' => '鋃',
+'锓' => '鋟',
+'锔' => '鋦',
+'锕' => '錒',
+'锖' => '錆',
+'锗' => '鍺',
+'锘' => '鍩',
+'错' => '錯',
+'锚' => '錨',
+'锛' => '錛',
+'锜' => '錡',
+'锝' => '鍀',
+'锞' => '錁',
+'锟' => '錕',
+'锠' => '錩',
+'锡' => '錫',
+'锢' => '錮',
+'锣' => '鑼',
+'锤' => '錘',
+'锥' => '錐',
+'锦' => '錦',
+'锧' => '鑕',
+'锨' => '杴',
+'锩' => '錈',
+'锪' => '鍃',
+'锫' => '錇',
+'锬' => '錟',
+'锭' => '錠',
+'键' => '鍵',
+'锯' => '鋸',
+'锰' => '錳',
+'锱' => '錙',
+'锲' => '鍥',
+'锳' => '鍈',
+'锴' => '鍇',
+'锵' => '鏘',
+'锶' => '鍶',
+'锷' => '鍔',
+'锸' => '鍤',
+'锹' => '鍬',
+'锺' => '鍾',
+'锻' => '鍛',
+'锼' => '鎪',
+'锽' => '鍠',
+'锾' => '鍰',
+'锿' => '鎄',
+'镀' => '鍍',
+'镁' => '鎂',
+'镂' => '鏤',
+'镃' => '鎡',
+'镄' => '鐨',
+'镅' => '鎇',
+'镆' => '鏌',
+'镇' => '鎮',
+'镈' => '鎛',
+'镉' => '鎘',
+'镊' => '鑷',
+'镋' => '钂',
+'镌' => '鐫',
+'镍' => '鎳',
+'镎' => '鎿',
+'镏' => '鎦',
+'镐' => '鎬',
+'镑' => '鎊',
+'镒' => '鎰',
+'镓' => '鎵',
+'镔' => '鑌',
+'镕' => '鎔',
+'镖' => '鏢',
+'镗' => '鏜',
+'镘' => '鏝',
+'镙' => '鏍',
+'镚' => '鏰',
+'镛' => '鏞',
+'镜' => '鏡',
+'镝' => '鏑',
+'镞' => '鏃',
+'镟' => '鏇',
+'镠' => '鏐',
+'镡' => '鐔',
+'镢' => '钁',
+'镣' => '鐐',
+'镤' => '鏷',
+'镥' => '鑥',
+'镦' => '鐓',
+'镧' => '鑭',
+'镨' => '鐠',
+'镩' => '鑹',
+'镪' => '鏹',
+'镫' => '鐙',
+'镬' => '鑊',
+'镭' => '鐳',
+'镮' => '鐶',
+'镯' => '鐲',
+'镰' => '鐮',
+'镱' => '鐿',
+'镲' => '鑔',
+'镳' => '鑣',
+'镴' => '鑞',
+'镵' => '鑱',
+'镶' => '鑲',
+'长' => '長',
+'门' => '門',
+'闩' => '閂',
+'闪' => '閃',
+'闫' => '閆',
+'闬' => '閈',
+'闭' => '閉',
+'问' => '問',
+'闯' => '闖',
+'闰' => '閏',
+'闱' => '闈',
+'闲' => '閒',
+'闳' => '閎',
+'间' => '間',
+'闵' => '閔',
+'闶' => '閌',
+'闷' => '悶',
+'闸' => '閘',
+'闹' => '鬧',
+'闺' => '閨',
+'闻' => '聞',
+'闼' => '闥',
+'闽' => '閩',
+'闾' => '閭',
+'闿' => '闓',
+'阀' => '閥',
+'阁' => '閣',
+'阂' => '閡',
+'阃' => '閫',
+'阄' => '鬮',
+'阅' => '閱',
+'阆' => '閬',
+'阇' => '闍',
+'阈' => '閾',
+'阉' => '閹',
+'阊' => '閶',
+'阋' => '鬩',
+'阌' => '閿',
+'阍' => '閽',
+'阎' => '閻',
+'阏' => '閼',
+'阐' => '闡',
+'阑' => '闌',
+'阒' => '闃',
+'阓' => '闠',
+'阔' => '闊',
+'阕' => '闋',
+'阖' => '闔',
+'阗' => '闐',
+'阘' => '闒',
+'阙' => '闕',
+'阚' => '闞',
+'阛' => '闤',
+'队' => '隊',
+'阳' => '陽',
+'阴' => '陰',
+'阵' => '陣',
+'阶' => '階',
+'际' => '際',
+'陆' => '陸',
+'陇' => '隴',
+'陈' => '陳',
+'陉' => '陘',
+'陕' => '陝',
+'陧' => '隉',
+'陨' => '隕',
+'险' => '險',
+'随' => '隨',
+'隐' => '隱',
+'隶' => '隸',
+'隽' => '雋',
+'难' => '難',
+'雏' => '雛',
+'雠' => '讎',
+'雳' => '靂',
+'雾' => '霧',
+'霁' => '霽',
+'霡' => '霢',
+'霭' => '靄',
+'靓' => '靚',
+'静' => '靜',
+'靥' => '靨',
+'鞑' => '韃',
+'鞒' => '鞽',
+'鞯' => '韉',
+'韦' => '韋',
+'韧' => '韌',
+'韨' => '韍',
+'韩' => '韓',
+'韪' => '韙',
+'韫' => '韞',
+'韬' => '韜',
+'韵' => '韻',
+'页' => '頁',
+'顶' => '頂',
+'顷' => '頃',
+'顸' => '頇',
+'项' => '項',
+'顺' => '順',
+'须' => '須',
+'顼' => '頊',
+'顽' => '頑',
+'顾' => '顧',
+'顿' => '頓',
+'颀' => '頎',
+'颁' => '頒',
+'颂' => '頌',
+'颃' => '頏',
+'预' => '預',
+'颅' => '顱',
+'领' => '領',
+'颇' => '頗',
+'颈' => '頸',
+'颉' => '頡',
+'颊' => '頰',
+'颋' => '頲',
+'颌' => '頜',
+'颍' => '潁',
+'颎' => '熲',
+'颏' => '頦',
+'颐' => '頤',
+'频' => '頻',
+'颒' => '頮',
+'颓' => '頹',
+'颔' => '頷',
+'颕' => '頴',
+'颖' => '穎',
+'颗' => '顆',
+'题' => '題',
+'颙' => '顒',
+'颚' => '顎',
+'颛' => '顓',
+'颜' => '顏',
+'额' => '額',
+'颞' => '顳',
+'颟' => '顢',
+'颠' => '顛',
+'颡' => '顙',
+'颢' => '顥',
+'颣' => '纇',
+'颤' => '顫',
+'颥' => '顬',
+'颦' => '顰',
+'颧' => '顴',
+'风' => '風',
+'飏' => '颺',
+'飐' => '颭',
+'飑' => '颮',
+'飒' => '颯',
+'飓' => '颶',
+'飔' => '颸',
+'飕' => '颼',
+'飖' => '颻',
+'飗' => '飀',
+'飘' => '飄',
+'飙' => '飆',
+'飚' => '飈',
+'飞' => '飛',
+'飨' => '饗',
+'餍' => '饜',
+'饣' => '飠',
+'饤' => '飣',
+'饥' => '飢',
+'饦' => '飥',
+'饧' => '餳',
+'饨' => '飩',
+'饩' => '餼',
+'饪' => '飪',
+'饫' => '飫',
+'饬' => '飭',
+'饭' => '飯',
+'饮' => '飲',
+'饯' => '餞',
+'饰' => '飾',
+'饱' => '飽',
+'饲' => '飼',
+'饳' => '飿',
+'饴' => '飴',
+'饵' => '餌',
+'饶' => '饒',
+'饷' => '餉',
+'饸' => '餄',
+'饹' => '餎',
+'饺' => '餃',
+'饻' => '餏',
+'饼' => '餅',
+'饽' => '餑',
+'饾' => '餖',
+'饿' => '餓',
+'馀' => '餘',
+'馁' => '餒',
+'馂' => '餕',
+'馃' => '餜',
+'馄' => '餛',
+'馅' => '餡',
+'馆' => '館',
+'馇' => '餷',
+'馈' => '饋',
+'馉' => '餶',
+'馊' => '餿',
+'馋' => '饞',
+'馌' => '饁',
+'馍' => '饃',
+'馎' => '餺',
+'馏' => '餾',
+'馐' => '饈',
+'馑' => '饉',
+'馒' => '饅',
+'馓' => '饊',
+'馔' => '饌',
+'馕' => '饢',
+'马' => '馬',
+'驭' => '馭',
+'驮' => '馱',
+'驯' => '馴',
+'驰' => '馳',
+'驱' => '驅',
+'驲' => '馹',
+'驳' => '駁',
+'驴' => '驢',
+'驵' => '駔',
+'驶' => '駛',
+'驷' => '駟',
+'驸' => '駙',
+'驹' => '駒',
+'驺' => '騶',
+'驻' => '駐',
+'驼' => '駝',
+'驽' => '駑',
+'驾' => '駕',
+'驿' => '驛',
+'骀' => '駘',
+'骁' => '驍',
+'骂' => '罵',
+'骃' => '駰',
+'骄' => '驕',
+'骅' => '驊',
+'骆' => '駱',
+'骇' => '駭',
+'骈' => '駢',
+'骉' => '驫',
+'骊' => '驪',
+'骋' => '騁',
+'验' => '驗',
+'骍' => '騂',
+'骎' => '駸',
+'骏' => '駿',
+'骐' => '騏',
+'骑' => '騎',
+'骒' => '騍',
+'骓' => '騅',
+'骔' => '騌',
+'骕' => '驌',
+'骖' => '驂',
+'骗' => '騙',
+'骘' => '騭',
+'骙' => '騤',
+'骚' => '騷',
+'骛' => '騖',
+'骜' => '驁',
+'骝' => '騮',
+'骞' => '騫',
+'骟' => '騸',
+'骠' => '驃',
+'骡' => '騾',
+'骢' => '驄',
+'骣' => '驏',
+'骤' => '驟',
+'骥' => '驥',
+'骦' => '驦',
+'骧' => '驤',
+'髅' => '髏',
+'髋' => '髖',
+'髌' => '髕',
+'鬓' => '鬢',
+'鬶' => '鬹',
+'魇' => '魘',
+'魉' => '魎',
+'鱼' => '魚',
+'鱽' => '魛',
+'鱾' => '魢',
+'鱿' => '魷',
+'鲀' => '魨',
+'鲁' => '魯',
+'鲂' => '魴',
+'鲃' => '䰾',
+'鲄' => '魺',
+'鲅' => '鮁',
+'鲆' => '鮃',
+'鲇' => '鯰',
+'鲈' => '鱸',
+'鲉' => '鮋',
+'鲊' => '鮓',
+'鲋' => '鮒',
+'鲌' => '鮊',
+'鲍' => '鮑',
+'鲎' => '鱟',
+'鲏' => '鮍',
+'鲐' => '鮐',
+'鲑' => '鮭',
+'鲒' => '鮚',
+'鲓' => '鮳',
+'鲔' => '鮪',
+'鲕' => '鮞',
+'鲖' => '鮦',
+'鲗' => '鰂',
+'鲘' => '鮜',
+'鲙' => '鱠',
+'鲚' => '鱭',
+'鲛' => '鮫',
+'鲜' => '鮮',
+'鲝' => '鮺',
+'鲞' => '鯗',
+'鲟' => '鱘',
+'鲠' => '鯁',
+'鲡' => '鱺',
+'鲢' => '鰱',
+'鲣' => '鰹',
+'鲤' => '鯉',
+'鲥' => '鰣',
+'鲦' => '鰷',
+'鲧' => '鯀',
+'鲨' => '鯊',
+'鲩' => '鯇',
+'鲪' => '鮶',
+'鲫' => '鯽',
+'鲬' => '鯒',
+'鲭' => '鯖',
+'鲮' => '鯪',
+'鲯' => '鯕',
+'鲰' => '鯫',
+'鲱' => '鯡',
+'鲲' => '鯤',
+'鲳' => '鯧',
+'鲴' => '鯝',
+'鲵' => '鯢',
+'鲷' => '鯛',
+'鲸' => '鯨',
+'鲹' => '鰺',
+'鲺' => '鯴',
+'鲻' => '鯔',
+'鲼' => '鱝',
+'鲽' => '鰈',
+'鲾' => '鰏',
+'鲿' => '鱨',
+'鳀' => '鯷',
+'鳁' => '鰮',
+'鳂' => '鰃',
+'鳃' => '鰓',
+'鳄' => '鱷',
+'鳅' => '鰍',
+'鳆' => '鰒',
+'鳇' => '鰉',
+'鳈' => '鰁',
+'鳉' => '鱂',
+'鳊' => '鯿',
+'鳋' => '鰠',
+'鳌' => '鰲',
+'鳍' => '鰭',
+'鳎' => '鰨',
+'鳏' => '鰥',
+'鳐' => '鰩',
+'鳑' => '鰟',
+'鳒' => '鰜',
+'鳓' => '鰳',
+'鳔' => '鰾',
+'鳕' => '鱈',
+'鳖' => '鱉',
+'鳗' => '鰻',
+'鳘' => '鰵',
+'鳙' => '鱅',
+'鳚' => '䲁',
+'鳛' => '鰼',
+'鳜' => '鱖',
+'鳝' => '鱔',
+'鳞' => '鱗',
+'鳟' => '鱒',
+'鳠' => '鱯',
+'鳡' => '鱤',
+'鳢' => '鱧',
+'鳣' => '鱣',
+'鳤' => '䲘',
+'鸟' => '鳥',
+'鸠' => '鳩',
+'鸡' => '雞',
+'鸢' => '鳶',
+'鸣' => '鳴',
+'鸤' => '鳲',
+'鸥' => '鷗',
+'鸦' => '鴉',
+'鸧' => '鶬',
+'鸨' => '鴇',
+'鸩' => '鴆',
+'鸪' => '鴣',
+'鸫' => '鶇',
+'鸬' => '鸕',
+'鸭' => '鴨',
+'鸮' => '鴞',
+'鸯' => '鴦',
+'鸰' => '鴒',
+'鸱' => '鴟',
+'鸲' => '鴝',
+'鸳' => '鴛',
+'鸴' => '鷽',
+'鸵' => '鴕',
+'鸶' => '鷥',
+'鸷' => '鷙',
+'鸸' => '鴯',
+'鸹' => '鴰',
+'鸺' => '鵂',
+'鸻' => '鴴',
+'鸼' => '鵃',
+'鸽' => '鴿',
+'鸾' => '鸞',
+'鸿' => '鴻',
+'鹀' => '鵐',
+'鹁' => '鵓',
+'鹂' => '鸝',
+'鹃' => '鵑',
+'鹄' => '鵠',
+'鹅' => '鵝',
+'鹆' => '鵒',
+'鹇' => '鷳',
+'鹈' => '鵜',
+'鹉' => '鵡',
+'鹊' => '鵲',
+'鹋' => '鶓',
+'鹌' => '鵪',
+'鹍' => '鵾',
+'鹎' => '鵯',
+'鹏' => '鵬',
+'鹐' => '鵮',
+'鹑' => '鶉',
+'鹒' => '鶊',
+'鹓' => '鵷',
+'鹔' => '鷫',
+'鹕' => '鶘',
+'鹖' => '鶡',
+'鹗' => '鶚',
+'鹘' => '鶻',
+'鹙' => '鶖',
+'鹚' => '鶿',
+'鹛' => '鶥',
+'鹜' => '鶩',
+'鹝' => '鷊',
+'鹞' => '鷂',
+'鹟' => '鶲',
+'鹠' => '鶹',
+'鹡' => '鶺',
+'鹢' => '鷁',
+'鹣' => '鶼',
+'鹤' => '鶴',
+'鹥' => '鷖',
+'鹦' => '鸚',
+'鹧' => '鷓',
+'鹨' => '鷚',
+'鹩' => '鷯',
+'鹪' => '鷦',
+'鹫' => '鷲',
+'鹬' => '鷸',
+'鹭' => '鷺',
+'鹮' => '䴉',
+'鹯' => '鸇',
+'鹰' => '鷹',
+'鹱' => '鸌',
+'鹲' => '鸏',
+'鹳' => '鸛',
+'鹴' => '鸘',
+'鹾' => '鹺',
+'麦' => '麥',
+'麸' => '麩',
+'麹' => '麴',
+'黄' => '黃',
+'黉' => '黌',
+'黡' => '黶',
+'黩' => '黷',
+'黪' => '黲',
+'黾' => '黽',
+'鼋' => '黿',
+'鼍' => '鼉',
+'鼗' => '鞀',
+'鼹' => '鼴',
+'齐' => '齊',
+'齑' => '齏',
+'齿' => '齒',
+'龀' => '齔',
+'龁' => '齕',
+'龂' => '齗',
+'龃' => '齟',
+'龄' => '齡',
+'龅' => '齙',
+'龆' => '齠',
+'龇' => '齜',
+'龈' => '齦',
+'龉' => '齬',
+'龊' => '齪',
+'龋' => '齲',
+'龌' => '齷',
+'龙' => '龍',
+'龚' => '龔',
+'龛' => '龕',
+'龟' => '龜',
+'𠆲' => '儣',
+'𠆿' => '𠌥',
+'𠉂' => '㒓',
+'𠉗' => '𠏢',
+'𠚳' => '𠠎',
+'𠛅' => '剾',
+'𠛆' => '𠞆',
+'𠯟' => '哯',
+'𠯠' => '噅',
+'𠲥' => '𡅏',
+'𠴢' => '𡄔',
+'𠵸' => '𡄣',
+'𠵾' => '㗲',
+'𡋀' => '𡓾',
+'𡋗' => '𡑭',
+'𡒄' => '壈',
+'𡝠' => '㜷',
+'𡞱' => '㜢',
+'𡭜' => '𡮉',
+'𡭬' => '𡮣',
+'𡶴' => '嵼',
+'𢋈' => '㢝',
+'𢘝' => '𢣚',
+'𢘞' => '𢣭',
+'𢙓' => '懀',
+'𢛯' => '㦎',
+'𢫊' => '𢷮',
+'𢫞' => '𢶫',
+'𢫬' => '摋',
+'𢬦' => '𢹿',
+'𢭏' => '擣',
+'𢽾' => '斅',
+'𣆐' => '曥',
+'𣍨' => '𦢈',
+'𣍯' => '腪',
+'𣍰' => '脥',
+'𣎑' => '臗',
+'𣐤' => '欍',
+'𣑶' => '𣠲',
+'𣗋' => '欓',
+'𣘓' => '𣞻',
+'𣘴' => '檭',
+'𣘷' => '𣝕',
+'𣭤' => '𣯴',
+'𣶩' => '澅',
+'𣶫' => '𣿉',
+'𣸣' => '濆',
+'𣺼' => '灙',
+'𣺽' => '𤁣',
+'𣽷' => '瀃',
+'𤆡' => '熓',
+'𤇃' => '爄',
+'𤇄' => '熌',
+'𤈶' => '熉',
+'𤈷' => '㷿',
+'𤊀' => '𤒎',
+'𤋏' => '熡',
+'𤞤' => '玁',
+'𤠋' => '㺏',
+'𤦀' => '瓕',
+'𤳄' => '𤳸',
+'𤶧' => '𤸫',
+'𤽯' => '㿧',
+'𤾀' => '皟',
+'𥅘' => '𥌃',
+'𥅴' => '䀹',
+'𥆧' => '瞤',
+'𥇢' => '䁪',
+'𥐟' => '礒',
+'𥐯' => '𥖅',
+'𥐰' => '𥕥',
+'𥐻' => '碙',
+'𥧂' => '𥨐',
+'𥬀' => '䉙',
+'𥬞' => '籋',
+'𥬠' => '篘',
+'𥭉' => '𥵊',
+'𥮋' => '𥸠',
+'𥮜' => '䉲',
+'𥱔' => '𥵃',
+'𥹥' => '𥼽',
+'𥺅' => '䊭',
+'𥺇' => '𥽖',
+'𦈈' => '𥿊',
+'𦈉' => '緷',
+'𦈋' => '綇',
+'𦈌' => '綀',
+'𦈎' => '繟',
+'𦈏' => '緍',
+'𦈐' => '縺',
+'𦈑' => '緸',
+'𦈒' => '𦂅',
+'𦈓' => '䋿',
+'𦈔' => '縎',
+'𦈕' => '緰',
+'𦈖' => '䌈',
+'𦈗' => '𦃄',
+'𦈘' => '䌋',
+'𦈙' => '䌰',
+'𦈚' => '縬',
+'𦈛' => '繓',
+'𦈜' => '䌖',
+'𦈝' => '繏',
+'𦈞' => '䌟',
+'𦈟' => '䌝',
+'𦈠' => '䌥',
+'𦈡' => '繻',
+'𦛨' => '朥',
+'𦝼' => '膢',
+'𦟗' => '𦣎',
+'𦨩' => '𦪽',
+'𦰴' => '䕳',
+'𧉞' => '䗿',
+'𧒭' => '𧔥',
+'𧮪' => '詀',
+'𧳕' => '𧳟',
+'𧹑' => '䞈',
+'𧹓' => '𧶔',
+'𧹕' => '䝻',
+'𧹖' => '賟',
+'𧹗' => '贃',
+'𧿈' => '𨇁',
+'𨀱' => '𨄣',
+'𨁴' => '𨅍',
+'𨂺' => '𨈊',
+'𨄄' => '𨈌',
+'𨅫' => '𨇞',
+'𨅬' => '躝',
+'𨉗' => '軉',
+'𨐅' => '軗',
+'𨐆' => '𨊻',
+'𨐇' => '𨏠',
+'𨐈' => '輄',
+'𨐉' => '𨎮',
+'𨐊' => '𨏥',
+'𨑹' => '䢨',
+'𨤰' => '𨤻',
+'𨰾' => '鎷',
+'𨰿' => '釳',
+'𨱀' => '𨥛',
+'𨱁' => '鈠',
+'𨱂' => '鈋',
+'𨱃' => '鈲',
+'𨱄' => '鈯',
+'𨱅' => '鉁',
+'𨱆' => '龯',
+'𨱇' => '銶',
+'𨱈' => '鋉',
+'𨱉' => '鍄',
+'𨱊' => '𨧱',
+'𨱋' => '錂',
+'𨱌' => '鏆',
+'𨱍' => '鎯',
+'𨱎' => '鍮',
+'𨱏' => '鎝',
+'𨱐' => '𨫒',
+'𨱑' => '鐄',
+'𨱒' => '鏉',
+'𨱓' => '鐎',
+'𨱔' => '鐏',
+'𨱕' => '𨮂',
+'𨱖' => '䥩',
+'𨷿' => '䦳',
+'𨸀' => '𨳕',
+'𨸁' => '𨳑',
+'𨸂' => '閍',
+'𨸃' => '閐',
+'𨸄' => '䦘',
+'𨸅' => '𨴗',
+'𨸆' => '𨵩',
+'𨸇' => '𨵸',
+'𨸉' => '𨶀',
+'𨸊' => '𨶏',
+'𨸋' => '𨶲',
+'𨸌' => '𨶮',
+'𨸎' => '𨷲',
+'𨸘' => '𨽏',
+'𨸟' => '䧢',
+'𩏼' => '䪏',
+'𩏽' => '𩏪',
+'𩏾' => '𩎢',
+'𩏿' => '䪘',
+'𩐀' => '䪗',
+'𩖕' => '𩓣',
+'𩖖' => '顃',
+'𩖗' => '䫴',
+'𩙥' => '颰',
+'𩙦' => '𩗀',
+'𩙧' => '𩗡',
+'𩙨' => '𩘹',
+'𩙩' => '𩘀',
+'𩙪' => '颷',
+'𩙫' => '颾',
+'𩙬' => '𩘺',
+'𩙭' => '𩘝',
+'𩙮' => '䬘',
+'𩙯' => '䬝',
+'𩙰' => '𩙈',
+'𩟿' => '𩚛',
+'𩠀' => '𩚥',
+'𩠁' => '𩚵',
+'𩠂' => '𩛆',
+'𩠃' => '𩛩',
+'𩠅' => '𩟐',
+'𩠆' => '𩜦',
+'𩠇' => '䭀',
+'𩠈' => '䭃',
+'𩠉' => '𩜇',
+'𩠊' => '𩜵',
+'𩠋' => '𩝔',
+'𩠌' => '餸',
+'𩠎' => '𩞄',
+'𩠏' => '𩞦',
+'𩠠' => '𩠴',
+'𩧦' => '𩡺',
+'𩧨' => '駎',
+'𩧩' => '𩤊',
+'𩧪' => '䮾',
+'𩧫' => '駚',
+'𩧬' => '𩢡',
+'𩧭' => '䭿',
+'𩧮' => '𩢾',
+'𩧯' => '驋',
+'𩧰' => '䮝',
+'𩧱' => '𩥉',
+'𩧲' => '駧',
+'𩧳' => '𩢸',
+'𩧴' => '駩',
+'𩧵' => '𩢴',
+'𩧶' => '𩣏',
+'𩧺' => '駶',
+'𩧻' => '𩣵',
+'𩧼' => '𩣺',
+'𩧿' => '䮠',
+'𩨀' => '騔',
+'𩨁' => '䮞',
+'𩨃' => '騝',
+'𩨄' => '騪',
+'𩨅' => '𩤸',
+'𩨆' => '𩤙',
+'𩨇' => '䮫',
+'𩨈' => '騟',
+'𩨉' => '𩤲',
+'𩨊' => '騚',
+'𩨋' => '𩥄',
+'𩨌' => '𩥑',
+'𩨍' => '𩥇',
+'𩨎' => '龭',
+'𩨏' => '䮳',
+'𩨐' => '𩧆',
+'𩬣' => '𩭙',
+'𩬤' => '𩰀',
+'𩯒' => '𩯳',
+'𩲒' => '𩳤',
+'𩽹' => '魥',
+'𩽺' => '𩵩',
+'𩽻' => '𩵹',
+'𩽼' => '鯶',
+'𩽽' => '𩶱',
+'𩽾' => '鮟',
+'𩽿' => '𩶰',
+'𩾁' => '鯄',
+'𩾂' => '䲖',
+'𩾃' => '鮸',
+'𩾄' => '𩷰',
+'𩾅' => '𩸃',
+'𩾆' => '𩸦',
+'𩾇' => '鯱',
+'𩾈' => '䱙',
+'𩾊' => '䱬',
+'𩾋' => '䱰',
+'𩾌' => '鱇',
+'𩾎' => '𩽇',
+'𪉂' => '䲰',
+'𪉃' => '鳼',
+'𪉄' => '𩿪',
+'𪉅' => '𪀦',
+'𪉆' => '鴲',
+'𪉈' => '鴜',
+'𪉉' => '𪁈',
+'𪉊' => '鷨',
+'𪉋' => '𪀾',
+'𪉌' => '𪁖',
+'𪉍' => '鵚',
+'𪉎' => '𪂆',
+'𪉏' => '𪃏',
+'𪉐' => '𪃍',
+'𪉑' => '鷔',
+'𪉒' => '𪄕',
+'𪉓' => '𪈼',
+'𪉔' => '𪄆',
+'𪉕' => '𪇳',
+'𪎈' => '䴬',
+'𪎉' => '麲',
+'𪎊' => '麨',
+'𪎋' => '䴴',
+'𪎌' => '麳',
+'𪎍' => '𪋿',
+'𪔭' => '𪔵',
+'𪚏' => '𪘀',
+'𪚐' => '𪘯',
+'𪞝' => '凙',
+'𪡏' => '嗹',
+'𪢮' => '圞',
+'𪨊' => '㞞',
+'𪨗' => '屩',
+'𪻐' => '瑽',
+'𪾢' => '睍',
+'𫁡' => '鴗',
+'𫂈' => '䉬',
+'𫄨' => '絺',
+'𫄸' => '纁',
+'𫌀' => '襀',
+'𫌨' => '覼',
+'𫍙' => '訑',
+'𫍢' => '譊',
+'𫍰' => '諰',
+'𫍲' => '謏',
+'𫏋' => '蹻',
+'𫐄' => '軏',
+'𫐆' => '轣',
+'𫐉' => '軨',
+'𫐐' => '輗',
+'𫐓' => '輮',
+'𫓧' => '鈇',
+'𫓩' => '鏦',
+'𫔎' => '鐍',
+'𫖸' => '願',
+'𫗠' => '餦',
+'𫗦' => '餔',
+'𫗧' => '餗',
+'𫗮' => '餭',
+'𫗴' => '饘',
+'𫘝' => '駃',
+'𫘣' => '駻',
+'𫘤' => '騃',
+'𫘨' => '騠',
+'𫚈' => '鱮',
+'𫚉' => '魟',
+'𫚒' => '鮄',
+'𫚔' => '鮰',
+'𫚕' => '鰤',
+'𫚙' => '鯆',
+'𫛛' => '鳷',
+'𫛞' => '鴃',
+'𫛢' => '鸋',
+'𫛶' => '鶒',
+'𫛸' => '鶗',
+'0出现' => '0出現',
+'0出現' => '0出現',
+'0出線' => '0出線',
+'0出线' => '0出線',
+'0只支持' => '0只支持',
+'0只支援' => '0只支援',
+'0周后' => '0周後',
+'0天后' => '0天後',
+'0年' => '0年',
+'0只' => '0隻',
+'0余' => '0餘',
+'0出' => '0齣',
+'1只支持' => '1只支持',
+'1只支援' => '1只支援',
+'1周后' => '1周後',
+'1天后' => '1天後',
+'1年' => '1年',
+'1只' => '1隻',
+'1余' => '1餘',
+'2只支持' => '2只支持',
+'2只支援' => '2只支援',
+'2周后' => '2周後',
+'2天后' => '2天後',
+'2年' => '2年',
+'2只' => '2隻',
+'2余' => '2餘',
+'3只支持' => '3只支持',
+'3只支援' => '3只支援',
+'3周后' => '3周後',
+'3天后' => '3天後',
+'3年' => '3年',
+'3只' => '3隻',
+'3余' => '3餘',
+'4只支持' => '4只支持',
+'4只支援' => '4只支援',
+'4周后' => '4周後',
+'4天后' => '4天後',
+'4年' => '4年',
+'4只' => '4隻',
+'4余' => '4餘',
+'5只支持' => '5只支持',
+'5只支援' => '5只支援',
+'5周后' => '5周後',
+'5天后' => '5天後',
+'5年' => '5年',
+'5只' => '5隻',
+'5余' => '5餘',
+'6只支持' => '6只支持',
+'6只支援' => '6只支援',
+'6周后' => '6周後',
+'6天后' => '6天後',
+'6年' => '6年',
+'6只' => '6隻',
+'6余' => '6餘',
+'7只支持' => '7只支持',
+'7只支援' => '7只支援',
+'7周后' => '7周後',
+'7天后' => '7天後',
+'7年' => '7年',
+'7只' => '7隻',
+'7余' => '7餘',
+'8只支持' => '8只支持',
+'8只支援' => '8只支援',
+'8周后' => '8周後',
+'8天后' => '8天後',
+'8年' => '8年',
+'8只' => '8隻',
+'8余' => '8餘',
+'9只支持' => '9只支持',
+'9只支援' => '9只支援',
+'9周后' => '9周後',
+'9天后' => '9天後',
+'9年' => '9年',
+'9只' => '9隻',
+'9余' => '9餘',
+'·范' => '·范',
+'’s' => '’s',
+'、面点' => '、麵點',
+'。个中' => '。箇中',
+'〇周后' => '〇周後',
+'〇年' => '〇年',
+'〇只' => '〇隻',
+'〇余' => '〇餘',
+'“' => '「',
+'”' => '」',
+'‘' => '『',
+'’' => '』',
+'一干二净' => '一乾二淨',
+'一伙人' => '一伙人',
+'一伙头' => '一伙頭',
+'一伙食' => '一伙食',
+'一并' => '一併',
+'一个' => '一個',
+'一个准' => '一個準',
+'一划' => '一划',
+'一半只' => '一半只',
+'一吊钱' => '一吊錢',
+'一周后' => '一周後',
+'一地里' => '一地裡',
+'一伙' => '一夥',
+'一天后' => '一天後',
+'一天钟' => '一天鐘',
+'一干人' => '一干人',
+'一干家中' => '一干家中',
+'一干弟兄' => '一干弟兄',
+'一干弟子' => '一干弟子',
+'一干部下' => '一干部下',
+'一年' => '一年',
+'一年里' => '一年裡',
+'一别头' => '一彆頭',
+'一斗斗' => '一斗斗',
+'一树百获' => '一樹百穫',
+'一准' => '一準',
+'一争两丑' => '一爭兩醜',
+'一物克一物' => '一物剋一物',
+'一目了然' => '一目了然',
+'一碗面' => '一碗麵',
+'一扎' => '一紮',
+'一冲' => '一衝',
+'一厘一毫' => '一釐一毫',
+'一锅面' => '一鍋麵',
+'一只' => '一隻',
+'一面食' => '一面食',
+'一余' => '一餘',
+'一发千钧' => '一髮千鈞',
+'一哄而散' => '一鬨而散',
+'一出剧' => '一齣劇',
+'一出喜剧' => '一齣喜劇',
+'一出好戏' => '一齣好戲',
+'一出子' => '一齣子',
+'一出悲剧' => '一齣悲劇',
+'一出戏' => '一齣戲',
+'一出电影' => '一齣電影',
+'丁丁当当' => '丁丁當當',
+'丁丑' => '丁丑',
+'七个' => '七個',
+'七周后' => '七周後',
+'七天后' => '七天後',
+'七年' => '七年',
+'七情六欲' => '七情六慾',
+'七扎' => '七紮',
+'七只' => '七隻',
+'七余' => '七餘',
+'万俟' => '万俟',
+'万旗' => '万旗',
+'三个' => '三個',
+'三周后' => '三周後',
+'三天后' => '三天後',
+'三年' => '三年',
+'三征七辟' => '三徵七辟',
+'三准' => '三準',
+'三扎' => '三紮',
+'三统历' => '三統曆',
+'三统历史' => '三統歷史',
+'三只' => '三隻',
+'三余' => '三餘',
+'三出戏' => '三齣戲',
+'上天里' => '上天里',
+'上梁山' => '上梁山',
+'上梁' => '上樑',
+'上台面' => '上檯面',
+'上签名' => '上簽名',
+'上签字' => '上簽字',
+'上签定' => '上簽定',
+'上签写' => '上簽寫',
+'上签收' => '上簽收',
+'上签发' => '上簽發',
+'上签约' => '上簽約',
+'上签署' => '上簽署',
+'上签订' => '上簽訂',
+'上签' => '上籤',
+'上系上' => '上繫上',
+'上课钟' => '上課鐘',
+'上面糊' => '上面糊',
+'下于' => '下於',
+'下梁' => '下樑',
+'下注解' => '下注解',
+'下签名' => '下簽名',
+'下签字' => '下簽字',
+'下签定' => '下簽定',
+'下签写' => '下簽寫',
+'下签收' => '下簽收',
+'下签发' => '下簽發',
+'下签约' => '下簽約',
+'下签署' => '下簽署',
+'下签订' => '下簽訂',
+'下签' => '下籤',
+'下课钟' => '下課鐘',
+'不干不净' => '不乾不淨',
+'不干胶' => '不乾膠',
+'不克自制' => '不克自制',
+'不加自制' => '不加自制',
+'不占凶吉' => '不占凶吉',
+'不占卜' => '不占卜',
+'不占吉凶' => '不占吉凶',
+'不占算' => '不占算',
+'不只' => '不只',
+'不太准' => '不太準',
+'不好干涉' => '不好干涉',
+'不好干預' => '不好干預',
+'不好干预' => '不好干預',
+'不嫌母丑' => '不嫌母醜',
+'不寒而栗' => '不寒而慄',
+'不吊' => '不弔',
+'不卷' => '不捲',
+'不采' => '不採',
+'不斗胆' => '不斗膽',
+'不斗膽' => '不斗膽',
+'不断发' => '不斷發',
+'不每只' => '不每只',
+'不谷' => '不穀',
+'不托' => '不託',
+'不负所托' => '不負所托',
+'不通吊庆' => '不通弔慶',
+'不丑' => '不醜',
+'不采声' => '不采聲',
+'不采聲' => '不采聲',
+'不锈钢' => '不鏽鋼',
+'不食干腊' => '不食乾腊',
+'不斗' => '不鬥',
+'丑三' => '丑三',
+'丑年' => '丑年',
+'丑日' => '丑日',
+'丑旦' => '丑旦',
+'丑时' => '丑時',
+'丑月' => '丑月',
+'丑表功' => '丑表功',
+'丑角' => '丑角',
+'且于' => '且於',
+'世田谷' => '世田谷',
+'世界杯' => '世界盃',
+'世纪里' => '世紀裡',
+'世纪钟' => '世紀鐘',
+'世纪钟表' => '世紀鐘錶',
+'丢丑' => '丟醜',
+'并曰入淀' => '並曰入澱',
+'并发动' => '並發動',
+'并发展' => '並發展',
+'并发布' => '並發布',
+'并发现' => '並發現',
+'并发表' => '並發表',
+'并行' => '並行',
+'中国国际信托投资公司' => '中國國際信托投資公司',
+'中型钟' => '中型鐘',
+'中型钟表面' => '中型鐘表面',
+'中型钟表' => '中型鐘錶',
+'中型钟面' => '中型鐘面',
+'中境里' => '中境里',
+'中岳' => '中嶽',
+'中庄子' => '中庄子',
+'中文里' => '中文裡',
+'中于' => '中於',
+'中签名' => '中簽名',
+'中签字' => '中簽字',
+'中签定' => '中簽定',
+'中签写' => '中簽寫',
+'中签收' => '中簽收',
+'中签发' => '中簽發',
+'中签约' => '中簽約',
+'中签署' => '中簽署',
+'中签订' => '中簽訂',
+'中签' => '中籤',
+'中风后' => '中風後',
+'丰仪' => '丰儀',
+'丰儀' => '丰儀',
+'丰南' => '丰南',
+'丰姿' => '丰姿',
+'丰容' => '丰容',
+'丰情' => '丰情',
+'丰标' => '丰標',
+'丰标不凡' => '丰標不凡',
+'丰標不凡' => '丰標不凡',
+'丰神' => '丰神',
+'丰茸' => '丰茸',
+'丰采' => '丰采',
+'丰韵' => '丰韻',
+'丰韻' => '丰韻',
+'丹棱' => '丹稜',
+'主仆' => '主僕',
+'主干' => '主幹',
+'主钟差' => '主鐘差',
+'主钟曲线' => '主鐘曲線',
+'乃系' => '乃係',
+'么么唱唱' => '么么唱唱',
+'么九' => '么九',
+'么儿' => '么兒',
+'么半' => '么半',
+'么喝' => '么喝',
+'么女' => '么女',
+'么妹' => '么妹',
+'么子' => '么子',
+'么弟' => '么弟',
+'么正' => '么正',
+'么爷' => '么爺',
+'么雞' => '么雞',
+'么么小丑' => '么麼小丑',
+'之一只' => '之一只',
+'之二只' => '之二只',
+'之八九只' => '之八九只',
+'之征' => '之徵',
+'之托' => '之託',
+'之钟' => '之鐘',
+'之鉴' => '之鑑',
+'之余' => '之餘',
+'乙丑' => '乙丑',
+'九世之仇' => '九世之讎',
+'九个' => '九個',
+'九周后' => '九周後',
+'九天后' => '九天後',
+'九年' => '九年',
+'九谷' => '九穀',
+'九扎' => '九紮',
+'九只' => '九隻',
+'九余' => '九餘',
+'干干' => '乾乾',
+'干干净净' => '乾乾淨淨',
+'干井' => '乾井',
+'干个够' => '乾個夠',
+'干儿' => '乾兒',
+'干冰' => '乾冰',
+'干冷' => '乾冷',
+'干刻版' => '乾刻版',
+'干剥剥' => '乾剝剝',
+'干卦' => '乾卦',
+'干和' => '乾和',
+'干咳' => '乾咳',
+'干咽' => '乾咽',
+'干哥' => '乾哥',
+'干哭' => '乾哭',
+'干唱' => '乾唱',
+'干啼' => '乾啼',
+'干乔' => '乾喬',
+'干呕' => '乾嘔',
+'干哕' => '乾噦',
+'干嚎' => '乾嚎',
+'干回付' => '乾回付',
+'干圆洁净' => '乾圓潔淨',
+'干地' => '乾地',
+'干坞' => '乾塢',
+'干女' => '乾女',
+'干奴才' => '乾奴才',
+'干妹' => '乾妹',
+'干姊' => '乾姊',
+'干姐' => '乾姐',
+'干娘' => '乾娘',
+'干妈' => '乾媽',
+'干子' => '乾子',
+'干季' => '乾季',
+'干尸' => '乾屍',
+'干屎橛' => '乾屎橛',
+'干巴' => '乾巴',
+'干式' => '乾式',
+'干弟' => '乾弟',
+'干急' => '乾急',
+'干性' => '乾性',
+'干打雷' => '乾打雷',
+'干折' => '乾折',
+'干撂台' => '乾撂台',
+'干撇下' => '乾撇下',
+'干擦' => '乾擦',
+'干支剌' => '乾支剌',
+'干支支' => '乾支支',
+'干料' => '乾料',
+'干旱' => '乾旱',
+'干暖' => '乾暖',
+'干材' => '乾材',
+'干村沙' => '乾村沙',
+'干杯' => '乾杯',
+'干果' => '乾果',
+'干枯' => '乾枯',
+'干柴' => '乾柴',
+'干柴烈火' => '乾柴烈火',
+'干梅' => '乾梅',
+'干死' => '乾死',
+'干池' => '乾池',
+'干没' => '乾沒',
+'干洗' => '乾洗',
+'干涸' => '乾涸',
+'干凉' => '乾涼',
+'干净' => '乾淨',
+'干渠' => '乾渠',
+'干渴' => '乾渴',
+'干沟' => '乾溝',
+'干漆' => '乾漆',
+'干涩' => '乾澀',
+'干湿' => '乾濕',
+'干熬' => '乾熬',
+'干热' => '乾熱',
+'干灯盏' => '乾燈盞',
+'干燥' => '乾燥',
+'干爸' => '乾爸',
+'干爹' => '乾爹',
+'干爽' => '乾爽',
+'干片' => '乾片',
+'干物' => '乾物',
+'干生受' => '乾生受',
+'干生子' => '乾生子',
+'干产' => '乾產',
+'干田' => '乾田',
+'干疥' => '乾疥',
+'干瘦' => '乾瘦',
+'干瘪' => '乾癟',
+'干癣' => '乾癬',
+'干瘾' => '乾癮',
+'干白儿' => '乾白兒',
+'干白葡萄酒' => '乾白葡萄酒',
+'干的' => '乾的',
+'干眼' => '乾眼',
+'干瞪眼' => '乾瞪眼',
+'干礼' => '乾禮',
+'干稿' => '乾稿',
+'干笑' => '乾笑',
+'干等' => '乾等',
+'干篾片' => '乾篾片',
+'干粉' => '乾粉',
+'干粮' => '乾糧',
+'干红葡萄酒' => '乾紅葡萄酒',
+'干结' => '乾結',
+'干丝' => '乾絲',
+'干纲' => '乾綱',
+'干绷' => '乾繃',
+'干耗' => '乾耗',
+'干肉片' => '乾肉片',
+'干股' => '乾股',
+'干肥' => '乾肥',
+'干脆' => '乾脆',
+'干脆面' => '乾脆麵',
+'干花' => '乾花',
+'干刍' => '乾芻',
+'干苔' => '乾苔',
+'干茨腊' => '乾茨臘',
+'干茶钱' => '乾茶錢',
+'干草' => '乾草',
+'干菜' => '乾菜',
+'干落' => '乾落',
+'干姜' => '乾薑',
+'干薪' => '乾薪',
+'干虔' => '乾虔',
+'干号' => '乾號',
+'干血浆' => '乾血漿',
+'干衣' => '乾衣',
+'干裂' => '乾裂',
+'干亲' => '乾親',
+'乾象历' => '乾象曆',
+'乾象曆' => '乾象曆',
+'干贝' => '乾貝',
+'干货' => '乾貨',
+'干躁' => '乾躁',
+'干逼' => '乾逼',
+'干酪' => '乾酪',
+'干酵母' => '乾酵母',
+'干醋' => '乾醋',
+'干重' => '乾重',
+'干量' => '乾量',
+'干锅' => '乾鍋',
+'干阿奶' => '乾阿奶',
+'干雷' => '乾雷',
+'干电' => '乾電',
+'干霍乱' => '乾霍亂',
+'干颡' => '乾顙',
+'干台' => '乾颱',
+'干食' => '乾食',
+'干饭' => '乾飯',
+'干馆' => '乾館',
+'干糇' => '乾餱',
+'干馏' => '乾餾',
+'干鱼' => '乾魚',
+'干鲜' => '乾鮮',
+'干面' => '乾麵',
+'乱发生' => '亂發生',
+'乱发脾气' => '亂發脾氣',
+'乱发' => '亂髮',
+'乱哄哄' => '亂鬨鬨',
+'了然后' => '了然後',
+'事有斗巧' => '事有鬥巧',
+'事里' => '事裡',
+'二不棱登' => '二不稜登',
+'二个' => '二個',
+'二只得' => '二只得',
+'二周后' => '二周後',
+'二天后' => '二天後',
+'二年' => '二年',
+'二缶钟惑' => '二缶鐘惑',
+'二老板' => '二老板',
+'二虎相斗' => '二虎相鬥',
+'二里头' => '二里頭',
+'二里頭' => '二里頭',
+'二只' => '二隻',
+'二余' => '二餘',
+'于丹' => '于丹',
+'于于' => '于于',
+'于仁泰' => '于仁泰',
+'于仲文' => '于仲文',
+'于佳卉' => '于佳卉',
+'于来山' => '于來山',
+'于伟国' => '于偉國',
+'于偉國' => '于偉國',
+'于光新' => '于光新',
+'于光远' => '于光遠',
+'于光遠' => '于光遠',
+'于克-兰多县' => '于克-蘭多縣',
+'于克-蘭多縣' => '于克-蘭多縣',
+'于克勒' => '于克勒',
+'于再清' => '于再清',
+'于冕' => '于冕',
+'于冠华' => '于冠華',
+'于凌奎' => '于凌奎',
+'于凌辰' => '于凌辰',
+'于勒' => '于勒',
+'于化虎' => '于化虎',
+'于占元' => '于占元',
+'于友泽' => '于友澤',
+'于台烟' => '于台煙',
+'于台煙' => '于台煙',
+'于右任' => '于右任',
+'于吉' => '于吉',
+'于和伟' => '于和偉',
+'于品海' => '于品海',
+'于国桢' => '于國楨',
+'于國楨' => '于國楨',
+'于国治' => '于國治',
+'于國治' => '于國治',
+'于坚' => '于堅',
+'于堅' => '于堅',
+'于大宝' => '于大寶',
+'于大寶' => '于大寶',
+'于天仁' => '于天仁',
+'于天龙' => '于天龍',
+'于奇库杜克' => '于奇庫杜克',
+'于奇庫杜克' => '于奇庫杜克',
+'于姓' => '于姓',
+'于娜' => '于娜',
+'于娟' => '于娟',
+'于子千' => '于子千',
+'于孔兼' => '于孔兼',
+'于学忠' => '于學忠',
+'于學忠' => '于學忠',
+'于家堡' => '于家堡',
+'于寘' => '于寘',
+'于宝轩' => '于寶軒',
+'于小伟' => '于小偉',
+'于小偉' => '于小偉',
+'于小彤' => '于小彤',
+'于小惠' => '于小惠',
+'于少保' => '于少保',
+'于山' => '于山',
+'于山国' => '于山國',
+'于山國' => '于山國',
+'于帅' => '于帥',
+'于帥' => '于帥',
+'于幼军' => '于幼軍',
+'于幼軍' => '于幼軍',
+'于康震' => '于康震',
+'于广洲' => '于廣洲',
+'于廣洲' => '于廣洲',
+'于式枚' => '于式枚',
+'于从濂' => '于從濂',
+'于從濂' => '于從濂',
+'于德海' => '于德海',
+'于志宁' => '于志寧',
+'于志寧' => '于志寧',
+'于忠肃集' => '于忠肅集',
+'于思' => '于思',
+'于慎行' => '于慎行',
+'于慧' => '于慧',
+'于成龍' => '于成龍',
+'于成龙' => '于成龍',
+'于承惠' => '于承惠',
+'于振' => '于振',
+'于振武' => '于振武',
+'于敏' => '于敏',
+'于敏中' => '于敏中',
+'于斌' => '于斌',
+'于斯塔德' => '于斯塔德',
+'于斯納爾斯貝里' => '于斯納爾斯貝里',
+'于斯纳尔斯贝里' => '于斯納爾斯貝里',
+'于斯达尔' => '于斯達爾',
+'于斯達爾' => '于斯達爾',
+'于明涛' => '于明濤',
+'于明濤' => '于明濤',
+'于是之' => '于是之',
+'于晨楠' => '于晨楠',
+'于晴' => '于晴',
+'于会泳' => '于會泳',
+'于會泳' => '于會泳',
+'于根伟' => '于根偉',
+'于根偉' => '于根偉',
+'于格' => '于格',
+'于枫' => '于楓',
+'于楓' => '于楓',
+'于荣光' => '于榮光',
+'于樂' => '于樂',
+'于树洁' => '于樹潔',
+'于樹潔' => '于樹潔',
+'于欣' => '于欣',
+'于欣源' => '于欣源',
+'于正昇' => '于正昇',
+'于正昌' => '于正昌',
+'于归' => '于歸',
+'于氏' => '于氏',
+'于永波' => '于永波',
+'于江震' => '于江震',
+'于波' => '于波',
+'于洋' => '于洋',
+'于洪区' => '于洪區',
+'于洪區' => '于洪區',
+'于浩威' => '于浩威',
+'于海' => '于海',
+'于海洋' => '于海洋',
+'于湘兰' => '于湘蘭',
+'于湘蘭' => '于湘蘭',
+'于汉超' => '于漢超',
+'于漢超' => '于漢超',
+'于澄' => '于澄',
+'于泽尔' => '于澤爾',
+'于澤爾' => '于澤爾',
+'于涛' => '于濤',
+'于濤' => '于濤',
+'于熙珍' => '于熙珍',
+'于尔岑' => '于爾岑',
+'于爾岑' => '于爾岑',
+'于尔根' => '于爾根',
+'于爾根' => '于爾根',
+'于尔里克' => '于爾里克',
+'于爾里克' => '于爾里克',
+'于特森' => '于特森',
+'于玉立' => '于玉立',
+'于田' => '于田',
+'于禁' => '于禁',
+'于秀敏' => '于秀敏',
+'于立成' => '于立成',
+'于素秋' => '于素秋',
+'于美人' => '于美人',
+'于耘婕' => '于耘婕',
+'于若木' => '于若木',
+'于荫霖' => '于蔭霖',
+'于蔭霖' => '于蔭霖',
+'于衡' => '于衡',
+'于西翰' => '于西翰',
+'于謙' => '于謙',
+'于谦' => '于謙',
+'于谨' => '于謹',
+'于貝爾' => '于貝爾',
+'于贝尔' => '于貝爾',
+'于贈' => '于贈',
+'于赠' => '于贈',
+'于越' => '于越',
+'于軍' => '于軍',
+'于逸堯' => '于逸堯',
+'于道泉' => '于道泉',
+'于远伟' => '于遠偉',
+'于遠偉' => '于遠偉',
+'于都县' => '于都縣',
+'于都縣' => '于都縣',
+'于里察' => '于里察',
+'于阗' => '于闐',
+'于双戈' => '于雙戈',
+'于雙戈' => '于雙戈',
+'于云鹤' => '于雲鶴',
+'于震' => '于震',
+'于震寰' => '于震寰',
+'于震环' => '于震環',
+'于震環' => '于震環',
+'于靖' => '于靖',
+'于非暗' => '于非闇',
+'于非闇' => '于非闇',
+'于韋斯屈萊' => '于韋斯屈萊',
+'于韦斯屈莱' => '于韋斯屈萊',
+'于風政' => '于風政',
+'于风政' => '于風政',
+'于飛' => '于飛',
+'于飞' => '于飛',
+'于余曲折' => '于餘曲折',
+'于鬯' => '于鬯',
+'于魁智' => '于魁智',
+'于凤桐' => '于鳳桐',
+'于鳳桐' => '于鳳桐',
+'于凤至' => '于鳳至',
+'于鳳至' => '于鳳至',
+'于默奥' => '于默奧',
+'于默奧' => '于默奧',
+'云乎' => '云乎',
+'云云' => '云云',
+'云何' => '云何',
+'云敞' => '云敞',
+'云为' => '云為',
+'云為' => '云為',
+'云然' => '云然',
+'云尔' => '云爾',
+'云:' => '云:',
+'五个' => '五個',
+'五周后' => '五周後',
+'五天后' => '五天後',
+'五峰县' => '五峯縣',
+'五岳' => '五嶽',
+'五年' => '五年',
+'五谷' => '五穀',
+'五扎' => '五紮',
+'五脏' => '五臟',
+'五行生克' => '五行生剋',
+'五谷王北街' => '五谷王北街',
+'五谷王南街' => '五谷王南街',
+'五只' => '五隻',
+'五余' => '五餘',
+'井干' => '井幹',
+'井里' => '井裡',
+'亚于' => '亞於',
+'亚美尼亚历' => '亞美尼亞曆',
+'交托' => '交託',
+'交游' => '交遊',
+'交哄' => '交鬨',
+'亦云' => '亦云',
+'京沈' => '京瀋',
+'亮丑' => '亮醜',
+'亮钟' => '亮鐘',
+'人云' => '人云',
+'人如风后入江云' => '人如風後入江雲',
+'人干的' => '人幹的',
+'人欲' => '人慾',
+'人数只' => '人數只',
+'人数里' => '人數裡',
+'人物志' => '人物誌',
+'人生天里' => '人生天里',
+'人发指' => '人髮指',
+'什锦面' => '什錦麵',
+'仁贵' => '仁貴',
+'介胄' => '介冑',
+'他干的' => '他幹的',
+'他钟' => '他鐘',
+'付托' => '付託',
+'仙后' => '仙后',
+'仙后座' => '仙后座',
+'仙游' => '仙遊',
+'代数里' => '代數裡',
+'代理发行' => '代理發行',
+'代码表' => '代碼表',
+'代表' => '代表',
+'以自制' => '以自制',
+'仲裁制' => '仲裁制',
+'件钟' => '件鐘',
+'价川' => '价川',
+'任何钟' => '任何鐘',
+'任何钟表' => '任何鐘錶',
+'任教于' => '任教於',
+'任于' => '任於',
+'仿制' => '仿製',
+'伊于湖底' => '伊于湖底',
+'伊府面' => '伊府麵',
+'伊斯兰教历' => '伊斯蘭教曆',
+'伊斯兰教历史' => '伊斯蘭教歷史',
+'伊斯兰历' => '伊斯蘭曆',
+'伊斯兰历史' => '伊斯蘭歷史',
+'伊东怜' => '伊東怜',
+'伊尔汗历表' => '伊爾汗曆表',
+'伊达里子' => '伊達里子',
+'伊适杰' => '伊適杰',
+'伊里布' => '伊里布',
+'伊郁' => '伊鬱',
+'伏几' => '伏几',
+'伐罪吊民' => '伐罪弔民',
+'休克期' => '休克期',
+'休征' => '休徵',
+'伙头' => '伙頭',
+'伴游' => '伴遊',
+'似于' => '似於',
+'但云' => '但云',
+'位于' => '位於',
+'位准' => '位準',
+'低洼' => '低洼',
+'住扎' => '住紮',
+'占毕' => '佔畢',
+'占头筹' => '佔頭籌',
+'占高枝儿' => '佔高枝兒',
+'何杰' => '何杰',
+'余三勝' => '余三勝',
+'余三胜' => '余三勝',
+'余光中' => '余光中',
+'余光生' => '余光生',
+'余力为' => '余力為',
+'余威德' => '余威德',
+'余子明' => '余子明',
+'余思敏' => '余思敏',
+'佛罗棱萨' => '佛羅稜薩',
+'佛钟' => '佛鐘',
+'作品里' => '作品裡',
+'作准' => '作準',
+'你夸' => '你誇',
+'佣金' => '佣金',
+'佣鈿' => '佣鈿',
+'佣钿' => '佣鈿',
+'佣錢' => '佣錢',
+'佣钱' => '佣錢',
+'佳肴' => '佳肴',
+'佳里鎮' => '佳里鎮',
+'并一不二' => '併一不二',
+'并入' => '併入',
+'并兼' => '併兼',
+'并到' => '併到',
+'并合' => '併合',
+'并名' => '併名',
+'并吞下' => '併吞下',
+'并拢' => '併攏',
+'并案' => '併案',
+'并流' => '併流',
+'并火' => '併火',
+'并为一家' => '併為一家',
+'并为一体' => '併為一體',
+'并叠' => '併疊',
+'并发型模式' => '併發型模式',
+'并发模式' => '併發模式',
+'并发症' => '併發症',
+'并发重症' => '併發重症',
+'并科' => '併科',
+'并网' => '併網',
+'并线' => '併線',
+'并肩子' => '併肩子',
+'并购' => '併購',
+'并骨' => '併骨',
+'使其斗' => '使其鬥',
+'来于' => '來於',
+'侍仆' => '侍僕',
+'供制' => '供製',
+'依依不舍' => '依依不捨',
+'依托' => '依託',
+'侵并' => '侵併',
+'局促' => '侷促',
+'便于' => '便於',
+'系数' => '係數',
+'系为' => '係為',
+'保险柜' => '保險柜',
+'信托贸易' => '信托貿易',
+'信托' => '信託',
+'修杰楷' => '修杰楷',
+'修杰麟' => '修杰麟',
+'修筑前' => '修築前',
+'修筑后' => '修築後',
+'修胡刀' => '修鬍刀',
+'俯冲' => '俯衝',
+'个月里' => '個月裡',
+'个里' => '個裡',
+'个钟' => '個鐘',
+'个钟表' => '個鐘錶',
+'们干的' => '們幹的',
+'幸免' => '倖免',
+'幸存' => '倖存',
+'幸幸' => '倖幸',
+'候复' => '候覆',
+'倚闲' => '倚閑',
+'倛丑' => '倛醜',
+'借鉴' => '借鑑',
+'倦游' => '倦遊',
+'假里' => '假裡',
+'假托' => '假託',
+'假发' => '假髮',
+'偎干' => '偎乾',
+'停停当当' => '停停當當',
+'停征' => '停徵',
+'停制' => '停製',
+'备注' => '備註',
+'家伙' => '傢伙',
+'催并' => '催併',
+'佣仆' => '傭僕',
+'傲游' => '傲遊',
+'傲霜斗雪' => '傲霜鬥雪',
+'传位于四太子' => '傳位于四太子',
+'傳位于四太子' => '傳位于四太子',
+'传于' => '傳於',
+'债累累' => '債纍纍',
+'傻里傻气' => '傻裡傻氣',
+'仅余' => '僅餘',
+'仆人' => '僕人',
+'仆使' => '僕使',
+'仆仆' => '僕僕',
+'仆僮' => '僕僮',
+'仆吏' => '僕吏',
+'仆固怀恩' => '僕固懷恩',
+'仆夫' => '僕夫',
+'仆姑' => '僕姑',
+'仆婢' => '僕婢',
+'仆妇' => '僕婦',
+'仆射' => '僕射',
+'仆少' => '僕少',
+'仆役' => '僕役',
+'仆从' => '僕從',
+'仆憎' => '僕憎',
+'仆欧' => '僕歐',
+'仆程' => '僕程',
+'仆虽罢驽' => '僕雖罷駑',
+'侥幸' => '僥倖',
+'僮仆' => '僮僕',
+'雇主' => '僱主',
+'雇人' => '僱人',
+'雇佣' => '僱傭',
+'雇到' => '僱到',
+'雇工' => '僱工',
+'雇船' => '僱船',
+'雇请' => '僱請',
+'雇车' => '僱車',
+'雇农' => '僱農',
+'仪范' => '儀範',
+'亿个' => '億個',
+'亿周后' => '億周後',
+'亿天后' => '億天後',
+'亿年' => '億年',
+'亿只' => '億隻',
+'亿余' => '億餘',
+'俭仆' => '儉僕',
+'俭朴' => '儉樸',
+'俭确之教' => '儉确之教',
+'儒略改革历' => '儒略改革曆',
+'儒略改革历史' => '儒略改革歷史',
+'儒略历' => '儒略曆',
+'儒略历史' => '儒略歷史',
+'尽尽' => '儘儘',
+'尽先' => '儘先',
+'尽其所有' => '儘其所有',
+'尽可能' => '儘可能',
+'尽快' => '儘快',
+'尽早' => '儘早',
+'尽是' => '儘是',
+'尽管' => '儘管',
+'尽自' => '儘自',
+'尽速' => '儘速',
+'尽量' => '儘量',
+'优于' => '優於',
+'优游' => '優遊',
+'兀术' => '兀朮',
+'元凶' => '元兇',
+'兆个' => '兆個',
+'兆余' => '兆餘',
+'凶刀' => '兇刀',
+'凶器' => '兇器',
+'凶嫌' => '兇嫌',
+'凶巴巴' => '兇巴巴',
+'凶徒' => '兇徒',
+'凶悍' => '兇悍',
+'凶恶' => '兇惡',
+'凶手' => '兇手',
+'凶案' => '兇案',
+'凶枪' => '兇槍',
+'凶横' => '兇橫',
+'凶残' => '兇殘',
+'凶杀' => '兇殺',
+'凶犯' => '兇犯',
+'凶狠' => '兇狠',
+'凶猛' => '兇猛',
+'凶疑' => '兇疑',
+'凶相' => '兇相',
+'凶险' => '兇險',
+'先采' => '先採',
+'光致致' => '光緻緻',
+'克期间' => '克期間',
+'免征' => '免徵',
+'党太尉' => '党太尉',
+'党姓' => '党姓',
+'党家' => '党家',
+'党怀英' => '党懷英',
+'党进' => '党進',
+'党項' => '党項',
+'党项' => '党項',
+'内脏' => '內臟',
+'内制' => '內製',
+'内面包' => '內面包',
+'内面包的' => '內面包的',
+'内斗' => '內鬥',
+'内哄' => '內鬨',
+'全干' => '全乾',
+'两个' => '兩個',
+'两周后' => '兩周後',
+'两天后' => '兩天後',
+'两年' => '兩年',
+'两杆' => '兩桿',
+'两扎' => '兩紮',
+'两虎共斗' => '兩虎共鬥',
+'两只' => '兩隻',
+'两余' => '兩餘',
+'两鼠斗穴' => '兩鼠鬥穴',
+'两出' => '兩齣',
+'八个' => '八個',
+'八周后' => '八周後',
+'八天后' => '八天後',
+'八字胡' => '八字鬍',
+'八年' => '八年',
+'八扎' => '八紮',
+'八蜡' => '八蜡',
+'八只' => '八隻',
+'八余' => '八餘',
+'公仔面' => '公仔麵',
+'公仆' => '公僕',
+'公孙丑' => '公孫丑',
+'公干' => '公幹',
+'公历' => '公曆',
+'公历史' => '公歷史',
+'公里海' => '公里海',
+'公余' => '公餘',
+'六么' => '六么',
+'六个' => '六個',
+'六周后' => '六周後',
+'六天后' => '六天後',
+'六年' => '六年',
+'六楼后座' => '六樓后座',
+'六谷' => '六穀',
+'六扎' => '六紮',
+'六冲' => '六衝',
+'六只' => '六隻',
+'六余' => '六餘',
+'共和历' => '共和曆',
+'共和历史' => '共和歷史',
+'其一只' => '其一只',
+'其二只' => '其二只',
+'其八九只' => '其八九只',
+'其次辟地' => '其次辟地',
+'其余' => '其餘',
+'典范' => '典範',
+'兼并' => '兼并',
+'冉有仆' => '冉有僕',
+'冗余' => '冗餘',
+'冤仇' => '冤讎',
+'冥蒙' => '冥濛',
+'冬山庄' => '冬山庄',
+'冬游' => '冬遊',
+'冰山里' => '冰山裡',
+'冶游' => '冶遊',
+'冷面相' => '冷面相',
+'冷面' => '冷麵',
+'准三后' => '准三后',
+'准保护' => '准保護',
+'准保護' => '准保護',
+'准保释' => '准保釋',
+'准保釋' => '准保釋',
+'凌蒙初' => '凌濛初',
+'凝炼' => '凝鍊',
+'几上' => '几上',
+'几几' => '几几',
+'几凳' => '几凳',
+'几子' => '几子',
+'几旁' => '几旁',
+'几杖' => '几杖',
+'几案' => '几案',
+'几椅' => '几椅',
+'几榻' => '几榻',
+'几净窗明' => '几淨窗明',
+'几筵' => '几筵',
+'几面上' => '几面上',
+'凶征' => '凶徵',
+'凶相毕露' => '凶相畢露',
+'出乖弄丑' => '出乖弄醜',
+'出乖露丑' => '出乖露醜',
+'出征收' => '出征收',
+'出于' => '出於',
+'出游' => '出遊',
+'出丑' => '出醜',
+'函数里' => '函數裡',
+'分别致' => '分别致',
+'分半钟' => '分半鐘',
+'分多钟' => '分多鐘',
+'分子钟' => '分子鐘',
+'分子云' => '分子雲',
+'分布于' => '分布於',
+'分钟' => '分鐘',
+'分钟里' => '分鐘裡',
+'刑余' => '刑餘',
+'划一桨' => '划一槳',
+'划上' => '划上',
+'划下' => '划下',
+'划不來' => '划不來',
+'划不来' => '划不來',
+'划了一会' => '划了一會',
+'划來划去' => '划來划去',
+'划来划去' => '划來划去',
+'划具' => '划具',
+'划到岸' => '划到岸',
+'划到江心' => '划到江心',
+'划动' => '划動',
+'划動' => '划動',
+'划去' => '划去',
+'划子' => '划子',
+'划得來' => '划得來',
+'划得来' => '划得來',
+'划拳' => '划拳',
+'划桨' => '划槳',
+'划槳' => '划槳',
+'划水' => '划水',
+'划着独木舟' => '划着獨木舟',
+'划着竹筏' => '划着竹筏',
+'划着船' => '划着船',
+'划算' => '划算',
+'划船' => '划船',
+'划艇' => '划艇',
+'划行' => '划行',
+'划走' => '划走',
+'划起' => '划起',
+'划进' => '划進',
+'划進' => '划進',
+'划过' => '划過',
+'划過' => '划過',
+'划龍舟' => '划龍舟',
+'划龙舟' => '划龍舟',
+'判断发' => '判斷發',
+'别辟' => '別闢',
+'利欲' => '利慾',
+'利于' => '利於',
+'刮来刮去' => '刮來刮去',
+'刮起来' => '刮起來',
+'刮胡' => '刮鬍',
+'到山里' => '到山裡',
+'制冷机' => '制冷機',
+'制签' => '制籤',
+'制钟' => '制鐘',
+'刻半钟' => '刻半鐘',
+'刻多钟' => '刻多鐘',
+'刻钟' => '刻鐘',
+'剃发' => '剃髮',
+'剃胡' => '剃鬍',
+'剃须' => '剃鬚',
+'削发' => '削髮',
+'削面' => '削麵',
+'克剥' => '剋剝',
+'克扣' => '剋扣',
+'克期' => '剋期',
+'克死' => '剋死',
+'克薄' => '剋薄',
+'前往' => '前往',
+'前面店' => '前面店',
+'剖厘' => '剖釐',
+'刚干' => '剛乾',
+'刚雇' => '剛僱',
+'剥制' => '剝製',
+'剩余' => '剩餘',
+'剪其发' => '剪其髮',
+'剪发' => '剪髮',
+'割舍' => '割捨',
+'创获' => '創穫',
+'创制' => '創製',
+'铲出' => '剷出',
+'铲刈' => '剷刈',
+'铲平' => '剷平',
+'铲除' => '剷除',
+'铲头' => '剷頭',
+'划入' => '劃入',
+'划为' => '劃為',
+'划著' => '劃著名',
+'刘佳怜' => '劉佳怜',
+'劉佳怜' => '劉佳怜',
+'刘芸后' => '劉芸后',
+'力拼' => '力拚',
+'力拼众敌' => '力拼眾敵',
+'力争上游' => '力爭上遊',
+'功勋' => '功勳',
+'加氢精制' => '加氫精制',
+'劣于' => '劣於',
+'助于' => '助於',
+'劫余' => '劫餘',
+'勃郁' => '勃鬱',
+'胜于' => '勝於',
+'勤仆' => '勤僕',
+'勤朴' => '勤樸',
+'勋劳' => '勳勞',
+'勋业' => '勳業',
+'勋爵' => '勳爵',
+'勋章' => '勳章',
+'勋绩' => '勳績',
+'勾干' => '勾幹',
+'勾心斗角' => '勾心鬥角',
+'勾魂荡魄' => '勾魂蕩魄',
+'包括' => '包括',
+'包准' => '包準',
+'包谷' => '包穀',
+'包扎' => '包紮',
+'匏系' => '匏繫',
+'北山索面' => '北山索麵',
+'北仑河' => '北崙河',
+'北岳' => '北嶽',
+'北回线' => '北迴線',
+'北回铁路' => '北迴鐵路',
+'匪干' => '匪幹',
+'匿于' => '匿於',
+'十个' => '十個',
+'十出家' => '十出家',
+'十出击' => '十出擊',
+'十出生' => '十出生',
+'十出祁山' => '十出祁山',
+'十出头' => '十出頭',
+'十周后' => '十周後',
+'十天后' => '十天後',
+'十年' => '十年',
+'十扎' => '十紮',
+'十只' => '十隻',
+'十余' => '十餘',
+'十出' => '十齣',
+'千个' => '千個',
+'千只可' => '千只可',
+'千只够' => '千只夠',
+'千只夠' => '千只夠',
+'千只怕' => '千只怕',
+'千只能' => '千只能',
+'千只足够' => '千只足夠',
+'千只足夠' => '千只足夠',
+'千周后' => '千周後',
+'千天后' => '千天後',
+'千年' => '千年',
+'千扎' => '千紮',
+'千回百折' => '千迴百折',
+'千回百转' => '千迴百轉',
+'千钧一发' => '千鈞一髮',
+'千只' => '千隻',
+'千余' => '千餘',
+'升高后' => '升高後',
+'半制品' => '半制品',
+'半只可' => '半只可',
+'半只够' => '半只夠',
+'半于' => '半於',
+'半只' => '半隻',
+'协防' => '協防',
+'南京钟' => '南京鐘',
+'南京钟表' => '南京鐘錶',
+'南宫适' => '南宮适',
+'南宮适' => '南宮适',
+'南屏晚钟' => '南屏晚鐘',
+'南岳' => '南嶽',
+'南筑' => '南筑',
+'南回线' => '南迴線',
+'南回铁路' => '南迴鐵路',
+'南游' => '南遊',
+'博采' => '博採',
+'博尔术' => '博爾朮',
+'卜云吉' => '卜云吉',
+'占了卜' => '占了卜',
+'印累绶若' => '印纍綬若',
+'印制' => '印製',
+'印鉴' => '印鑑',
+'危于' => '危於',
+'卵与石斗' => '卵與石鬥',
+'卷须' => '卷鬚',
+'厂部' => '厂部',
+'原子钟' => '原子鐘',
+'原钟' => '原鐘',
+'历物之意' => '厤物之意',
+'去山里' => '去山裡',
+'参数只' => '參數只',
+'参数里' => '參數裡',
+'反反复复' => '反反覆覆',
+'反应制得' => '反應製得',
+'反朴' => '反樸',
+'反冲' => '反衝',
+'反复制' => '反複製',
+'反复' => '反覆',
+'反覆' => '反覆',
+'取舍' => '取捨',
+'取决于' => '取決於',
+'受雇' => '受僱',
+'受托' => '受託',
+'丛林里' => '叢林裡',
+'口干' => '口乾',
+'口干冒' => '口干冒',
+'口干政' => '口干政',
+'口干涉' => '口干涉',
+'口干犯' => '口干犯',
+'口干预' => '口干預',
+'口燥唇干' => '口燥唇乾',
+'口腹之欲' => '口腹之慾',
+'口里' => '口裡',
+'口钟' => '口鐘',
+'古人有云' => '古人有云',
+'古书云' => '古書云',
+'古書云' => '古書云',
+'古柯咸' => '古柯鹹',
+'古朴' => '古樸',
+'古語云' => '古語云',
+'古语云' => '古語云',
+'古迹' => '古蹟',
+'古钟' => '古鐘',
+'古钟表' => '古鐘錶',
+'另辟' => '另闢',
+'叩钟' => '叩鐘',
+'只占卜' => '只占卜',
+'只占吉' => '只占吉',
+'只占神问卜' => '只占神問卜',
+'只占算' => '只占算',
+'只影响' => '只影響',
+'只影響' => '只影響',
+'只采' => '只採',
+'只冲' => '只衝',
+'只要功夫深,铁杵磨成锈花针' => '只要功夫深,鐵杵磨成鏽花針',
+'只身上已' => '只身上已',
+'只身上有' => '只身上有',
+'只身上沒' => '只身上沒',
+'只身上没' => '只身上沒',
+'只身上无' => '只身上無',
+'只身上無' => '只身上無',
+'只身上的' => '只身上的',
+'只身世' => '只身世',
+'只身份' => '只身份',
+'只身前' => '只身前',
+'只身受' => '只身受',
+'只身子' => '只身子',
+'只身形' => '只身形',
+'只身影' => '只身影',
+'只身后' => '只身後',
+'只身後' => '只身後',
+'只身心' => '只身心',
+'只身旁' => '只身旁',
+'只身材' => '只身材',
+'只身段' => '只身段',
+'只身为' => '只身為',
+'只身為' => '只身為',
+'只身边' => '只身邊',
+'只身邊' => '只身邊',
+'只身首' => '只身首',
+'只身体' => '只身體',
+'只身體' => '只身體',
+'只身高' => '只身高',
+'只采声' => '只采聲',
+'叮叮当当' => '叮叮噹噹',
+'叮当' => '叮噹',
+'可紧可松' => '可緊可鬆',
+'可自制' => '可自制',
+'可鉴' => '可鑑',
+'台子女' => '台子女',
+'台子孙' => '台子孫',
+'台州' => '台州',
+'台布景' => '台布景',
+'台历史' => '台歷史',
+'台钟' => '台鐘',
+'台风奖' => '台風獎',
+'台风稳健' => '台風穩健',
+'史鉴' => '史鑑',
+'叶不二子' => '叶不二子',
+'叶志穗' => '叶志穗',
+'叶恭弘' => '叶恭弘',
+'叶音' => '叶音',
+'叶韵' => '叶韻',
+'吃板刀面' => '吃板刀麵',
+'吃碗面' => '吃碗麵',
+'吃姜' => '吃薑',
+'吃里扒外' => '吃裡扒外',
+'吃里爬外' => '吃裡爬外',
+'吃面' => '吃麵',
+'各辟' => '各闢',
+'各类钟' => '各類鐘',
+'合伙人' => '合伙人',
+'合并' => '合併',
+'合伙' => '合夥',
+'合府上' => '合府上',
+'合采' => '合採',
+'合历' => '合曆',
+'合历史' => '合歷史',
+'合准' => '合準',
+'吉凶庆吊' => '吉凶慶弔',
+'吉征' => '吉徵',
+'吊钟' => '吊鐘',
+'同人志' => '同人誌',
+'同伙' => '同夥',
+'同于' => '同於',
+'同余' => '同餘',
+'名单于' => '名單於',
+'后冠' => '后冠',
+'后北街' => '后北街',
+'后土' => '后土',
+'后妃' => '后妃',
+'后姓' => '后姓',
+'后安路' => '后安路',
+'后平路' => '后平路',
+'后庄' => '后庄',
+'后座' => '后座',
+'后母戊' => '后母戊',
+'后海湾' => '后海灣',
+'后海灣' => '后海灣',
+'后瑞站' => '后瑞站',
+'后稷' => '后稷',
+'后綜' => '后綜',
+'后羿' => '后羿',
+'后街' => '后街',
+'后角' => '后角',
+'后丰' => '后豐',
+'后豐' => '后豐',
+'后里' => '后里',
+'后发FK型星' => '后髮FK型星',
+'后髮FK型星' => '后髮FK型星',
+'后发座' => '后髮座',
+'后髮座' => '后髮座',
+'后发星系团' => '后髮星系團',
+'后髮星系團' => '后髮星系團',
+'吐哺捉发' => '吐哺捉髮',
+'吐哺握发' => '吐哺握髮',
+'向往来' => '向往來',
+'向往常' => '向往常',
+'向往日' => '向往日',
+'向往时' => '向往時',
+'吞并' => '吞併',
+'吟游' => '吟遊',
+'吧台' => '吧檯',
+'含齿戴发' => '含齒戴髮',
+'吹干' => '吹乾',
+'吹发' => '吹髮',
+'吹胡' => '吹鬍',
+'吾为之范我驰驱' => '吾爲之範我馳驅',
+'吕后' => '呂后',
+'呂后' => '呂后',
+'呆致致' => '呆緻緻',
+'呆里呆气' => '呆裡呆氣',
+'告札' => '告劄',
+'呦喂' => '呦喂',
+'周后' => '周后',
+'周惠后' => '周惠后',
+'周历' => '周曆',
+'周杰' => '周杰',
+'周历史' => '周歷史',
+'周游列国' => '周遊列國',
+'呵喂' => '呵喂',
+'呼吁' => '呼籲',
+'命中注定' => '命中注定',
+'和奸' => '和姦',
+'和制汉' => '和製漢',
+'和制英语' => '和製英語',
+'咎征' => '咎徵',
+'咕咕钟' => '咕咕鐘',
+'咪表' => '咪錶',
+'咬姜呷醋' => '咬薑呷醋',
+'咯当' => '咯噹',
+'哀吊' => '哀弔',
+'哀挽' => '哀輓',
+'品鉴' => '品鑑',
+'哄堂大笑' => '哄堂大笑',
+'員山庄' => '員山庄',
+'哪里' => '哪裡',
+'唁吊' => '唁弔',
+'呗赞' => '唄讚',
+'唇干' => '唇乾',
+'唯一只' => '唯一只',
+'唱游' => '唱遊',
+'唾面自干' => '唾面自乾',
+'唾余' => '唾餘',
+'商历' => '商曆',
+'商标准许' => '商標准許',
+'商历史' => '商歷史',
+'啊喂' => '啊喂',
+'启发式' => '啟發式',
+'啷当' => '啷噹',
+'喂了一声' => '喂了一聲',
+'喂喂' => '喂喂',
+'喂哟' => '喂喲',
+'喂!' => '喂!',
+'喂,' => '喂,',
+'善于' => '善於',
+'喜向往' => '喜向往',
+'喜欢表' => '喜歡錶',
+'喜欢钟' => '喜歡鐘',
+'喜欢钟表' => '喜歡鐘錶',
+'喝干' => '喝乾',
+'喧哗' => '喧譁',
+'喧哄' => '喧鬨',
+'丧钟' => '喪鐘',
+'乔岳' => '喬嶽',
+'单于' => '單于',
+'單于' => '單于',
+'单单于' => '單單於',
+'单干' => '單幹',
+'单打独斗' => '單打獨鬥',
+'哟喂' => '喲喂',
+'喲喂' => '喲喂',
+'嘉谷' => '嘉穀',
+'嘉肴' => '嘉肴',
+'嘴里' => '嘴裡',
+'恶心' => '噁心',
+'噙齿戴发' => '噙齒戴髮',
+'喷洒' => '噴洒',
+'当啷' => '噹啷',
+'当当' => '噹噹',
+'噜苏' => '嚕囌',
+'啮合' => '嚙合',
+'啮齿类' => '嚙齒類',
+'向导' => '嚮導',
+'向往' => '嚮往',
+'向慕' => '嚮慕',
+'向迩' => '嚮邇',
+'严云农' => '嚴云農',
+'严于' => '嚴於',
+'嚼谷' => '嚼穀',
+'啰啰苏苏' => '囉囉囌囌',
+'啰苏' => '囉囌',
+'嘱托' => '囑託',
+'啮虫' => '囓蟲',
+'四个' => '四個',
+'四出征收' => '四出徵收',
+'四分历' => '四分曆',
+'四分历史' => '四分歷史',
+'四周后' => '四周後',
+'四天后' => '四天後',
+'四年' => '四年',
+'四舍五入' => '四捨五入',
+'四舍六入' => '四捨六入',
+'四杆铁笔' => '四桿鐵筆',
+'四扎' => '四紮',
+'四只' => '四隻',
+'四面包' => '四面包',
+'四面钟' => '四面鐘',
+'四余' => '四餘',
+'回佣' => '回佣',
+'回采' => '回採',
+'回旋加速' => '回旋加速',
+'回历' => '回曆',
+'回历史' => '回歷史',
+'回复中' => '回覆中',
+'回复你' => '回覆你',
+'回复帖子' => '回覆帖子',
+'回复意见' => '回覆意見',
+'回复说' => '回覆說',
+'回复邮件' => '回覆郵件',
+'回复:' => '回覆:',
+'回游' => '回遊',
+'因于' => '因於',
+'困倦起来' => '困倦起來',
+'困于' => '困於',
+'困兽之斗' => '困獸之鬥',
+'困兽犹斗' => '困獸猶鬥',
+'困斗' => '困鬥',
+'固定制' => '固定制',
+'固征' => '固徵',
+'囿于' => '囿於',
+'圈梁' => '圈樑',
+'圈里' => '圈裡',
+'国之桢干' => '國之楨榦',
+'国于' => '國於',
+'国历' => '國曆',
+'国历代' => '國歷代',
+'国历任' => '國歷任',
+'国历来' => '國歷來',
+'国历史' => '國歷史',
+'国历届' => '國歷屆',
+'国历经' => '國歷經',
+'国仇' => '國讎',
+'园里' => '園裡',
+'园游会' => '園遊會',
+'图里的' => '圖裡的',
+'图里,' => '圖裡,',
+'图鉴' => '圖鑑',
+'土索面' => '土索麵',
+'土里' => '土裡',
+'土制' => '土製',
+'在制品' => '在制品',
+'在山里' => '在山裡',
+'在于' => '在於',
+'地图里' => '地圖裡',
+'地心历表' => '地心曆表',
+'地方志' => '地方志',
+'地志' => '地誌',
+'地丑德齐' => '地醜德齊',
+'坏于' => '坏於',
+'坐如钟' => '坐如鐘',
+'坐台' => '坐檯',
+'坐钟' => '坐鐘',
+'坑里' => '坑裡',
+'坤范' => '坤範',
+'坦荡' => '坦蕩',
+'坦荡荡' => '坦蕩蕩',
+'坱郁' => '坱鬱',
+'垂于' => '垂於',
+'垂范' => '垂範',
+'垂发' => '垂髮',
+'型范' => '型範',
+'埃及历' => '埃及曆',
+'埃及历史' => '埃及歷史',
+'埃及艳后' => '埃及豔后',
+'埃荣冲' => '埃榮衝',
+'城市里' => '城市裡',
+'城里' => '城裡',
+'埔子里' => '埔子里',
+'埔里社' => '埔裏社',
+'域里' => '域裡',
+'基干' => '基幹',
+'基于' => '基於',
+'基准' => '基準',
+'坚致' => '堅緻',
+'堙淀' => '堙澱',
+'堡子里' => '堡子里',
+'场里' => '場裡',
+'塞耳盗钟' => '塞耳盜鐘',
+'境里' => '境裡',
+'境里程' => '境里程',
+'墓志铭' => '墓志銘',
+'墓志' => '墓誌',
+'增辟' => '增闢',
+'墨子里' => '墨子里',
+'墨斗' => '墨斗',
+'墨沈沈' => '墨沈沈',
+'墨沈' => '墨瀋',
+'垦辟' => '墾闢',
+'压制出' => '壓製出',
+'压制机' => '壓製機',
+'壮游' => '壯遊',
+'壮面' => '壯麵',
+'壹郁' => '壹鬱',
+'壶里' => '壺裡',
+'壸范' => '壼範',
+'壽天里' => '壽天里',
+'寿面' => '壽麵',
+'夏于乔' => '夏于喬',
+'夏于喬' => '夏于喬',
+'夏历' => '夏曆',
+'夏历史' => '夏歷史',
+'夏游' => '夏遊',
+'外强中干' => '外強中乾',
+'外制' => '外製',
+'多半只' => '多半只',
+'多只包括' => '多只包括',
+'多只可' => '多只可',
+'多只含' => '多只含',
+'多只在' => '多只在',
+'多只是' => '多只是',
+'多只会' => '多只會',
+'多只會' => '多只會',
+'多只有' => '多只有',
+'多只比' => '多只比',
+'多只用' => '多只用',
+'多只能' => '多只能',
+'多只限' => '多只限',
+'多只需' => '多只需',
+'多只須' => '多只須',
+'多只须' => '多只須',
+'多周后' => '多周後',
+'多天后' => '多天後',
+'多于' => '多於',
+'多冲' => '多衝',
+'多丑' => '多醜',
+'多只' => '多隻',
+'多余' => '多餘',
+'多出电影' => '多齣電影',
+'夜晚里' => '夜晚裡',
+'夜里' => '夜裡',
+'夜游' => '夜遊',
+'梦里' => '夢裡',
+'梦游' => '夢遊',
+'伙伴' => '夥伴',
+'伙友' => '夥友',
+'伙同' => '夥同',
+'伙众' => '夥眾',
+'伙计' => '夥計',
+'大伙儿' => '大伙兒',
+'大只可' => '大只可',
+'大只在' => '大只在',
+'大只是' => '大只是',
+'大只会' => '大只會',
+'大只有' => '大只有',
+'大只能' => '大只能',
+'大只需' => '大只需',
+'大周后' => '大周后',
+'大型钟' => '大型鐘',
+'大型钟表面' => '大型鐘表面',
+'大型钟表' => '大型鐘錶',
+'大型钟面' => '大型鐘面',
+'大多只' => '大多只',
+'大伙' => '大夥',
+'大干' => '大幹',
+'大批涌到' => '大批湧到',
+'大折儿' => '大摺兒',
+'大明历' => '大明曆',
+'大明历史' => '大明歷史',
+'大历' => '大曆',
+'大本钟' => '大本鐘',
+'大本钟敲' => '大本鐘敲',
+'大历史' => '大歷史',
+'大病初愈' => '大病初癒',
+'大目干连' => '大目乾連',
+'大笨钟' => '大笨鐘',
+'大笨钟敲' => '大笨鐘敲',
+'大蜡' => '大蜡',
+'大衍历' => '大衍曆',
+'大衍历史' => '大衍歷史',
+'大言非夸' => '大言非夸',
+'大夸' => '大誇',
+'大赞' => '大讚',
+'大周折' => '大週摺',
+'大丑' => '大醜',
+'大金发苔' => '大金髮苔',
+'大钟' => '大鐘',
+'大只' => '大隻',
+'大风后' => '大風後',
+'天克地冲' => '天克地衝',
+'天台' => '天台',
+'天后' => '天后',
+'天后宫' => '天后宮',
+'天地志狼' => '天地志狼',
+'天地为范' => '天地為範',
+'天干地支' => '天干地支',
+'天后来' => '天後來',
+'天后半' => '天後半',
+'天后天' => '天後天',
+'天文学钟' => '天文學鐘',
+'天文历表' => '天文曆表',
+'天文钟' => '天文鐘',
+'天历' => '天曆',
+'天历史' => '天歷史',
+'天神之后' => '天神之后',
+'天里' => '天裡',
+'天里昂' => '天里昂',
+'天里村' => '天里村',
+'太仆' => '太僕',
+'太凶' => '太兇',
+'太初历' => '太初曆',
+'太初历史' => '太初歷史',
+'太后' => '太后',
+'太丑' => '太醜',
+'太阁' => '太閤',
+'夸克' => '夸克',
+'夸父' => '夸父',
+'夸特' => '夸特',
+'夸脱' => '夸脫',
+'奇勋' => '奇勳',
+'奇迹' => '奇蹟',
+'奇丑' => '奇醜',
+'奏折' => '奏摺',
+'夺斗' => '奪鬥',
+'奋斗' => '奮鬥',
+'女丑' => '女丑',
+'女仆' => '女僕',
+'奴仆' => '奴僕',
+'奸淫掳掠' => '奸淫擄掠',
+'好家伙' => '好傢夥',
+'好凶' => '好兇',
+'好勇斗狠' => '好勇鬥狠',
+'好斗大' => '好斗大',
+'好斗室' => '好斗室',
+'好斗笠' => '好斗笠',
+'好斗篷' => '好斗篷',
+'好斗胆' => '好斗膽',
+'好斗膽' => '好斗膽',
+'好斗蓬' => '好斗蓬',
+'好于' => '好於',
+'好困' => '好睏',
+'好签' => '好籤',
+'好丑' => '好醜',
+'好斗' => '好鬥',
+'如果干' => '如果幹',
+'如饥似渴' => '如饑似渴',
+'妖后' => '妖后',
+'妖气冲天' => '妖氣衝天',
+'妆台' => '妝檯',
+'始于' => '始於',
+'委托' => '委託',
+'委托书' => '委託書',
+'奸夫' => '姦夫',
+'奸妇' => '姦婦',
+'奸情' => '姦情',
+'奸杀' => '姦殺',
+'奸污' => '姦污',
+'奸淫' => '姦淫',
+'威棱' => '威稜',
+'婢仆' => '婢僕',
+'嫁祸于' => '嫁禍於',
+'嫌凶' => '嫌兇',
+'嫌好道丑' => '嫌好道醜',
+'嫩姜' => '嫩薑',
+'嬉游' => '嬉遊',
+'嬖幸' => '嬖倖',
+'嬴余' => '嬴餘',
+'子之丰兮' => '子之丰兮',
+'子云' => '子云',
+'子里' => '子裡',
+'子里甲' => '子里甲',
+'字汇' => '字彙',
+'字母后' => '字母後',
+'字码表' => '字碼表',
+'字里行间' => '字裡行間',
+'存折' => '存摺',
+'存于' => '存於',
+'孛里海' => '孛里海',
+'孝惠后' => '孝惠后',
+'孙杰' => '孫杰',
+'孫杰' => '孫杰',
+'学家' => '學家',
+'学里' => '學裡',
+'宇宙志' => '宇宙誌',
+'安于' => '安於',
+'安沈铁路' => '安瀋鐵路',
+'宋王台' => '宋王臺',
+'宗周钟' => '宗周鐘',
+'官不怕大只怕管' => '官不怕大只怕管',
+'官地为采' => '官地為寀',
+'官历' => '官曆',
+'官历史' => '官歷史',
+'定于' => '定於',
+'定准' => '定準',
+'定制' => '定製',
+'宜云' => '宜云',
+'宣泄' => '宣洩',
+'宦游' => '宦遊',
+'宫里' => '宮裡',
+'害于' => '害於',
+'宴游' => '宴遊',
+'家仆' => '家僕',
+'家里' => '家裡',
+'家丑' => '家醜',
+'容于' => '容於',
+'容范' => '容範',
+'宿舍' => '宿舍',
+'寄托在' => '寄托在',
+'寄托' => '寄託',
+'密致' => '密緻',
+'寇准' => '寇準',
+'寇仇' => '寇讎',
+'富余' => '富餘',
+'寒栗' => '寒慄',
+'寒于' => '寒於',
+'寓于' => '寓於',
+'寡欲' => '寡慾',
+'实干' => '實幹',
+'实累累' => '實纍纍',
+'写字台' => '寫字檯',
+'宽于' => '寬於',
+'宽余' => '寬餘',
+'宽松' => '寬鬆',
+'宽松松' => '寬鬆鬆',
+'寮采' => '寮寀',
+'寶山庄' => '寶山庄',
+'宝历' => '寶曆',
+'寶曆' => '寶曆',
+'宝历史' => '寶歷史',
+'宝里宝气' => '寶裡寶氣',
+'宝鉴' => '寶鑑',
+'寸发千金' => '寸髮千金',
+'寺钟' => '寺鐘',
+'封后' => '封后',
+'封为后' => '封為后',
+'封面里' => '封面裡',
+'射雕' => '射鵰',
+'专向往' => '專向往',
+'专辑里' => '專輯裡',
+'尊后' => '尊后',
+'对不准' => '對不準',
+'对折' => '對摺',
+'对于' => '對於',
+'对准' => '對準',
+'对准表' => '對準錶',
+'对准钟' => '對準鐘',
+'对准钟表' => '對準鐘錶',
+'对着干' => '對着幹',
+'对华发' => '對華發',
+'对表中' => '對表中',
+'对表扬' => '對表揚',
+'对表明' => '對表明',
+'对表演' => '對表演',
+'对表现' => '對表現',
+'对表达' => '對表達',
+'导游' => '導遊',
+'小丑' => '小丑',
+'小井里' => '小井里',
+'小价' => '小价',
+'小仆' => '小僕',
+'小几' => '小几',
+'小只可' => '小只可',
+'小只在' => '小只在',
+'小只是' => '小只是',
+'小只会' => '小只會',
+'小只有' => '小只有',
+'小只能' => '小只能',
+'小只需' => '小只需',
+'小周后' => '小周后',
+'小型钟' => '小型鐘',
+'小型钟表面' => '小型鐘表面',
+'小型钟表' => '小型鐘錶',
+'小型钟面' => '小型鐘面',
+'小时里' => '小時裡',
+'小米面' => '小米麵',
+'小只' => '小隻',
+'少采' => '少採',
+'就范' => '就範',
+'就里' => '就裡',
+'尸位素餐' => '尸位素餐',
+'尸佼' => '尸佼',
+'尸利' => '尸利',
+'尸子' => '尸子',
+'尸居余气' => '尸居餘氣',
+'尸弃佛' => '尸棄佛',
+'尸祝' => '尸祝',
+'尸禄' => '尸祿',
+'尸罗精舍' => '尸羅精舍',
+'尸羅精舍' => '尸羅精舍',
+'尸臣' => '尸臣',
+'尸谏' => '尸諫',
+'尸魂界' => '尸魂界',
+'尸鸠' => '尸鳩',
+'局促不安' => '局促不安',
+'局里' => '局裡',
+'屋梁' => '屋樑',
+'屋里' => '屋裡',
+'屏风后' => '屏風後',
+'屑于' => '屑於',
+'屡顾尔仆' => '屢顧爾僕',
+'属于' => '屬於',
+'属托' => '屬託',
+'屯扎' => '屯紮',
+'屯里' => '屯裡',
+'山仔后' => '山仔后',
+'山崩钟应' => '山崩鐘應',
+'山岳' => '山嶽',
+'山梁' => '山樑',
+'山棱' => '山稜',
+'山羊胡' => '山羊鬍',
+'山里有' => '山裡有',
+'山里的' => '山裡的',
+'山谷' => '山谷',
+'山重水复' => '山重水複',
+'岫岩' => '岫巖',
+'岱岳' => '岱嶽',
+'峇里海' => '峇里海',
+'峰回' => '峰迴',
+'峻岭' => '峻岭',
+'崑剧' => '崑劇',
+'昆剧' => '崑劇',
+'崑山' => '崑山',
+'昆山' => '崑山',
+'昆冈' => '崑岡',
+'昆仑' => '崑崙',
+'昆嵛' => '崑嵛',
+'昆承湖' => '崑承湖',
+'崑曲' => '崑曲',
+'昆曲' => '崑曲',
+'崑腔' => '崑腔',
+'昆腔' => '崑腔',
+'崑苏' => '崑蘇',
+'昆苏' => '崑蘇',
+'崑调' => '崑調',
+'昆调' => '崑調',
+'崖广' => '崖广',
+'嶒棱' => '嶒稜',
+'岳岳' => '嶽嶽',
+'岳麓' => '嶽麓',
+'川谷' => '川穀',
+'巡回医疗' => '巡回醫療',
+'巡回' => '巡迴',
+'巡游' => '巡遊',
+'工作台' => '工作檯',
+'左冲右突' => '左衝右突',
+'巧干' => '巧幹',
+'巧历' => '巧曆',
+'巧历史' => '巧歷史',
+'巨制' => '巨製',
+'差之毫厘' => '差之毫厘',
+'差于' => '差於',
+'己丑' => '己丑',
+'已占卜' => '已占卜',
+'已占算' => '已占算',
+'巴尔干' => '巴爾幹',
+'巷里' => '巷裡',
+'市里的' => '市裡的',
+'布谷' => '布穀',
+'布谷鸟' => '布穀鳥',
+'布谷鸟钟' => '布穀鳥鐘',
+'布里海' => '布里海',
+'希伯来历' => '希伯來曆',
+'希伯来历史' => '希伯來歷史',
+'帘子' => '帘子',
+'帘布' => '帘布',
+'帝后台' => '帝后臺',
+'师范' => '師範',
+'席卷' => '席捲',
+'带征' => '帶徵',
+'带余' => '帶餘',
+'带发修行' => '帶髮修行',
+'幅图里' => '幅圖裡',
+'干系' => '干係',
+'平平当当' => '平平當當',
+'平准' => '平準',
+'年代里' => '年代裡',
+'年历' => '年曆',
+'年历史' => '年歷史',
+'年谷' => '年穀',
+'年里' => '年裡',
+'年鉴' => '年鑑',
+'并力' => '并力',
+'并吞' => '并吞',
+'并州' => '并州',
+'并日而食' => '并日而食',
+'并迭' => '并迭',
+'幸免于难' => '幸免於難',
+'幸于' => '幸於',
+'幸运胡' => '幸運鬍',
+'干上' => '幹上',
+'干下去' => '幹下去',
+'干不了' => '幹不了',
+'干不成' => '幹不成',
+'干了' => '幹了',
+'干事' => '幹事',
+'干些' => '幹些',
+'干什么' => '幹什麼',
+'干仗' => '幹仗',
+'干个' => '幹個',
+'干劲' => '幹勁',
+'干吏' => '幹吏',
+'干员' => '幹員',
+'干啥' => '幹啥',
+'干吗' => '幹嗎',
+'干嘛' => '幹嘛',
+'干坏事' => '幹壞事',
+'干大事' => '幹大事',
+'干完' => '幹完',
+'干家' => '幹家',
+'干得' => '幹得',
+'干性油' => '幹性油',
+'干才' => '幹才',
+'干掉' => '幹掉',
+'干探' => '幹探',
+'干校' => '幹校',
+'干活' => '幹活',
+'干流' => '幹流',
+'干济' => '幹濟',
+'干营生' => '幹營生',
+'干父之蛊' => '幹父之蠱',
+'干球温度' => '幹球溫度',
+'干甚么' => '幹甚麼',
+'干略' => '幹略',
+'干当' => '幹當',
+'干的事' => '幹的事',
+'干的好事' => '幹的好事',
+'干细胞' => '幹細胞',
+'干线' => '幹線',
+'干练' => '幹練',
+'干缺' => '幹缺',
+'干群关系' => '幹群關係',
+'干蛊' => '幹蠱',
+'干警' => '幹警',
+'干起来' => '幹起來',
+'干路' => '幹路',
+'干办' => '幹辦',
+'干这' => '幹這',
+'干道' => '幹道',
+'干部' => '幹部',
+'干革命' => '幹革命',
+'干头' => '幹頭',
+'干么' => '幹麼',
+'几个' => '幾個',
+'几周后' => '幾周後',
+'几天后' => '幾天後',
+'几进几出' => '幾進幾出',
+'几只' => '幾隻',
+'几出' => '幾齣',
+'广部' => '广部',
+'庄司' => '庄司',
+'床席' => '床蓆',
+'店里' => '店裡',
+'府干卿' => '府干卿',
+'府干扰' => '府干擾',
+'府干擾' => '府干擾',
+'府干政' => '府干政',
+'府干涉' => '府干涉',
+'府干犯' => '府干犯',
+'府干預' => '府干預',
+'府干预' => '府干預',
+'府干' => '府幹',
+'座钟' => '座鐘',
+'廍子里' => '廍子里',
+'廓子里' => '廓子里',
+'厨余' => '廚餘',
+'厮斗' => '廝鬥',
+'庙里' => '廟裡',
+'废后' => '廢后',
+'廢后' => '廢后',
+'广征' => '廣徵',
+'广舍' => '廣捨',
+'广播里' => '廣播裡',
+'延历' => '延曆',
+'建于' => '建於',
+'建筑前' => '建築前',
+'建筑后' => '建築後',
+'弄干' => '弄乾',
+'弄丑' => '弄醜',
+'弄脏胸' => '弄髒胸',
+'弄松' => '弄鬆',
+'弄鬼吊猴' => '弄鬼弔猴',
+'吊卷' => '弔卷',
+'吊取' => '弔取',
+'吊古' => '弔古',
+'吊唁' => '弔唁',
+'吊问' => '弔問',
+'吊喉' => '弔喉',
+'吊丧' => '弔喪',
+'吊喭' => '弔喭',
+'吊奠' => '弔奠',
+'吊孝' => '弔孝',
+'吊客' => '弔客',
+'吊宴' => '弔宴',
+'吊带' => '弔帶',
+'吊影' => '弔影',
+'吊恤' => '弔恤',
+'吊慰' => '弔慰',
+'吊扣' => '弔扣',
+'吊拷' => '弔拷',
+'吊挂' => '弔掛',
+'吊撒' => '弔撒',
+'吊文' => '弔文',
+'吊旗' => '弔旗',
+'吊死' => '弔死',
+'吊民' => '弔民',
+'吊祭' => '弔祭',
+'吊纸' => '弔紙',
+'吊者大悦' => '弔者大悅',
+'吊腰撒跨' => '弔腰撒跨',
+'吊脚儿事' => '弔腳兒事',
+'吊膀子' => '弔膀子',
+'吊词' => '弔詞',
+'吊诡' => '弔詭',
+'吊谎' => '弔謊',
+'吊贺迎送' => '弔賀迎送',
+'吊头' => '弔頭',
+'吊鹤' => '弔鶴',
+'引斗' => '引鬥',
+'弘历' => '弘曆',
+'弘历史' => '弘歷史',
+'弱于' => '弱於',
+'弱水三千只取一瓢' => '弱水三千只取一瓢',
+'张三丰' => '張三丰',
+'張三丰' => '張三丰',
+'张勋' => '張勳',
+'张杰' => '張杰',
+'張杰' => '張杰',
+'张乐于张徐' => '張樂于張徐',
+'强制作用' => '強制作用',
+'强奸' => '強姦',
+'强干' => '強幹',
+'强于' => '強於',
+'别口气' => '彆口氣',
+'别强' => '彆強',
+'别扭' => '彆扭',
+'别拗' => '彆拗',
+'别气' => '彆氣',
+'弹子台' => '彈子檯',
+'弹珠台' => '彈珠檯',
+'汇刊' => '彙刊',
+'汇算' => '彙算',
+'汇纂' => '彙纂',
+'汇辑' => '彙輯',
+'形单影只' => '形單影隻',
+'形于' => '形於',
+'彭于晏' => '彭于晏',
+'影后' => '影后',
+'影相吊' => '影相弔',
+'役于' => '役於',
+'往复式' => '往復式',
+'往日无仇' => '往日無讎',
+'往里' => '往裡',
+'待复' => '待覆',
+'很干' => '很乾',
+'很凶' => '很兇',
+'很准' => '很準',
+'很丑' => '很醜',
+'很松' => '很鬆',
+'律历志' => '律曆志',
+'后印' => '後印',
+'后台老板' => '後台老板',
+'后天' => '後天',
+'後庄' => '後庄',
+'后面店' => '後面店',
+'徐干' => '徐幹',
+'徒杠' => '徒杠',
+'徒托空言' => '徒託空言',
+'得到回复' => '得到回覆',
+'得力干将' => '得力幹將',
+'从仆' => '從僕',
+'从图里' => '從圖裡',
+'从山里' => '從山裡',
+'从于' => '從於',
+'从里到外' => '從裡到外',
+'从里向外' => '從裡向外',
+'御岳山' => '御嶽山',
+'御制' => '御製',
+'复始' => '復始',
+'复活节历表' => '復活節曆表',
+'复苏' => '復甦',
+'征人' => '徵人',
+'征令' => '徵令',
+'征信' => '徵信',
+'征候' => '徵候',
+'征兆' => '徵兆',
+'征兵' => '徵兵',
+'征到' => '徵到',
+'征募' => '徵募',
+'征友' => '徵友',
+'征召' => '徵召',
+'征名责实' => '徵名責實',
+'征吏' => '徵吏',
+'征咎' => '徵咎',
+'征启' => '徵啟',
+'征士' => '徵士',
+'征婚' => '徵婚',
+'征实' => '徵實',
+'征庸' => '徵庸',
+'征引' => '徵引',
+'征得' => '徵得',
+'征怪' => '徵怪',
+'征才' => '徵才',
+'征招' => '徵招',
+'征收' => '徵收',
+'征效' => '徵效',
+'征文' => '徵文',
+'征求' => '徵求',
+'征状' => '徵狀',
+'征用' => '徵用',
+'征发' => '徵發',
+'征税' => '徵稅',
+'征稿' => '徵稿',
+'征答' => '徵答',
+'征结' => '徵結',
+'征圣' => '徵聖',
+'征聘' => '徵聘',
+'征训' => '徵訓',
+'征询' => '徵詢',
+'征调' => '徵調',
+'征象' => '徵象',
+'征购' => '徵購',
+'征迹' => '徵跡',
+'征车' => '徵車',
+'征辟' => '徵辟',
+'征逐' => '徵逐',
+'征选' => '徵選',
+'征集' => '徵集',
+'征风召雨' => '徵風召雨',
+'征验' => '徵驗',
+'心愿' => '心愿',
+'心于' => '心於',
+'心理' => '心理',
+'心细如发' => '心細如髮',
+'心系一' => '心繫一',
+'心系世' => '心繫世',
+'心系中' => '心繫中',
+'心系乔' => '心繫乔',
+'心系五' => '心繫五',
+'心系京' => '心繫京',
+'心系人' => '心繫人',
+'心系他' => '心繫他',
+'心系伊' => '心繫伊',
+'心系何' => '心繫何',
+'心系你' => '心繫你',
+'心系健' => '心繫健',
+'心系传' => '心繫傳',
+'心系全' => '心繫全',
+'心系两' => '心繫兩',
+'心系农' => '心繫农',
+'心系功' => '心繫功',
+'心系动' => '心繫動',
+'心系募' => '心繫募',
+'心系北' => '心繫北',
+'心系十' => '心繫十',
+'心系千' => '心繫千',
+'心系南' => '心繫南',
+'心系台' => '心繫台',
+'心系和' => '心繫和',
+'心系哪' => '心繫哪',
+'心系唐' => '心繫唐',
+'心系嘱' => '心繫囑',
+'心系四' => '心繫四',
+'心系困' => '心繫困',
+'心系国' => '心繫國',
+'心系在' => '心繫在',
+'心系地' => '心繫地',
+'心系大' => '心繫大',
+'心系天' => '心繫天',
+'心系夫' => '心繫夫',
+'心系奥' => '心繫奧',
+'心系女' => '心繫女',
+'心系她' => '心繫她',
+'心系妻' => '心繫妻',
+'心系妇' => '心繫婦',
+'心系子' => '心繫子',
+'心系它' => '心繫它',
+'心系宣' => '心繫宣',
+'心系家' => '心繫家',
+'心系富' => '心繫富',
+'心系小' => '心繫小',
+'心系山' => '心繫山',
+'心系川' => '心繫川',
+'心系幼' => '心繫幼',
+'心系广' => '心繫廣',
+'心系彼' => '心繫彼',
+'心系德' => '心繫德',
+'心系您' => '心繫您',
+'心系慈' => '心繫慈',
+'心系我' => '心繫我',
+'心系摩' => '心繫摩',
+'心系故' => '心繫故',
+'心系新' => '心繫新',
+'心系日' => '心繫日',
+'心系昌' => '心繫昌',
+'心系晓' => '心繫曉',
+'心系曼' => '心繫曼',
+'心系东' => '心繫東',
+'心系林' => '心繫林',
+'心系母' => '心繫母',
+'心系民' => '心繫民',
+'心系江' => '心繫江',
+'心系汶' => '心繫汶',
+'心系沈' => '心繫沈',
+'心系沙' => '心繫沙',
+'心系泰' => '心繫泰',
+'心系浙' => '心繫浙',
+'心系港' => '心繫港',
+'心系湖' => '心繫湖',
+'心系澳' => '心繫澳',
+'心系灾' => '心繫災',
+'心系父' => '心繫父',
+'心系生' => '心繫生',
+'心系病' => '心繫病',
+'心系百' => '心繫百',
+'心系的' => '心繫的',
+'心系众' => '心繫眾',
+'心系社' => '心繫社',
+'心系祖' => '心繫祖',
+'心系神' => '心繫神',
+'心系红' => '心繫紅',
+'心系美' => '心繫美',
+'心系群' => '心繫群',
+'心系老' => '心繫老',
+'心系舞' => '心繫舞',
+'心系英' => '心繫英',
+'心系茶' => '心繫茶',
+'心系万' => '心繫萬',
+'心系兰' => '心繫蘭',
+'心系西' => '心繫西',
+'心系贫' => '心繫貧',
+'心系输' => '心繫輸',
+'心系近' => '心繫近',
+'心系远' => '心繫遠',
+'心系选' => '心繫選',
+'心系重' => '心繫重',
+'心系长' => '心繫長',
+'心系阮' => '心繫阮',
+'心系震' => '心繫震',
+'心系非' => '心繫非',
+'心系风' => '心繫風',
+'心系香' => '心繫香',
+'心系高' => '心繫高',
+'心系麦' => '心繫麥',
+'心系黄' => '心繫黃',
+'心脏' => '心臟',
+'心脏痳痹' => '心臟痲痺',
+'心荡' => '心蕩',
+'心里面' => '心裏面',
+'心里' => '心裡',
+'心长发短' => '心長髮短',
+'心余' => '心餘',
+'必须' => '必須',
+'忙里' => '忙裡',
+'忙里偷闲' => '忙裡偷閒',
+'忠人之托' => '忠人之托',
+'忠仆' => '忠僕',
+'忠于' => '忠於',
+'快快当当' => '快快當當',
+'快冲' => '快衝',
+'怎么干' => '怎麼幹',
+'怒于' => '怒於',
+'怒气冲天' => '怒氣衝天',
+'怒火冲天' => '怒火衝天',
+'怒发冲冠' => '怒髮衝冠',
+'思如泉涌' => '思如泉湧',
+'怠于' => '怠於',
+'急于' => '急於',
+'急冲而下' => '急衝而下',
+'性征' => '性徵',
+'性欲' => '性慾',
+'怨气冲天' => '怨氣衝天',
+'怪里怪气' => '怪裡怪氣',
+'怫郁' => '怫鬱',
+'恂栗' => '恂慄',
+'恒基' => '恒基',
+'恒生' => '恒生',
+'恒隆' => '恒隆',
+'恕乏价催' => '恕乏价催',
+'息交绝游' => '息交絕遊',
+'息谷' => '息穀',
+'悒郁' => '悒鬱',
+'悠悠荡荡' => '悠悠蕩蕩',
+'悠荡' => '悠蕩',
+'悠游' => '悠遊',
+'悲凄' => '悲悽',
+'悲筑' => '悲筑',
+'悲郁' => '悲鬱',
+'悸栗' => '悸慄',
+'凄厉' => '悽厲',
+'凄怨' => '悽怨',
+'凄惋' => '悽惋',
+'凄惶' => '悽惶',
+'凄恻' => '悽惻',
+'凄怆' => '悽愴',
+'凄惨' => '悽慘',
+'凄戾' => '悽戾',
+'凄然' => '悽然',
+'凄美' => '悽美',
+'凄苦' => '悽苦',
+'凄酸' => '悽酸',
+'情欲' => '情慾',
+'惇朴' => '惇樸',
+'惠文后' => '惠文后',
+'恶仆' => '惡僕',
+'恶直丑正' => '惡直醜正',
+'恶斗' => '惡鬥',
+'惴栗' => '惴慄',
+'意大利面' => '意大利麵',
+'爱困' => '愛睏',
+'感于' => '感於',
+'愿朴' => '愿樸',
+'愿樸' => '愿樸',
+'愿而恭' => '愿而恭',
+'栗冽' => '慄冽',
+'栗栗' => '慄慄',
+'慈溪' => '慈谿',
+'慌里慌张' => '慌裡慌張',
+'惨淡' => '慘澹',
+'庆吊' => '慶弔',
+'庆历' => '慶曆',
+'庆历史' => '慶歷史',
+'欲令智昏' => '慾令智昏',
+'欲壑难填' => '慾壑難填',
+'欲念' => '慾念',
+'欲海' => '慾海',
+'欲火' => '慾火',
+'欲障' => '慾障',
+'忧郁' => '憂鬱',
+'凭几' => '憑几',
+'凭吊' => '憑弔',
+'凭折' => '憑摺',
+'凭准' => '憑準',
+'凭借' => '憑藉',
+'凭闲' => '憑閑',
+'宪法里' => '憲法裡',
+'恳托' => '懇託',
+'懈松' => '懈鬆',
+'应制得' => '應制得',
+'應制得' => '應制得',
+'应征' => '應徵',
+'应钟' => '應鐘',
+'懔栗' => '懍慄',
+'懞懞懂懂' => '懞懞懂懂',
+'懞直' => '懞直',
+'惩忿窒欲' => '懲忿窒欲',
+'怀里' => '懷裡',
+'怀钟' => '懷鐘',
+'悬挂' => '懸掛',
+'悬梁' => '懸樑',
+'悬臂梁' => '懸臂樑',
+'悬钟' => '懸鐘',
+'懿范' => '懿範',
+'恋恋不舍' => '戀戀不捨',
+'成于' => '成於',
+'成于思' => '成於思',
+'戬谷' => '戩穀',
+'截发' => '截髮',
+'战天斗地' => '戰天鬥地',
+'战栗' => '戰慄',
+'战于' => '戰於',
+'战斗' => '戰鬥',
+'戏里' => '戲裡',
+'戲院里' => '戲院里',
+'戴表元' => '戴表元',
+'戴发含齿' => '戴髮含齒',
+'房里' => '房裡',
+'所云' => '所云',
+'所云云' => '所云云',
+'所占卜' => '所占卜',
+'所占星' => '所占星',
+'所占算' => '所占算',
+'所托' => '所託',
+'扁拟谷盗虫' => '扁擬穀盜蟲',
+'手塚治虫' => '手塚治虫',
+'手折' => '手摺',
+'手表态' => '手表態',
+'手表態' => '手表態',
+'手表明' => '手表明',
+'手表决' => '手表決',
+'手表決' => '手表決',
+'手表演' => '手表演',
+'手表现' => '手表現',
+'手表現' => '手表現',
+'手表示' => '手表示',
+'手表达' => '手表達',
+'手表達' => '手表達',
+'手表露' => '手表露',
+'手表面' => '手表面',
+'手里剑' => '手裏劍',
+'手里' => '手裡',
+'手游' => '手遊',
+'手表' => '手錶',
+'手链' => '手鍊',
+'手松' => '手鬆',
+'才干休' => '才干休',
+'才干戈' => '才干戈',
+'才干扰' => '才干擾',
+'才干政' => '才干政',
+'才干涉' => '才干涉',
+'才干预' => '才干預',
+'才干' => '才幹',
+'扎好底子' => '扎好底子',
+'扎好根' => '扎好根',
+'扑作教刑' => '扑作教刑',
+'扑打' => '扑打',
+'扑挞' => '扑撻',
+'打干哕' => '打乾噦',
+'打出吊入' => '打出弔入',
+'打卡钟' => '打卡鐘',
+'打吨' => '打吨',
+'打干' => '打幹',
+'打拼' => '打拚',
+'打断发' => '打斷發',
+'打卤' => '打滷',
+'打谷' => '打穀',
+'打钟' => '打鐘',
+'打风后' => '打風後',
+'打斗' => '打鬥',
+'托管国' => '托管國',
+'扛大梁' => '扛大樑',
+'扯面' => '扯麵',
+'扶余' => '扶餘',
+'批准的' => '批准的',
+'批准确定' => '批准確定',
+'批复' => '批覆',
+'批注' => '批註',
+'批斗' => '批鬥',
+'抑制' => '抑制',
+'抑郁' => '抑鬱',
+'抓奸' => '抓姦',
+'抓斗' => '抓鬥',
+'抗御' => '抗禦',
+'折向往' => '折向往',
+'折子戏' => '折子戲',
+'折子戲' => '折子戲',
+'折戟沈河' => '折戟沈河',
+'折冲' => '折衝',
+'披榛采兰' => '披榛採蘭',
+'披头散发' => '披頭散髮',
+'披发' => '披髮',
+'抱朴而长吟兮' => '抱朴而長吟兮',
+'抱素怀朴' => '抱素懷樸',
+'抵御' => '抵禦',
+'抹干' => '抹乾',
+'抽公签' => '抽公籤',
+'抽签' => '抽籤',
+'抿发' => '抿髮',
+'拂钟无声' => '拂鐘無聲',
+'拆伙' => '拆夥',
+'拈须' => '拈鬚',
+'拉克施尔德钟' => '拉克施爾德鐘',
+'拉纤' => '拉縴',
+'拉面上' => '拉面上',
+'拉面具' => '拉面具',
+'拉面前' => '拉面前',
+'拉面巾' => '拉面巾',
+'拉面无' => '拉面無',
+'拉面皮' => '拉面皮',
+'拉面罩' => '拉面罩',
+'拉面色' => '拉面色',
+'拉面部' => '拉面部',
+'拉面' => '拉麵',
+'拒人于' => '拒人於',
+'拒于' => '拒於',
+'拓朴' => '拓樸',
+'拔发' => '拔髮',
+'拔须' => '拔鬚',
+'拗别' => '拗彆',
+'拘于' => '拘於',
+'拙于' => '拙於',
+'拙朴' => '拙樸',
+'拼却' => '拚卻',
+'拼命' => '拚命',
+'拼舍' => '拚捨',
+'拼死' => '拚死',
+'拼生尽死' => '拚生盡死',
+'拼绝' => '拚絕',
+'拼老命' => '拚老命',
+'拼斗' => '拚鬥',
+'拜托' => '拜託',
+'括发' => '括髮',
+'拭干' => '拭乾',
+'拮据' => '拮据',
+'拳局' => '拳跼',
+'拼死拼活' => '拼死拼活',
+'拾沈' => '拾瀋',
+'拿下表' => '拿下錶',
+'拿下钟' => '拿下鐘',
+'拿准' => '拿準',
+'拿破仑' => '拿破崙',
+'挂图' => '挂圖',
+'挂帅' => '挂帥',
+'挂彩' => '挂彩',
+'挂念' => '挂念',
+'挂号' => '挂號',
+'挂车' => '挂車',
+'挌斗' => '挌鬥',
+'挑大梁' => '挑大樑',
+'挑斗' => '挑鬥',
+'振荡' => '振蕩',
+'捉奸徒' => '捉奸徒',
+'捉奸细' => '捉奸細',
+'捉奸贼' => '捉奸賊',
+'捉奸党' => '捉奸黨',
+'捉奸' => '捉姦',
+'捉发' => '捉髮',
+'捍御' => '捍禦',
+'捏面人' => '捏麵人',
+'舍不得' => '捨不得',
+'舍入' => '捨入',
+'舍出' => '捨出',
+'舍去' => '捨去',
+'舍命' => '捨命',
+'舍堕' => '捨墮',
+'舍安就危' => '捨安就危',
+'舍实' => '捨實',
+'舍己从人' => '捨己從人',
+'舍己救人' => '捨己救人',
+'舍己为人' => '捨己為人',
+'舍己为公' => '捨己為公',
+'舍己为国' => '捨己為國',
+'舍得' => '捨得',
+'舍我其谁' => '捨我其誰',
+'舍本逐末' => '捨本逐末',
+'舍弃' => '捨棄',
+'舍死忘生' => '捨死忘生',
+'舍生' => '捨生',
+'舍短取长' => '捨短取長',
+'舍身' => '捨身',
+'舍车保帅' => '捨車保帥',
+'舍近求远' => '捨近求遠',
+'卷住' => '捲住',
+'卷来' => '捲來',
+'卷儿' => '捲兒',
+'卷入' => '捲入',
+'卷动' => '捲動',
+'卷去' => '捲去',
+'卷图' => '捲圖',
+'卷土重来' => '捲土重來',
+'卷地' => '捲地',
+'卷尺' => '捲尺',
+'卷尾猴' => '捲尾猴',
+'卷心菜' => '捲心菜',
+'卷成' => '捲成',
+'卷曲' => '捲曲',
+'卷款' => '捲款',
+'卷毛' => '捲毛',
+'卷烟盒' => '捲煙盒',
+'卷积云' => '捲積雲',
+'卷筒' => '捲筒',
+'卷帘' => '捲簾',
+'卷纸' => '捲紙',
+'卷缩' => '捲縮',
+'卷舌' => '捲舌',
+'卷烟' => '捲菸',
+'卷叶蛾' => '捲葉蛾',
+'卷袖' => '捲袖',
+'卷走' => '捲走',
+'卷起' => '捲起',
+'卷轴' => '捲軸',
+'卷逃' => '捲逃',
+'卷铺盖' => '捲鋪蓋',
+'卷云' => '捲雲',
+'卷风' => '捲風',
+'卷发' => '捲髮',
+'捵面' => '捵麵',
+'捶炼' => '捶鍊',
+'扫荡' => '掃蕩',
+'授勋' => '授勳',
+'掌柜' => '掌柜',
+'排骨面' => '排骨麵',
+'挂名' => '掛名',
+'挂帘' => '掛帘',
+'挂历' => '掛曆',
+'挂钩' => '掛鈎',
+'挂钟' => '掛鐘',
+'挂面' => '掛麵',
+'采下' => '採下',
+'采伐' => '採伐',
+'采住' => '採住',
+'采信' => '採信',
+'采光' => '採光',
+'采到' => '採到',
+'采制' => '採制',
+'采区' => '採區',
+'采去' => '採去',
+'采取' => '採取',
+'采回' => '採回',
+'采在' => '採在',
+'采好' => '採好',
+'采得' => '採得',
+'采拾' => '採拾',
+'采挖' => '採挖',
+'采掘' => '採掘',
+'采摘' => '採摘',
+'采摭' => '採摭',
+'采择' => '採擇',
+'采撷' => '採擷',
+'采收' => '採收',
+'采料' => '採料',
+'采暖' => '採暖',
+'采桑' => '採桑',
+'采样' => '採樣',
+'采樵人' => '採樵人',
+'采树种' => '採樹種',
+'采气' => '採氣',
+'采油' => '採油',
+'采为' => '採為',
+'采煤' => '採煤',
+'采获' => '採獲',
+'采猎' => '採獵',
+'采珠' => '採珠',
+'采生折割' => '採生折割',
+'采用' => '採用',
+'采石' => '採石',
+'采砂场' => '採砂場',
+'采矿' => '採礦',
+'采种' => '採種',
+'采空区' => '採空區',
+'采空采穗' => '採空採穗',
+'采納' => '採納',
+'采纳' => '採納',
+'采给' => '採給',
+'采花' => '採花',
+'采芹人' => '採芹人',
+'采茶' => '採茶',
+'采菊' => '採菊',
+'采莲' => '採蓮',
+'采薇' => '採薇',
+'采薪' => '採薪',
+'采药' => '採藥',
+'采血' => '採血',
+'采行' => '採行',
+'采补' => '採補',
+'采访' => '採訪',
+'采证' => '採證',
+'采买' => '採買',
+'采购' => '採購',
+'采办' => '採辦',
+'采运' => '採運',
+'采过' => '採過',
+'采选' => '採選',
+'采金' => '採金',
+'采录' => '採錄',
+'采铁' => '採鐵',
+'采集' => '採集',
+'采风' => '採風',
+'采风问俗' => '採風問俗',
+'采食' => '採食',
+'采盐' => '採鹽',
+'掣签' => '掣籤',
+'控制' => '控制',
+'推情准理' => '推情準理',
+'推托之词' => '推托之詞',
+'推托' => '推託',
+'提子干' => '提子乾',
+'提心吊胆' => '提心弔膽',
+'提摩太后书' => '提摩太後書',
+'提高后' => '提高後',
+'插于' => '插於',
+'换签' => '換籤',
+'换只' => '換隻',
+'换发' => '換髮',
+'握发' => '握髮',
+'揩干' => '揩乾',
+'揪采' => '揪採',
+'揪发' => '揪髮',
+'揪须' => '揪鬚',
+'揭丑' => '揭醜',
+'挥手表' => '揮手表',
+'揮手表' => '揮手表',
+'搋面' => '搋麵',
+'损于' => '損於',
+'搏斗' => '搏鬥',
+'捣鬼吊白' => '搗鬼弔白',
+'扼肮' => '搤肮',
+'扼肮拊背' => '搤肮拊背',
+'搬斗' => '搬鬥',
+'搭干铺' => '搭乾鋪',
+'搭伙' => '搭夥',
+'摧坚获丑' => '摧堅獲醜',
+'摭采' => '摭採',
+'摸棱' => '摸稜',
+'摸钟' => '摸鐘',
+'折奏' => '摺奏',
+'折子' => '摺子',
+'折尺' => '摺尺',
+'折扇' => '摺扇',
+'折梯' => '摺梯',
+'折椅' => '摺椅',
+'折台' => '摺檯',
+'折叠' => '摺疊',
+'折痕' => '摺痕',
+'折篷' => '摺篷',
+'折纸' => '摺紙',
+'折裙' => '摺裙',
+'撇吊' => '撇弔',
+'捞干' => '撈乾',
+'捞面' => '撈麵',
+'撚须' => '撚鬚',
+'撞钟' => '撞鐘',
+'撞阵冲军' => '撞陣衝軍',
+'撤并' => '撤併',
+'拨谷' => '撥穀',
+'撩斗' => '撩鬥',
+'播于' => '播於',
+'扑冬' => '撲鼕',
+'扑咚' => '撲鼕',
+'扑咚咚' => '撲鼕鼕',
+'擀面' => '擀麵',
+'击扑' => '擊扑',
+'击钟' => '擊鐘',
+'操作钟' => '操作鐘',
+'担仔面' => '擔仔麵',
+'担担面' => '擔擔麵',
+'据云' => '據云',
+'擢发' => '擢髮',
+'擦干' => '擦乾',
+'拧干' => '擰乾',
+'摆钟' => '擺鐘',
+'摄制' => '攝製',
+'支干' => '支幹',
+'支配欲' => '支配慾',
+'收获' => '收穫',
+'改制成' => '改制成',
+'改征' => '改徵',
+'改采' => '改採',
+'放懞挣' => '放懞掙',
+'放荡' => '放蕩',
+'放松' => '放鬆',
+'政斗' => '政鬥',
+'故云' => '故云',
+'敏于' => '敏於',
+'败于' => '敗於',
+'教学钟' => '教學鐘',
+'教于' => '教於',
+'教范' => '教範',
+'敢干' => '敢幹',
+'敢情欲' => '敢情欲',
+'敢斗了胆' => '敢斗了膽',
+'散伙' => '散夥',
+'散于' => '散於',
+'散荡' => '散蕩',
+'敦朴' => '敦樸',
+'敬挽' => '敬輓',
+'敲扑' => '敲扑',
+'敲钟' => '敲鐘',
+'整只' => '整隻',
+'整风后' => '整風後',
+'整发用品' => '整髮用品',
+'整出剧' => '整齣劇',
+'整出戏' => '整齣戲',
+'整出电影' => '整齣電影',
+'敌忾同仇' => '敵愾同讎',
+'数只包括' => '數只包括',
+'数只可' => '數只可',
+'数只含' => '數只含',
+'数只在' => '數只在',
+'数只应' => '數只應',
+'数只是' => '數只是',
+'数只会' => '數只會',
+'数只有' => '數只有',
+'数只比' => '數只比',
+'数只能' => '數只能',
+'数只限' => '數只限',
+'数只需' => '數只需',
+'数只须' => '數只須',
+'数天后' => '數天後',
+'数字钟' => '數字鐘',
+'数字钟表' => '數字鐘錶',
+'数罪并罚' => '數罪併罰',
+'数与虏确' => '數與虜确',
+'数只' => '數隻',
+'文丑' => '文丑',
+'文学志' => '文學誌',
+'文征明' => '文徵明',
+'文思泉涌' => '文思泉湧',
+'文杰' => '文杰',
+'文采郁郁' => '文采郁郁',
+'斗牛星' => '斗牛星',
+'斫雕为朴' => '斫雕為樸',
+'新井里美' => '新井里美',
+'新干县' => '新幹縣',
+'新历' => '新曆',
+'新历史' => '新歷史',
+'新扎' => '新紮',
+'斲雕为朴' => '斲雕為樸',
+'断发' => '斷髮',
+'断发文身' => '斷髮文身',
+'方便面' => '方便麵',
+'方向往' => '方向往',
+'方志恒' => '方志恒',
+'方法里' => '方法裡',
+'方志' => '方誌',
+'于后' => '於後',
+'于征' => '於徵',
+'于海上' => '於海上',
+'于海边' => '於海邊',
+'于震中' => '於震中',
+'于震前' => '於震前',
+'于震后' => '於震後',
+'施舍' => '施捨',
+'施于' => '施於',
+'施舍之道' => '施舍之道',
+'旁征博引' => '旁徵博引',
+'旁注' => '旁註',
+'旅游' => '旅遊',
+'旋回' => '旋迴',
+'族里' => '族裡',
+'日心历表' => '日心曆表',
+'日历' => '日曆',
+'日历史' => '日歷史',
+'日里' => '日裡',
+'日志' => '日誌',
+'早于' => '早於',
+'旱干' => '旱乾',
+'升州' => '昇州',
+'升平' => '昇平',
+'升阳' => '昇陽',
+'昊天不吊' => '昊天不弔',
+'明征' => '明徵',
+'明目张胆' => '明目張胆',
+'明窗净几' => '明窗淨几',
+'明范' => '明範',
+'明鉴' => '明鑑',
+'易于' => '易於',
+'昔人有云' => '昔人有云',
+'星历' => '星曆',
+'星期后' => '星期後',
+'星历史' => '星歷史',
+'春游' => '春遊',
+'春香斗学' => '春香鬥學',
+'昭惠后' => '昭惠后',
+'是发小' => '是髮小',
+'时钟' => '時鐘',
+'时间不准' => '時間不準',
+'晃荡' => '晃蕩',
+'晚于' => '晚於',
+'晚钟' => '晚鐘',
+'晞发' => '晞髮',
+'晨钟' => '晨鐘',
+'普咚咚' => '普鼕鼕',
+'晾干' => '晾乾',
+'暗地里' => '暗地裡',
+'暗沟里' => '暗溝裡',
+'暗里' => '暗裡',
+'暗斗' => '暗鬥',
+'畅游' => '暢遊',
+'昵称' => '暱稱',
+'暴敛横征' => '暴斂橫徵',
+'历元' => '曆元',
+'历命' => '曆命',
+'历始' => '曆始',
+'历室' => '曆室',
+'历尾' => '曆尾',
+'历局' => '曆局',
+'历数书' => '曆數書',
+'历日' => '曆日',
+'历书' => '曆書',
+'历本' => '曆本',
+'历法' => '曆法',
+'历狱' => '曆獄',
+'历纪' => '曆紀',
+'历象' => '曆象',
+'晒干' => '曬乾',
+'晒谷' => '曬穀',
+'曰云' => '曰云',
+'更仆难数' => '更僕難數',
+'更签' => '更籤',
+'更钟' => '更鐘',
+'书签' => '書籤',
+'书面' => '書面',
+'曹子里' => '曹子里',
+'曼谷' => '曼谷',
+'曾朴' => '曾樸',
+'最多' => '最多',
+'最多只' => '最多只',
+'会干扰' => '會干擾',
+'會干擾' => '會干擾',
+'会干' => '會幹',
+'会吊' => '會弔',
+'会里' => '會裡',
+'月历' => '月曆',
+'月历史' => '月歷史',
+'月球历表' => '月球曆表',
+'月里来' => '月裡來',
+'月面' => '月面',
+'有事之无范' => '有事之無範',
+'有仆' => '有僕',
+'有只不' => '有只不',
+'有只允' => '有只允',
+'有只容' => '有只容',
+'有只採' => '有只採',
+'有只采' => '有只採',
+'有只是' => '有只是',
+'有只用' => '有只用',
+'有回复' => '有回覆',
+'有够赞' => '有夠讚',
+'有征伐' => '有征伐',
+'有征战' => '有征戰',
+'有征戰' => '有征戰',
+'有征服' => '有征服',
+'有征討' => '有征討',
+'有征讨' => '有征討',
+'有征' => '有徵',
+'有恒街' => '有恒街',
+'有栖川' => '有栖川',
+'有准' => '有準',
+'有棱有角' => '有稜有角',
+'有只' => '有隻',
+'有余' => '有餘',
+'有发头陀寺' => '有髮頭陀寺',
+'服于' => '服於',
+'望了望' => '望了望',
+'望后石' => '望后石',
+'朝乾夕惕' => '朝乾夕惕',
+'朝钟' => '朝鐘',
+'朝鲜于' => '朝鮮於',
+'朦胧' => '朦朧',
+'蒙胧' => '朦朧',
+'木偶戏扎' => '木偶戲紮',
+'木材干馏' => '木材乾餾',
+'木梁' => '木樑',
+'木签' => '木籤',
+'木制' => '木製',
+'木钟' => '木鐘',
+'未干' => '未乾',
+'未干涉' => '未干涉',
+'未干預' => '未干預',
+'未干预' => '未干預',
+'本庄' => '本庄',
+'本征' => '本徵',
+'本出戏' => '本齣戲',
+'术赤' => '朮赤',
+'朱庆余' => '朱慶餘',
+'朱理安历' => '朱理安曆',
+'朱理安历史' => '朱理安歷史',
+'朴子里' => '朴子里',
+'李志喜' => '李志喜',
+'李适' => '李适',
+'李连杰' => '李連杰',
+'李連杰' => '李連杰',
+'材干' => '材幹',
+'村落发' => '村落發',
+'村里' => '村裡',
+'村里長' => '村里長',
+'村里长' => '村里長',
+'杜老志道' => '杜老誌道',
+'杞宋无征' => '杞宋無徵',
+'束发' => '束髮',
+'杠人' => '杠人',
+'杠梁' => '杠梁',
+'杠毂' => '杠轂',
+'杠轂' => '杠轂',
+'杯干' => '杯乾',
+'杯面' => '杯麵',
+'杰伦' => '杰倫',
+'杰倫' => '杰倫',
+'杰威尔' => '杰威爾',
+'杰威爾' => '杰威爾',
+'东周钟' => '東周鐘',
+'东岳' => '東嶽',
+'東湖里' => '東湖里',
+'东冲西突' => '東衝西突',
+'东游' => '東遊',
+'松口镇' => '松口鎮',
+'松山庄' => '松山庄',
+'松溪县' => '松谿縣',
+'板荡' => '板蕩',
+'林宏岳' => '林宏嶽',
+'林杰樑' => '林杰樑',
+'林郁方' => '林郁方',
+'林钟' => '林鐘',
+'林鹅峰' => '林鵞峰',
+'果干' => '果乾',
+'果子干' => '果子乾',
+'果累累' => '果纍纍',
+'枝干' => '枝幹',
+'枯干' => '枯乾',
+'架钟' => '架鐘',
+'某只' => '某隻',
+'染指于' => '染指於',
+'染殿后' => '染殿后',
+'染发' => '染髮',
+'柜上' => '柜上',
+'柜子' => '柜子',
+'柜柳' => '柜柳',
+'查封后' => '查封後',
+'柱梁' => '柱樑',
+'柳斌杰' => '柳斌杰',
+'柳诒征' => '柳詒徵',
+'栖栖皇皇' => '栖栖皇皇',
+'栗栖溪' => '栗栖溪',
+'校准' => '校準',
+'校舍' => '校舍',
+'核准的' => '核准的',
+'格于' => '格於',
+'格范' => '格範',
+'格里历' => '格里曆',
+'格里高利历' => '格里高利曆',
+'格斗' => '格鬥',
+'桂圆干' => '桂圓乾',
+'框里' => '框裡',
+'桌几' => '桌几',
+'桌历' => '桌曆',
+'桌历史' => '桌歷史',
+'桌游' => '桌遊',
+'桑干' => '桑乾',
+'杆枪' => '桿槍',
+'杆秤' => '桿秤',
+'杆菌' => '桿菌',
+'梁上君子' => '梁上君子',
+'梁启超' => '梁啓超',
+'条干' => '條幹',
+'梨干' => '梨乾',
+'梯冲' => '梯衝',
+'械系' => '械繫',
+'械斗' => '械鬥',
+'弃舍' => '棄捨',
+'棉里' => '棉裡',
+'棉制' => '棉製',
+'棒子面' => '棒子麵',
+'栋梁' => '棟樑',
+'棫朴' => '棫樸',
+'森林里' => '森林裡',
+'棺材里' => '棺材裡',
+'植发' => '植髮',
+'椒面' => '椒麵',
+'椰枣干' => '椰棗乾',
+'杨雅筑' => '楊雅筑',
+'楊雅筑' => '楊雅筑',
+'桢干' => '楨幹',
+'业余' => '業餘',
+'榨干' => '榨乾',
+'枪杆' => '槍桿',
+'杠杆' => '槓桿',
+'乐器钟' => '樂器鐘',
+'乐游原' => '樂遊原',
+'樊于期' => '樊於期',
+'梁上' => '樑上',
+'梁柱' => '樑柱',
+'樗里子' => '樗里子',
+'标标致致' => '標標致致',
+'标准' => '標準',
+'标签' => '標籤',
+'标致' => '標緻',
+'标注' => '標註',
+'标志' => '標誌',
+'模棱' => '模稜',
+'模范' => '模範',
+'模范七棒' => '模范七棒',
+'模范三军' => '模范三軍',
+'模范三軍' => '模范三軍',
+'模范棒棒堂' => '模范棒棒堂',
+'模制' => '模製',
+'样范' => '樣範',
+'樵采' => '樵採',
+'朴修斯' => '樸修斯',
+'朴厚' => '樸厚',
+'朴学' => '樸學',
+'朴实' => '樸實',
+'朴念仁' => '樸念仁',
+'朴拙' => '樸拙',
+'朴樕' => '樸樕',
+'朴父' => '樸父',
+'朴直' => '樸直',
+'朴素' => '樸素',
+'朴讷' => '樸訥',
+'朴质' => '樸質',
+'朴鄙' => '樸鄙',
+'朴重' => '樸重',
+'朴野' => '樸野',
+'朴钝' => '樸鈍',
+'朴陋' => '樸陋',
+'朴马' => '樸馬',
+'朴鲁' => '樸魯',
+'树干' => '樹幹',
+'树林里' => '樹林裡',
+'树梁' => '樹樑',
+'桥梁' => '橋樑',
+'机械系' => '機械系',
+'機械系' => '機械系',
+'机械表' => '機械錶',
+'机械钟' => '機械鐘',
+'机械钟表' => '機械鐘錶',
+'横峰县' => '橫峯縣',
+'横征暴敛' => '橫徵暴斂',
+'横梁' => '橫樑',
+'横冲' => '橫衝',
+'台布' => '檯布',
+'台历' => '檯曆',
+'台灯' => '檯燈',
+'台球' => '檯球',
+'台面上' => '檯面上',
+'台面化' => '檯面化',
+'柜台' => '櫃檯',
+'柜里' => '櫃裡',
+'栉发工' => '櫛髮工',
+'欲海难填' => '欲海難填',
+'欺蒙' => '欺矇',
+'歌后' => '歌后',
+'歌钟' => '歌鐘',
+'欧游' => '歐遊',
+'止于' => '止於',
+'正官庄' => '正官庄',
+'正杰' => '正杰',
+'武丑' => '武丑',
+'武后' => '武后',
+'武斗' => '武鬥',
+'岁聿云暮' => '歲聿云暮',
+'历史里' => '歷史裡',
+'归并' => '歸併',
+'归于' => '歸於',
+'归余' => '歸餘',
+'歹斗' => '歹鬥',
+'死于' => '死於',
+'死里求生' => '死裡求生',
+'死里逃生' => '死裡逃生',
+'殖谷' => '殖穀',
+'残肴' => '殘肴',
+'残余' => '殘餘',
+'僵尸' => '殭屍',
+'殷师牛斗' => '殷師牛鬥',
+'殷鉴' => '殷鑑',
+'壳里' => '殼裡',
+'殿钟自鸣' => '殿鐘自鳴',
+'毁于' => '毀於',
+'毁钟为铎' => '毀鐘為鐸',
+'殴斗' => '毆鬥',
+'母后' => '母后',
+'母范' => '母範',
+'母丑' => '母醜',
+'每每只' => '每每只',
+'每只' => '每隻',
+'毗婆尸佛' => '毗婆尸佛',
+'毛坏' => '毛坏',
+'毛姜' => '毛薑',
+'毛发' => '毛髮',
+'毫厘' => '毫釐',
+'毫发' => '毫髮',
+'气冲斗牛' => '氣沖斗牛',
+'气郁' => '氣鬱',
+'氤郁' => '氤鬱',
+'水来汤里去' => '水來湯裡去',
+'水准' => '水準',
+'水无怜奈' => '水無怜奈',
+'水表示' => '水表示',
+'水表面' => '水表面',
+'水里' => '水裡',
+'水里商工' => '水里商工',
+'水里溪' => '水里溪',
+'水里濁水溪' => '水里濁水溪',
+'水里鄉' => '水里鄉',
+'水里高級商工' => '水里高級商工',
+'水里鳳林' => '水里鳳林',
+'水表' => '水錶',
+'永历' => '永曆',
+'永历史' => '永歷史',
+'永志不忘' => '永誌不忘',
+'求知欲' => '求知慾',
+'求签' => '求籤',
+'池里' => '池裡',
+'污蔑' => '污衊',
+'汤卤' => '汤滷',
+'汲于' => '汲於',
+'决斗' => '決鬥',
+'沈淀' => '沈澱',
+'沈郁' => '沈鬱',
+'沉淀' => '沉澱',
+'沉郁' => '沉鬱',
+'没干没净' => '沒乾沒淨',
+'没事干' => '沒事幹',
+'没干' => '沒幹',
+'没折至' => '沒摺至',
+'没样范' => '沒樣範',
+'没准' => '沒準',
+'冲冠发怒' => '沖冠髮怒',
+'冲天' => '沖天',
+'沙琅' => '沙瑯',
+'沙羡' => '沙羡',
+'沙里淘金' => '沙裡淘金',
+'河岳' => '河嶽',
+'河里' => '河裡',
+'油泼面' => '油潑麵',
+'油斗' => '油鬥',
+'油面' => '油麵',
+'治愈' => '治癒',
+'沿溯' => '沿泝',
+'法自制' => '法自制',
+'法里,' => '法裡,',
+'泛游' => '泛遊',
+'泡制' => '泡製',
+'泡面' => '泡麵',
+'波棱菜' => '波稜菜',
+'波发藻' => '波髮藻',
+'泥于' => '泥於',
+'注云' => '注云',
+'注释' => '注釋',
+'泰山梁木' => '泰山梁木',
+'泱郁' => '泱鬱',
+'泳气钟' => '泳氣鐘',
+'洄游' => '洄遊',
+'洋河大曲' => '洋河大麯',
+'洒家' => '洒家',
+'洒扫' => '洒掃',
+'洒水' => '洒水',
+'洒洒' => '洒洒',
+'洒淅' => '洒淅',
+'洒涤' => '洒滌',
+'洒濯' => '洒濯',
+'洒然' => '洒然',
+'洒脱' => '洒脫',
+'洗炼' => '洗鍊',
+'洗练' => '洗鍊',
+'洗发' => '洗髮',
+'洛钟东应' => '洛鐘東應',
+'洞里' => '洞裡',
+'洞里萨' => '洞里薩',
+'洞里薩' => '洞里薩',
+'泄欲' => '洩慾',
+'洪范' => '洪範',
+'洪谷子' => '洪谷子',
+'洪适' => '洪适',
+'洪钟' => '洪鐘',
+'汹涌' => '洶湧',
+'流征' => '流徵',
+'流于' => '流於',
+'流荡' => '流蕩',
+'流风余俗' => '流風餘俗',
+'流风余韵' => '流風餘韻',
+'浩浩荡荡' => '浩浩蕩蕩',
+'浩荡' => '浩蕩',
+'浪荡' => '浪蕩',
+'浪游' => '浪遊',
+'浮于' => '浮於',
+'浮荡' => '浮蕩',
+'浮夸' => '浮誇',
+'浮松' => '浮鬆',
+'海干' => '海乾',
+'海淀山后' => '海淀山後',
+'海淀山後' => '海淀山後',
+'浸卤' => '浸滷',
+'涂善妮' => '涂善妮',
+'涂坤' => '涂坤',
+'涂壮勋' => '涂壯勳',
+'涂壯勳' => '涂壯勳',
+'涂天相' => '涂天相',
+'涂姓' => '涂姓',
+'涂序瑄' => '涂序瑄',
+'涂敏恆' => '涂敏恆',
+'涂敏恒' => '涂敏恆',
+'涂泽民' => '涂澤民',
+'涂澤民' => '涂澤民',
+'涂绍煃' => '涂紹煃',
+'涂羽卿' => '涂羽卿',
+'涂謹申' => '涂謹申',
+'涂谨申' => '涂謹申',
+'涂逢年' => '涂逢年',
+'涂醒哲' => '涂醒哲',
+'涂長望' => '涂長望',
+'涂长望' => '涂長望',
+'涂鴻欽' => '涂鴻欽',
+'涂鸿钦' => '涂鴻欽',
+'涌水塘' => '涌水塘',
+'涳蒙' => '涳濛',
+'涸干' => '涸乾',
+'凉席' => '涼蓆',
+'凉面' => '涼麵',
+'淋余土' => '淋餘土',
+'淑范' => '淑範',
+'泪干' => '淚乾',
+'泪如泉涌' => '淚如泉湧',
+'淡于' => '淡於',
+'淡蒙蒙' => '淡濛濛',
+'净余' => '淨餘',
+'净发' => '淨髮',
+'淫欲' => '淫慾',
+'淫荡' => '淫蕩',
+'淬炼' => '淬鍊',
+'深山何处钟' => '深山何處鐘',
+'深山里' => '深山裡',
+'淳于' => '淳于',
+'淳朴' => '淳樸',
+'渊淳岳峙' => '淵淳嶽峙',
+'渊里' => '淵裡',
+'浅淀' => '淺澱',
+'清心寡欲' => '清心寡欲',
+'渠冲' => '渠衝',
+'测不准' => '測不準',
+'港制' => '港製',
+'游离' => '游離',
+'浑朴' => '渾樸',
+'浑个' => '渾箇',
+'湖里' => '湖裡',
+'湘累' => '湘纍',
+'涌上' => '湧上',
+'涌来' => '湧來',
+'涌入' => '湧入',
+'涌出' => '湧出',
+'涌向' => '湧向',
+'涌水' => '湧水',
+'涌泉' => '湧泉',
+'涌现' => '湧現',
+'涌起' => '湧起',
+'涌进' => '湧進',
+'湮郁' => '湮鬱',
+'汤下面' => '湯下麵',
+'汤团' => '湯糰',
+'汤面' => '湯麵',
+'源于' => '源於',
+'准不准' => '準不準',
+'准例' => '準例',
+'准保' => '準保',
+'准备' => '準備',
+'准儿' => '準兒',
+'准分子' => '準分子',
+'准则' => '準則',
+'准噶尔' => '準噶爾',
+'准定' => '準定',
+'准平原' => '準平原',
+'准度' => '準度',
+'准式' => '準式',
+'准拿督' => '準拿督',
+'准据' => '準據',
+'准拟' => '準擬',
+'准新娘' => '準新娘',
+'准新郎' => '準新郎',
+'准星' => '準星',
+'准是' => '準是',
+'准时' => '準時',
+'准会' => '準會',
+'准决赛' => '準決賽',
+'准的' => '準的',
+'准直' => '準直',
+'准确' => '準確',
+'准线' => '準線',
+'准绳' => '準繩',
+'准话' => '準話',
+'准谱' => '準譜',
+'准货币' => '準貨幣',
+'准军事' => '準軍事',
+'准头' => '準頭',
+'准点' => '準點',
+'沟大曲' => '溝大麯',
+'沟谷' => '溝谷',
+'溟蒙' => '溟濛',
+'溢于' => '溢於',
+'温洛克期' => '溫洛克期',
+'溲面' => '溲麵',
+'溺于' => '溺於',
+'滃郁' => '滃鬱',
+'滑借' => '滑藉',
+'汇丰' => '滙豐',
+'渗漓' => '滲灕',
+'卤了' => '滷了',
+'卤五花' => '滷五花',
+'卤味' => '滷味',
+'卤好' => '滷好',
+'卤子' => '滷子',
+'卤料' => '滷料',
+'卤水' => '滷水',
+'卤汁' => '滷汁',
+'卤湖' => '滷湖',
+'卤煮' => '滷煮',
+'卤牛' => '滷牛',
+'卤的' => '滷的',
+'卤肉' => '滷肉',
+'卤菜' => '滷菜',
+'卤蛋' => '滷蛋',
+'卤虾' => '滷蝦',
+'卤制' => '滷製',
+'卤豆' => '滷豆',
+'卤鸡' => '滷雞',
+'卤鸭' => '滷鴨',
+'卤鹅' => '滷鵝',
+'卤面' => '滷麵',
+'满拼自尽' => '滿拚自盡',
+'满满当当' => '滿滿當當',
+'满头洋发' => '滿頭洋髮',
+'漂荡' => '漂蕩',
+'漕挽' => '漕輓',
+'沤郁' => '漚鬱',
+'漠里' => '漠裡',
+'汉弥登钟' => '漢彌登鐘',
+'漫卷' => '漫捲',
+'漫游' => '漫遊',
+'潜意识里' => '潛意識裡',
+'潜水表' => '潛水錶',
+'潜水钟' => '潛水鐘',
+'潜水钟表' => '潛水鐘錶',
+'潭里' => '潭裡',
+'潮涌' => '潮湧',
+'溃于' => '潰於',
+'涩谷区' => '澀谷區',
+'澄江县' => '澂江縣',
+'澄澹精致' => '澄澹精致',
+'澒蒙' => '澒濛',
+'淀乃不耕之地' => '澱乃不耕之地',
+'淀北片' => '澱北片',
+'淀山' => '澱山',
+'淀淀' => '澱澱',
+'淀积' => '澱積',
+'淀粉' => '澱粉',
+'淀解物' => '澱解物',
+'淀谓之滓' => '澱謂之滓',
+'澹台' => '澹臺',
+'澹荡' => '澹蕩',
+'激斗' => '激鬥',
+'浓发' => '濃髮',
+'蒙汜' => '濛汜',
+'蒙蒙细雨' => '濛濛細雨',
+'蒙雾' => '濛霧',
+'蒙鸿' => '濛鴻',
+'浚州' => '濬州',
+'浚县' => '濬縣',
+'滨田里佳子' => '濱田里佳子',
+'沈丹客运' => '瀋丹客運',
+'沈丹线' => '瀋丹線',
+'沈丹铁路' => '瀋丹鐵路',
+'沈丹高' => '瀋丹高',
+'沈北' => '瀋北',
+'沈吉' => '瀋吉',
+'沈大线' => '瀋大線',
+'沈大铁路' => '瀋大鐵路',
+'沈大高速' => '瀋大高速',
+'沈山线' => '瀋山線',
+'沈山铁路' => '瀋山鐵路',
+'沈州' => '瀋州',
+'沈抚' => '瀋撫',
+'沈水' => '瀋水',
+'沈河' => '瀋河',
+'沈海铁路' => '瀋海鐵路',
+'沈海高速' => '瀋海高速',
+'沈阳' => '瀋陽',
+'泸州大曲' => '瀘州大麯',
+'沥干' => '瀝乾',
+'潇洒' => '瀟洒',
+'弥山遍野' => '瀰山遍野',
+'弥漫' => '瀰漫',
+'弥弥' => '瀰瀰',
+'漓水' => '灕水',
+'漓江' => '灕江',
+'漓湘' => '灕湘',
+'漓然' => '灕然',
+'滩涂' => '灘涂',
+'滩席' => '灘蓆',
+'火并非' => '火並非',
+'火并' => '火併',
+'火山里' => '火山裡',
+'火拼' => '火拚',
+'火折子' => '火摺子',
+'火签' => '火籤',
+'灰蒙' => '灰濛',
+'灰蒙蒙' => '灰濛濛',
+'炆面' => '炆麵',
+'炒面' => '炒麵',
+'炮制' => '炮製',
+'炸酱面' => '炸醬麵',
+'为准' => '為準',
+'为鉴' => '為鑑',
+'乌兹冲锋枪' => '烏茲衝鋒槍',
+'乌苏里' => '烏蘇里',
+'乌发' => '烏髮',
+'乌龙面' => '烏龍麵',
+'烘干' => '烘乾',
+'烘制' => '烘製',
+'烤干' => '烤乾',
+'烤卤' => '烤滷',
+'烹制' => '烹製',
+'焙干' => '焙乾',
+'无征不信' => '無徵不信',
+'无业游民' => '無業游民',
+'无梁楼盖' => '無樑樓蓋',
+'无余' => '無餘',
+'炼制' => '煉製',
+'煎面' => '煎麵',
+'烟卷' => '煙捲',
+'烟台' => '煙臺',
+'照入签' => '照入籤',
+'照相干片' => '照相乾片',
+'煨干' => '煨乾',
+'煮面' => '煮麵',
+'熊杰' => '熊杰',
+'荧郁' => '熒鬱',
+'燎发' => '燎髮',
+'烧干' => '燒乾',
+'燕几' => '燕几',
+'燕游' => '燕遊',
+'烫一个发' => '燙一個髮',
+'烫一次发' => '燙一次髮',
+'烫个发' => '燙個髮',
+'烫完发' => '燙完髮',
+'烫次发' => '燙次髮',
+'烫发' => '燙髮',
+'烫面' => '燙麵',
+'营干' => '營幹',
+'烩面' => '燴麵',
+'烬余' => '燼餘',
+'爆发指数' => '爆發指數',
+'争奇斗妍' => '爭奇鬥妍',
+'争奇斗异' => '爭奇鬥異',
+'争奇斗艳' => '爭奇鬥豔',
+'争妍斗奇' => '爭妍鬥奇',
+'争妍斗艳' => '爭妍鬥豔',
+'争红斗紫' => '爭紅鬥紫',
+'争斗' => '爭鬥',
+'爰定祥历' => '爰定祥厤',
+'爽荡' => '爽蕩',
+'尔冬陞' => '爾冬陞',
+'墙里' => '牆裡',
+'片里' => '片裡',
+'片言只语' => '片言隻語',
+'版图里' => '版圖裡',
+'牙签' => '牙籤',
+'牛只' => '牛隻',
+'物欲' => '物慾',
+'抵牾' => '牴牾',
+'抵触' => '牴觸',
+'特别致' => '特别致',
+'特制住' => '特制住',
+'特制定' => '特制定',
+'特制止' => '特制止',
+'特制订' => '特制訂',
+'特征' => '特徵',
+'特制' => '特製',
+'牵一发' => '牽一髮',
+'牵系' => '牽繫',
+'荦确' => '犖确',
+'狂并潮' => '狂併潮',
+'狃于' => '狃於',
+'狄志杰' => '狄志杰',
+'狐借虎威' => '狐藉虎威',
+'猛于' => '猛於',
+'猛冲' => '猛衝',
+'猜三划五' => '猜三划五',
+'犹如表' => '猶如錶',
+'犹如钟' => '猶如鐘',
+'犹如钟表' => '猶如鐘錶',
+'狱里' => '獄裡',
+'奖杯' => '獎盃',
+'独裁制' => '獨裁制',
+'独辟蹊径' => '獨闢蹊徑',
+'获匪其丑' => '獲匪其醜',
+'兽欲' => '獸慾',
+'献丑' => '獻醜',
+'玉历' => '玉曆',
+'玉历史' => '玉歷史',
+'玉米面' => '玉米面',
+'王侯后' => '王侯后',
+'王后' => '王后',
+'王添灯' => '王添灯',
+'王田里' => '王田里',
+'王鉴' => '王鑑',
+'王余鱼' => '王餘魚',
+'珍肴异馔' => '珍肴異饌',
+'班里' => '班裡',
+'现于' => '現於',
+'球台' => '球檯',
+'理一个发' => '理一個髮',
+'理一次发' => '理一次髮',
+'理个发' => '理個髮',
+'理完发' => '理完髮',
+'理次发' => '理次髮',
+'理发' => '理髮',
+'琴钟' => '琴鐘',
+'珐琅' => '琺瑯',
+'瑞城里' => '瑞城里',
+'瑞征' => '瑞徵',
+'瑶签' => '瑤籤',
+'环游' => '環遊',
+'瓷制' => '瓷製',
+'甄后' => '甄后',
+'瓮安' => '甕安',
+'甚于' => '甚於',
+'甜水面' => '甜水麵',
+'甜面酱' => '甜麵醬',
+'生力面' => '生力麵',
+'生于' => '生於',
+'生殖洄游' => '生殖洄游',
+'生物钟' => '生物鐘',
+'生发生' => '生發生',
+'生华发' => '生華髮',
+'生姜' => '生薑',
+'生锈' => '生鏽',
+'生发' => '生髮',
+'产卵洄游' => '產卵洄游',
+'苏醒' => '甦醒',
+'用于' => '用於',
+'用法里' => '用法裡',
+'甩发' => '甩髮',
+'田子里' => '田子里',
+'田庄英雄' => '田庄英雄',
+'田谷' => '田穀',
+'田里' => '田裡',
+'由余' => '由余',
+'由于' => '由於',
+'甲胄' => '甲冑',
+'甲后路' => '甲后路',
+'男仆' => '男僕',
+'界里' => '界裡',
+'畏于' => '畏於',
+'留长发' => '留長髮',
+'留发' => '留髮',
+'毕于' => '畢於',
+'毕业于' => '畢業於',
+'毕生发展' => '畢生發展',
+'当准' => '當準',
+'当当丁丁' => '當當丁丁',
+'当当网' => '當當網',
+'叠席' => '疊蓆',
+'疏松' => '疏鬆',
+'疑系' => '疑係',
+'疑凶' => '疑兇',
+'疲于' => '疲於',
+'疲困' => '疲睏',
+'病征' => '病徵',
+'病愈' => '病癒',
+'病余' => '病餘',
+'痊愈' => '痊癒',
+'痒疹' => '痒疹',
+'痒痒' => '痒痒',
+'痳木' => '痳木',
+'痳疹' => '痳疹',
+'痳病' => '痳病',
+'痳痹' => '痳痺',
+'痳疯' => '痳瘋',
+'愈合' => '癒合',
+'症结' => '癥結',
+'癸丑' => '癸丑',
+'发干' => '發乾',
+'发呆' => '發獃',
+'发签' => '發籤',
+'发松' => '發鬆',
+'发面' => '發麵',
+'白干儿' => '白乾兒',
+'白术' => '白朮',
+'白朴' => '白樸',
+'白净面皮' => '白淨面皮',
+'白发其事' => '白發其事',
+'白皮松' => '白皮松',
+'白粉面' => '白粉麵',
+'白里透红' => '白裡透紅',
+'白面包青天' => '白面包青天',
+'白发' => '白髮',
+'白胡' => '白鬍',
+'白霉' => '白黴',
+'百个' => '百個',
+'百只可' => '百只可',
+'百只够' => '百只夠',
+'百只夠' => '百只夠',
+'百只怕' => '百只怕',
+'百只足够' => '百只足夠',
+'百只足夠' => '百只足夠',
+'百周后' => '百周後',
+'百天后' => '百天後',
+'百子里' => '百子里',
+'百年' => '百年',
+'百拙千丑' => '百拙千醜',
+'百科里' => '百科裡',
+'百谷' => '百穀',
+'百扎' => '百紮',
+'百花历' => '百花曆',
+'百花历史' => '百花歷史',
+'百炼' => '百鍊',
+'百只' => '百隻',
+'百余' => '百餘',
+'的回复' => '的回覆',
+'的图里' => '的圖裡',
+'的山里' => '的山裡',
+'的干将' => '的幹將',
+'的个中' => '的箇中',
+'的钟' => '的鐘',
+'的长发' => '的長髮',
+'的发小' => '的髮小',
+'皆可作淀' => '皆可作澱',
+'皆准' => '皆準',
+'皇后' => '皇后',
+'皇历' => '皇曆',
+'皇极历' => '皇極曆',
+'皇极历史' => '皇極歷史',
+'皇历史' => '皇歷史',
+'皓发' => '皓髮',
+'皮制服' => '皮制服',
+'皮托管' => '皮托管',
+'皮肤' => '皮膚',
+'皮里春秋' => '皮裡春秋',
+'皮里阳秋' => '皮裡陽秋',
+'皮制' => '皮製',
+'皮松' => '皮鬆',
+'皱别' => '皺彆',
+'皱折' => '皺摺',
+'盆吊' => '盆弔',
+'盈余' => '盈餘',
+'益于' => '益於',
+'盒里' => '盒裡',
+'盛赞' => '盛讚',
+'盗采' => '盜採',
+'盗钟' => '盜鐘',
+'监制' => '監製',
+'盘里' => '盤裡',
+'盘回' => '盤迴',
+'卢棱伽' => '盧稜伽',
+'荡气回肠' => '盪氣迴腸',
+'盲干' => '盲幹',
+'直于' => '直於',
+'直冲' => '直衝',
+'相并' => '相併',
+'相克制' => '相克制',
+'相克服' => '相克服',
+'相克' => '相剋',
+'相干' => '相干',
+'相于' => '相於',
+'相冲' => '相衝',
+'相斗' => '相鬥',
+'看下表' => '看下錶',
+'看下钟' => '看下鐘',
+'看法里' => '看法裡',
+'看准' => '看準',
+'看表面' => '看表面',
+'看表' => '看錶',
+'看钟' => '看鐘',
+'真凶' => '真兇',
+'真个' => '真箇',
+'真丑' => '真醜',
+'眼干' => '眼乾',
+'眼帘' => '眼帘',
+'眼眶里' => '眼眶裡',
+'眼睛里' => '眼睛裡',
+'眼里' => '眼裡',
+'着眼于' => '着眼於',
+'困乏' => '睏乏',
+'困了' => '睏了',
+'困倦' => '睏倦',
+'困觉' => '睏覺',
+'睡游病' => '睡遊病',
+'瞄准' => '瞄準',
+'瞅下表' => '瞅下錶',
+'瞅下钟' => '瞅下鐘',
+'瞎蒙' => '瞎矇',
+'了望' => '瞭望',
+'了然' => '瞭然',
+'了若指掌' => '瞭若指掌',
+'瞳蒙' => '瞳矇',
+'蒙事' => '矇事',
+'蒙昧无知' => '矇昧無知',
+'蒙松雨' => '矇松雨',
+'蒙混' => '矇混',
+'蒙瞍' => '矇瞍',
+'蒙眬' => '矇矓',
+'蒙聩' => '矇聵',
+'蒙头转' => '矇頭轉',
+'蒙骗' => '矇騙',
+'瞩托' => '矚託',
+'矜夸' => '矜誇',
+'短几' => '短几',
+'短于' => '短於',
+'短发生' => '短發生',
+'短发' => '短髮',
+'矮几' => '矮几',
+'石几' => '石几',
+'石杠' => '石杠',
+'石梁' => '石樑',
+'石英钟' => '石英鐘',
+'石英钟表' => '石英鐘錶',
+'石钟' => '石鐘',
+'研制' => '研製',
+'砰当' => '砰噹',
+'破鉴' => '破鑑',
+'朱砂' => '硃砂',
+'硬干' => '硬幹',
+'确瘠' => '确瘠',
+'碑志' => '碑誌',
+'碗里' => '碗裡',
+'碰钟' => '碰鐘',
+'确系' => '確係',
+'码表' => '碼錶',
+'磁制' => '磁製',
+'磨蝎' => '磨蝎',
+'磨制' => '磨製',
+'磨炼' => '磨鍊',
+'磬钟' => '磬鐘',
+'硗确' => '磽确',
+'砻谷' => '礱穀',
+'示范' => '示範',
+'社里' => '社裡',
+'祝赞' => '祝讚',
+'祝发' => '祝髮',
+'神荼郁垒' => '神荼鬱壘',
+'神游' => '神遊',
+'神雕像' => '神雕像',
+'神雕' => '神鵰',
+'祭吊' => '祭弔',
+'禁欲' => '禁慾',
+'禁欲主义' => '禁欲主義',
+'祸于' => '禍於',
+'御侮' => '禦侮',
+'御寇' => '禦寇',
+'御寒' => '禦寒',
+'御敌' => '禦敵',
+'礼赞' => '禮讚',
+'禾谷' => '禾穀',
+'秃妃之发' => '禿妃之髮',
+'秃发' => '禿髮',
+'秀发动' => '秀發動',
+'秀发展' => '秀發展',
+'秀发布' => '秀發布',
+'秀发村' => '秀發村',
+'秀发现' => '秀發現',
+'秀发生' => '秀發生',
+'秀发表' => '秀發表',
+'秀发起' => '秀發起',
+'秀发' => '秀髮',
+'私下里' => '私下裡',
+'私欲' => '私慾',
+'私斗' => '私鬥',
+'秋游' => '秋遊',
+'种丹妮' => '种丹妮',
+'种师中' => '种師中',
+'种师道' => '种師道',
+'种放' => '种放',
+'科尼亚克期' => '科尼亞克期',
+'科斗' => '科斗',
+'科范' => '科範',
+'秒表明' => '秒表明',
+'秒表示' => '秒表示',
+'秒钟' => '秒鐘',
+'秤杆' => '秤桿',
+'秦沈客运' => '秦瀋客運',
+'移祸于' => '移禍於',
+'稀松' => '稀鬆',
+'棱台' => '稜台',
+'棱子' => '稜子',
+'棱层' => '稜層',
+'棱柱' => '稜柱',
+'棱登' => '稜登',
+'棱棱' => '稜稜',
+'棱等登' => '稜等登',
+'棱线' => '稜線',
+'棱缝' => '稜縫',
+'棱角' => '稜角',
+'棱锥' => '稜錐',
+'棱镜' => '稜鏡',
+'棱体' => '稜體',
+'种谷' => '種穀',
+'称赞' => '稱讚',
+'稻谷' => '稻穀',
+'稽征' => '稽徵',
+'谷人' => '穀人',
+'谷保家商' => '穀保家商',
+'谷仓' => '穀倉',
+'谷圭' => '穀圭',
+'谷场' => '穀場',
+'谷子' => '穀子',
+'谷日' => '穀日',
+'谷旦' => '穀旦',
+'谷梁' => '穀梁',
+'谷壳' => '穀殼',
+'谷物' => '穀物',
+'谷皮' => '穀皮',
+'谷神' => '穀神',
+'谷禄' => '穀祿',
+'谷谷' => '穀穀',
+'谷米' => '穀米',
+'谷粒' => '穀粒',
+'谷舱' => '穀艙',
+'谷苗' => '穀苗',
+'谷草' => '穀草',
+'谷贵饿农' => '穀貴餓農',
+'谷贱伤农' => '穀賤傷農',
+'谷雨' => '穀雨',
+'谷类' => '穀類',
+'谷食' => '穀食',
+'穆棱' => '穆稜',
+'穆罕默德历' => '穆罕默德曆',
+'穆罕默德历史' => '穆罕默德歷史',
+'积淀' => '積澱',
+'积谷' => '積穀',
+'积谷防饥' => '積穀防饑',
+'积郁' => '積鬱',
+'稳健的台风' => '穩健的台風',
+'稳扎' => '穩紮',
+'空蒙' => '空濛',
+'空荡' => '空蕩',
+'空荡荡' => '空蕩蕩',
+'空钟' => '空鐘',
+'空余' => '空餘',
+'窒欲' => '窒慾',
+'窗明几亮' => '窗明几亮',
+'窗明几净' => '窗明几淨',
+'窗帘' => '窗簾',
+'窝里' => '窩裡',
+'窝里斗' => '窩裡鬥',
+'穷于' => '窮於',
+'穷追不舍' => '窮追不捨',
+'穷发' => '窮髮',
+'窃钟掩耳' => '竊鐘掩耳',
+'立于' => '立於',
+'立范' => '立範',
+'童仆' => '童僕',
+'竞斗' => '競鬥',
+'竹几' => '竹几',
+'竹林之游' => '竹林之遊',
+'竹签' => '竹籤',
+'竹席' => '竹蓆',
+'竹制' => '竹製',
+'竹溪县' => '竹谿縣',
+'笑里藏刀' => '笑裡藏刀',
+'第一出现' => '第一出現',
+'第一出現' => '第一出現',
+'第一出線' => '第一出線',
+'第一出线' => '第一出線',
+'第一出' => '第一齣',
+'第七出' => '第七齣',
+'第三出局' => '第三出局',
+'第三出' => '第三齣',
+'第九出' => '第九齣',
+'第二出線' => '第二出線',
+'第二出线' => '第二出線',
+'第二出' => '第二齣',
+'第五出局' => '第五出局',
+'第五出' => '第五齣',
+'第八出' => '第八齣',
+'第六出' => '第六齣',
+'第四出局' => '第四出局',
+'第四出' => '第四齣',
+'笔杆' => '筆桿',
+'笔秃墨干' => '筆禿墨乾',
+'等于' => '等於',
+'笋干' => '筍乾',
+'筑前' => '筑前',
+'筑北' => '筑北',
+'筑州' => '筑州',
+'筑后' => '筑後',
+'筑後' => '筑後',
+'筑波' => '筑波',
+'筑紫' => '筑紫',
+'筑肥' => '筑肥',
+'筑西' => '筑西',
+'筑邦' => '筑邦',
+'筑阳' => '筑陽',
+'筑陽' => '筑陽',
+'答复' => '答覆',
+'筵几' => '筵几',
+'个中原因' => '箇中原因',
+'个中奥' => '箇中奧',
+'个中好手' => '箇中好手',
+'个中强手' => '箇中強手',
+'个中滋味' => '箇中滋味',
+'个中玄机' => '箇中玄機',
+'个中理由' => '箇中理由',
+'个中翘楚' => '箇中翹楚',
+'个中道理' => '箇中道理',
+'个中高手' => '箇中高手',
+'个旧' => '箇舊',
+'算历' => '算曆',
+'算历史' => '算歷史',
+'算准' => '算準',
+'管制' => '管制',
+'管干' => '管幹',
+'箱里' => '箱裡',
+'节欲' => '節慾',
+'节目里' => '節目裡',
+'节余' => '節餘',
+'范亭' => '範亭',
+'范例' => '範例',
+'范围' => '範圍',
+'范字' => '範字',
+'范式' => '範式',
+'范性形变' => '範性形變',
+'范数' => '範數',
+'范文' => '範文',
+'范本' => '範本',
+'范畴' => '範疇',
+'范金' => '範金',
+'简并' => '簡併',
+'简朴' => '簡樸',
+'简短发' => '簡短發',
+'简筑翎' => '簡筑翎',
+'簡筑翎' => '簡筑翎',
+'簸荡' => '簸蕩',
+'签幐' => '籤幐',
+'签押' => '籤押',
+'签条' => '籤條',
+'签诗' => '籤詩',
+'吁天' => '籲天',
+'吁求' => '籲求',
+'吁请' => '籲請',
+'米沈' => '米瀋',
+'米谷' => '米穀',
+'米团' => '米糰',
+'米余' => '米餘',
+'米面' => '米麵',
+'粉签子' => '粉籤子',
+'粗制' => '粗製',
+'精制伏' => '精制伏',
+'精制住' => '精制住',
+'精制服' => '精制服',
+'精干' => '精幹',
+'精于' => '精於',
+'精准' => '精準',
+'精致' => '精緻',
+'精制' => '精製',
+'精炼' => '精鍊',
+'精辟' => '精闢',
+'精松' => '精鬆',
+'糊里糊涂' => '糊裡糊塗',
+'糕干' => '糕乾',
+'粪秽蔑面' => '糞穢衊面',
+'团子' => '糰子',
+'系列里' => '系列裡',
+'系里' => '系裡',
+'纪历' => '紀曆',
+'纪历史' => '紀歷史',
+'红后假说' => '紅后假說',
+'红绳系足' => '紅繩繫足',
+'红钟' => '紅鐘',
+'红发' => '紅髮',
+'纡回' => '紆迴',
+'纡余' => '紆餘',
+'纡郁' => '紆鬱',
+'纳征' => '納徵',
+'纯朴' => '純樸',
+'纸扎' => '紙紮',
+'素数里' => '素數裡',
+'素朴' => '素樸',
+'素发' => '素髮',
+'素面' => '素麵',
+'索馬里' => '索馬里',
+'索马里' => '索馬里',
+'索面' => '索麵',
+'紫姜' => '紫薑',
+'扎上' => '紮上',
+'扎下' => '紮下',
+'扎囮' => '紮囮',
+'扎好' => '紮好',
+'扎实' => '紮實',
+'扎寨' => '紮寨',
+'扎带子' => '紮帶子',
+'扎成' => '紮成',
+'扎根' => '紮根',
+'扎营' => '紮營',
+'扎紧' => '紮緊',
+'扎脚' => '紮腳',
+'扎裹' => '紮裹',
+'扎诈' => '紮詐',
+'扎起' => '紮起',
+'扎铁' => '紮鐵',
+'细不容发' => '細不容髮',
+'细如发' => '細如髮',
+'细致' => '細緻',
+'细炼' => '細鍊',
+'终于' => '終於',
+'组里' => '組裡',
+'结伴同游' => '結伴同遊',
+'结伙' => '結夥',
+'结扎' => '結紮',
+'结余' => '結餘',
+'结发' => '結髮',
+'绝于' => '絕於',
+'绞干' => '絞乾',
+'络腮胡' => '絡腮鬍',
+'给于' => '給於',
+'丝恩发怨' => '絲恩髮怨',
+'丝制' => '絲製',
+'丝发' => '絲髮',
+'绑扎' => '綁紮',
+'绥棱' => '綏稜',
+'捆扎' => '綑紮',
+'經有云' => '經有云',
+'经有云' => '經有云',
+'综合征' => '綜合徵',
+'绿发' => '綠髮',
+'维系' => '維繫',
+'绾发' => '綰髮',
+'纲鉴' => '綱鑑',
+'網球台' => '網球台',
+'网球台' => '網球台',
+'网站里' => '網站裡',
+'网里' => '網裡',
+'网志' => '網誌',
+'网游' => '網遊',
+'紧致' => '緊緻',
+'紧追不舍' => '緊追不捨',
+'绪余' => '緒餘',
+'线图里' => '線圖裡',
+'缉凶' => '緝兇',
+'编制法' => '編制法',
+'编采' => '編採',
+'编码表' => '編碼表',
+'编钟' => '編鐘',
+'编余' => '編餘',
+'编发' => '編髮',
+'缓征' => '緩徵',
+'缓冲' => '緩衝',
+'致密' => '緻密',
+'萦回' => '縈迴',
+'缜致' => '縝緻',
+'县里' => '縣裡',
+'县志' => '縣誌',
+'缝里' => '縫裡',
+'缝制' => '縫製',
+'缩栗' => '縮慄',
+'缩短发' => '縮短發',
+'纵欲' => '縱慾',
+'纤夫' => '縴夫',
+'纤手' => '縴手',
+'纤绳' => '縴繩',
+'总数只' => '總數只',
+'总数里' => '總數裡',
+'总裁制' => '總裁制',
+'繁复' => '繁複',
+'繁钟' => '繁鐘',
+'绷扒吊拷' => '繃扒弔拷',
+'绕梁' => '繞樑',
+'绘制' => '繪製',
+'系上。' => '繫上。',
+'系上了' => '繫上了',
+'系上安全' => '繫上安全',
+'系上红' => '繫上紅',
+'系上丝' => '繫上絲',
+'系上绳' => '繫上繩',
+'系上头' => '繫上頭',
+'系上黑' => '繫上黑',
+'系上,' => '繫上,',
+'系世' => '繫世',
+'系到' => '繫到',
+'系囚' => '繫囚',
+'系心' => '繫心',
+'系念' => '繫念',
+'系怀' => '繫懷',
+'系恋' => '繫戀',
+'系于' => '繫於',
+'系于一发' => '繫於一髮',
+'系着' => '繫着',
+'系结' => '繫結',
+'系紧' => '繫緊',
+'系绳' => '繫繩',
+'系累' => '繫纍',
+'系舟' => '繫舟',
+'系船' => '繫船',
+'系辞' => '繫辭',
+'系鞋带' => '繫鞋帶',
+'系风捕影' => '繫風捕影',
+'累囚' => '纍囚',
+'累堆' => '纍堆',
+'累瓦结绳' => '纍瓦結繩',
+'累绁' => '纍紲',
+'累臣' => '纍臣',
+'缠斗' => '纏鬥',
+'坛子' => '罈子',
+'坛坛罐罐' => '罈罈罐罐',
+'坛騞' => '罈騞',
+'置于' => '置於',
+'置言成范' => '置言成範',
+'罢于' => '罷於',
+'罗马历' => '羅馬曆',
+'罗马历代' => '羅馬歷代',
+'罗马历史' => '羅馬歷史',
+'羁系' => '羈繫',
+'美容美发' => '美容美髮',
+'美于' => '美於',
+'美丑' => '美醜',
+'美发学' => '美髮學',
+'美发师' => '美髮師',
+'美发店' => '美髮店',
+'美发业' => '美髮業',
+'美发沙龙' => '美髮沙龍',
+'美发馆' => '美髮館',
+'群丑' => '群醜',
+'羡余' => '羨餘',
+'义仆' => '義僕',
+'義联' => '義联',
+'翁子里' => '翁子里',
+'翕辟' => '翕闢',
+'翱游' => '翱遊',
+'翻涌' => '翻湧',
+'翻松' => '翻鬆',
+'老么' => '老么',
+'老干' => '老乾',
+'老仆' => '老僕',
+'老干部' => '老幹部',
+'老懞' => '老懞',
+'老于' => '老於',
+'老爷钟' => '老爺鐘',
+'老白干' => '老白乾',
+'老姜' => '老薑',
+'老板' => '老闆',
+'老面皮' => '老面皮',
+'考征' => '考徵',
+'耍斗' => '耍鬥',
+'耕获' => '耕穫',
+'耳余' => '耳餘',
+'耿于' => '耿於',
+'聊斋志异' => '聊齋志異',
+'圣人历' => '聖人曆',
+'圣后' => '聖后',
+'圣马尔谷日' => '聖馬爾谷日',
+'聖馬爾谷日' => '聖馬爾谷日',
+'聘雇' => '聘僱',
+'聚药雄蕊' => '聚葯雄蕊',
+'闻风后' => '聞風後',
+'联系' => '聯繫',
+'声母后' => '聲母後',
+'听于' => '聽於',
+'肉干' => '肉乾',
+'肉欲' => '肉慾',
+'肉丝面' => '肉絲麵',
+'肉羹面' => '肉羹麵',
+'肉松' => '肉鬆',
+'肉面' => '肉麵',
+'肚里' => '肚裡',
+'肝脏' => '肝臟',
+'肝郁' => '肝鬱',
+'股栗' => '股慄',
+'肥筑方言' => '肥筑方言',
+'肴馔' => '肴饌',
+'肺脏' => '肺臟',
+'胃脏' => '胃臟',
+'胃里' => '胃裡',
+'背地里' => '背地裡',
+'胎发' => '胎髮',
+'胜肽' => '胜肽',
+'胜键' => '胜鍵',
+'胡云' => '胡云',
+'胡子婴' => '胡子嬰',
+'胡子昂' => '胡子昂',
+'胡杰' => '胡杰',
+'胡朴安' => '胡樸安',
+'胡里胡涂' => '胡裡胡塗',
+'胰脏' => '胰臟',
+'能干休' => '能干休',
+'能干戈' => '能干戈',
+'能干扰' => '能干擾',
+'能干政' => '能干政',
+'能干涉' => '能干涉',
+'能干预' => '能干預',
+'能干' => '能幹',
+'能自制' => '能自制',
+'脉冲' => '脈衝',
+'脊梁背' => '脊梁背',
+'脊梁骨' => '脊梁骨',
+'脊梁' => '脊樑',
+'脱谷机' => '脫穀機',
+'脱发' => '脫髮',
+'脺脏' => '脺臟',
+'脾脏' => '脾臟',
+'腊之以为饵' => '腊之以為餌',
+'腊味' => '腊味',
+'腊毒' => '腊毒',
+'腊笔' => '腊筆',
+'腌臜' => '腌臢',
+'肾脏' => '腎臟',
+'腐干' => '腐乾',
+'腐余' => '腐餘',
+'腑脏' => '腑臟',
+'腕表' => '腕錶',
+'脑干' => '腦幹',
+'腰里' => '腰裡',
+'脚注' => '腳註',
+'脚炼' => '腳鍊',
+'肠脏' => '腸臟',
+'胶卷' => '膠捲',
+'膨松' => '膨鬆',
+'膵脏' => '膵臟',
+'臊子面' => '臊子麵',
+'脏器' => '臟器',
+'脏胸' => '臟胸',
+'脏腑' => '臟腑',
+'臣仆' => '臣僕',
+'卧游' => '臥遊',
+'臧谷亡羊' => '臧穀亡羊',
+'临潼斗宝' => '臨潼鬥寶',
+'自干五' => '自乾五',
+'自制一下' => '自制一下',
+'自制下来' => '自制下來',
+'自制不' => '自制不',
+'自制之力' => '自制之力',
+'自制之能' => '自制之能',
+'自制他' => '自制他',
+'自制伏' => '自制伏',
+'自制你' => '自制你',
+'自制力' => '自制力',
+'自制地' => '自制地',
+'自制她' => '自制她',
+'自制情' => '自制情',
+'自制我' => '自制我',
+'自制服' => '自制服',
+'自制的能' => '自制的能',
+'自制能力' => '自制能力',
+'自于' => '自於',
+'自然数里' => '自然數裡',
+'自由钟' => '自由鐘',
+'自制' => '自製',
+'自觉自愿' => '自覺自愿',
+'自夸' => '自誇',
+'臭气冲天' => '臭氣衝天',
+'至多' => '至多',
+'至多只' => '至多只',
+'至于' => '至於',
+'致于' => '致於',
+'台佟' => '臺佟',
+'台静农' => '臺靜農',
+'臻于' => '臻於',
+'舂谷' => '舂穀',
+'举手表' => '舉手表',
+'舉手表' => '舉手表',
+'舊庄' => '舊庄',
+'旧历' => '舊曆',
+'旧历史' => '舊歷史',
+'旧游' => '舊遊',
+'旧表' => '舊錶',
+'旧钟' => '舊鐘',
+'旧钟表' => '舊鐘錶',
+'舌干唇焦' => '舌乾唇焦',
+'舍入口' => '舍入口',
+'舒卷' => '舒捲',
+'舞后' => '舞后',
+'航海历' => '航海曆',
+'航海历史' => '航海歷史',
+'船只得' => '船只得',
+'船只有' => '船只有',
+'船只能' => '船只能',
+'船钟' => '船鐘',
+'船只' => '船隻',
+'舰只' => '艦隻',
+'色欲' => '色慾',
+'色长发' => '色長髮',
+'艳后' => '艷后',
+'艷后' => '艷后',
+'艸木丰丰' => '艸木丰丰',
+'芒果干' => '芒果乾',
+'花不要采' => '花不要採',
+'花卷' => '花捲',
+'花盆里' => '花盆裡',
+'花菴词选' => '花菴詞選',
+'花药' => '花葯',
+'花钟' => '花鐘',
+'花马吊嘴' => '花馬弔嘴',
+'花哄' => '花鬨',
+'苑里' => '苑裡',
+'若干' => '若干',
+'苦干' => '苦幹',
+'苦于' => '苦於',
+'苦里' => '苦裡',
+'苦斗' => '苦鬥',
+'苧麻' => '苧麻',
+'茂都淀' => '茂都澱',
+'范文同' => '范文同',
+'范文正公' => '范文正公',
+'范文澜' => '范文瀾',
+'范文瀾' => '范文瀾',
+'范文照' => '范文照',
+'范文程' => '范文程',
+'范文芳' => '范文芳',
+'范文藤' => '范文藤',
+'范文虎' => '范文虎',
+'范登堡' => '范登堡',
+'范賢惠' => '范賢惠',
+'范贤惠' => '范賢惠',
+'茅于軾' => '茅于軾',
+'茅于轼' => '茅于軾',
+'茶几' => '茶几',
+'茶余' => '茶餘',
+'茶面' => '茶麵',
+'草丛里' => '草叢裡',
+'草荐' => '草荐',
+'草席' => '草蓆',
+'荐居' => '荐居',
+'荐臻' => '荐臻',
+'荐饥' => '荐饑',
+'荷花淀' => '荷花澱',
+'庄里' => '莊裡',
+'茎干' => '莖幹',
+'莜面' => '莜麵',
+'莽荡' => '莽蕩',
+'菜干' => '菜乾',
+'菜坛' => '菜罈',
+'菜肴' => '菜餚',
+'菠棱菜' => '菠稜菜',
+'菠萝干' => '菠蘿乾',
+'华严钟' => '華嚴鐘',
+'万一只' => '萬一只',
+'萬一只' => '萬一只',
+'万个' => '萬個',
+'万周后' => '萬周後',
+'万天后' => '萬天後',
+'万年' => '萬年',
+'万年历' => '萬年曆',
+'万年历表' => '萬年曆錶',
+'万历' => '萬曆',
+'万历史' => '萬歷史',
+'万签插架' => '萬籤插架',
+'万扎' => '萬紮',
+'万象' => '萬象',
+'万只' => '萬隻',
+'万余' => '萬餘',
+'落于' => '落於',
+'落腮胡' => '落腮鬍',
+'落发' => '落髮',
+'叶叶琴' => '葉叶琴',
+'叶叶琹' => '葉叶琹',
+'叶阳后' => '葉陽后',
+'葉陽后' => '葉陽后',
+'葡萄干' => '葡萄乾',
+'董氏封发' => '董氏封髮',
+'葫芦里卖甚么药' => '葫蘆裡賣甚麼藥',
+'葬于' => '葬於',
+'蒙雾露' => '蒙霧露',
+'蒜发' => '蒜髮',
+'蒲席' => '蒲蓆',
+'蒸干' => '蒸乾',
+'蒸制' => '蒸製',
+'苍术' => '蒼朮',
+'苍发' => '蒼髮',
+'苍郁' => '蒼鬱',
+'蓄发' => '蓄髮',
+'蓄胡' => '蓄鬍',
+'蓄须' => '蓄鬚',
+'席子' => '蓆子',
+'蓊郁' => '蓊鬱',
+'蓬发' => '蓬髮',
+'蓬松' => '蓬鬆',
+'蓬松松' => '蓬鬆鬆',
+'参绥' => '蔘綏',
+'葱郁' => '蔥鬱',
+'荞麦面' => '蕎麥麵',
+'芸薹' => '蕓薹',
+'荡来荡去' => '蕩來蕩去',
+'荡女' => '蕩女',
+'荡妇' => '蕩婦',
+'荡寇' => '蕩寇',
+'荡平' => '蕩平',
+'荡气' => '蕩氣',
+'荡涤' => '蕩滌',
+'荡漾' => '蕩漾',
+'荡然' => '蕩然',
+'荡产' => '蕩產',
+'荡舟' => '蕩舟',
+'荡船' => '蕩船',
+'荡荡' => '蕩蕩',
+'萧参' => '蕭蔘',
+'薄幸' => '薄倖',
+'薄干' => '薄幹',
+'姜啤' => '薑啤',
+'姜是老的辣' => '薑是老的辣',
+'姜末' => '薑末',
+'姜桂' => '薑桂',
+'姜母' => '薑母',
+'姜汁' => '薑汁',
+'姜汤' => '薑湯',
+'姜片' => '薑片',
+'姜糖' => '薑糖',
+'姜丝' => '薑絲',
+'姜老辣' => '薑老辣',
+'姜茶' => '薑茶',
+'姜蓉' => '薑蓉',
+'姜饼' => '薑餅',
+'姜黄' => '薑黃',
+'薙发' => '薙髮',
+'薝卜' => '薝蔔',
+'熏心' => '薰心',
+'熏染' => '薰染',
+'熏沐' => '薰沐',
+'熏习' => '薰習',
+'熏陶' => '薰陶',
+'熏风' => '薰風',
+'熏香' => '薰香',
+'苧悴' => '薴悴',
+'苧烯' => '薴烯',
+'薴烯' => '薴烯',
+'借以' => '藉以',
+'借助' => '藉助',
+'借口' => '藉口',
+'借寇兵' => '藉寇兵',
+'借手' => '藉手',
+'借故' => '藉故',
+'借机' => '藉機',
+'借此' => '藉此',
+'借由' => '藉由',
+'借箸代筹' => '藉箸代籌',
+'借资' => '藉資',
+'蓝淀' => '藍澱',
+'藏于' => '藏於',
+'藏历' => '藏曆',
+'藏历史' => '藏歷史',
+'藏蒙歌儿' => '藏矇歌兒',
+'藤席' => '藤蓆',
+'藤制' => '藤製',
+'药签' => '藥籤',
+'药面儿' => '藥麵兒',
+'苏崑' => '蘇崑',
+'苏昆' => '蘇崑',
+'苹果' => '蘋果',
+'苹果干' => '蘋果乾',
+'兰溪市' => '蘭谿市',
+'萝卜' => '蘿蔔',
+'萝卜干' => '蘿蔔乾',
+'虎须' => '虎鬚',
+'虎斗' => '虎鬥',
+'处于' => '處於',
+'虚夸' => '虛誇',
+'号志' => '號誌',
+'虫部' => '虫部',
+'蚊动牛斗' => '蚊動牛鬥',
+'蛇发女妖' => '蛇髮女妖',
+'蜂后' => '蜂后',
+'蜂涌' => '蜂湧',
+'蜂准' => '蜂準',
+'蜜里调油' => '蜜裡調油',
+'蜡月' => '蜡月',
+'蜡祭' => '蜡祭',
+'蝎虎' => '蝎虎',
+'蝎蝎螫螫' => '蝎蝎螫螫',
+'蝎谮' => '蝎譖',
+'虾面' => '蝦麵',
+'虮虱相吊' => '蟣蝨相弔',
+'蛏干' => '蟶乾',
+'蚁后' => '蟻后',
+'蟻后' => '蟻后',
+'蚃干' => '蠁幹',
+'蛮干' => '蠻幹',
+'血拼' => '血拚',
+'血余' => '血餘',
+'行事历' => '行事曆',
+'行事历史' => '行事歷史',
+'行凶' => '行兇',
+'行家里手' => '行家裡手',
+'行于' => '行於',
+'卫后庄公' => '衛後莊公',
+'卫星钟' => '衛星鐘',
+'冲上' => '衝上',
+'冲下' => '衝下',
+'冲来' => '衝來',
+'冲倒' => '衝倒',
+'冲冠' => '衝冠',
+'冲出' => '衝出',
+'冲到' => '衝到',
+'冲刺' => '衝刺',
+'冲克' => '衝剋',
+'冲力' => '衝力',
+'冲劲' => '衝勁',
+'冲动' => '衝動',
+'冲去' => '衝去',
+'冲口' => '衝口',
+'冲垮' => '衝垮',
+'冲堂' => '衝堂',
+'冲坚陷阵' => '衝堅陷陣',
+'冲压' => '衝壓',
+'冲天炮' => '衝天炮',
+'冲州撞府' => '衝州撞府',
+'冲心' => '衝心',
+'冲掉' => '衝掉',
+'冲撞' => '衝撞',
+'冲击' => '衝擊',
+'冲散' => '衝散',
+'冲杀' => '衝殺',
+'冲决' => '衝決',
+'冲波' => '衝波',
+'冲浪' => '衝浪',
+'冲激' => '衝激',
+'冲然' => '衝然',
+'冲盹' => '衝盹',
+'冲着' => '衝着',
+'冲破' => '衝破',
+'冲程' => '衝程',
+'冲突' => '衝突',
+'冲线' => '衝線',
+'冲要' => '衝要',
+'冲起' => '衝起',
+'冲车' => '衝車',
+'冲进' => '衝進',
+'冲过' => '衝過',
+'冲量' => '衝量',
+'冲锋' => '衝鋒',
+'冲锋枪' => '衝鋒鎗',
+'冲陷' => '衝陷',
+'冲头阵' => '衝頭陣',
+'冲风' => '衝風',
+'衡鉴' => '衡鑑',
+'表面包' => '表面包',
+'衷于' => '衷於',
+'袋杆' => '袋桿',
+'袋里' => '袋裡',
+'袋表' => '袋錶',
+'袖里' => '袖裡',
+'被废后' => '被廢後',
+'被系上' => '被繫上',
+'被里' => '被裡',
+'被夸' => '被誇',
+'被发佯狂' => '被髮佯狂',
+'被发入山' => '被髮入山',
+'被发左衽' => '被髮左衽',
+'被发缨冠' => '被髮纓冠',
+'被发阳狂' => '被髮陽狂',
+'夹衣' => '袷衣',
+'夹裙' => '袷裙',
+'裁并' => '裁併',
+'裁制' => '裁製',
+'里水镇' => '裏水鎮',
+'里海' => '裏海',
+'里白' => '裏白',
+'里运河' => '裏運河',
+'补于' => '補於',
+'补注' => '補註',
+'装折' => '裝摺',
+'里勾外连' => '裡勾外連',
+'里屋' => '裡屋',
+'里层' => '裡層',
+'里带' => '裡帶',
+'里弦' => '裡弦',
+'里应外合' => '裡應外合',
+'里脊' => '裡脊',
+'里衣' => '裡衣',
+'里通外国' => '裡通外國',
+'里通外敌' => '裡通外敵',
+'里边' => '裡邊',
+'里间' => '裡間',
+'里面' => '裡面',
+'里面包' => '裡面包',
+'里头' => '裡頭',
+'制件' => '製件',
+'制作' => '製作',
+'制做' => '製做',
+'制备' => '製備',
+'制冰' => '製冰',
+'制冷' => '製冷',
+'制剂' => '製劑',
+'制取' => '製取',
+'制品' => '製品',
+'制图' => '製圖',
+'制得' => '製得',
+'制成' => '製成',
+'制毒' => '製毒',
+'制法' => '製法',
+'制浆' => '製漿',
+'制片' => '製片',
+'制版' => '製版',
+'制程' => '製程',
+'制糖' => '製糖',
+'制纸' => '製紙',
+'制药' => '製藥',
+'制衣' => '製衣',
+'制表键' => '製表鍵',
+'制贩' => '製販',
+'制造' => '製造',
+'制革' => '製革',
+'制鞋' => '製鞋',
+'制盐' => '製鹽',
+'复元音' => '複元音',
+'复函数' => '複函數',
+'复分数' => '複分數',
+'复分析' => '複分析',
+'复分解' => '複分解',
+'复列' => '複列',
+'复利' => '複利',
+'复印' => '複印',
+'复句' => '複句',
+'复合' => '複合',
+'复壁' => '複壁',
+'复姓' => '複姓',
+'复字键' => '複字鍵',
+'复审' => '複審',
+'复写' => '複寫',
+'复对数' => '複對數',
+'复平面' => '複平面',
+'复式' => '複式',
+'复数' => '複數',
+'复方' => '複方',
+'复本' => '複本',
+'复查' => '複查',
+'复次' => '複次',
+'复比' => '複比',
+'复决' => '複決',
+'复流' => '複流',
+'复测' => '複測',
+'复目' => '複目',
+'复眼' => '複眼',
+'复种' => '複種',
+'复线' => '複線',
+'复习' => '複習',
+'复色' => '複色',
+'复叶' => '複葉',
+'复制' => '複製',
+'复诊' => '複診',
+'复评' => '複評',
+'复词' => '複詞',
+'复试' => '複試',
+'复课' => '複課',
+'复议' => '複議',
+'复变函数' => '複變函數',
+'复赛' => '複賽',
+'复辅音' => '複輔音',
+'复述' => '複述',
+'复选' => '複選',
+'复钱' => '複錢',
+'复阅' => '複閱',
+'复杂' => '複雜',
+'复音' => '複音',
+'复韵' => '複韻',
+'褒赞' => '褒讚',
+'衬里' => '襯裡',
+'西井里' => '西井里',
+'西周钟' => '西周鐘',
+'西昆' => '西崑',
+'西岳' => '西嶽',
+'西历' => '西曆',
+'西历史' => '西歷史',
+'西湖里' => '西湖里',
+'西米谷' => '西米谷',
+'西西里' => '西西里',
+'西谷米' => '西谷米',
+'西游' => '西遊',
+'要自制' => '要自制',
+'要冲' => '要衝',
+'复信' => '覆信',
+'复核' => '覆核',
+'见于' => '見於',
+'见棱见角' => '見稜見角',
+'见素抱朴' => '見素抱樸',
+'见钟不打' => '見鐘不打',
+'规范' => '規範',
+'视于' => '視於',
+'观采' => '觀採',
+'角抵' => '角牴',
+'角落发' => '角落發',
+'角落里' => '角落裡',
+'觚棱' => '觚稜',
+'解雇' => '解僱',
+'解封后' => '解封後',
+'解铃仍须系铃人' => '解鈴仍須繫鈴人',
+'解铃还须系铃人' => '解鈴還須繫鈴人',
+'解发佯狂' => '解髮佯狂',
+'触须' => '觸鬚',
+'言云' => '言云',
+'言大而夸' => '言大而夸',
+'言里' => '言裡',
+'言辩而确' => '言辯而确',
+'订制' => '訂製',
+'计划' => '計劃',
+'计时表' => '計時錶',
+'托了' => '託了',
+'托事' => '託事',
+'托交' => '託交',
+'托人' => '託人',
+'托付' => '託付',
+'托克逊' => '託克遜',
+'托儿' => '託兒',
+'托古讽今' => '託古諷今',
+'托名' => '託名',
+'托命' => '託命',
+'托咎' => '託咎',
+'托梦' => '託夢',
+'托孤' => '託孤',
+'托庇' => '託庇',
+'托故' => '託故',
+'托疾' => '託疾',
+'托病' => '託病',
+'托管' => '託管',
+'托言' => '託言',
+'托词' => '託詞',
+'托买' => '託買',
+'托卖' => '託賣',
+'托身' => '託身',
+'托辞' => '託辭',
+'托运' => '託運',
+'托过' => '託過',
+'托里县' => '託里縣',
+'托附' => '託附',
+'许愿起经' => '許愿起經',
+'許聖杰' => '許聖杰',
+'注上' => '註上',
+'注册' => '註冊',
+'注失' => '註失',
+'注定' => '註定',
+'注明' => '註明',
+'注标' => '註標',
+'注生娘娘' => '註生娘娘',
+'注疏' => '註疏',
+'注脚' => '註腳',
+'注解' => '註解',
+'注记' => '註記',
+'注译' => '註譯',
+'注销' => '註銷',
+'注:' => '註:',
+'证谏' => '証諫',
+'评断发' => '評斷發',
+'评注' => '評註',
+'评鉴' => '評鑑',
+'词干' => '詞幹',
+'词汇' => '詞彙',
+'词余' => '詞餘',
+'询于' => '詢於',
+'试制' => '試製',
+'詩云' => '詩云',
+'诗云' => '詩云',
+'诗赞' => '詩讚',
+'诗钟' => '詩鐘',
+'诗余' => '詩餘',
+'话里有话' => '話裡有話',
+'该钟' => '該鐘',
+'详征博引' => '詳徵博引',
+'详注' => '詳註',
+'诔赞' => '誄讚',
+'夸下海口' => '誇下海口',
+'夸了' => '誇了',
+'夸人' => '誇人',
+'夸他' => '誇他',
+'夸你' => '誇你',
+'夸来夸去' => '誇來誇去',
+'夸别' => '誇別',
+'夸功' => '誇功',
+'夸胜道强' => '誇勝道強',
+'夸口' => '誇口',
+'夸嘴' => '誇嘴',
+'夸多斗靡' => '誇多鬥靡',
+'夸大' => '誇大',
+'夸她' => '誇她',
+'夸姣' => '誇姣',
+'夸官' => '誇官',
+'夸容' => '誇容',
+'夸张' => '誇張',
+'夸强说会' => '誇強說會',
+'夸得' => '誇得',
+'夸成' => '誇成',
+'夸我' => '誇我',
+'夸才' => '誇才',
+'夸毗' => '誇毗',
+'夸海口' => '誇海口',
+'夸奖' => '誇獎',
+'夸示' => '誇示',
+'夸称' => '誇稱',
+'夸耀' => '誇耀',
+'夸能' => '誇能',
+'夸能斗智' => '誇能鬥智',
+'夸诩' => '誇詡',
+'夸夸' => '誇誇',
+'夸夸其谈' => '誇誇其談',
+'夸诞' => '誇誕',
+'夸说' => '誇說',
+'夸赞' => '誇讚',
+'夸起' => '誇起',
+'夸辩' => '誇辯',
+'夸过' => '誇過',
+'夸饰' => '誇飾',
+'夸丽' => '誇麗',
+'志哀' => '誌哀',
+'志喜' => '誌喜',
+'志庆' => '誌慶',
+'志异' => '誌異',
+'认准' => '認準',
+'诱奸' => '誘姦',
+'语云' => '語云',
+'语汇' => '語彙',
+'語有云' => '語有云',
+'语有云' => '語有云',
+'语法里' => '語法裡',
+'语里' => '語裡',
+'诚征' => '誠徵',
+'诚朴' => '誠樸',
+'诬蔑' => '誣衊',
+'说不准' => '說不準',
+'谁干的' => '誰幹的',
+'课征' => '課徵',
+'课余' => '課餘',
+'调准' => '調準',
+'调制' => '調製',
+'调表' => '調錶',
+'调钟表' => '調鐘錶',
+'谈征' => '談徵',
+'请君入瓮' => '請君入甕',
+'请托' => '請託',
+'咨询' => '諮詢',
+'诸余' => '諸餘',
+'谋干' => '謀幹',
+'謝杰' => '謝杰',
+'谢杰' => '謝杰',
+'谢华后' => '謝華后',
+'谬采虚声' => '謬採虛聲',
+'谬赞' => '謬讚',
+'謷丑' => '謷醜',
+'謹愿' => '謹愿',
+'谨愿' => '謹愿',
+'哗噪' => '譁噪',
+'哗嚣' => '譁囂',
+'哗然' => '譁然',
+'哗众' => '譁眾',
+'哗笑' => '譁笑',
+'哗变' => '譁變',
+'噪诈' => '譟詐',
+'警世钟' => '警世鐘',
+'警报钟' => '警報鐘',
+'警示钟' => '警示鐘',
+'警钟' => '警鐘',
+'译制' => '譯製',
+'译注' => '譯註',
+'护发' => '護髮',
+'变征' => '變徵',
+'变丑' => '變醜',
+'仇隙' => '讎隙',
+'赞一个' => '讚一個',
+'赞不绝口' => '讚不絕口',
+'赞佩' => '讚佩',
+'赞呗' => '讚唄',
+'赞叹' => '讚嘆',
+'赞扬' => '讚揚',
+'赞乐' => '讚樂',
+'赞歌' => '讚歌',
+'赞美' => '讚美',
+'赞羡' => '讚羨',
+'赞许' => '讚許',
+'赞词' => '讚詞',
+'赞誉' => '讚譽',
+'赞赏' => '讚賞',
+'赞辞' => '讚辭',
+'赞颂' => '讚頌',
+'谷子敬' => '谷子敬',
+'豆干' => '豆乾',
+'豆腐干' => '豆腐乾',
+'竖起脊梁' => '豎起脊梁',
+'丰度' => '豐度',
+'丰滨' => '豐濱',
+'丰滨乡' => '豐濱鄉',
+'丰台' => '豐臺',
+'豔后' => '豔后',
+'象征' => '象徵',
+'贪欲' => '貪慾',
+'贵价' => '貴价',
+'貴子里' => '貴子里',
+'贵干' => '貴幹',
+'贵征' => '貴徵',
+'买凶' => '買兇',
+'买断发' => '買斷發',
+'費米面' => '費米面',
+'费米面' => '費米面',
+'贻范' => '貽範',
+'賈后' => '賈后',
+'贾后' => '賈后',
+'赈饥' => '賑饑',
+'赏赞' => '賞讚',
+'賢后' => '賢后',
+'贤后' => '賢后',
+'卖断发' => '賣斷發',
+'賦范' => '賦范',
+'赋范' => '賦范',
+'质数里' => '質數裡',
+'质朴' => '質樸',
+'赌后' => '賭后',
+'赌台' => '賭檯',
+'赌斗' => '賭鬥',
+'购并' => '購併',
+'购买欲' => '購買慾',
+'赢余' => '贏餘',
+'赤术' => '赤朮',
+'赤绳系足' => '赤繩繫足',
+'走回路' => '走回路',
+'起哄' => '起鬨',
+'超级杯' => '超級盃',
+'超赞' => '超讚',
+'赶制' => '趕製',
+'赶面棍' => '趕麵棍',
+'赵威后' => '趙威后',
+'赵惠后' => '趙惠后',
+'赵治勋' => '趙治勳',
+'趱干' => '趲幹',
+'足于' => '足於',
+'足球台' => '足球台',
+'跌扑' => '跌扑',
+'路图里' => '路圖裡',
+'路签' => '路籤',
+'路面' => '路面',
+'跳梁小丑' => '跳樑小丑',
+'跳荡' => '跳蕩',
+'局蹐' => '跼蹐',
+'局躅' => '跼躅',
+'踡局' => '踡跼',
+'逾闲' => '踰閑',
+'蹒局' => '蹣跼',
+'蹪于' => '蹪於',
+'蹭棱子' => '蹭稜子',
+'躁郁' => '躁鬱',
+'身于' => '身於',
+'身体发肤' => '身體髮膚',
+'躯干' => '軀幹',
+'车库里' => '車庫裡',
+'车站里' => '車站裡',
+'车里' => '車裡',
+'车里雅宾斯克' => '車里雅賓斯克',
+'轨范' => '軌範',
+'轩辟' => '軒闢',
+'较于' => '較於',
+'挽曲' => '輓曲',
+'挽歌' => '輓歌',
+'挽联' => '輓聯',
+'挽词' => '輓詞',
+'挽诗' => '輓詩',
+'挽车' => '輓車',
+'挽输' => '輓輸',
+'挽辞' => '輓辭',
+'轻于' => '輕於',
+'轻松' => '輕鬆',
+'轻松松' => '輕鬆鬆',
+'轮奸' => '輪姦',
+'轮回' => '輪迴',
+'转向往' => '轉向往',
+'转托' => '轉託',
+'转斗千里' => '轉鬥千里',
+'辛丑' => '辛丑',
+'辟谷' => '辟穀',
+'辣面' => '辣麵',
+'办公台' => '辦公檯',
+'辞汇' => '辭彙',
+'辫发' => '辮髮',
+'辩斗' => '辯鬥',
+'辰溪县' => '辰谿縣',
+'农历' => '農曆',
+'农历史' => '農歷史',
+'农民历' => '農民曆',
+'农民历史' => '農民歷史',
+'迂回' => '迂迴',
+'近日无仇' => '近日無讎',
+'返朴' => '返樸',
+'迥然回异' => '迥然迴異',
+'迫于' => '迫於',
+'回光返照' => '迴光返照',
+'回圈' => '迴圈',
+'回廊' => '迴廊',
+'回形夹' => '迴形夾',
+'回文序列' => '迴文序列',
+'回文数' => '迴文數',
+'回文构词' => '迴文構詞',
+'回文结构' => '迴文結構',
+'回文联' => '迴文聯',
+'回文诗' => '迴文詩',
+'回文锦' => '迴文錦',
+'回旋' => '迴旋',
+'回环' => '迴環',
+'回纹针' => '迴紋針',
+'回绕' => '迴繞',
+'回翔' => '迴翔',
+'回肠' => '迴腸',
+'回肠荡气' => '迴腸盪氣',
+'回荡' => '迴蕩',
+'回诵' => '迴誦',
+'回路' => '迴路',
+'回转' => '迴轉',
+'回递性' => '迴遞性',
+'回避' => '迴避',
+'回銮' => '迴鑾',
+'回响' => '迴響',
+'回风' => '迴風',
+'迷于' => '迷於',
+'迷蒙' => '迷濛',
+'追凶' => '追兇',
+'退伙' => '退夥',
+'逆钟' => '逆鐘',
+'逆钟向' => '逆鐘向',
+'逆风后' => '逆風後',
+'逋发' => '逋髮',
+'逍遥游' => '逍遙遊',
+'透辟' => '透闢',
+'这出世' => '這出世',
+'这出乎' => '這出乎',
+'这出人' => '這出人',
+'这出版' => '這出版',
+'这出现' => '這出現',
+'这出生' => '這出生',
+'这出色' => '這出色',
+'这出身' => '這出身',
+'这出道' => '這出道',
+'这只不' => '這只不',
+'这只不过' => '這只不過',
+'这只允' => '這只允',
+'这只包括' => '這只包括',
+'这只可' => '這只可',
+'这只在' => '這只在',
+'这只容' => '這只容',
+'这只应' => '這只應',
+'这只采' => '這只採',
+'这只是' => '這只是',
+'这只会' => '這只會',
+'这只比' => '這只比',
+'这只用' => '這只用',
+'这只能' => '這只能',
+'这只限' => '這只限',
+'这只需' => '這只需',
+'这只须' => '這只須',
+'这伙人' => '這夥人',
+'这里' => '這裡',
+'这钟' => '這鐘',
+'这只' => '這隻',
+'这么干' => '這麼幹',
+'这出' => '這齣',
+'通奸' => '通姦',
+'通心面' => '通心麵',
+'通于' => '通於',
+'通历' => '通曆',
+'通历史' => '通歷史',
+'通鉴' => '通鑑',
+'逞凶斗狠' => '逞兇鬥狠',
+'造钟' => '造鐘',
+'连三并四' => '連三併四',
+'连采' => '連採',
+'连发式' => '連發式',
+'连系' => '連繫',
+'周游' => '週遊',
+'进两出' => '進兩出',
+'进制' => '進制',
+'進制' => '進制',
+'逼并' => '逼併',
+'遇风后' => '遇風後',
+'游了' => '遊了',
+'游人' => '遊人',
+'游仙' => '遊仙',
+'游伴' => '遊伴',
+'游侠' => '遊俠',
+'游冶' => '遊冶',
+'游刃' => '遊刃',
+'游动' => '遊動',
+'游园' => '遊園',
+'游子' => '遊子',
+'游学' => '遊學',
+'游客' => '遊客',
+'游宦' => '遊宦',
+'游山玩水' => '遊山玩水',
+'游必有方' => '遊必有方',
+'游憩' => '遊憩',
+'游戏' => '遊戲',
+'游戏里' => '遊戲裡',
+'游手好闲' => '遊手好閒',
+'游方' => '遊方',
+'游星' => '遊星',
+'游乐' => '遊樂',
+'游标卡尺' => '遊標卡尺',
+'游历' => '遊歷',
+'游民' => '遊民',
+'游河' => '遊河',
+'游牧' => '遊牧',
+'游猎' => '遊獵',
+'游玩' => '遊玩',
+'游目骋怀' => '遊目騁懷',
+'游程' => '遊程',
+'游丝' => '遊絲',
+'游美学务' => '遊美學務',
+'游兴' => '遊興',
+'游船' => '遊船',
+'游艇' => '遊艇',
+'游荡' => '遊蕩',
+'游艺' => '遊藝',
+'游行' => '遊行',
+'游街' => '遊街',
+'游览' => '遊覽',
+'游记' => '遊記',
+'游说' => '遊說',
+'游资' => '遊資',
+'游走' => '遊走',
+'游踪' => '遊蹤',
+'游轮' => '遊輪',
+'游逛' => '遊逛',
+'游错' => '遊錯',
+'游骑兵' => '遊騎兵',
+'游魂' => '遊魂',
+'过于' => '過於',
+'过水面' => '過水麵',
+'遏制' => '遏制',
+'道范' => '道範',
+'逊于' => '遜於',
+'递回' => '遞迴',
+'远游' => '遠遊',
+'遨游' => '遨遊',
+'适于' => '適於',
+'遮丑' => '遮醜',
+'迁于' => '遷於',
+'选手表明' => '選手表明',
+'选手表决' => '選手表決',
+'选手表现' => '選手表現',
+'选手表示' => '選手表示',
+'选手表达' => '選手表達',
+'遗传钟' => '遺傳鐘',
+'遗范' => '遺範',
+'遗迹' => '遺蹟',
+'辽沈' => '遼瀋',
+'邀天之幸' => '邀天之倖',
+'还采' => '還採',
+'还冲' => '還衝',
+'邋里邋遢' => '邋裡邋遢',
+'那只不过' => '那只不過',
+'那只包括' => '那只包括',
+'那只可' => '那只可',
+'那只在' => '那只在',
+'那只怕' => '那只怕',
+'那只应' => '那只應',
+'那只是' => '那只是',
+'那只会' => '那只會',
+'那只有' => '那只有',
+'那只比' => '那只比',
+'那只用' => '那只用',
+'那只能' => '那只能',
+'那只限' => '那只限',
+'那只需' => '那只需',
+'那只须' => '那只須',
+'那卷' => '那捲',
+'那里' => '那裡',
+'那只' => '那隻',
+'邱于庭' => '邱于庭',
+'郁朴' => '郁樸',
+'郁郁菲菲' => '郁郁菲菲',
+'郁郁青青' => '郁郁青青',
+'郊游' => '郊遊',
+'郘钟' => '郘鐘',
+'部子里' => '部子里',
+'部落发' => '部落發',
+'郭后' => '郭后',
+'都市里' => '都市裡',
+'都于' => '都於',
+'乡愿' => '鄉愿',
+'鄉愿' => '鄉愿',
+'郑凯云' => '鄭凱云',
+'鄭凱云' => '鄭凱云',
+'配制饲料' => '配制飼料',
+'配图里' => '配圖裡',
+'配制' => '配製',
+'酒帘' => '酒帘',
+'酒气冲天' => '酒氣衝天',
+'酒坛' => '酒罈',
+'酒肴' => '酒肴',
+'酒曲' => '酒麴',
+'酒麹' => '酒麴',
+'酥松' => '酥鬆',
+'酸姜' => '酸薑',
+'腌制' => '醃製',
+'醇朴' => '醇樸',
+'醉于' => '醉於',
+'醋坛' => '醋罈',
+'丑丫头' => '醜丫頭',
+'丑事' => '醜事',
+'丑人' => '醜人',
+'丑侪' => '醜儕',
+'丑八怪' => '醜八怪',
+'丑剌剌' => '醜剌剌',
+'丑剧' => '醜劇',
+'丑化' => '醜化',
+'丑史' => '醜史',
+'丑名' => '醜名',
+'丑吒' => '醜吒',
+'丑地' => '醜地',
+'丑夷' => '醜夷',
+'丑女' => '醜女',
+'丑女效颦' => '醜女效顰',
+'丑奴儿' => '醜奴兒',
+'丑妇' => '醜婦',
+'丑媳' => '醜媳',
+'丑媳妇' => '醜媳婦',
+'丑小鸭' => '醜小鴨',
+'丑巴怪' => '醜巴怪',
+'丑徒' => '醜徒',
+'丑恶' => '醜惡',
+'丑态' => '醜態',
+'丑毙了' => '醜斃了',
+'丑于' => '醜於',
+'丑末' => '醜末',
+'丑样' => '醜樣',
+'丑死' => '醜死',
+'丑比' => '醜比',
+'丑沮' => '醜沮',
+'丑男' => '醜男',
+'丑闻' => '醜聞',
+'丑声' => '醜聲',
+'丑声远播' => '醜聲遠播',
+'丑脸' => '醜臉',
+'丑虏' => '醜虜',
+'丑行' => '醜行',
+'丑言' => '醜言',
+'丑诋' => '醜詆',
+'丑话' => '醜話',
+'丑语' => '醜語',
+'丑贼生' => '醜賊生',
+'丑辞' => '醜辭',
+'丑辱' => '醜辱',
+'丑逆' => '醜逆',
+'丑丑' => '醜醜',
+'丑陋' => '醜陋',
+'丑杂' => '醜雜',
+'丑头怪脸' => '醜頭怪臉',
+'丑类' => '醜類',
+'酿制' => '釀製',
+'衅钟' => '釁鐘',
+'采石之役' => '采石之役',
+'采石之战' => '采石之戰',
+'采石之戰' => '采石之戰',
+'采石矶' => '采石磯',
+'采石磯' => '采石磯',
+'里海大学' => '里海大學',
+'里海大學' => '里海大學',
+'里海崖' => '里海崖',
+'里海茨' => '里海茨',
+'里铺' => '里舖',
+'重回' => '重回',
+'重折' => '重摺',
+'重于' => '重於',
+'重罗面' => '重羅麵',
+'重制' => '重製',
+'重复' => '重複',
+'重托' => '重託',
+'重游' => '重遊',
+'野姜' => '野薑',
+'野游' => '野遊',
+'量不准' => '量不準',
+'厘改' => '釐改',
+'厘整' => '釐整',
+'厘正' => '釐正',
+'厘毫' => '釐毫',
+'厘清' => '釐清',
+'厘订' => '釐訂',
+'厘革' => '釐革',
+'金仆姑' => '金僕姑',
+'金城里' => '金城里',
+'金范' => '金範',
+'金圣叹' => '金聖歎',
+'金表情' => '金表情',
+'金表态' => '金表態',
+'金表扬' => '金表揚',
+'金表明' => '金表明',
+'金表演' => '金表演',
+'金表现' => '金表現',
+'金表示' => '金表示',
+'金表达' => '金表達',
+'金表露' => '金表露',
+'金表面' => '金表面',
+'金装玉里' => '金裝玉裡',
+'金溪县' => '金谿縣',
+'金链' => '金鍊',
+'金钟' => '金鐘',
+'金发' => '金髮',
+'钩心斗角' => '鈎心鬥角',
+'银朱' => '銀硃',
+'银发' => '銀髮',
+'铜范' => '銅範',
+'铜制' => '銅製',
+'铜钟' => '銅鐘',
+'铯钟' => '銫鐘',
+'铝制' => '鋁製',
+'钢之炼金术师' => '鋼之鍊金術師',
+'钢梁' => '鋼樑',
+'钢制' => '鋼製',
+'录制' => '錄製',
+'锤炼' => '錘鍊',
+'钱谷' => '錢穀',
+'钱范' => '錢範',
+'锦卤' => '錦滷',
+'锦绣花园' => '錦綉花園',
+'表停' => '錶停',
+'表冠' => '錶冠',
+'表带' => '錶帶',
+'表快' => '錶快',
+'表慢' => '錶慢',
+'表板' => '錶板',
+'表王' => '錶王',
+'表盘' => '錶盤',
+'表蒙子' => '錶蒙子',
+'表转' => '錶轉',
+'表速' => '錶速',
+'表针' => '錶針',
+'炼冶' => '鍊冶',
+'炼句' => '鍊句',
+'炼字' => '鍊字',
+'炼师' => '鍊師',
+'炼度' => '鍊度',
+'炼形' => '鍊形',
+'炼气' => '鍊氣',
+'炼汞' => '鍊汞',
+'炼石' => '鍊石',
+'链表' => '鍊表',
+'炼贫' => '鍊貧',
+'炼金术' => '鍊金術',
+'锲而不舍' => '鍥而不捨',
+'镰仓' => '鎌倉',
+'镜图里' => '鏡圖裡',
+'锈病' => '鏽病',
+'锈菌' => '鏽菌',
+'锈蚀' => '鏽蝕',
+'钟上' => '鐘上',
+'钟下' => '鐘下',
+'钟不' => '鐘不',
+'钟不扣不鸣' => '鐘不扣不鳴',
+'钟不撞不鸣' => '鐘不撞不鳴',
+'钟不敲不响' => '鐘不敲不響',
+'钟不空则哑' => '鐘不空則啞',
+'钟乳洞' => '鐘乳洞',
+'钟乳石' => '鐘乳石',
+'钟停' => '鐘停',
+'钟匠' => '鐘匠',
+'钟口' => '鐘口',
+'钟在寺里' => '鐘在寺裡',
+'钟塔' => '鐘塔',
+'钟壁' => '鐘壁',
+'钟太' => '鐘太',
+'钟好' => '鐘好',
+'钟山' => '鐘山',
+'钟左右' => '鐘左右',
+'钟差' => '鐘差',
+'钟座' => '鐘座',
+'钟形' => '鐘形',
+'钟形虫' => '鐘形蟲',
+'钟律' => '鐘律',
+'钟快' => '鐘快',
+'钟慢' => '鐘慢',
+'钟摆' => '鐘擺',
+'钟敲' => '鐘敲',
+'钟有' => '鐘有',
+'钟楼' => '鐘樓',
+'钟模' => '鐘模',
+'钟没' => '鐘沒',
+'钟漏' => '鐘漏',
+'钟王' => '鐘王',
+'钟琴' => '鐘琴',
+'钟发音' => '鐘發音',
+'钟的' => '鐘的',
+'钟盘' => '鐘盤',
+'钟相' => '鐘相',
+'钟磬' => '鐘磬',
+'钟纽' => '鐘紐',
+'钟罩' => '鐘罩',
+'钟声' => '鐘聲',
+'钟腰' => '鐘腰',
+'钟花' => '鐘花',
+'钟螺' => '鐘螺',
+'钟行' => '鐘行',
+'钟表面' => '鐘表面',
+'钟被' => '鐘被',
+'钟调' => '鐘調',
+'钟身' => '鐘身',
+'钟速' => '鐘速',
+'钟表' => '鐘錶',
+'钟表停' => '鐘錶停',
+'钟表快' => '鐘錶快',
+'钟表慢' => '鐘錶慢',
+'钟表王' => '鐘錶王',
+'钟表盘' => '鐘錶盤',
+'钟表速' => '鐘錶速',
+'钟关' => '鐘關',
+'钟陈列' => '鐘陳列',
+'钟面' => '鐘面',
+'钟响' => '鐘響',
+'钟顶' => '鐘頂',
+'钟头' => '鐘頭',
+'钟体' => '鐘體',
+'钟鸣' => '鐘鳴',
+'钟点' => '鐘點',
+'钟鼎' => '鐘鼎',
+'钟鼓' => '鐘鼓',
+'铁锈' => '鐵鏽',
+'铁钟' => '鐵鐘',
+'铸钟' => '鑄鐘',
+'鉴别' => '鑑別',
+'鉴古' => '鑑古',
+'鉴定' => '鑑定',
+'鉴察' => '鑑察',
+'鉴往知来' => '鑑往知來',
+'鉴戒' => '鑑戒',
+'鉴湖' => '鑑湖',
+'鉴藏' => '鑑藏',
+'鉴谅' => '鑑諒',
+'鉴证' => '鑑證',
+'鉴识' => '鑑識',
+'鉴赏' => '鑑賞',
+'鉴于' => '鑒於',
+'长几' => '長几',
+'长于' => '長於',
+'长历' => '長曆',
+'长历史' => '長歷史',
+'长发公主' => '長髮公主',
+'长发妹' => '長髮妹',
+'长发姑娘' => '長髮姑娘',
+'长胡' => '長鬍',
+'门帘' => '門帘',
+'门吊儿' => '門弔兒',
+'门里' => '門裡',
+'闫怀礼' => '閆懷禮',
+'開山辟谷' => '開山辟谷',
+'开山辟谷' => '開山闢谷',
+'开吊' => '開弔',
+'开征' => '開徵',
+'开采' => '開採',
+'开发' => '開發',
+'开辟' => '開闢',
+'开哄' => '開鬨',
+'闲邪' => '閑邪',
+'闲情逸致' => '閒情逸緻',
+'闲荡' => '閒蕩',
+'闲游' => '閒遊',
+'间不容发' => '間不容髮',
+'间里' => '間裡',
+'闵采尔' => '閔採爾',
+'阁府' => '閤府',
+'闺范' => '閨範',
+'阃范' => '閫範',
+'闯荡' => '闖蕩',
+'闯炼' => '闖鍊',
+'关系' => '關係',
+'关弓与我确' => '關弓與我确',
+'关于' => '關於',
+'辟佛' => '闢佛',
+'辟作' => '闢作',
+'辟划' => '闢劃',
+'辟土' => '闢土',
+'辟地' => '闢地',
+'辟室' => '闢室',
+'辟建' => '闢建',
+'辟为' => '闢為',
+'辟田' => '闢田',
+'辟筑' => '闢築',
+'辟谣' => '闢謠',
+'辟辟' => '闢辟',
+'辟邪以律' => '闢邪以律',
+'防水表' => '防水錶',
+'防御' => '防禦',
+'防范' => '防範',
+'防锈' => '防鏽',
+'阻于' => '阻於',
+'阿里' => '阿里',
+'附于' => '附於',
+'附注' => '附註',
+'限制' => '限制',
+'院里' => '院裡',
+'陪吊' => '陪弔',
+'阴干' => '陰乾',
+'阴历' => '陰曆',
+'阴历史' => '陰歷史',
+'阴沟里翻船' => '陰溝裡翻船',
+'阴郁' => '陰鬱',
+'陳冲' => '陳冲',
+'陳士杰' => '陳士杰',
+'陈升' => '陳昇',
+'陈有后' => '陳有后',
+'陳有后' => '陳有后',
+'陈杰' => '陳杰',
+'陳杰' => '陳杰',
+'陈炼' => '陳鍊',
+'陆游' => '陸遊',
+'阳春面' => '陽春麵',
+'阳历' => '陽曆',
+'阳历史' => '陽歷史',
+'阳谷' => '陽穀',
+'隆准许' => '隆准許',
+'隆准' => '隆準',
+'随于' => '隨於',
+'隐占' => '隱佔',
+'隐几' => '隱几',
+'隐于' => '隱於',
+'只字' => '隻字',
+'只影' => '隻影',
+'只手遮天' => '隻手遮天',
+'只眼' => '隻眼',
+'只言片语' => '隻言片語',
+'只身' => '隻身',
+'雄斗斗' => '雄斗斗',
+'雅范' => '雅範',
+'集数里' => '集數裡',
+'集于' => '集於',
+'集里' => '集裡',
+'集游法' => '集遊法',
+'雕梁画栋' => '雕樑畫棟',
+'双折射' => '雙折射',
+'双折' => '雙摺',
+'双胜类' => '雙胜類',
+'双雕' => '雙鵰',
+'杂合面儿' => '雜合麵兒',
+'杂志' => '雜誌',
+'杂面' => '雜麵',
+'鸡吵鹅斗' => '雞吵鵝鬥',
+'鸡奸' => '雞姦',
+'鸡争鹅斗' => '雞爭鵝鬥',
+'鸡丝' => '雞絲',
+'鸡丝面' => '雞絲麵',
+'鸡腿面' => '雞腿麵',
+'鸡蛋里挑骨头' => '雞蛋裡挑骨頭',
+'鸡只' => '雞隻',
+'离于' => '離於',
+'难舍' => '難捨',
+'难于' => '難於',
+'雨蒙蒙' => '雨濛濛',
+'雪窗萤几' => '雪窗螢几',
+'雪里' => '雪裡',
+'雪里红' => '雪裡紅',
+'雪里蕻' => '雪裡蕻',
+'云吞' => '雲吞',
+'云笈七签' => '雲笈七籤',
+'云里雾里' => '雲裡霧裡',
+'云游' => '雲遊',
+'云须' => '雲鬚',
+'零个' => '零個',
+'零周后' => '零周後',
+'零天后' => '零天後',
+'零年' => '零年',
+'零只' => '零隻',
+'零余' => '零餘',
+'电子表格' => '電子表格',
+'电子制表' => '電子製表',
+'电子钟' => '電子鐘',
+'电子钟表' => '電子鐘錶',
+'电影后' => '電影後',
+'电影里' => '電影裡',
+'电梯里' => '電梯裡',
+'电波钟' => '電波鐘',
+'电码表' => '電碼表',
+'电冲' => '電衝',
+'电视台风' => '電視台風',
+'电视里' => '電視裡',
+'电表' => '電錶',
+'电钟' => '電鐘',
+'震栗' => '震慄',
+'霉气冲天' => '霉氣衝天',
+'沾化' => '霑化',
+'沾益' => '霑益',
+'雾里' => '霧裡',
+'露丑' => '露醜',
+'霁范' => '霽範',
+'灵昆' => '靈崑',
+'青山一发' => '青山一髮',
+'青霉' => '青黴',
+'非常准' => '非常準',
+'面包住' => '面包住',
+'面包含' => '面包含',
+'面包围' => '面包圍',
+'面包容' => '面包容',
+'面包庇' => '面包庇',
+'面包厢' => '面包廂',
+'面包抄' => '面包抄',
+'面包括' => '面包括',
+'面包揽' => '面包攬',
+'面包涵' => '面包涵',
+'面包管' => '面包管',
+'面包扎' => '面包紮',
+'面包罗' => '面包羅',
+'面包着' => '面包著',
+'面包藏' => '面包藏',
+'面包装' => '面包裝',
+'面包裹' => '面包裹',
+'面包起' => '面包起',
+'面包办' => '面包辦',
+'面店铺' => '面店鋪',
+'面条目' => '面條目',
+'面條目' => '面條目',
+'面粉碎' => '面粉碎',
+'面粉红' => '面粉紅',
+'面食饭' => '面食飯',
+'鞋里' => '鞋裡',
+'鞣制' => '鞣製',
+'秋千' => '鞦韆',
+'鞭辟入里' => '鞭辟入裡',
+'韦席' => '韋蓆',
+'韩国制' => '韓國製',
+'韩制' => '韓製',
+'音不准' => '音不準',
+'音准' => '音準',
+'音声如钟' => '音聲如鐘',
+'韶山冲' => '韶山沖',
+'响钟' => '響鐘',
+'頁面' => '頁面',
+'页面' => '頁面',
+'顶凶' => '頂兇',
+'頂多' => '頂多',
+'顶多' => '頂多',
+'项链' => '項鍊',
+'顺于' => '順於',
+'顺钟向' => '順鐘向',
+'顺风后' => '順風後',
+'须根据' => '須根據',
+'颂系' => '頌繫',
+'颂赞' => '頌讚',
+'预报不准' => '預報不準',
+'预制' => '預製',
+'领袖欲' => '領袖慾',
+'头里' => '頭裡',
+'头长发' => '頭長髮',
+'头发' => '頭髮',
+'颊须' => '頰鬚',
+'额征' => '額徵',
+'额我略历' => '額我略曆',
+'额我略历史' => '額我略歷史',
+'颜范' => '顏範',
+'颠干倒坤' => '顛乾倒坤',
+'顛顛仆仆' => '顛顛仆仆',
+'颠颠仆仆' => '顛顛仆仆',
+'颤栗' => '顫慄',
+'显示表明' => '顯示表明',
+'显示表格' => '顯示表格',
+'显示表现' => '顯示表現',
+'显示表示' => '顯示表示',
+'显示表达' => '顯示表達',
+'显示表面' => '顯示表面',
+'显示表头' => '顯示表頭',
+'显示表' => '顯示錶',
+'显示钟' => '顯示鐘',
+'显示钟表' => '顯示鐘錶',
+'风干' => '風乾',
+'风后' => '風后',
+'风土志' => '風土誌',
+'风后,' => '風後,',
+'风卷残云' => '風捲殘雲',
+'风物志' => '風物誌',
+'风范' => '風範',
+'风里' => '風裡',
+'风起云涌' => '風起雲湧',
+'風采' => '風采',
+'风采' => '風采',
+'风刮' => '風颳',
+'台风' => '颱風',
+'台风后' => '颱風後',
+'刮了' => '颳了',
+'刮倒' => '颳倒',
+'刮去' => '颳去',
+'刮大风' => '颳大風',
+'刮得' => '颳得',
+'刮走' => '颳走',
+'刮起' => '颳起',
+'刮雪' => '颳雪',
+'刮风' => '颳風',
+'刮风后' => '颳風後',
+'飘荡' => '飄蕩',
+'飘游' => '飄遊',
+'飘飘荡荡' => '飄飄蕩蕩',
+'飘发自由女神' => '飄髮自由女神',
+'飞扎' => '飛紮',
+'飞刍挽粟' => '飛芻輓粟',
+'飞行钟' => '飛行鐘',
+'食欲' => '食慾',
+'食欲不振' => '食欲不振',
+'食面' => '食麵',
+'饭后钟' => '飯後鐘',
+'饭团' => '飯糰',
+'饼干' => '餅乾',
+'养脏' => '養臟',
+'餐台' => '餐檯',
+'馂余' => '餕餘',
+'余0' => '餘0',
+'余1' => '餘1',
+'余2' => '餘2',
+'余3' => '餘3',
+'余4' => '餘4',
+'余5' => '餘5',
+'余6' => '餘6',
+'余7' => '餘7',
+'余8' => '餘8',
+'余9' => '餘9',
+'余〇' => '餘〇',
+'余一' => '餘一',
+'余七' => '餘七',
+'余三' => '餘三',
+'余下' => '餘下',
+'余九' => '餘九',
+'余事' => '餘事',
+'余二' => '餘二',
+'余五' => '餘五',
+'余人' => '餘人',
+'余俗' => '餘俗',
+'余倍' => '餘倍',
+'余僇' => '餘僇',
+'余光' => '餘光',
+'余八' => '餘八',
+'余六' => '餘六',
+'余刃' => '餘刃',
+'余切' => '餘切',
+'余利' => '餘利',
+'余割' => '餘割',
+'余力' => '餘力',
+'余勇' => '餘勇',
+'余十' => '餘十',
+'余味' => '餘味',
+'余喘' => '餘喘',
+'余四' => '餘四',
+'余地' => '餘地',
+'余墨' => '餘墨',
+'余外' => '餘外',
+'余妙' => '餘妙',
+'余姚' => '餘姚',
+'余威' => '餘威',
+'余子' => '餘子',
+'余存' => '餘存',
+'余孽' => '餘孽',
+'余干' => '餘干',
+'余年' => '餘年',
+'余式' => '餘式',
+'余弦' => '餘弦',
+'余思' => '餘思',
+'余悸' => '餘悸',
+'余庆' => '餘慶',
+'余数' => '餘數',
+'余明' => '餘明',
+'余映' => '餘映',
+'余暇' => '餘暇',
+'余晖' => '餘暉',
+'余杭' => '餘杭',
+'余杯' => '餘杯',
+'余桃' => '餘桃',
+'余桶' => '餘桶',
+'余业' => '餘業',
+'余款' => '餘款',
+'余欢' => '餘歡',
+'余步' => '餘步',
+'余殃' => '餘殃',
+'余毒' => '餘毒',
+'余气' => '餘氣',
+'余江' => '餘江',
+'余波' => '餘波',
+'余温' => '餘溫',
+'余泽' => '餘澤',
+'余沥' => '餘瀝',
+'余烈' => '餘烈',
+'余热' => '餘熱',
+'余烬' => '餘燼',
+'余珍' => '餘珍',
+'余生' => '餘生',
+'余留' => '餘留',
+'余众' => '餘眾',
+'余窍' => '餘竅',
+'余粮' => '餘糧',
+'余绪' => '餘緒',
+'余缺' => '餘缺',
+'余罪' => '餘罪',
+'余羡' => '餘羨',
+'余声' => '餘聲',
+'余膏' => '餘膏',
+'余兴' => '餘興',
+'余蓄' => '餘蓄',
+'余荫' => '餘蔭',
+'余裕' => '餘裕',
+'余角' => '餘角',
+'余论' => '餘論',
+'余责' => '餘責',
+'余貾' => '餘貾',
+'余辉' => '餘輝',
+'余辜' => '餘辜',
+'余部' => '餘部',
+'余酲' => '餘酲',
+'余量' => '餘量',
+'余闰' => '餘閏',
+'余闲' => '餘閒',
+'余零' => '餘零',
+'余震' => '餘震',
+'余霞' => '餘霞',
+'余音' => '餘音',
+'余韵' => '餘韻',
+'余响' => '餘響',
+'余项' => '餘項',
+'余额' => '餘額',
+'余风' => '餘風',
+'余食' => '餘食',
+'余党' => '餘黨',
+'馄饨面' => '餛飩麵',
+'馆谷' => '館穀',
+'馆里' => '館裡',
+'饥寒' => '饑寒',
+'饥民' => '饑民',
+'饥渴' => '饑渴',
+'饥溺' => '饑溺',
+'饥荒' => '饑荒',
+'饥饱' => '饑飽',
+'饥馑' => '饑饉',
+'首当其冲' => '首當其衝',
+'首发' => '首發',
+'首只' => '首隻',
+'首出电影' => '首齣電影',
+'香干' => '香乾',
+'香山庄' => '香山庄',
+'马干' => '馬乾',
+'馬占山' => '馬占山',
+'马德钟' => '馬德鐘',
+'马斯垂克期' => '馬斯垂克期',
+'馬格里布' => '馬格里布',
+'马格里布' => '馬格里布',
+'驻扎' => '駐紮',
+'骀荡' => '駘蕩',
+'腾格里' => '騰格里',
+'騰格里' => '騰格里',
+'腾涌' => '騰湧',
+'腾冲' => '騰衝',
+'惊栗' => '驚慄',
+'惊赞' => '驚讚',
+'惊钟' => '驚鐘',
+'骨干' => '骨幹',
+'骨灰坛' => '骨灰罈',
+'骨坛' => '骨罈',
+'体征' => '體徵',
+'体范' => '體範',
+'体系' => '體系',
+'体里' => '體裡',
+'高几' => '高几',
+'高后' => '高后',
+'高干扰' => '高干擾',
+'高干预' => '高干預',
+'高干' => '高幹',
+'高度自制' => '高度自制',
+'高涌泉' => '高涌泉',
+'高清愿' => '高清愿',
+'髡发' => '髡髮',
+'髭胡' => '髭鬍',
+'髭须' => '髭鬚',
+'发上指冠' => '髮上指冠',
+'发上冲冠' => '髮上沖冠',
+'发乳' => '髮乳',
+'发光可鉴' => '髮光可鑑',
+'发匪' => '髮匪',
+'发及腰' => '髮及腰',
+'发型' => '髮型',
+'发夹' => '髮夾',
+'发妻' => '髮妻',
+'发姐' => '髮姐',
+'发屋' => '髮屋',
+'发已霜白' => '髮已霜白',
+'发带' => '髮帶',
+'发廊' => '髮廊',
+'发式' => '髮式',
+'发引千钧' => '髮引千鈞',
+'发披肩' => '髮披肩',
+'发卷' => '髮捲',
+'发根' => '髮根',
+'发油' => '髮油',
+'发漂' => '髮漂',
+'发为血之本' => '髮為血之本',
+'发状' => '髮狀',
+'发癣' => '髮癬',
+'发短心长' => '髮短心長',
+'发禁' => '髮禁',
+'发笺' => '髮箋',
+'发纱' => '髮紗',
+'发结' => '髮結',
+'发丝' => '髮絲',
+'发网' => '髮網',
+'发脚' => '髮腳',
+'发肤' => '髮膚',
+'发胶' => '髮膠',
+'发菜' => '髮菜',
+'发蜡' => '髮蠟',
+'发踊冲冠' => '髮踴沖冠',
+'发辫' => '髮辮',
+'发针' => '髮針',
+'发钗' => '髮釵',
+'发长' => '髮長',
+'发际' => '髮際',
+'发雕' => '髮雕',
+'发霜' => '髮霜',
+'发饰' => '髮飾',
+'发髻' => '髮髻',
+'发鬓' => '髮鬢',
+'髯胡' => '髯鬍',
+'髼松' => '髼鬆',
+'鬅松' => '鬅鬆',
+'松一口气' => '鬆一口氣',
+'松了' => '鬆了',
+'松些' => '鬆些',
+'松元音' => '鬆元音',
+'松劲' => '鬆勁',
+'松动' => '鬆動',
+'松化' => '鬆化',
+'松口' => '鬆口',
+'松喉' => '鬆喉',
+'松土' => '鬆土',
+'松宽' => '鬆寬',
+'松弛' => '鬆弛',
+'松快' => '鬆快',
+'松懈' => '鬆懈',
+'松手' => '鬆手',
+'松掉' => '鬆掉',
+'松散' => '鬆散',
+'松柔' => '鬆柔',
+'松气' => '鬆氣',
+'松浮' => '鬆浮',
+'松绑' => '鬆綁',
+'松紧' => '鬆緊',
+'松缓' => '鬆緩',
+'松脆' => '鬆脆',
+'松脱' => '鬆脫',
+'松蛋' => '鬆蛋',
+'松起' => '鬆起',
+'松软' => '鬆軟',
+'松通' => '鬆通',
+'松开' => '鬆開',
+'松饼' => '鬆餅',
+'松松地' => '鬆鬆地',
+'鬈发' => '鬈髮',
+'胡子' => '鬍子',
+'胡梢' => '鬍梢',
+'胡渣' => '鬍渣',
+'胡髭' => '鬍髭',
+'胡髯' => '鬍髯',
+'胡须' => '鬍鬚',
+'鬒发' => '鬒髮',
+'须根' => '鬚根',
+'须毛' => '鬚毛',
+'须生' => '鬚生',
+'须眉' => '鬚眉',
+'须发' => '鬚髮',
+'须胡' => '鬚鬍',
+'须须' => '鬚鬚',
+'须鲨' => '鬚鯊',
+'须鲸' => '鬚鯨',
+'鬓发' => '鬢髮',
+'斗不过' => '鬥不過',
+'斗了' => '鬥了',
+'斗来斗去' => '鬥來鬥去',
+'斗倒' => '鬥倒',
+'斗分子' => '鬥分子',
+'斗剑' => '鬥劍',
+'斗力' => '鬥力',
+'斗劲' => '鬥勁',
+'斗勇' => '鬥勇',
+'斗胜' => '鬥勝',
+'斗口' => '鬥口',
+'斗合' => '鬥合',
+'斗嘴' => '鬥嘴',
+'斗地主' => '鬥地主',
+'斗垮' => '鬥垮',
+'斗士' => '鬥士',
+'斗富' => '鬥富',
+'斗巧' => '鬥巧',
+'斗幌子' => '鬥幌子',
+'斗弄' => '鬥弄',
+'斗引' => '鬥引',
+'斗别气' => '鬥彆氣',
+'斗彩' => '鬥彩',
+'斗心眼' => '鬥心眼',
+'斗志' => '鬥志',
+'斗闷' => '鬥悶',
+'斗成' => '鬥成',
+'斗战' => '鬥戰',
+'斗打' => '鬥打',
+'斗批改' => '鬥批改',
+'斗技' => '鬥技',
+'斗败' => '鬥敗',
+'斗文' => '鬥文',
+'斗智' => '鬥智',
+'斗暴' => '鬥暴',
+'斗武' => '鬥武',
+'斗殴' => '鬥毆',
+'斗气' => '鬥氣',
+'斗法' => '鬥法',
+'斗争' => '鬥爭',
+'斗争斗合' => '鬥爭鬥合',
+'斗牌' => '鬥牌',
+'斗牙拌齿' => '鬥牙拌齒',
+'斗牙斗齿' => '鬥牙鬥齒',
+'斗牛' => '鬥牛',
+'斗犀台' => '鬥犀臺',
+'斗犬' => '鬥犬',
+'斗狗' => '鬥狗',
+'斗狠' => '鬥狠',
+'斗兽' => '鬥獸',
+'斗叠' => '鬥疊',
+'斗百草' => '鬥百草',
+'斗眼' => '鬥眼',
+'斗私批修' => '鬥私批修',
+'斗而铸兵' => '鬥而鑄兵',
+'斗而铸锥' => '鬥而鑄錐',
+'斗脚' => '鬥腳',
+'斗舰' => '鬥艦',
+'斗茶' => '鬥茶',
+'斗草' => '鬥草',
+'斗叶儿' => '鬥葉兒',
+'斗叶子' => '鬥葉子',
+'斗蛐' => '鬥蛐',
+'斗蟋蟀' => '鬥蟋蟀',
+'斗话' => '鬥話',
+'斗艳' => '鬥豔',
+'斗起' => '鬥起',
+'斗趣' => '鬥趣',
+'斗闲气' => '鬥閒氣',
+'斗鸡' => '鬥雞',
+'斗雪红' => '鬥雪紅',
+'斗头' => '鬥頭',
+'斗风' => '鬥風',
+'斗饤' => '鬥飣',
+'斗斗' => '鬥鬥',
+'斗哄' => '鬥鬨',
+'斗鱼' => '鬥魚',
+'斗鸭' => '鬥鴨',
+'斗鹌鹑' => '鬥鵪鶉',
+'斗丽' => '鬥麗',
+'斗龙' => '鬥龍',
+'闹表' => '鬧錶',
+'闹钟' => '鬧鐘',
+'哄动' => '鬨動',
+'哄堂' => '鬨堂',
+'哄笑' => '鬨笑',
+'郁伊' => '鬱伊',
+'郁勃' => '鬱勃',
+'郁卒' => '鬱卒',
+'郁南' => '鬱南',
+'郁堙不偶' => '鬱堙不偶',
+'郁塞' => '鬱塞',
+'郁垒' => '鬱壘',
+'郁律' => '鬱律',
+'郁悒' => '鬱悒',
+'郁闷' => '鬱悶',
+'郁愤' => '鬱憤',
+'郁抑' => '鬱抑',
+'郁挹' => '鬱挹',
+'郁林' => '鬱林',
+'郁气' => '鬱氣',
+'郁江' => '鬱江',
+'郁沉沉' => '鬱沉沉',
+'郁泱' => '鬱泱',
+'郁火' => '鬱火',
+'郁热' => '鬱熱',
+'郁燠' => '鬱燠',
+'郁症' => '鬱症',
+'郁积' => '鬱積',
+'郁纡' => '鬱紆',
+'郁结' => '鬱結',
+'郁蒸' => '鬱蒸',
+'郁蓊' => '鬱蓊',
+'郁血' => '鬱血',
+'郁邑' => '鬱邑',
+'郁郁' => '鬱郁',
+'郁金' => '鬱金',
+'郁闭' => '鬱閉',
+'郁陶' => '鬱陶',
+'郁郁不平' => '鬱鬱不平',
+'郁郁不乐' => '鬱鬱不樂',
+'郁郁寡欢' => '鬱鬱寡歡',
+'郁郁而终' => '鬱鬱而終',
+'郁郁苍苍' => '鬱鬱蒼蒼',
+'郁郁葱葱' => '鬱鬱蔥蔥',
+'郁黑' => '鬱黑',
+'鬼气冲天' => '鬼氣衝天',
+'鬼谷子' => '鬼谷子',
+'魂牵梦系' => '魂牽夢繫',
+'魏征' => '魏徵',
+'魔表' => '魔錶',
+'鱼干' => '魚乾',
+'鱼松' => '魚鬆',
+'鮮于' => '鮮于',
+'鲜于' => '鮮于',
+'鲸须' => '鯨鬚',
+'鳥栖' => '鳥栖',
+'鸟栖市' => '鳥栖市',
+'凤梨干' => '鳳梨乾',
+'鸣钟' => '鳴鐘',
+'鸿范' => '鴻範',
+'鹅准' => '鵝準',
+'鹄发' => '鵠髮',
+'雕心雁爪' => '鵰心雁爪',
+'雕悍' => '鵰悍',
+'雕翎' => '鵰翎',
+'雕鹗' => '鵰鶚',
+'鹤峰县' => '鶴峯縣',
+'鹤吊' => '鶴弔',
+'鹤发' => '鶴髮',
+'鸾鉴' => '鸞鑑',
+'鹰雕' => '鹰鵰',
+'咸味' => '鹹味',
+'咸嘴淡舌' => '鹹嘴淡舌',
+'咸土' => '鹹土',
+'咸度' => '鹹度',
+'咸得' => '鹹得',
+'咸批' => '鹹批',
+'咸水' => '鹹水',
+'咸派' => '鹹派',
+'咸海' => '鹹海',
+'咸淡' => '鹹淡',
+'咸湖' => '鹹湖',
+'咸汤' => '鹹湯',
+'咸潟' => '鹹潟',
+'咸湿' => '鹹濕',
+'咸的' => '鹹的',
+'咸粥' => '鹹粥',
+'咸肉' => '鹹肉',
+'咸菜' => '鹹菜',
+'咸菜干' => '鹹菜乾',
+'咸蛋' => '鹹蛋',
+'咸猪' => '鹹豬',
+'咸类' => '鹹類',
+'咸食' => '鹹食',
+'咸鱼' => '鹹魚',
+'咸鸭蛋' => '鹹鴨蛋',
+'咸卤' => '鹹鹵',
+'咸咸' => '鹹鹹',
+'盐打怎么咸' => '鹽打怎麼鹹',
+'盐卤' => '鹽滷',
+'盐余' => '鹽餘',
+'鹿場里' => '鹿場里',
+'丽于' => '麗於',
+'麟游' => '麟遊',
+'曲酒' => '麯酒',
+'曲尘' => '麴塵',
+'曲櫱' => '麴櫱',
+'曲秀才' => '麴秀才',
+'曲车' => '麴車',
+'曲道士' => '麴道士',
+'曲钱' => '麴錢',
+'曲霉' => '麴黴',
+'麹霉' => '麴黴',
+'面人儿' => '麵人兒',
+'面包' => '麵包',
+'面坊' => '麵坊',
+'面坯儿' => '麵坯兒',
+'面塑' => '麵塑',
+'面店' => '麵店',
+'面厂' => '麵廠',
+'面摊' => '麵攤',
+'面杖' => '麵杖',
+'面条' => '麵條',
+'面汤' => '麵湯',
+'面浆' => '麵漿',
+'面疙瘩' => '麵疙瘩',
+'面皮' => '麵皮',
+'面码儿' => '麵碼兒',
+'面筋' => '麵筋',
+'面粉' => '麵粉',
+'面糊' => '麵糊',
+'面团' => '麵糰',
+'面缸' => '麵缸',
+'面茶' => '麵茶',
+'面制品' => '麵製品',
+'面食' => '麵食',
+'面饺' => '麵餃',
+'面饼' => '麵餅',
+'面馆' => '麵館',
+'面点、' => '麵點、',
+'面点师' => '麵點師',
+'麻将席' => '麻將蓆',
+'麻酱面' => '麻醬麵',
+'黄干黑瘦' => '黃乾黑瘦',
+'黄岩区' => '黃巖區',
+'黄岩县' => '黃巖縣',
+'黄历' => '黃曆',
+'黃杰' => '黃杰',
+'黄杰' => '黃杰',
+'黄历史' => '黃歷史',
+'黄白术' => '黃白術',
+'黃詩杰' => '黃詩杰',
+'黄诗杰' => '黃詩杰',
+'黄金表' => '黃金表',
+'黃鈺筑' => '黃鈺筑',
+'黄钰筑' => '黃鈺筑',
+'黄钟' => '黃鐘',
+'黄发' => '黃髮',
+'黄曲毒素' => '黃麴毒素',
+'黎克特制' => '黎克特制',
+'黎吉云' => '黎吉雲',
+'黎吉雲' => '黎吉雲',
+'黑奴吁天录' => '黑奴籲天錄',
+'黑干将' => '黑幹將',
+'黑长发' => '黑長髮',
+'黑发' => '黑髮',
+'点个赞' => '點個讚',
+'点札' => '點劄',
+'点半钟' => '點半鐘',
+'点多钟' => '點多鐘',
+'点里' => '點裡',
+'点赞' => '點讚',
+'点里程' => '點里程',
+'点钟' => '點鐘',
+'霉毒' => '黴毒',
+'霉素' => '黴素',
+'霉菌' => '黴菌',
+'霉黑' => '黴黑',
+'霉黧' => '黴黧',
+'鼓里' => '鼓裡',
+'鼓噪' => '鼓譟',
+'冬冬鼓' => '鼕鼕鼓',
+'咚咚鼓' => '鼕鼕鼓',
+'鼠曲草' => '鼠麴草',
+'鼻梁儿' => '鼻梁兒',
+'鼻梁' => '鼻樑',
+'鼻准' => '鼻準',
+'齐王舍牛' => '齊王捨牛',
+'齿危发秀' => '齒危髮秀',
+'齿落发白' => '齒落髮白',
+'齿发' => '齒髮',
+'龙岩' => '龍巖',
+'龙卷' => '龍捲',
+'龙眼干' => '龍眼乾',
+'龙须' => '龍鬚',
+'龙须面' => '龍鬚麵',
+'龙斗虎伤' => '龍鬥虎傷',
+'龜山庄' => '龜山庄',
+'龟鉴' => '龜鑑',
+',并力' => ',並力',
+',并力攻' => ',并力攻',
+',并力討' => ',并力討',
+',并力讨' => ',并力討',
+',个中' => ',箇中',
+);
+
+public static $zh2Hans = array(
+'㑯' => '㑔',
+'㑳' => '㑇',
+'㑶' => '㐹',
+'㒓' => '𠉂',
+'㒺' => '罔',
+'㓂' => '寇',
+'㓨' => '刾',
+'㕁' => '却',
+'㕑' => '厨',
+'㕘' => '参',
+'㕥' => '以',
+'㗲' => '𠵾',
+'㘚' => '㘎',
+'㘭' => '坳',
+'㜄' => '㚯',
+'㜏' => '㛣',
+'㜢' => '𡞱',
+'㜷' => '𡝠',
+'㝛' => '宿',
+'㝠' => '冥',
+'㞞' => '𪨊',
+'㠀' => '岛',
+'㠏' => '㟆',
+'㠯' => '以',
+'㠶' => '帆',
+'㡌' => '帽',
+'㢘' => '廉',
+'㢝' => '𢋈',
+'㤙' => '恩',
+'㥦' => '惬',
+'㥮' => '㤘',
+'㦎' => '𢛯',
+'㨗' => '捷',
+'㨪' => '晃',
+'㨿' => '据',
+'㩗' => '携',
+'㩜' => '㨫',
+'㩦' => '携',
+'㩳' => '㧐',
+'㪚' => '散',
+'㪟' => '敦',
+'㬉' => '暖',
+'㬪' => '叠',
+'㯭' => '橹',
+'㱃' => '饮',
+'㳒' => '法',
+'㴱' => '深',
+'㷿' => '𤈷',
+'㺏' => '𤠋',
+'㼝' => '碗',
+'㽞' => '留',
+'㿜' => '瘪',
+'㿧' => '𤽯',
+'䀹' => '𥅴',
+'䁪' => '𥇢',
+'䁻' => '䀥',
+'䈰' => '筲',
+'䉙' => '𥬀',
+'䉬' => '𫂈',
+'䉲' => '𥮜',
+'䊀' => '糊',
+'䊭' => '𥺅',
+'䊷' => '䌶',
+'䋙' => '䌺',
+'䋚' => '䌻',
+'䋹' => '䌿',
+'䋻' => '䌾',
+'䋿' => '𦈓',
+'䌈' => '𦈖',
+'䌋' => '𦈘',
+'䌖' => '𦈜',
+'䌝' => '𦈟',
+'䌟' => '𦈞',
+'䌥' => '𦈠',
+'䌰' => '𦈙',
+'䎱' => '䎬',
+'䕳' => '𦰴',
+'䗬' => '蜂',
+'䗿' => '𧉞',
+'䘏' => '恤',
+'䘑' => '脉',
+'䘚' => '卒',
+'䙡' => '䙌',
+'䛐' => '词',
+'䛡' => '话',
+'䜀' => '䜧',
+'䝔' => '獾',
+'䝻' => '𧹕',
+'䝼' => '䞍',
+'䞈' => '𧹑',
+'䠀' => '蹚',
+'䠶' => '射',
+'䢨' => '𨑹',
+'䥇' => '䦂',
+'䥥' => '镰',
+'䥩' => '𨱖',
+'䥱' => '䥾',
+'䦘' => '𨸄',
+'䦛' => '䦶',
+'䦟' => '䦷',
+'䦳' => '𨷿',
+'䧢' => '𨸟',
+'䪏' => '𩏼',
+'䪗' => '𩐀',
+'䪘' => '𩏿',
+'䫴' => '𩖗',
+'䬃' => '飒',
+'䬘' => '𩙮',
+'䬝' => '𩙯',
+'䬞' => '𩙧',
+'䭀' => '𩠇',
+'䭃' => '𩠈',
+'䭾' => '驮',
+'䭿' => '𩧭',
+'䮝' => '𩧰',
+'䮞' => '𩨁',
+'䮠' => '𩧿',
+'䮫' => '𩨇',
+'䮳' => '𩨏',
+'䮾' => '𩧪',
+'䯀' => '䯅',
+'䰟' => '魂',
+'䰾' => '鲃',
+'䱙' => '𩾈',
+'䱬' => '𩾊',
+'䱰' => '𩾋',
+'䱷' => '䲣',
+'䱽' => '䲝',
+'䲁' => '鳚',
+'䲖' => '𩾂',
+'䲘' => '鳤',
+'䲰' => '𪉂',
+'䳘' => '鹅',
+'䴉' => '鹮',
+'䴬' => '𪎈',
+'䴴' => '𪎋',
+'䶊' => '衄',
+'丟' => '丢',
+'丣' => '卯',
+'並' => '并',
+'乗' => '乘',
+'乹' => '干',
+'乾' => '干',
+'亁' => '干',
+'亂' => '乱',
+'亙' => '亘',
+'亝' => '斋',
+'亞' => '亚',
+'亱' => '夜',
+'亷' => '廉',
+'亾' => '亡',
+'佇' => '伫',
+'佈' => '布',
+'佔' => '占',
+'併' => '并',
+'來' => '来',
+'侖' => '仑',
+'侶' => '侣',
+'俁' => '俣',
+'係' => '系',
+'俔' => '伣',
+'俠' => '侠',
+'俥' => '伡',
+'俻' => '备',
+'倀' => '伥',
+'倆' => '俩',
+'倈' => '俫',
+'倉' => '仓',
+'個' => '个',
+'倐' => '倏',
+'們' => '们',
+'倖' => '幸',
+'倣' => '仿',
+'倫' => '伦',
+'倲' => '㑈',
+'倸' => '睬',
+'偉' => '伟',
+'偑' => '㐽',
+'側' => '侧',
+'偵' => '侦',
+'偽' => '伪',
+'傌' => '㐷',
+'傑' => '杰',
+'傖' => '伧',
+'傘' => '伞',
+'備' => '备',
+'傚' => '效',
+'傢' => '家',
+'傭' => '佣',
+'傯' => '偬',
+'傳' => '传',
+'傴' => '伛',
+'債' => '债',
+'傷' => '伤',
+'傾' => '倾',
+'僂' => '偻',
+'僅' => '仅',
+'僉' => '佥',
+'僊' => '仙',
+'働' => '动',
+'僑' => '侨',
+'僕' => '仆',
+'僞' => '伪',
+'僥' => '侥',
+'僨' => '偾',
+'僱' => '雇',
+'價' => '价',
+'儀' => '仪',
+'儂' => '侬',
+'億' => '亿',
+'儈' => '侩',
+'儉' => '俭',
+'儌' => '侥',
+'儐' => '傧',
+'儔' => '俦',
+'儕' => '侪',
+'儘' => '尽',
+'償' => '偿',
+'儣' => '𠆲',
+'優' => '优',
+'儲' => '储',
+'儷' => '俪',
+'儸' => '㑩',
+'儺' => '傩',
+'儻' => '傥',
+'儼' => '俨',
+'兇' => '凶',
+'兌' => '兑',
+'兎' => '兔',
+'兒' => '儿',
+'兗' => '兖',
+'兠' => '兜',
+'內' => '内',
+'兩' => '两',
+'冄' => '冉',
+'冊' => '册',
+'冐' => '冒',
+'冑' => '胄',
+'冪' => '幂',
+'冺' => '泯',
+'凈' => '净',
+'凍' => '冻',
+'凙' => '𪞝',
+'凜' => '凛',
+'凢' => '凡',
+'凱' => '凯',
+'凴' => '凭',
+'別' => '别',
+'刦' => '劫',
+'刧' => '劫',
+'刪' => '删',
+'刼' => '劫',
+'剄' => '刭',
+'則' => '则',
+'剉' => '锉',
+'剋' => '克',
+'剎' => '刹',
+'剏' => '创',
+'剗' => '刬',
+'剙' => '创',
+'剛' => '刚',
+'剝' => '剥',
+'剮' => '剐',
+'剳' => '札',
+'剴' => '剀',
+'創' => '创',
+'剷' => '铲',
+'剹' => '戮',
+'剾' => '𠛅',
+'劃' => '划',
+'劄' => '札',
+'劇' => '剧',
+'劉' => '刘',
+'劊' => '刽',
+'劌' => '刿',
+'劍' => '剑',
+'劏' => '㓥',
+'劑' => '剂',
+'劒' => '剑',
+'劚' => '㔉',
+'効' => '效',
+'勁' => '劲',
+'勅' => '敕',
+'勌' => '倦',
+'勑' => '敕',
+'動' => '动',
+'務' => '务',
+'勛' => '勋',
+'勝' => '胜',
+'勞' => '劳',
+'勢' => '势',
+'勦' => '剿',
+'勩' => '勚',
+'勱' => '劢',
+'勳' => '勋',
+'勵' => '励',
+'勸' => '劝',
+'勻' => '匀',
+'匟' => '炕',
+'匭' => '匦',
+'匯' => '汇',
+'匱' => '匮',
+'匲' => '奁',
+'匳' => '奁',
+'區' => '区',
+'協' => '协',
+'卹' => '恤',
+'卻' => '却',
+'卽' => '即',
+'厀' => '膝',
+'厙' => '厍',
+'厠' => '厕',
+'厤' => '历',
+'厭' => '厌',
+'厰' => '厂',
+'厲' => '厉',
+'厴' => '厣',
+'參' => '参',
+'叄' => '叁',
+'叢' => '丛',
+'吚' => '咿',
+'吳' => '吴',
+'吶' => '呐',
+'呂' => '吕',
+'呌' => '叫',
+'呪' => '咒',
+'咊' => '和',
+'咼' => '呙',
+'員' => '员',
+'哯' => '𠯟',
+'哶' => '咩',
+'唄' => '呗',
+'唕' => '唣',
+'唘' => '启',
+'唚' => '吣',
+'唸' => '念',
+'啎' => '忤',
+'問' => '问',
+'啑' => '喋',
+'啓' => '启',
+'啗' => '啖',
+'啞' => '哑',
+'啟' => '启',
+'啢' => '唡',
+'啣' => '衔',
+'喎' => '㖞',
+'喚' => '唤',
+'喪' => '丧',
+'喫' => '吃',
+'喬' => '乔',
+'單' => '单',
+'喲' => '哟',
+'嗁' => '啼',
+'嗆' => '呛',
+'嗇' => '啬',
+'嗊' => '唝',
+'嗎' => '吗',
+'嗚' => '呜',
+'嗩' => '唢',
+'嗶' => '哔',
+'嗹' => '𪡏',
+'嘅' => '慨',
+'嘆' => '叹',
+'嘍' => '喽',
+'嘑' => '呼',
+'嘓' => '啯',
+'嘔' => '呕',
+'嘖' => '啧',
+'嘗' => '尝',
+'嘜' => '唛',
+'嘠' => '嘎',
+'嘩' => '哗',
+'嘮' => '唠',
+'嘯' => '啸',
+'嘰' => '叽',
+'嘵' => '哓',
+'嘷' => '嗥',
+'嘸' => '呒',
+'嘽' => '啴',
+'噅' => '𠯠',
+'噉' => '啖',
+'噓' => '嘘',
+'噚' => '㖊',
+'噝' => '咝',
+'噠' => '哒',
+'噥' => '哝',
+'噦' => '哕',
+'噯' => '嗳',
+'噲' => '哙',
+'噴' => '喷',
+'噸' => '吨',
+'噹' => '当',
+'嚀' => '咛',
+'嚇' => '吓',
+'嚌' => '哜',
+'嚐' => '尝',
+'嚕' => '噜',
+'嚙' => '啮',
+'嚥' => '咽',
+'嚦' => '呖',
+'嚨' => '咙',
+'嚮' => '向',
+'嚲' => '亸',
+'嚳' => '喾',
+'嚴' => '严',
+'嚶' => '嘤',
+'囀' => '啭',
+'囁' => '嗫',
+'囂' => '嚣',
+'囅' => '冁',
+'囈' => '呓',
+'囉' => '啰',
+'囌' => '苏',
+'囑' => '嘱',
+'囓' => '啮',
+'囙' => '因',
+'囪' => '囱',
+'圅' => '函',
+'圇' => '囵',
+'國' => '国',
+'圍' => '围',
+'園' => '园',
+'圓' => '圆',
+'圖' => '图',
+'團' => '团',
+'圞' => '𪢮',
+'坿' => '附',
+'垜' => '垛',
+'垵' => '埯',
+'埡' => '垭',
+'埰' => '采',
+'執' => '执',
+'堅' => '坚',
+'堊' => '垩',
+'堝' => '埚',
+'堯' => '尧',
+'報' => '报',
+'場' => '场',
+'塊' => '块',
+'塋' => '茔',
+'塏' => '垲',
+'塒' => '埘',
+'塗' => '涂',
+'塟' => '葬',
+'塢' => '坞',
+'塤' => '埙',
+'塲' => '场',
+'塵' => '尘',
+'塹' => '堑',
+'墊' => '垫',
+'墖' => '塔',
+'墜' => '坠',
+'墮' => '堕',
+'墰' => '坛',
+'墳' => '坟',
+'墻' => '墙',
+'墾' => '垦',
+'壇' => '坛',
+'壈' => '𡒄',
+'壋' => '垱',
+'壎' => '埙',
+'壓' => '压',
+'壘' => '垒',
+'壙' => '圹',
+'壚' => '垆',
+'壜' => '坛',
+'壞' => '坏',
+'壟' => '垄',
+'壠' => '垅',
+'壢' => '坜',
+'壩' => '坝',
+'壯' => '壮',
+'壺' => '壶',
+'壻' => '婿',
+'壼' => '壸',
+'壽' => '寿',
+'夘' => '卯',
+'夠' => '够',
+'夢' => '梦',
+'夥' => '伙',
+'夾' => '夹',
+'奐' => '奂',
+'奧' => '奥',
+'奩' => '奁',
+'奪' => '夺',
+'奬' => '奖',
+'奮' => '奋',
+'奼' => '姹',
+'妝' => '妆',
+'妬' => '妒',
+'妳' => '你',
+'妷' => '侄',
+'姉' => '姊',
+'姍' => '姗',
+'姙' => '妊',
+'姦' => '奸',
+'姪' => '侄',
+'姸' => '妍',
+'娛' => '娱',
+'婁' => '娄',
+'婣' => '姻',
+'婦' => '妇',
+'婬' => '淫',
+'婭' => '娅',
+'媍' => '妇',
+'媧' => '娲',
+'媯' => '妫',
+'媰' => '㛀',
+'媼' => '媪',
+'媽' => '妈',
+'媿' => '愧',
+'嫋' => '袅',
+'嫗' => '妪',
+'嫰' => '嫩',
+'嫵' => '妩',
+'嫺' => '娴',
+'嫻' => '娴',
+'嫿' => '婳',
+'嬀' => '妫',
+'嬃' => '媭',
+'嬈' => '娆',
+'嬋' => '婵',
+'嬌' => '娇',
+'嬙' => '嫱',
+'嬝' => '袅',
+'嬡' => '嫒',
+'嬤' => '嬷',
+'嬪' => '嫔',
+'嬭' => '奶',
+'嬰' => '婴',
+'嬸' => '婶',
+'嬾' => '懒',
+'孃' => '娘',
+'孋' => '㛤',
+'孌' => '娈',
+'孫' => '孙',
+'學' => '学',
+'孼' => '孽',
+'孿' => '孪',
+'宂' => '冗',
+'宮' => '宫',
+'寀' => '采',
+'寃' => '冤',
+'寑' => '寝',
+'寢' => '寝',
+'實' => '实',
+'寧' => '宁',
+'審' => '审',
+'寫' => '写',
+'寬' => '宽',
+'寳' => '宝',
+'寵' => '宠',
+'寶' => '宝',
+'尅' => '克',
+'將' => '将',
+'專' => '专',
+'尋' => '寻',
+'對' => '对',
+'導' => '导',
+'尒' => '尔',
+'尙' => '尚',
+'尟' => '鲜',
+'尠' => '鲜',
+'尷' => '尴',
+'屆' => '届',
+'屍' => '尸',
+'屓' => '屃',
+'屛' => '屏',
+'屜' => '屉',
+'屢' => '屡',
+'層' => '层',
+'屨' => '屦',
+'屩' => '𪨗',
+'屬' => '属',
+'屭' => '屃',
+'岅' => '坂',
+'岡' => '冈',
+'峝' => '峒',
+'峴' => '岘',
+'島' => '岛',
+'峽' => '峡',
+'崍' => '崃',
+'崗' => '岗',
+'崢' => '峥',
+'崬' => '岽',
+'嵐' => '岚',
+'嵗' => '岁',
+'嵼' => '𡶴',
+'嶁' => '嵝',
+'嶃' => '崭',
+'嶄' => '崭',
+'嶇' => '岖',
+'嶔' => '嵚',
+'嶗' => '崂',
+'嶠' => '峤',
+'嶢' => '峣',
+'嶧' => '峄',
+'嶨' => '峃',
+'嶮' => '崄',
+'嶸' => '嵘',
+'嶺' => '岭',
+'嶼' => '屿',
+'嶽' => '岳',
+'巋' => '岿',
+'巒' => '峦',
+'巔' => '巅',
+'巖' => '岩',
+'巗' => '岩',
+'巰' => '巯',
+'巵' => '卮',
+'帀' => '匝',
+'帋' => '纸',
+'帥' => '帅',
+'師' => '师',
+'帬' => '裙',
+'帳' => '帐',
+'帶' => '带',
+'幀' => '帧',
+'幃' => '帏',
+'幇' => '帮',
+'幑' => '徽',
+'幗' => '帼',
+'幘' => '帻',
+'幙' => '幕',
+'幚' => '帮',
+'幟' => '帜',
+'幣' => '币',
+'幫' => '帮',
+'幬' => '帱',
+'幹' => '干',
+'幾' => '几',
+'庫' => '库',
+'庻' => '庶',
+'庽' => '寓',
+'廁' => '厕',
+'廂' => '厢',
+'廄' => '厩',
+'廈' => '厦',
+'廎' => '庼',
+'廐' => '厩',
+'廕' => '荫',
+'廚' => '厨',
+'廝' => '厮',
+'廟' => '庙',
+'廠' => '厂',
+'廡' => '庑',
+'廢' => '废',
+'廣' => '广',
+'廩' => '廪',
+'廬' => '庐',
+'廳' => '厅',
+'廵' => '巡',
+'廹' => '迫',
+'廻' => '回',
+'廼' => '乃',
+'弒' => '弑',
+'弔' => '吊',
+'弳' => '弪',
+'張' => '张',
+'強' => '强',
+'彆' => '别',
+'彈' => '弹',
+'彌' => '弥',
+'彎' => '弯',
+'彙' => '汇',
+'彞' => '彝',
+'彠' => '彟',
+'彥' => '彦',
+'彫' => '雕',
+'彲' => '彨',
+'徃' => '往',
+'後' => '后',
+'徑' => '径',
+'從' => '从',
+'徠' => '徕',
+'徧' => '遍',
+'復' => '复',
+'徵' => '征',
+'徹' => '彻',
+'怱' => '匆',
+'怳' => '恍',
+'恆' => '恒',
+'恠' => '怪',
+'恡' => '吝',
+'恥' => '耻',
+'悅' => '悦',
+'悞' => '悮',
+'悤' => '匆',
+'悵' => '怅',
+'悶' => '闷',
+'悽' => '凄',
+'惏' => '婪',
+'惡' => '恶',
+'惥' => '恿',
+'惱' => '恼',
+'惲' => '恽',
+'惷' => '蠢',
+'惻' => '恻',
+'愛' => '爱',
+'愜' => '惬',
+'愨' => '悫',
+'愴' => '怆',
+'愷' => '恺',
+'愽' => '博',
+'愾' => '忾',
+'慄' => '栗',
+'態' => '态',
+'慍' => '愠',
+'慘' => '惨',
+'慙' => '惭',
+'慚' => '惭',
+'慟' => '恸',
+'慣' => '惯',
+'慤' => '悫',
+'慪' => '怄',
+'慫' => '怂',
+'慮' => '虑',
+'慳' => '悭',
+'慴' => '慑',
+'慶' => '庆',
+'慼' => '戚',
+'慽' => '戚',
+'慾' => '欲',
+'憂' => '忧',
+'憇' => '憩',
+'憊' => '惫',
+'憐' => '怜',
+'憑' => '凭',
+'憒' => '愦',
+'憚' => '惮',
+'憤' => '愤',
+'憫' => '悯',
+'憮' => '怃',
+'憲' => '宪',
+'憶' => '忆',
+'懀' => '𢙓',
+'懇' => '恳',
+'應' => '应',
+'懌' => '怿',
+'懍' => '懔',
+'懟' => '怼',
+'懣' => '懑',
+'懨' => '恹',
+'懲' => '惩',
+'懶' => '懒',
+'懷' => '怀',
+'懸' => '悬',
+'懺' => '忏',
+'懼' => '惧',
+'懾' => '慑',
+'戀' => '恋',
+'戇' => '戆',
+'戔' => '戋',
+'戞' => '戛',
+'戧' => '戗',
+'戩' => '戬',
+'戯' => '戏',
+'戰' => '战',
+'戱' => '戯',
+'戲' => '戏',
+'戶' => '户',
+'戹' => '厄',
+'扞' => '捍',
+'抝' => '拗',
+'拋' => '抛',
+'拚' => '拼',
+'挩' => '捝',
+'挱' => '挲',
+'挵' => '弄',
+'挾' => '挟',
+'捄' => '救',
+'捨' => '舍',
+'捫' => '扪',
+'捲' => '卷',
+'掃' => '扫',
+'掄' => '抡',
+'掆' => '㧏',
+'掗' => '挜',
+'掙' => '挣',
+'掛' => '挂',
+'採' => '采',
+'掽' => '碰',
+'揀' => '拣',
+'揑' => '捏',
+'揚' => '扬',
+'換' => '换',
+'揫' => '揪',
+'揮' => '挥',
+'揷' => '插',
+'揹' => '背',
+'搆' => '构',
+'搇' => '揿',
+'搉' => '榷',
+'損' => '损',
+'搖' => '摇',
+'搗' => '捣',
+'搤' => '扼',
+'搥' => '捶',
+'搨' => '拓',
+'搯' => '掏',
+'搵' => '揾',
+'搶' => '抢',
+'搾' => '榨',
+'摃' => '扛',
+'摋' => '𢫬',
+'摑' => '掴',
+'摜' => '掼',
+'摟' => '搂',
+'摯' => '挚',
+'摳' => '抠',
+'摶' => '抟',
+'摺' => '折',
+'摻' => '掺',
+'撈' => '捞',
+'撏' => '挦',
+'撐' => '撑',
+'撓' => '挠',
+'撝' => '㧑',
+'撟' => '挢',
+'撡' => '操',
+'撣' => '掸',
+'撥' => '拨',
+'撦' => '扯',
+'撫' => '抚',
+'撲' => '扑',
+'撳' => '揿',
+'撻' => '挞',
+'撾' => '挝',
+'撿' => '捡',
+'擁' => '拥',
+'擄' => '掳',
+'擇' => '择',
+'擊' => '击',
+'擋' => '挡',
+'擓' => '㧟',
+'擔' => '担',
+'擕' => '携',
+'據' => '据',
+'擠' => '挤',
+'擣' => '𢭏',
+'擧' => '举',
+'擬' => '拟',
+'擯' => '摈',
+'擰' => '拧',
+'擱' => '搁',
+'擲' => '掷',
+'擴' => '扩',
+'擷' => '撷',
+'擺' => '摆',
+'擻' => '擞',
+'擼' => '撸',
+'擽' => '㧰',
+'擾' => '扰',
+'攄' => '摅',
+'攆' => '撵',
+'攏' => '拢',
+'攔' => '拦',
+'攖' => '撄',
+'攙' => '搀',
+'攛' => '撺',
+'攜' => '携',
+'攝' => '摄',
+'攢' => '攒',
+'攣' => '挛',
+'攤' => '摊',
+'攩' => '挡',
+'攪' => '搅',
+'攬' => '揽',
+'攷' => '考',
+'敂' => '叩',
+'敍' => '叙',
+'敗' => '败',
+'敘' => '叙',
+'敵' => '敌',
+'數' => '数',
+'敺' => '驱',
+'斂' => '敛',
+'斃' => '毙',
+'斅' => '𢽾',
+'斆' => '敩',
+'斕' => '斓',
+'斬' => '斩',
+'斷' => '断',
+'於' => '于',
+'旂' => '旗',
+'旣' => '既',
+'旤' => '祸',
+'旹' => '时',
+'旾' => '春',
+'昬' => '昏',
+'時' => '时',
+'晉' => '晋',
+'晝' => '昼',
+'暈' => '晕',
+'暉' => '晖',
+'暘' => '旸',
+'暢' => '畅',
+'暫' => '暂',
+'暱' => '昵',
+'曄' => '晔',
+'曆' => '历',
+'曇' => '昙',
+'曉' => '晓',
+'曖' => '暧',
+'曠' => '旷',
+'曡' => '叠',
+'曥' => '𣆐',
+'曨' => '昽',
+'曬' => '晒',
+'書' => '书',
+'會' => '会',
+'朞' => '期',
+'朢' => '望',
+'朥' => '𦛨',
+'朧' => '胧',
+'朮' => '术',
+'朶' => '朵',
+'東' => '东',
+'杴' => '锨',
+'枱' => '台',
+'柵' => '栅',
+'柺' => '拐',
+'査' => '查',
+'栁' => '柳',
+'栞' => '刊',
+'栢' => '柏',
+'栰' => '筏',
+'桒' => '桑',
+'桮' => '杯',
+'桺' => '柳',
+'桿' => '杆',
+'梔' => '栀',
+'梘' => '枧',
+'條' => '条',
+'梟' => '枭',
+'梲' => '棁',
+'棄' => '弃',
+'棊' => '棋',
+'棖' => '枨',
+'棗' => '枣',
+'棟' => '栋',
+'棡' => '㭎',
+'棧' => '栈',
+'棲' => '栖',
+'棶' => '梾',
+'椏' => '桠',
+'椗' => '碇',
+'椲' => '㭏',
+'椶' => '棕',
+'椷' => '缄',
+'椾' => '笺',
+'楊' => '杨',
+'楓' => '枫',
+'楥' => '楦',
+'楨' => '桢',
+'業' => '业',
+'極' => '极',
+'榦' => '干',
+'榪' => '杩',
+'榮' => '荣',
+'榲' => '榅',
+'榿' => '桤',
+'構' => '构',
+'槍' => '枪',
+'槓' => '杠',
+'槕' => '桌',
+'槤' => '梿',
+'槧' => '椠',
+'槨' => '椁',
+'槮' => '椮',
+'槳' => '桨',
+'槶' => '椢',
+'槼' => '椝',
+'樁' => '桩',
+'樂' => '乐',
+'樅' => '枞',
+'樑' => '梁',
+'樓' => '楼',
+'標' => '标',
+'樞' => '枢',
+'樢' => '㭤',
+'樣' => '样',
+'樫' => '㭴',
+'樳' => '桪',
+'樸' => '朴',
+'樹' => '树',
+'樺' => '桦',
+'樿' => '椫',
+'橈' => '桡',
+'橋' => '桥',
+'橜' => '橛',
+'機' => '机',
+'橢' => '椭',
+'橫' => '横',
+'檁' => '檩',
+'檉' => '柽',
+'檔' => '档',
+'檜' => '桧',
+'檟' => '槚',
+'檢' => '检',
+'檣' => '樯',
+'檭' => '𣘴',
+'檮' => '梼',
+'檯' => '台',
+'檳' => '槟',
+'檸' => '柠',
+'檻' => '槛',
+'櫃' => '柜',
+'櫈' => '凳',
+'櫓' => '橹',
+'櫚' => '榈',
+'櫛' => '栉',
+'櫝' => '椟',
+'櫞' => '橼',
+'櫟' => '栎',
+'櫥' => '橱',
+'櫧' => '槠',
+'櫨' => '栌',
+'櫪' => '枥',
+'櫫' => '橥',
+'櫬' => '榇',
+'櫱' => '蘖',
+'櫳' => '栊',
+'櫸' => '榉',
+'櫻' => '樱',
+'欄' => '栏',
+'欅' => '榉',
+'權' => '权',
+'欍' => '𣐤',
+'欏' => '椤',
+'欒' => '栾',
+'欓' => '𣗋',
+'欖' => '榄',
+'欝' => '郁',
+'欞' => '棂',
+'欵' => '款',
+'欽' => '钦',
+'歎' => '叹',
+'歐' => '欧',
+'歛' => '敛',
+'歟' => '欤',
+'歡' => '欢',
+'歲' => '岁',
+'歴' => '历',
+'歷' => '历',
+'歸' => '归',
+'歿' => '殁',
+'殀' => '夭',
+'殘' => '残',
+'殞' => '殒',
+'殤' => '殇',
+'殨' => '㱮',
+'殫' => '殚',
+'殭' => '僵',
+'殮' => '殓',
+'殯' => '殡',
+'殰' => '㱩',
+'殲' => '歼',
+'殺' => '杀',
+'殻' => '壳',
+'殼' => '壳',
+'毀' => '毁',
+'毆' => '殴',
+'毧' => '绒',
+'毬' => '球',
+'毿' => '毵',
+'氂' => '牦',
+'氈' => '毡',
+'氊' => '毡',
+'氌' => '氇',
+'氣' => '气',
+'氫' => '氢',
+'氬' => '氩',
+'氳' => '氲',
+'氷' => '冰',
+'汙' => '污',
+'汚' => '污',
+'決' => '决',
+'沒' => '没',
+'沖' => '冲',
+'況' => '况',
+'泝' => '溯',
+'洩' => '泄',
+'洶' => '汹',
+'浹' => '浃',
+'涇' => '泾',
+'涖' => '莅',
+'涼' => '凉',
+'淒' => '凄',
+'淚' => '泪',
+'淛' => '浙',
+'淥' => '渌',
+'淨' => '净',
+'淩' => '凌',
+'淪' => '沦',
+'淵' => '渊',
+'淶' => '涞',
+'淺' => '浅',
+'渙' => '涣',
+'減' => '减',
+'渢' => '沨',
+'渦' => '涡',
+'測' => '测',
+'渾' => '浑',
+'湊' => '凑',
+'湞' => '浈',
+'湧' => '涌',
+'湯' => '汤',
+'湼' => '涅',
+'溈' => '沩',
+'準' => '准',
+'溝' => '沟',
+'溫' => '温',
+'溮' => '浉',
+'溳' => '涢',
+'溼' => '湿',
+'滄' => '沧',
+'滅' => '灭',
+'滌' => '涤',
+'滎' => '荥',
+'滙' => '汇',
+'滛' => '淫',
+'滬' => '沪',
+'滯' => '滞',
+'滲' => '渗',
+'滷' => '卤',
+'滸' => '浒',
+'滻' => '浐',
+'滾' => '滚',
+'滿' => '满',
+'漁' => '渔',
+'漊' => '溇',
+'漚' => '沤',
+'漢' => '汉',
+'漣' => '涟',
+'漬' => '渍',
+'漲' => '涨',
+'漵' => '溆',
+'漸' => '渐',
+'漿' => '浆',
+'潁' => '颍',
+'潄' => '漱',
+'潑' => '泼',
+'潔' => '洁',
+'潙' => '沩',
+'潛' => '潜',
+'潤' => '润',
+'潯' => '浔',
+'潰' => '溃',
+'潷' => '滗',
+'潿' => '涠',
+'澀' => '涩',
+'澁' => '涩',
+'澅' => '𣶩',
+'澆' => '浇',
+'澇' => '涝',
+'澐' => '沄',
+'澗' => '涧',
+'澠' => '渑',
+'澤' => '泽',
+'澦' => '滪',
+'澩' => '泶',
+'澮' => '浍',
+'澱' => '淀',
+'澾' => '㳠',
+'濁' => '浊',
+'濃' => '浓',
+'濄' => '㳡',
+'濆' => '𣸣',
+'濇' => '涩',
+'濕' => '湿',
+'濘' => '泞',
+'濜' => '浕',
+'濟' => '济',
+'濤' => '涛',
+'濧' => '㳔',
+'濫' => '滥',
+'濰' => '潍',
+'濱' => '滨',
+'濶' => '阔',
+'濺' => '溅',
+'濼' => '泺',
+'濾' => '滤',
+'瀂' => '澛',
+'瀃' => '𣽷',
+'瀅' => '滢',
+'瀆' => '渎',
+'瀇' => '㲿',
+'瀉' => '泻',
+'瀋' => '沈',
+'瀏' => '浏',
+'瀕' => '濒',
+'瀘' => '泸',
+'瀝' => '沥',
+'瀟' => '潇',
+'瀠' => '潆',
+'瀦' => '潴',
+'瀧' => '泷',
+'瀨' => '濑',
+'瀰' => '弥',
+'瀲' => '潋',
+'瀾' => '澜',
+'灃' => '沣',
+'灄' => '滠',
+'灋' => '法',
+'灑' => '洒',
+'灕' => '漓',
+'灘' => '滩',
+'灙' => '𣺼',
+'灝' => '灏',
+'灠' => '漤',
+'灣' => '湾',
+'灤' => '滦',
+'灧' => '滟',
+'灩' => '滟',
+'災' => '灾',
+'為' => '为',
+'烏' => '乌',
+'烖' => '灾',
+'烴' => '烃',
+'無' => '无',
+'煉' => '炼',
+'煑' => '煮',
+'煒' => '炜',
+'煗' => '暖',
+'煙' => '烟',
+'煢' => '茕',
+'煥' => '焕',
+'煩' => '烦',
+'煬' => '炀',
+'煱' => '㶽',
+'熅' => '煴',
+'熈' => '熙',
+'熉' => '𤈶',
+'熌' => '𤇄',
+'熒' => '荧',
+'熓' => '𤆡',
+'熗' => '炝',
+'熡' => '𤋏',
+'熱' => '热',
+'熲' => '颎',
+'熾' => '炽',
+'燁' => '烨',
+'燄' => '焰',
+'燈' => '灯',
+'燉' => '炖',
+'燒' => '烧',
+'燙' => '烫',
+'燜' => '焖',
+'營' => '营',
+'燦' => '灿',
+'燬' => '毁',
+'燭' => '烛',
+'燴' => '烩',
+'燶' => '㶶',
+'燻' => '熏',
+'燼' => '烬',
+'燾' => '焘',
+'爄' => '𤇃',
+'爍' => '烁',
+'爐' => '炉',
+'爗' => '烨',
+'爛' => '烂',
+'爭' => '争',
+'爲' => '为',
+'爺' => '爷',
+'爾' => '尔',
+'牀' => '床',
+'牆' => '墙',
+'牋' => '笺',
+'牎' => '窗',
+'牐' => '闸',
+'牓' => '榜',
+'牕' => '窗',
+'牘' => '牍',
+'牠' => '它',
+'牴' => '抵',
+'牽' => '牵',
+'犖' => '荦',
+'犢' => '犊',
+'犧' => '牺',
+'狀' => '状',
+'狥' => '徇',
+'狹' => '狭',
+'狽' => '狈',
+'猂' => '悍',
+'猙' => '狰',
+'猨' => '猿',
+'猶' => '犹',
+'猻' => '狲',
+'獁' => '犸',
+'獃' => '呆',
+'獄' => '狱',
+'獅' => '狮',
+'獎' => '奖',
+'獘' => '毙',
+'獧' => '狷',
+'獨' => '独',
+'獪' => '狯',
+'獫' => '猃',
+'獮' => '狝',
+'獰' => '狞',
+'獱' => '㺍',
+'獲' => '获',
+'獵' => '猎',
+'獷' => '犷',
+'獸' => '兽',
+'獺' => '獭',
+'獻' => '献',
+'獼' => '猕',
+'玀' => '猡',
+'玁' => '𤞤',
+'玅' => '妙',
+'現' => '现',
+'琖' => '盏',
+'琱' => '雕',
+'琺' => '珐',
+'琿' => '珲',
+'瑇' => '玳',
+'瑋' => '玮',
+'瑒' => '玚',
+'瑣' => '琐',
+'瑤' => '瑶',
+'瑩' => '莹',
+'瑪' => '玛',
+'瑯' => '琅',
+'瑲' => '玱',
+'瑽' => '𪻐',
+'璉' => '琏',
+'璡' => '琎',
+'璢' => '瑠',
+'璣' => '玑',
+'璦' => '瑷',
+'璫' => '珰',
+'璯' => '㻅',
+'環' => '环',
+'璵' => '玙',
+'璸' => '瑸',
+'璽' => '玺',
+'瓊' => '琼',
+'瓏' => '珑',
+'瓔' => '璎',
+'瓕' => '𤦀',
+'瓚' => '瓒',
+'甌' => '瓯',
+'甎' => '砖',
+'甕' => '瓮',
+'甖' => '罂',
+'甞' => '尝',
+'產' => '产',
+'産' => '产',
+'畂' => '亩',
+'畆' => '亩',
+'畝' => '亩',
+'畢' => '毕',
+'畧' => '略',
+'畫' => '画',
+'畮' => '亩',
+'異' => '异',
+'畱' => '留',
+'畵' => '画',
+'當' => '当',
+'疇' => '畴',
+'疊' => '叠',
+'疎' => '疏',
+'疘' => '肛',
+'疿' => '痱',
+'痐' => '蛔',
+'痙' => '痉',
+'痠' => '酸',
+'痲' => '痳',
+'痺' => '痹',
+'瘂' => '痖',
+'瘉' => '愈',
+'瘋' => '疯',
+'瘍' => '疡',
+'瘓' => '痪',
+'瘖' => '喑',
+'瘞' => '瘗',
+'瘡' => '疮',
+'瘧' => '疟',
+'瘮' => '瘆',
+'瘲' => '疭',
+'瘺' => '瘘',
+'瘻' => '瘘',
+'療' => '疗',
+'癄' => '憔',
+'癅' => '瘤',
+'癆' => '痨',
+'癇' => '痫',
+'癈' => '废',
+'癉' => '瘅',
+'癒' => '愈',
+'癘' => '疠',
+'癟' => '瘪',
+'癡' => '痴',
+'癢' => '痒',
+'癤' => '疖',
+'癥' => '症',
+'癧' => '疬',
+'癩' => '癞',
+'癬' => '癣',
+'癭' => '瘿',
+'癮' => '瘾',
+'癰' => '痈',
+'癱' => '瘫',
+'癲' => '癫',
+'發' => '发',
+'皁' => '皂',
+'皐' => '皋',
+'皚' => '皑',
+'皜' => '皓',
+'皟' => '𤾀',
+'皰' => '疱',
+'皷' => '鼓',
+'皸' => '皲',
+'皺' => '皱',
+'盃' => '杯',
+'盇' => '盍',
+'盌' => '碗',
+'盜' => '盗',
+'盞' => '盏',
+'盡' => '尽',
+'監' => '监',
+'盤' => '盘',
+'盧' => '卢',
+'盪' => '荡',
+'眎' => '视',
+'眞' => '真',
+'眡' => '视',
+'眥' => '眦',
+'眾' => '众',
+'睍' => '𪾢',
+'睏' => '困',
+'睜' => '睁',
+'睞' => '睐',
+'睠' => '眷',
+'睪' => '睾',
+'瞇' => '眯',
+'瞖' => '翳',
+'瞘' => '眍',
+'瞜' => '䁖',
+'瞞' => '瞒',
+'瞤' => '𥆧',
+'瞭' => '了',
+'瞶' => '瞆',
+'瞼' => '睑',
+'矁' => '瞅',
+'矇' => '蒙',
+'矓' => '眬',
+'矙' => '瞰',
+'矚' => '瞩',
+'矯' => '矫',
+'砲' => '炮',
+'硜' => '硁',
+'硤' => '硖',
+'硨' => '砗',
+'硯' => '砚',
+'碙' => '𥐻',
+'碩' => '硕',
+'碪' => '砧',
+'碭' => '砀',
+'碸' => '砜',
+'確' => '确',
+'碼' => '码',
+'碽' => '䂵',
+'磑' => '硙',
+'磚' => '砖',
+'磟' => '碌',
+'磠' => '硵',
+'磣' => '碜',
+'磧' => '碛',
+'磯' => '矶',
+'磽' => '硗',
+'礄' => '硚',
+'礆' => '碱',
+'礎' => '础',
+'礒' => '𥐟',
+'礙' => '碍',
+'礦' => '矿',
+'礪' => '砺',
+'礫' => '砾',
+'礬' => '矾',
+'礮' => '炮',
+'礱' => '砻',
+'祕' => '秘',
+'祘' => '算',
+'祿' => '禄',
+'禍' => '祸',
+'禎' => '祯',
+'禕' => '祎',
+'禡' => '祃',
+'禦' => '御',
+'禪' => '禅',
+'禮' => '礼',
+'禰' => '祢',
+'禱' => '祷',
+'禿' => '秃',
+'秈' => '籼',
+'秊' => '年',
+'秌' => '秋',
+'秖' => '只',
+'稅' => '税',
+'稈' => '秆',
+'稉' => '粳',
+'稏' => '䅉',
+'稜' => '棱',
+'稟' => '禀',
+'稬' => '糯',
+'稭' => '秸',
+'種' => '种',
+'稱' => '称',
+'稾' => '稿',
+'穀' => '谷',
+'穌' => '稣',
+'積' => '积',
+'穎' => '颖',
+'穠' => '秾',
+'穡' => '穑',
+'穢' => '秽',
+'穤' => '糯',
+'穨' => '颓',
+'穩' => '稳',
+'穫' => '获',
+'穭' => '稆',
+'穽' => '阱',
+'窓' => '窗',
+'窩' => '窝',
+'窪' => '洼',
+'窮' => '穷',
+'窯' => '窑',
+'窰' => '窑',
+'窵' => '窎',
+'窶' => '窭',
+'窺' => '窥',
+'窻' => '窗',
+'竄' => '窜',
+'竅' => '窍',
+'竇' => '窦',
+'竈' => '灶',
+'竊' => '窃',
+'竚' => '伫',
+'竝' => '并',
+'竢' => '俟',
+'竪' => '竖',
+'競' => '竞',
+'筆' => '笔',
+'筍' => '笋',
+'筞' => '策',
+'筧' => '笕',
+'筩' => '筒',
+'筯' => '箸',
+'筴' => '䇲',
+'箇' => '个',
+'箋' => '笺',
+'箏' => '筝',
+'箒' => '帚',
+'箠' => '棰',
+'節' => '节',
+'範' => '范',
+'築' => '筑',
+'篋' => '箧',
+'篔' => '筼',
+'篘' => '𥬠',
+'篛' => '箬',
+'篤' => '笃',
+'篩' => '筛',
+'篳' => '筚',
+'簀' => '箦',
+'簍' => '篓',
+'簑' => '蓑',
+'簒' => '篡',
+'簞' => '箪',
+'簡' => '简',
+'簣' => '篑',
+'簫' => '箫',
+'簮' => '簪',
+'簷' => '檐',
+'簹' => '筜',
+'簽' => '签',
+'簾' => '帘',
+'籃' => '篮',
+'籋' => '𥬞',
+'籌' => '筹',
+'籐' => '藤',
+'籔' => '䉤',
+'籙' => '箓',
+'籛' => '篯',
+'籜' => '箨',
+'籟' => '籁',
+'籠' => '笼',
+'籤' => '签',
+'籩' => '笾',
+'籪' => '簖',
+'籬' => '篱',
+'籮' => '箩',
+'籲' => '吁',
+'粃' => '秕',
+'粧' => '妆',
+'粵' => '粤',
+'糉' => '粽',
+'糝' => '糁',
+'糞' => '粪',
+'糧' => '粮',
+'糰' => '团',
+'糲' => '粝',
+'糴' => '籴',
+'糶' => '粜',
+'糹' => '纟',
+'糾' => '纠',
+'紀' => '纪',
+'紂' => '纣',
+'約' => '约',
+'紅' => '红',
+'紆' => '纡',
+'紇' => '纥',
+'紈' => '纨',
+'紉' => '纫',
+'紋' => '纹',
+'納' => '纳',
+'紐' => '纽',
+'紓' => '纾',
+'純' => '纯',
+'紕' => '纰',
+'紖' => '纼',
+'紗' => '纱',
+'紘' => '纮',
+'紙' => '纸',
+'級' => '级',
+'紛' => '纷',
+'紜' => '纭',
+'紝' => '纴',
+'紡' => '纺',
+'紥' => '扎',
+'紬' => '䌷',
+'紮' => '扎',
+'細' => '细',
+'紱' => '绂',
+'紲' => '绁',
+'紳' => '绅',
+'紵' => '纻',
+'紹' => '绍',
+'紺' => '绀',
+'紼' => '绋',
+'紿' => '绐',
+'絀' => '绌',
+'終' => '终',
+'絃' => '弦',
+'組' => '组',
+'絅' => '䌹',
+'絆' => '绊',
+'絎' => '绗',
+'絏' => '绁',
+'結' => '结',
+'絕' => '绝',
+'絛' => '绦',
+'絝' => '绔',
+'絞' => '绞',
+'絡' => '络',
+'絢' => '绚',
+'給' => '给',
+'絨' => '绒',
+'絰' => '绖',
+'統' => '统',
+'絲' => '丝',
+'絳' => '绛',
+'絶' => '绝',
+'絹' => '绢',
+'絺' => '𫄨',
+'綀' => '𦈌',
+'綁' => '绑',
+'綃' => '绡',
+'綆' => '绠',
+'綇' => '𦈋',
+'綈' => '绨',
+'綉' => '绣',
+'綌' => '绤',
+'綏' => '绥',
+'綐' => '䌼',
+'綑' => '捆',
+'經' => '经',
+'綜' => '综',
+'綞' => '缍',
+'綠' => '绿',
+'綢' => '绸',
+'綣' => '绻',
+'綫' => '线',
+'綬' => '绶',
+'維' => '维',
+'綯' => '绹',
+'綰' => '绾',
+'綱' => '纲',
+'網' => '网',
+'綴' => '缀',
+'綵' => '彩',
+'綸' => '纶',
+'綹' => '绺',
+'綺' => '绮',
+'綻' => '绽',
+'綽' => '绰',
+'綾' => '绫',
+'綿' => '绵',
+'緄' => '绲',
+'緇' => '缁',
+'緊' => '紧',
+'緋' => '绯',
+'緍' => '𦈏',
+'緐' => '繁',
+'緑' => '绿',
+'緒' => '绪',
+'緓' => '绬',
+'緔' => '绱',
+'緗' => '缃',
+'緘' => '缄',
+'緙' => '缂',
+'線' => '线',
+'緜' => '绵',
+'緝' => '缉',
+'緞' => '缎',
+'締' => '缔',
+'緡' => '缗',
+'緣' => '缘',
+'緥' => '褓',
+'緦' => '缌',
+'編' => '编',
+'緩' => '缓',
+'緬' => '缅',
+'緯' => '纬',
+'緰' => '𦈕',
+'緱' => '缑',
+'緲' => '缈',
+'練' => '练',
+'緶' => '缏',
+'緷' => '𦈉',
+'緸' => '𦈑',
+'緹' => '缇',
+'緻' => '致',
+'緼' => '缊',
+'縈' => '萦',
+'縉' => '缙',
+'縊' => '缢',
+'縋' => '缒',
+'縎' => '𦈔',
+'縐' => '绉',
+'縑' => '缣',
+'縕' => '缊',
+'縗' => '缞',
+'縛' => '缚',
+'縝' => '缜',
+'縞' => '缟',
+'縟' => '缛',
+'縣' => '县',
+'縧' => '绦',
+'縫' => '缝',
+'縬' => '𦈚',
+'縭' => '缡',
+'縮' => '缩',
+'縱' => '纵',
+'縲' => '缧',
+'縳' => '䌸',
+'縴' => '纤',
+'縵' => '缦',
+'縶' => '絷',
+'縷' => '缕',
+'縹' => '缥',
+'縺' => '𦈐',
+'總' => '总',
+'績' => '绩',
+'繃' => '绷',
+'繅' => '缫',
+'繆' => '缪',
+'繏' => '𦈝',
+'繐' => '穗',
+'繒' => '缯',
+'繓' => '𦈛',
+'織' => '织',
+'繕' => '缮',
+'繖' => '伞',
+'繙' => '翻',
+'繚' => '缭',
+'繞' => '绕',
+'繟' => '𦈎',
+'繡' => '绣',
+'繢' => '缋',
+'繦' => '襁',
+'繩' => '绳',
+'繪' => '绘',
+'繫' => '系',
+'繭' => '茧',
+'繮' => '缰',
+'繯' => '缳',
+'繰' => '缲',
+'繳' => '缴',
+'繸' => '䍁',
+'繹' => '绎',
+'繻' => '𦈡',
+'繼' => '继',
+'繽' => '缤',
+'繾' => '缱',
+'繿' => '䍀',
+'纁' => '𫄸',
+'纇' => '颣',
+'纈' => '缬',
+'纊' => '纩',
+'續' => '续',
+'纍' => '累',
+'纏' => '缠',
+'纓' => '缨',
+'纔' => '才',
+'纖' => '纤',
+'纘' => '缵',
+'纜' => '缆',
+'缽' => '钵',
+'罇' => '樽',
+'罈' => '坛',
+'罋' => '瓮',
+'罌' => '罂',
+'罎' => '坛',
+'罰' => '罚',
+'罵' => '骂',
+'罷' => '罢',
+'罸' => '罚',
+'羅' => '罗',
+'羆' => '罴',
+'羈' => '羁',
+'羋' => '芈',
+'羗' => '羌',
+'羢' => '绒',
+'羣' => '群',
+'羥' => '羟',
+'羨' => '羡',
+'義' => '义',
+'羶' => '膻',
+'翄' => '翅',
+'習' => '习',
+'翫' => '玩',
+'翬' => '翚',
+'翶' => '翱',
+'翹' => '翘',
+'翽' => '翙',
+'耡' => '锄',
+'耬' => '耧',
+'耮' => '耢',
+'聖' => '圣',
+'聞' => '闻',
+'聯' => '联',
+'聰' => '聪',
+'聲' => '声',
+'聳' => '耸',
+'聵' => '聩',
+'聶' => '聂',
+'職' => '职',
+'聹' => '聍',
+'聽' => '听',
+'聾' => '聋',
+'肅' => '肃',
+'肎' => '肯',
+'肐' => '胳',
+'肧' => '胚',
+'胷' => '胸',
+'脃' => '脆',
+'脅' => '胁',
+'脇' => '胁',
+'脈' => '脉',
+'脗' => '吻',
+'脛' => '胫',
+'脣' => '唇',
+'脥' => '𣍰',
+'脫' => '脱',
+'脹' => '胀',
+'腁' => '胼',
+'腎' => '肾',
+'腖' => '胨',
+'腡' => '脶',
+'腦' => '脑',
+'腪' => '𣍯',
+'腫' => '肿',
+'腳' => '脚',
+'腸' => '肠',
+'膃' => '腽',
+'膓' => '肠',
+'膕' => '腘',
+'膚' => '肤',
+'膞' => '䏝',
+'膠' => '胶',
+'膢' => '𦝼',
+'膩' => '腻',
+'膽' => '胆',
+'膾' => '脍',
+'膿' => '脓',
+'臈' => '腊',
+'臉' => '脸',
+'臋' => '臀',
+'臍' => '脐',
+'臏' => '膑',
+'臕' => '膘',
+'臗' => '𣎑',
+'臘' => '腊',
+'臙' => '胭',
+'臚' => '胪',
+'臝' => '裸',
+'臟' => '脏',
+'臠' => '脔',
+'臢' => '臜',
+'臥' => '卧',
+'臨' => '临',
+'臯' => '皋',
+'臺' => '台',
+'與' => '与',
+'興' => '兴',
+'舉' => '举',
+'舊' => '旧',
+'舖' => '铺',
+'舘' => '馆',
+'舩' => '船',
+'艙' => '舱',
+'艢' => '樯',
+'艣' => '橹',
+'艤' => '舣',
+'艦' => '舰',
+'艪' => '橹',
+'艫' => '舻',
+'艱' => '艰',
+'艷' => '艳',
+'芲' => '花',
+'芻' => '刍',
+'苧' => '苎',
+'茘' => '荔',
+'茲' => '兹',
+'荊' => '荆',
+'荳' => '豆',
+'莊' => '庄',
+'莖' => '茎',
+'莢' => '荚',
+'莧' => '苋',
+'華' => '华',
+'菸' => '烟',
+'萇' => '苌',
+'萊' => '莱',
+'萬' => '万',
+'萲' => '萱',
+'萴' => '荝',
+'萵' => '莴',
+'葉' => '叶',
+'葒' => '荭',
+'葠' => '参',
+'葤' => '荮',
+'葦' => '苇',
+'葯' => '药',
+'葷' => '荤',
+'蒓' => '莼',
+'蒔' => '莳',
+'蒞' => '莅',
+'蒼' => '苍',
+'蓀' => '荪',
+'蓆' => '席',
+'蓋' => '盖',
+'蓡' => '参',
+'蓮' => '莲',
+'蓯' => '苁',
+'蓴' => '莼',
+'蓽' => '荜',
+'蔔' => '卜',
+'蔕' => '蒂',
+'蔘' => '参',
+'蔞' => '蒌',
+'蔣' => '蒋',
+'蔥' => '葱',
+'蔦' => '茑',
+'蔭' => '荫',
+'蕁' => '荨',
+'蕆' => '蒇',
+'蕎' => '荞',
+'蕒' => '荬',
+'蕓' => '芸',
+'蕕' => '莸',
+'蕘' => '荛',
+'蕚' => '萼',
+'蕢' => '蒉',
+'蕩' => '荡',
+'蕪' => '芜',
+'蕭' => '萧',
+'蕷' => '蓣',
+'蕿' => '萱',
+'薀' => '蕰',
+'薈' => '荟',
+'薊' => '蓟',
+'薌' => '芗',
+'薑' => '姜',
+'薔' => '蔷',
+'薘' => '荙',
+'薟' => '莶',
+'薦' => '荐',
+'薩' => '萨',
+'薴' => '苧',
+'薺' => '荠',
+'藍' => '蓝',
+'藎' => '荩',
+'藝' => '艺',
+'藥' => '药',
+'藪' => '薮',
+'藭' => '䓖',
+'藴' => '蕴',
+'藶' => '苈',
+'藷' => '薯',
+'藹' => '蔼',
+'藺' => '蔺',
+'藼' => '萱',
+'蘀' => '萚',
+'蘄' => '蕲',
+'蘆' => '芦',
+'蘇' => '苏',
+'蘊' => '蕴',
+'蘐' => '萱',
+'蘓' => '苏',
+'蘚' => '藓',
+'蘞' => '蔹',
+'蘢' => '茏',
+'蘤' => '花',
+'蘭' => '兰',
+'蘺' => '蓠',
+'蘿' => '萝',
+'虆' => '蔂',
+'處' => '处',
+'虛' => '虚',
+'虜' => '虏',
+'號' => '号',
+'虧' => '亏',
+'虯' => '虬',
+'蚘' => '蛔',
+'蛕' => '蛔',
+'蛺' => '蛱',
+'蛻' => '蜕',
+'蜆' => '蚬',
+'蜋' => '螂',
+'蜖' => '蛔',
+'蜨' => '蝶',
+'蝕' => '蚀',
+'蝟' => '猬',
+'蝦' => '虾',
+'蝨' => '虱',
+'蝯' => '猿',
+'蝱' => '虻',
+'蝸' => '蜗',
+'螄' => '蛳',
+'螎' => '融',
+'螞' => '蚂',
+'螡' => '蚊',
+'螢' => '萤',
+'螮' => '䗖',
+'螻' => '蝼',
+'螿' => '螀',
+'蟁' => '蚊',
+'蟄' => '蛰',
+'蟇' => '蟆',
+'蟈' => '蝈',
+'蟎' => '螨',
+'蟣' => '虮',
+'蟬' => '蝉',
+'蟯' => '蛲',
+'蟲' => '虫',
+'蟶' => '蛏',
+'蟻' => '蚁',
+'蠁' => '蚃',
+'蠅' => '蝇',
+'蠆' => '虿',
+'蠍' => '蝎',
+'蠏' => '蟹',
+'蠐' => '蛴',
+'蠑' => '蝾',
+'蠒' => '茧',
+'蠔' => '蚝',
+'蠟' => '蜡',
+'蠣' => '蛎',
+'蠨' => '蟏',
+'蠭' => '蜂',
+'蠱' => '蛊',
+'蠶' => '蚕',
+'蠻' => '蛮',
+'衂' => '衄',
+'衆' => '众',
+'衇' => '脉',
+'衊' => '蔑',
+'術' => '术',
+'衕' => '同',
+'衚' => '胡',
+'衛' => '卫',
+'衝' => '冲',
+'衞' => '卫',
+'衺' => '邪',
+'袞' => '衮',
+'袟' => '帙',
+'袵' => '衽',
+'裊' => '袅',
+'裌' => '袷',
+'裏' => '里',
+'補' => '补',
+'裝' => '装',
+'裠' => '裙',
+'裡' => '里',
+'製' => '制',
+'複' => '复',
+'褌' => '裈',
+'褘' => '袆',
+'褭' => '袅',
+'褲' => '裤',
+'褳' => '裢',
+'褸' => '褛',
+'褻' => '亵',
+'襀' => '𫌀',
+'襃' => '褒',
+'襉' => '裥',
+'襍' => '杂',
+'襏' => '袯',
+'襖' => '袄',
+'襝' => '裣',
+'襠' => '裆',
+'襤' => '褴',
+'襪' => '袜',
+'襬' => '䙓',
+'襯' => '衬',
+'襲' => '袭',
+'襴' => '襕',
+'覇' => '霸',
+'覈' => '核',
+'覊' => '羁',
+'見' => '见',
+'覎' => '觃',
+'規' => '规',
+'覓' => '觅',
+'覔' => '觅',
+'視' => '视',
+'覘' => '觇',
+'覡' => '觋',
+'覥' => '觍',
+'覦' => '觎',
+'覩' => '睹',
+'親' => '亲',
+'覬' => '觊',
+'覯' => '觏',
+'覲' => '觐',
+'覷' => '觑',
+'覺' => '觉',
+'覼' => '𫌨',
+'覽' => '览',
+'覿' => '觌',
+'觀' => '观',
+'觝' => '抵',
+'觴' => '觞',
+'觶' => '觯',
+'觸' => '触',
+'訁' => '讠',
+'訂' => '订',
+'訃' => '讣',
+'計' => '计',
+'訊' => '讯',
+'訌' => '讧',
+'討' => '讨',
+'訐' => '讦',
+'訑' => '𫍙',
+'訒' => '讱',
+'訓' => '训',
+'訕' => '讪',
+'訖' => '讫',
+'託' => '托',
+'記' => '记',
+'訛' => '讹',
+'訝' => '讶',
+'訟' => '讼',
+'訢' => '䜣',
+'訣' => '诀',
+'訥' => '讷',
+'訩' => '讻',
+'訪' => '访',
+'設' => '设',
+'許' => '许',
+'訴' => '诉',
+'訶' => '诃',
+'診' => '诊',
+'註' => '注',
+'証' => '证',
+'詀' => '𧮪',
+'詁' => '诂',
+'詆' => '诋',
+'詎' => '讵',
+'詐' => '诈',
+'詒' => '诒',
+'詔' => '诏',
+'評' => '评',
+'詖' => '诐',
+'詗' => '诇',
+'詘' => '诎',
+'詛' => '诅',
+'詞' => '词',
+'詠' => '咏',
+'詡' => '诩',
+'詢' => '询',
+'詣' => '诣',
+'試' => '试',
+'詩' => '诗',
+'詫' => '诧',
+'詬' => '诟',
+'詭' => '诡',
+'詮' => '诠',
+'詰' => '诘',
+'話' => '话',
+'該' => '该',
+'詳' => '详',
+'詵' => '诜',
+'詶' => '酬',
+'詼' => '诙',
+'詿' => '诖',
+'誄' => '诔',
+'誅' => '诛',
+'誆' => '诓',
+'誇' => '夸',
+'誌' => '志',
+'認' => '认',
+'誑' => '诳',
+'誒' => '诶',
+'誕' => '诞',
+'誖' => '悖',
+'誘' => '诱',
+'誚' => '诮',
+'語' => '语',
+'誠' => '诚',
+'誡' => '诫',
+'誣' => '诬',
+'誤' => '误',
+'誥' => '诰',
+'誦' => '诵',
+'誨' => '诲',
+'說' => '说',
+'説' => '说',
+'誰' => '谁',
+'課' => '课',
+'誶' => '谇',
+'誹' => '诽',
+'誼' => '谊',
+'誾' => '訚',
+'調' => '调',
+'諂' => '谄',
+'諄' => '谆',
+'談' => '谈',
+'諉' => '诿',
+'請' => '请',
+'諍' => '诤',
+'諏' => '诹',
+'諑' => '诼',
+'諒' => '谅',
+'論' => '论',
+'諗' => '谂',
+'諛' => '谀',
+'諜' => '谍',
+'諝' => '谞',
+'諞' => '谝',
+'諡' => '谥',
+'諢' => '诨',
+'諤' => '谔',
+'諦' => '谛',
+'諧' => '谐',
+'諫' => '谏',
+'諭' => '谕',
+'諮' => '谘',
+'諰' => '𫍰',
+'諱' => '讳',
+'諳' => '谙',
+'諶' => '谌',
+'諷' => '讽',
+'諸' => '诸',
+'諺' => '谚',
+'諼' => '谖',
+'諾' => '诺',
+'謀' => '谋',
+'謁' => '谒',
+'謂' => '谓',
+'謄' => '誊',
+'謅' => '诌',
+'謊' => '谎',
+'謌' => '歌',
+'謎' => '谜',
+'謏' => '𫍲',
+'謐' => '谧',
+'謔' => '谑',
+'謖' => '谡',
+'謗' => '谤',
+'謙' => '谦',
+'謚' => '谥',
+'講' => '讲',
+'謝' => '谢',
+'謠' => '谣',
+'謡' => '谣',
+'謨' => '谟',
+'謫' => '谪',
+'謬' => '谬',
+'謭' => '谫',
+'謳' => '讴',
+'謹' => '谨',
+'謾' => '谩',
+'譁' => '哗',
+'譆' => '嘻',
+'證' => '证',
+'譊' => '𫍢',
+'譌' => '讹',
+'譎' => '谲',
+'譏' => '讥',
+'譔' => '撰',
+'譖' => '谮',
+'識' => '识',
+'譙' => '谯',
+'譚' => '谭',
+'譜' => '谱',
+'譟' => '噪',
+'譫' => '谵',
+'譭' => '毁',
+'譯' => '译',
+'議' => '议',
+'譴' => '谴',
+'護' => '护',
+'譸' => '诪',
+'譽' => '誉',
+'譾' => '谫',
+'讀' => '读',
+'讁' => '谪',
+'變' => '变',
+'讋' => '詟',
+'讌' => '䜩',
+'讎' => '仇',
+'讐' => '雠',
+'讒' => '谗',
+'讓' => '让',
+'讕' => '谰',
+'讖' => '谶',
+'讚' => '赞',
+'讜' => '谠',
+'讞' => '谳',
+'豈' => '岂',
+'豎' => '竖',
+'豐' => '丰',
+'豓' => '艳',
+'豔' => '艳',
+'豬' => '猪',
+'豶' => '豮',
+'貍' => '狸',
+'貓' => '猫',
+'貙' => '䝙',
+'貛' => '獾',
+'貝' => '贝',
+'貞' => '贞',
+'貟' => '贠',
+'負' => '负',
+'財' => '财',
+'貢' => '贡',
+'貧' => '贫',
+'貨' => '货',
+'販' => '贩',
+'貪' => '贪',
+'貫' => '贯',
+'責' => '责',
+'貯' => '贮',
+'貰' => '贳',
+'貲' => '赀',
+'貳' => '贰',
+'貴' => '贵',
+'貶' => '贬',
+'買' => '买',
+'貸' => '贷',
+'貺' => '贶',
+'費' => '费',
+'貼' => '贴',
+'貽' => '贻',
+'貿' => '贸',
+'賀' => '贺',
+'賁' => '贲',
+'賂' => '赂',
+'賃' => '赁',
+'賄' => '贿',
+'賅' => '赅',
+'資' => '资',
+'賈' => '贾',
+'賉' => '恤',
+'賊' => '贼',
+'賑' => '赈',
+'賒' => '赊',
+'賓' => '宾',
+'賕' => '赇',
+'賙' => '赒',
+'賚' => '赉',
+'賛' => '赞',
+'賜' => '赐',
+'賞' => '赏',
+'賟' => '𧹖',
+'賠' => '赔',
+'賡' => '赓',
+'賢' => '贤',
+'賣' => '卖',
+'賤' => '贱',
+'賦' => '赋',
+'賧' => '赕',
+'質' => '质',
+'賫' => '赍',
+'賬' => '账',
+'賭' => '赌',
+'賰' => '䞐',
+'賴' => '赖',
+'賵' => '赗',
+'賷' => '赍',
+'賺' => '赚',
+'賻' => '赙',
+'購' => '购',
+'賽' => '赛',
+'賾' => '赜',
+'贃' => '𧹗',
+'贄' => '贽',
+'贅' => '赘',
+'贇' => '赟',
+'贈' => '赠',
+'贊' => '赞',
+'贋' => '赝',
+'贍' => '赡',
+'贏' => '赢',
+'贐' => '赆',
+'贑' => '赣',
+'贓' => '赃',
+'贔' => '赑',
+'贖' => '赎',
+'贗' => '赝',
+'贛' => '赣',
+'贜' => '赃',
+'赬' => '赪',
+'趂' => '趁',
+'趕' => '赶',
+'趙' => '赵',
+'趨' => '趋',
+'趲' => '趱',
+'跡' => '迹',
+'跥' => '跺',
+'跴' => '踩',
+'踁' => '胫',
+'踐' => '践',
+'踫' => '碰',
+'踰' => '逾',
+'踴' => '踊',
+'蹌' => '跄',
+'蹏' => '蹄',
+'蹔' => '暂',
+'蹕' => '跸',
+'蹟' => '迹',
+'蹠' => '跖',
+'蹣' => '蹒',
+'蹤' => '踪',
+'蹧' => '糟',
+'蹵' => '蹴',
+'蹺' => '跷',
+'蹻' => '𫏋',
+'躂' => '跶',
+'躉' => '趸',
+'躊' => '踌',
+'躋' => '跻',
+'躍' => '跃',
+'躎' => '䟢',
+'躑' => '踯',
+'躒' => '跞',
+'躓' => '踬',
+'躕' => '蹰',
+'躚' => '跹',
+'躝' => '𨅬',
+'躡' => '蹑',
+'躥' => '蹿',
+'躦' => '躜',
+'躪' => '躏',
+'躭' => '耽',
+'躳' => '躬',
+'躶' => '裸',
+'軀' => '躯',
+'軉' => '𨉗',
+'車' => '车',
+'軋' => '轧',
+'軌' => '轨',
+'軍' => '军',
+'軏' => '𫐄',
+'軑' => '轪',
+'軒' => '轩',
+'軔' => '轫',
+'軗' => '𨐅',
+'軛' => '轭',
+'軟' => '软',
+'軤' => '轷',
+'軨' => '𫐉',
+'軫' => '轸',
+'軲' => '轱',
+'軸' => '轴',
+'軹' => '轵',
+'軺' => '轺',
+'軻' => '轲',
+'軼' => '轶',
+'軾' => '轼',
+'較' => '较',
+'輄' => '𨐈',
+'輅' => '辂',
+'輇' => '辁',
+'輈' => '辀',
+'載' => '载',
+'輊' => '轾',
+'輒' => '辄',
+'輓' => '挽',
+'輔' => '辅',
+'輕' => '轻',
+'輗' => '𫐐',
+'輙' => '辄',
+'輛' => '辆',
+'輜' => '辎',
+'輝' => '辉',
+'輞' => '辋',
+'輟' => '辍',
+'輥' => '辊',
+'輦' => '辇',
+'輩' => '辈',
+'輪' => '轮',
+'輬' => '辌',
+'輭' => '软',
+'輮' => '𫐓',
+'輯' => '辑',
+'輳' => '辏',
+'輸' => '输',
+'輻' => '辐',
+'輼' => '辒',
+'輾' => '辗',
+'輿' => '舆',
+'轀' => '辒',
+'轂' => '毂',
+'轄' => '辖',
+'轅' => '辕',
+'轆' => '辘',
+'轉' => '转',
+'轍' => '辙',
+'轎' => '轿',
+'轔' => '辚',
+'轟' => '轰',
+'轡' => '辔',
+'轢' => '轹',
+'轣' => '𫐆',
+'轤' => '轳',
+'辠' => '罪',
+'辢' => '辣',
+'辤' => '辞',
+'辦' => '办',
+'辭' => '辞',
+'辮' => '辫',
+'辯' => '辩',
+'農' => '农',
+'辳' => '农',
+'迴' => '回',
+'迻' => '移',
+'逈' => '迥',
+'逕' => '迳',
+'這' => '这',
+'連' => '连',
+'逥' => '回',
+'逩' => '奔',
+'逬' => '迸',
+'週' => '周',
+'進' => '进',
+'遉' => '侦',
+'遊' => '游',
+'運' => '运',
+'過' => '过',
+'達' => '达',
+'違' => '违',
+'遙' => '遥',
+'遜' => '逊',
+'遞' => '递',
+'遠' => '远',
+'遡' => '溯',
+'適' => '适',
+'遯' => '遁',
+'遲' => '迟',
+'遷' => '迁',
+'選' => '选',
+'遺' => '遗',
+'遼' => '辽',
+'邁' => '迈',
+'還' => '还',
+'邇' => '迩',
+'邊' => '边',
+'邏' => '逻',
+'邐' => '逦',
+'郟' => '郏',
+'郵' => '邮',
+'鄆' => '郓',
+'鄉' => '乡',
+'鄒' => '邹',
+'鄔' => '邬',
+'鄖' => '郧',
+'鄧' => '邓',
+'鄭' => '郑',
+'鄰' => '邻',
+'鄲' => '郸',
+'鄴' => '邺',
+'鄶' => '郐',
+'鄺' => '邝',
+'酇' => '酂',
+'酈' => '郦',
+'酖' => '鸩',
+'酧' => '酬',
+'醃' => '腌',
+'醆' => '盏',
+'醕' => '醇',
+'醜' => '丑',
+'醞' => '酝',
+'醣' => '糖',
+'醫' => '医',
+'醬' => '酱',
+'醯' => '酰',
+'醱' => '酦',
+'醻' => '酬',
+'醼' => '宴',
+'釀' => '酿',
+'釁' => '衅',
+'釃' => '酾',
+'釅' => '酽',
+'釋' => '释',
+'釒' => '钅',
+'釓' => '钆',
+'釔' => '钇',
+'釕' => '钌',
+'釗' => '钊',
+'釘' => '钉',
+'釙' => '钋',
+'針' => '针',
+'釣' => '钓',
+'釤' => '钐',
+'釦' => '扣',
+'釧' => '钏',
+'釩' => '钒',
+'釬' => '焊',
+'釳' => '𨰿',
+'釵' => '钗',
+'釷' => '钍',
+'釹' => '钕',
+'釺' => '钎',
+'釾' => '䥺',
+'鈀' => '钯',
+'鈁' => '钫',
+'鈃' => '钘',
+'鈄' => '钭',
+'鈅' => '钥',
+'鈇' => '𫓧',
+'鈈' => '钚',
+'鈉' => '钠',
+'鈋' => '𨱂',
+'鈍' => '钝',
+'鈎' => '钩',
+'鈐' => '钤',
+'鈑' => '钣',
+'鈒' => '钑',
+'鈔' => '钞',
+'鈕' => '钮',
+'鈞' => '钧',
+'鈠' => '𨱁',
+'鈣' => '钙',
+'鈥' => '钬',
+'鈦' => '钛',
+'鈧' => '钪',
+'鈮' => '铌',
+'鈯' => '𨱄',
+'鈰' => '铈',
+'鈲' => '𨱃',
+'鈳' => '钶',
+'鈴' => '铃',
+'鈷' => '钴',
+'鈸' => '钹',
+'鈹' => '铍',
+'鈺' => '钰',
+'鈽' => '钸',
+'鈾' => '铀',
+'鈿' => '钿',
+'鉀' => '钾',
+'鉁' => '𨱅',
+'鉄' => '铁',
+'鉅' => '钜',
+'鉆' => '钻',
+'鉈' => '铊',
+'鉉' => '铉',
+'鉋' => '铇',
+'鉍' => '铋',
+'鉑' => '铂',
+'鉕' => '钷',
+'鉗' => '钳',
+'鉚' => '铆',
+'鉛' => '铅',
+'鉞' => '钺',
+'鉢' => '钵',
+'鉤' => '钩',
+'鉦' => '钲',
+'鉬' => '钼',
+'鉭' => '钽',
+'鉶' => '铏',
+'鉸' => '铰',
+'鉺' => '铒',
+'鉻' => '铬',
+'鉿' => '铪',
+'銀' => '银',
+'銃' => '铳',
+'銅' => '铜',
+'銍' => '铚',
+'銑' => '铣',
+'銓' => '铨',
+'銖' => '铢',
+'銘' => '铭',
+'銚' => '铫',
+'銛' => '铦',
+'銜' => '衔',
+'銠' => '铑',
+'銣' => '铷',
+'銥' => '铱',
+'銦' => '铟',
+'銨' => '铵',
+'銩' => '铥',
+'銪' => '铕',
+'銫' => '铯',
+'銬' => '铐',
+'銱' => '铞',
+'銲' => '焊',
+'銳' => '锐',
+'銶' => '𨱇',
+'銷' => '销',
+'銻' => '锑',
+'銼' => '锉',
+'鋁' => '铝',
+'鋃' => '锒',
+'鋅' => '锌',
+'鋇' => '钡',
+'鋉' => '𨱈',
+'鋌' => '铤',
+'鋏' => '铗',
+'鋒' => '锋',
+'鋙' => '铻',
+'鋝' => '锊',
+'鋟' => '锓',
+'鋣' => '铘',
+'鋤' => '锄',
+'鋥' => '锃',
+'鋦' => '锔',
+'鋨' => '锇',
+'鋩' => '铓',
+'鋪' => '铺',
+'鋭' => '锐',
+'鋮' => '铖',
+'鋯' => '锆',
+'鋰' => '锂',
+'鋱' => '铽',
+'鋶' => '锍',
+'鋸' => '锯',
+'鋼' => '钢',
+'錁' => '锞',
+'錂' => '𨱋',
+'錄' => '录',
+'錆' => '锖',
+'錇' => '锫',
+'錈' => '锩',
+'錏' => '铔',
+'錐' => '锥',
+'錒' => '锕',
+'錕' => '锟',
+'錘' => '锤',
+'錙' => '锱',
+'錚' => '铮',
+'錛' => '锛',
+'錟' => '锬',
+'錠' => '锭',
+'錡' => '锜',
+'錢' => '钱',
+'錦' => '锦',
+'錨' => '锚',
+'錩' => '锠',
+'錫' => '锡',
+'錮' => '锢',
+'錯' => '错',
+'録' => '录',
+'錳' => '锰',
+'錶' => '表',
+'錸' => '铼',
+'鍀' => '锝',
+'鍁' => '锨',
+'鍃' => '锪',
+'鍄' => '𨱉',
+'鍆' => '钔',
+'鍇' => '锴',
+'鍈' => '锳',
+'鍊' => '炼',
+'鍋' => '锅',
+'鍍' => '镀',
+'鍔' => '锷',
+'鍘' => '铡',
+'鍚' => '钖',
+'鍛' => '锻',
+'鍠' => '锽',
+'鍤' => '锸',
+'鍥' => '锲',
+'鍩' => '锘',
+'鍫' => '锹',
+'鍬' => '锹',
+'鍮' => '𨱎',
+'鍰' => '锾',
+'鍳' => '鉴',
+'鍵' => '键',
+'鍶' => '锶',
+'鍺' => '锗',
+'鍾' => '锺',
+'鎂' => '镁',
+'鎄' => '锿',
+'鎇' => '镅',
+'鎊' => '镑',
+'鎌' => '镰',
+'鎔' => '镕',
+'鎖' => '锁',
+'鎗' => '枪',
+'鎘' => '镉',
+'鎚' => '锤',
+'鎛' => '镈',
+'鎝' => '𨱏',
+'鎡' => '镃',
+'鎢' => '钨',
+'鎣' => '蓥',
+'鎦' => '镏',
+'鎧' => '铠',
+'鎩' => '铩',
+'鎪' => '锼',
+'鎬' => '镐',
+'鎭' => '镇',
+'鎮' => '镇',
+'鎯' => '𨱍',
+'鎰' => '镒',
+'鎲' => '镋',
+'鎳' => '镍',
+'鎵' => '镓',
+'鎷' => '𨰾',
+'鎸' => '镌',
+'鎻' => '锁',
+'鎿' => '镎',
+'鏃' => '镞',
+'鏆' => '𨱌',
+'鏇' => '镟',
+'鏈' => '链',
+'鏉' => '𨱒',
+'鏌' => '镆',
+'鏍' => '镙',
+'鏐' => '镠',
+'鏑' => '镝',
+'鏗' => '铿',
+'鏘' => '锵',
+'鏚' => '戚',
+'鏜' => '镗',
+'鏝' => '镘',
+'鏞' => '镛',
+'鏟' => '铲',
+'鏡' => '镜',
+'鏢' => '镖',
+'鏤' => '镂',
+'鏦' => '𫓩',
+'鏨' => '錾',
+'鏰' => '镚',
+'鏵' => '铧',
+'鏷' => '镤',
+'鏹' => '镪',
+'鏺' => '䥽',
+'鏽' => '锈',
+'鐃' => '铙',
+'鐄' => '𨱑',
+'鐋' => '铴',
+'鐍' => '𫔎',
+'鐎' => '𨱓',
+'鐏' => '𨱔',
+'鐐' => '镣',
+'鐒' => '铹',
+'鐓' => '镦',
+'鐔' => '镡',
+'鐘' => '钟',
+'鐙' => '镫',
+'鐝' => '镢',
+'鐠' => '镨',
+'鐥' => '䦅',
+'鐦' => '锎',
+'鐧' => '锏',
+'鐨' => '镄',
+'鐫' => '镌',
+'鐮' => '镰',
+'鐯' => '䦃',
+'鐲' => '镯',
+'鐳' => '镭',
+'鐵' => '铁',
+'鐶' => '镮',
+'鐸' => '铎',
+'鐺' => '铛',
+'鐿' => '镱',
+'鑄' => '铸',
+'鑊' => '镬',
+'鑌' => '镔',
+'鑑' => '鉴',
+'鑒' => '鉴',
+'鑔' => '镲',
+'鑕' => '锧',
+'鑚' => '钻',
+'鑛' => '矿',
+'鑞' => '镴',
+'鑠' => '铄',
+'鑣' => '镳',
+'鑤' => '刨',
+'鑥' => '镥',
+'鑭' => '镧',
+'鑰' => '钥',
+'鑱' => '镵',
+'鑲' => '镶',
+'鑵' => '罐',
+'鑷' => '镊',
+'鑹' => '镩',
+'鑼' => '锣',
+'鑽' => '钻',
+'鑾' => '銮',
+'鑿' => '凿',
+'钁' => '镢',
+'钂' => '镋',
+'長' => '长',
+'門' => '门',
+'閂' => '闩',
+'閃' => '闪',
+'閆' => '闫',
+'閈' => '闬',
+'閉' => '闭',
+'開' => '开',
+'閌' => '闶',
+'閍' => '𨸂',
+'閎' => '闳',
+'閏' => '闰',
+'閐' => '𨸃',
+'閑' => '闲',
+'閒' => '闲',
+'間' => '间',
+'閔' => '闵',
+'閘' => '闸',
+'閙' => '闹',
+'閡' => '阂',
+'閣' => '阁',
+'閤' => '阁',
+'閥' => '阀',
+'閧' => '哄',
+'閨' => '闺',
+'閩' => '闽',
+'閫' => '阃',
+'閬' => '阆',
+'閭' => '闾',
+'閱' => '阅',
+'閲' => '阅',
+'閶' => '阊',
+'閹' => '阉',
+'閻' => '阎',
+'閼' => '阏',
+'閽' => '阍',
+'閾' => '阈',
+'閿' => '阌',
+'闃' => '阒',
+'闆' => '板',
+'闇' => '暗',
+'闈' => '闱',
+'闊' => '阔',
+'闋' => '阕',
+'闌' => '阑',
+'闍' => '阇',
+'闐' => '阗',
+'闒' => '阘',
+'闓' => '闿',
+'闔' => '阖',
+'闕' => '阙',
+'闖' => '闯',
+'闚' => '窥',
+'關' => '关',
+'闞' => '阚',
+'闠' => '阓',
+'闡' => '阐',
+'闢' => '辟',
+'闤' => '阛',
+'闥' => '闼',
+'阨' => '厄',
+'阬' => '坑',
+'陗' => '峭',
+'陘' => '陉',
+'陜' => '陕',
+'陝' => '陕',
+'陣' => '阵',
+'陰' => '阴',
+'陳' => '陈',
+'陸' => '陆',
+'陻' => '堙',
+'陽' => '阳',
+'陿' => '狭',
+'隂' => '阴',
+'隄' => '堤',
+'隉' => '陧',
+'隊' => '队',
+'階' => '阶',
+'隕' => '陨',
+'隖' => '坞',
+'際' => '际',
+'隣' => '邻',
+'隨' => '随',
+'險' => '险',
+'隱' => '隐',
+'隴' => '陇',
+'隷' => '隶',
+'隸' => '隶',
+'隻' => '只',
+'雋' => '隽',
+'雖' => '虽',
+'雙' => '双',
+'雛' => '雏',
+'雜' => '杂',
+'雞' => '鸡',
+'離' => '离',
+'難' => '难',
+'雲' => '云',
+'電' => '电',
+'霢' => '霡',
+'霧' => '雾',
+'霽' => '霁',
+'靂' => '雳',
+'靄' => '霭',
+'靆' => '叇',
+'靈' => '灵',
+'靉' => '叆',
+'靚' => '靓',
+'靜' => '静',
+'靦' => '腼',
+'靨' => '靥',
+'靭' => '韧',
+'靱' => '韧',
+'鞀' => '鼗',
+'鞏' => '巩',
+'鞝' => '绱',
+'鞦' => '秋',
+'鞵' => '鞋',
+'鞽' => '鞒',
+'鞾' => '靴',
+'韁' => '缰',
+'韃' => '鞑',
+'韆' => '千',
+'韈' => '袜',
+'韉' => '鞯',
+'韋' => '韦',
+'韌' => '韧',
+'韍' => '韨',
+'韓' => '韩',
+'韙' => '韪',
+'韜' => '韬',
+'韞' => '韫',
+'韤' => '袜',
+'韮' => '韭',
+'韻' => '韵',
+'響' => '响',
+'頁' => '页',
+'頂' => '顶',
+'頃' => '顷',
+'項' => '项',
+'順' => '顺',
+'頇' => '顸',
+'須' => '须',
+'頊' => '顼',
+'頌' => '颂',
+'頎' => '颀',
+'頏' => '颃',
+'預' => '预',
+'頑' => '顽',
+'頒' => '颁',
+'頓' => '顿',
+'頗' => '颇',
+'領' => '领',
+'頜' => '颌',
+'頟' => '额',
+'頡' => '颉',
+'頤' => '颐',
+'頦' => '颏',
+'頭' => '头',
+'頮' => '颒',
+'頰' => '颊',
+'頲' => '颋',
+'頴' => '颕',
+'頷' => '颔',
+'頸' => '颈',
+'頹' => '颓',
+'頻' => '频',
+'頼' => '赖',
+'頽' => '颓',
+'顃' => '𩖖',
+'顆' => '颗',
+'顇' => '悴',
+'顋' => '腮',
+'題' => '题',
+'額' => '额',
+'顎' => '颚',
+'顏' => '颜',
+'顒' => '颙',
+'顓' => '颛',
+'顔' => '颜',
+'願' => '愿',
+'顙' => '颡',
+'顛' => '颠',
+'類' => '类',
+'顢' => '颟',
+'顥' => '颢',
+'顦' => '憔',
+'顧' => '顾',
+'顫' => '颤',
+'顬' => '颥',
+'顯' => '显',
+'顰' => '颦',
+'顱' => '颅',
+'顳' => '颞',
+'顴' => '颧',
+'風' => '风',
+'颭' => '飐',
+'颮' => '飑',
+'颯' => '飒',
+'颰' => '𩙥',
+'颱' => '台',
+'颳' => '刮',
+'颶' => '飓',
+'颷' => '𩙪',
+'颸' => '飔',
+'颺' => '飏',
+'颻' => '飖',
+'颼' => '飕',
+'颾' => '𩙫',
+'飀' => '飗',
+'飃' => '飘',
+'飄' => '飘',
+'飆' => '飙',
+'飈' => '飚',
+'飛' => '飞',
+'飜' => '翻',
+'飠' => '饣',
+'飢' => '饥',
+'飣' => '饤',
+'飤' => '饲',
+'飥' => '饦',
+'飩' => '饨',
+'飪' => '饪',
+'飫' => '饫',
+'飭' => '饬',
+'飯' => '饭',
+'飱' => '飧',
+'飲' => '饮',
+'飴' => '饴',
+'飼' => '饲',
+'飽' => '饱',
+'飾' => '饰',
+'飿' => '饳',
+'餁' => '饪',
+'餃' => '饺',
+'餄' => '饸',
+'餅' => '饼',
+'餈' => '糍',
+'餉' => '饷',
+'養' => '养',
+'餌' => '饵',
+'餎' => '饹',
+'餏' => '饻',
+'餑' => '饽',
+'餒' => '馁',
+'餓' => '饿',
+'餔' => '𫗦',
+'餕' => '馂',
+'餖' => '饾',
+'餗' => '𫗧',
+'餘' => '馀',
+'餚' => '肴',
+'餛' => '馄',
+'餜' => '馃',
+'餞' => '饯',
+'餡' => '馅',
+'餦' => '𫗠',
+'館' => '馆',
+'餭' => '𫗮',
+'餱' => '糇',
+'餳' => '饧',
+'餵' => '喂',
+'餶' => '馉',
+'餷' => '馇',
+'餸' => '𩠌',
+'餹' => '糖',
+'餺' => '馎',
+'餻' => '糕',
+'餼' => '饩',
+'餽' => '馈',
+'餾' => '馏',
+'餿' => '馊',
+'饁' => '馌',
+'饃' => '馍',
+'饅' => '馒',
+'饈' => '馐',
+'饉' => '馑',
+'饊' => '馓',
+'饋' => '馈',
+'饌' => '馔',
+'饍' => '膳',
+'饑' => '饥',
+'饒' => '饶',
+'饗' => '飨',
+'饘' => '𫗴',
+'饜' => '餍',
+'饝' => '馍',
+'饞' => '馋',
+'饢' => '馕',
+'馬' => '马',
+'馭' => '驭',
+'馮' => '冯',
+'馱' => '驮',
+'馳' => '驰',
+'馴' => '驯',
+'馹' => '驲',
+'駁' => '驳',
+'駃' => '𫘝',
+'駈' => '驱',
+'駎' => '𩧨',
+'駐' => '驻',
+'駑' => '驽',
+'駒' => '驹',
+'駔' => '驵',
+'駕' => '驾',
+'駘' => '骀',
+'駙' => '驸',
+'駚' => '𩧫',
+'駛' => '驶',
+'駝' => '驼',
+'駟' => '驷',
+'駡' => '骂',
+'駢' => '骈',
+'駧' => '𩧲',
+'駩' => '𩧴',
+'駭' => '骇',
+'駰' => '骃',
+'駱' => '骆',
+'駶' => '𩧺',
+'駸' => '骎',
+'駻' => '𫘣',
+'駿' => '骏',
+'騁' => '骋',
+'騂' => '骍',
+'騃' => '𫘤',
+'騅' => '骓',
+'騌' => '骔',
+'騍' => '骒',
+'騎' => '骑',
+'騏' => '骐',
+'騐' => '验',
+'騔' => '𩨀',
+'騖' => '骛',
+'騙' => '骗',
+'騚' => '𩨊',
+'騝' => '𩨃',
+'騟' => '𩨈',
+'騠' => '𫘨',
+'騣' => '鬃',
+'騤' => '骙',
+'騧' => '䯄',
+'騪' => '𩨄',
+'騫' => '骞',
+'騭' => '骘',
+'騮' => '骝',
+'騰' => '腾',
+'騶' => '驺',
+'騷' => '骚',
+'騸' => '骟',
+'騾' => '骡',
+'驀' => '蓦',
+'驁' => '骜',
+'驂' => '骖',
+'驃' => '骠',
+'驄' => '骢',
+'驅' => '驱',
+'驊' => '骅',
+'驋' => '𩧯',
+'驌' => '骕',
+'驍' => '骁',
+'驏' => '骣',
+'驕' => '骄',
+'驗' => '验',
+'驘' => '骡',
+'驚' => '惊',
+'驛' => '驿',
+'驟' => '骤',
+'驢' => '驴',
+'驤' => '骧',
+'驥' => '骥',
+'驦' => '骦',
+'驪' => '骊',
+'驫' => '骉',
+'骯' => '肮',
+'骽' => '腿',
+'骾' => '鲠',
+'髈' => '膀',
+'髏' => '髅',
+'髒' => '脏',
+'體' => '体',
+'髕' => '髌',
+'髖' => '髋',
+'髥' => '髯',
+'髮' => '发',
+'鬀' => '剃',
+'鬆' => '松',
+'鬉' => '鬃',
+'鬍' => '胡',
+'鬚' => '须',
+'鬢' => '鬓',
+'鬥' => '斗',
+'鬦' => '斗',
+'鬧' => '闹',
+'鬨' => '哄',
+'鬩' => '阋',
+'鬪' => '斗',
+'鬮' => '阄',
+'鬰' => '郁',
+'鬱' => '郁',
+'鬹' => '鬶',
+'魎' => '魉',
+'魘' => '魇',
+'魚' => '鱼',
+'魛' => '鱽',
+'魟' => '𫚉',
+'魢' => '鱾',
+'魥' => '𩽹',
+'魨' => '鲀',
+'魯' => '鲁',
+'魴' => '鲂',
+'魷' => '鱿',
+'魺' => '鲄',
+'鮁' => '鲅',
+'鮃' => '鲆',
+'鮄' => '𫚒',
+'鮊' => '鲌',
+'鮋' => '鲉',
+'鮍' => '鲏',
+'鮎' => '鲇',
+'鮐' => '鲐',
+'鮑' => '鲍',
+'鮒' => '鲋',
+'鮓' => '鲊',
+'鮚' => '鲒',
+'鮜' => '鲘',
+'鮝' => '鲞',
+'鮞' => '鲕',
+'鮟' => '𩽾',
+'鮣' => '䲟',
+'鮦' => '鲖',
+'鮪' => '鲔',
+'鮫' => '鲛',
+'鮭' => '鲑',
+'鮮' => '鲜',
+'鮰' => '𫚔',
+'鮳' => '鲓',
+'鮶' => '鲪',
+'鮸' => '𩾃',
+'鮺' => '鲝',
+'鯀' => '鲧',
+'鯁' => '鲠',
+'鯄' => '𩾁',
+'鯆' => '𫚙',
+'鯇' => '鲩',
+'鯉' => '鲤',
+'鯊' => '鲨',
+'鯒' => '鲬',
+'鯔' => '鲻',
+'鯕' => '鲯',
+'鯖' => '鲭',
+'鯗' => '鲞',
+'鯛' => '鲷',
+'鯝' => '鲴',
+'鯡' => '鲱',
+'鯢' => '鲵',
+'鯤' => '鲲',
+'鯧' => '鲳',
+'鯨' => '鲸',
+'鯪' => '鲮',
+'鯫' => '鲰',
+'鯰' => '鲶',
+'鯱' => '𩾇',
+'鯴' => '鲺',
+'鯶' => '𩽼',
+'鯷' => '鳀',
+'鯽' => '鲫',
+'鯿' => '鳊',
+'鰁' => '鳈',
+'鰂' => '鲗',
+'鰃' => '鳂',
+'鰆' => '䲠',
+'鰈' => '鲽',
+'鰉' => '鳇',
+'鰌' => '䲡',
+'鰍' => '鳅',
+'鰏' => '鲾',
+'鰐' => '鳄',
+'鰒' => '鳆',
+'鰓' => '鳃',
+'鰛' => '鳁',
+'鰜' => '鳒',
+'鰟' => '鳑',
+'鰠' => '鳋',
+'鰣' => '鲥',
+'鰤' => '𫚕',
+'鰥' => '鳏',
+'鰧' => '䲢',
+'鰨' => '鳎',
+'鰩' => '鳐',
+'鰭' => '鳍',
+'鰮' => '鳁',
+'鰱' => '鲢',
+'鰲' => '鳌',
+'鰳' => '鳓',
+'鰵' => '鳘',
+'鰷' => '鲦',
+'鰹' => '鲣',
+'鰺' => '鲹',
+'鰻' => '鳗',
+'鰼' => '鳛',
+'鰾' => '鳔',
+'鱂' => '鳉',
+'鱅' => '鳙',
+'鱇' => '𩾌',
+'鱈' => '鳕',
+'鱉' => '鳖',
+'鱒' => '鳟',
+'鱔' => '鳝',
+'鱖' => '鳜',
+'鱗' => '鳞',
+'鱘' => '鲟',
+'鱝' => '鲼',
+'鱟' => '鲎',
+'鱠' => '鲙',
+'鱣' => '鳣',
+'鱤' => '鳡',
+'鱧' => '鳢',
+'鱨' => '鲿',
+'鱭' => '鲚',
+'鱮' => '𫚈',
+'鱯' => '鳠',
+'鱷' => '鳄',
+'鱸' => '鲈',
+'鱺' => '鲡',
+'鳥' => '鸟',
+'鳧' => '凫',
+'鳩' => '鸠',
+'鳬' => '凫',
+'鳲' => '鸤',
+'鳳' => '凤',
+'鳴' => '鸣',
+'鳶' => '鸢',
+'鳷' => '𫛛',
+'鳼' => '𪉃',
+'鳾' => '䴓',
+'鴃' => '𫛞',
+'鴆' => '鸩',
+'鴇' => '鸨',
+'鴈' => '雁',
+'鴉' => '鸦',
+'鴒' => '鸰',
+'鴕' => '鸵',
+'鴗' => '𫁡',
+'鴛' => '鸳',
+'鴜' => '𪉈',
+'鴝' => '鸲',
+'鴞' => '鸮',
+'鴟' => '鸱',
+'鴣' => '鸪',
+'鴦' => '鸯',
+'鴨' => '鸭',
+'鴯' => '鸸',
+'鴰' => '鸹',
+'鴲' => '𪉆',
+'鴴' => '鸻',
+'鴷' => '䴕',
+'鴻' => '鸿',
+'鴿' => '鸽',
+'鵁' => '䴔',
+'鵂' => '鸺',
+'鵃' => '鸼',
+'鵐' => '鹀',
+'鵑' => '鹃',
+'鵒' => '鹆',
+'鵓' => '鹁',
+'鵚' => '𪉍',
+'鵜' => '鹈',
+'鵝' => '鹅',
+'鵞' => '鹅',
+'鵠' => '鹄',
+'鵡' => '鹉',
+'鵪' => '鹌',
+'鵬' => '鹏',
+'鵮' => '鹐',
+'鵯' => '鹎',
+'鵰' => '雕',
+'鵲' => '鹊',
+'鵶' => '鸦',
+'鵷' => '鹓',
+'鵾' => '鹍',
+'鶄' => '䴖',
+'鶇' => '鸫',
+'鶉' => '鹑',
+'鶊' => '鹒',
+'鶒' => '𫛶',
+'鶓' => '鹋',
+'鶖' => '鹙',
+'鶗' => '𫛸',
+'鶘' => '鹕',
+'鶚' => '鹗',
+'鶡' => '鹖',
+'鶥' => '鹛',
+'鶩' => '鹜',
+'鶪' => '䴗',
+'鶬' => '鸧',
+'鶯' => '莺',
+'鶲' => '鹟',
+'鶴' => '鹤',
+'鶹' => '鹠',
+'鶺' => '鹡',
+'鶻' => '鹘',
+'鶼' => '鹣',
+'鶿' => '鹚',
+'鷀' => '鹚',
+'鷁' => '鹢',
+'鷂' => '鹞',
+'鷄' => '鸡',
+'鷈' => '䴘',
+'鷊' => '鹝',
+'鷓' => '鹧',
+'鷔' => '𪉑',
+'鷖' => '鹥',
+'鷗' => '鸥',
+'鷙' => '鸷',
+'鷚' => '鹨',
+'鷥' => '鸶',
+'鷦' => '鹪',
+'鷨' => '𪉊',
+'鷫' => '鹔',
+'鷯' => '鹩',
+'鷰' => '燕',
+'鷲' => '鹫',
+'鷳' => '鹇',
+'鷴' => '鹇',
+'鷸' => '鹬',
+'鷹' => '鹰',
+'鷺' => '鹭',
+'鷽' => '鸴',
+'鷿' => '䴙',
+'鸂' => '㶉',
+'鸇' => '鹯',
+'鸋' => '𫛢',
+'鸌' => '鹱',
+'鸎' => '莺',
+'鸏' => '鹲',
+'鸕' => '鸬',
+'鸘' => '鹴',
+'鸚' => '鹦',
+'鸛' => '鹳',
+'鸝' => '鹂',
+'鸞' => '鸾',
+'鹵' => '卤',
+'鹹' => '咸',
+'鹺' => '鹾',
+'鹻' => '碱',
+'鹼' => '碱',
+'鹽' => '盐',
+'麗' => '丽',
+'麥' => '麦',
+'麨' => '𪎊',
+'麩' => '麸',
+'麪' => '面',
+'麫' => '面',
+'麯' => '曲',
+'麲' => '𪎉',
+'麳' => '𪎌',
+'麴' => '麹',
+'麵' => '面',
+'麼' => '么',
+'麽' => '么',
+'黃' => '黄',
+'黌' => '黉',
+'點' => '点',
+'黨' => '党',
+'黲' => '黪',
+'黴' => '霉',
+'黶' => '黡',
+'黷' => '黩',
+'黽' => '黾',
+'黿' => '鼋',
+'鼃' => '蛙',
+'鼇' => '鳌',
+'鼈' => '鳖',
+'鼉' => '鼍',
+'鼕' => '咚',
+'鼴' => '鼹',
+'齊' => '齐',
+'齋' => '斋',
+'齎' => '赍',
+'齏' => '齑',
+'齒' => '齿',
+'齔' => '龀',
+'齕' => '龁',
+'齗' => '龂',
+'齙' => '龅',
+'齜' => '龇',
+'齟' => '龃',
+'齠' => '龆',
+'齡' => '龄',
+'齣' => '出',
+'齦' => '龈',
+'齧' => '啮',
+'齩' => '咬',
+'齪' => '龊',
+'齬' => '龉',
+'齲' => '龋',
+'齶' => '腭',
+'齷' => '龌',
+'龍' => '龙',
+'龎' => '厐',
+'龐' => '庞',
+'龑' => '䶮',
+'龔' => '龚',
+'龕' => '龛',
+'龜' => '龟',
+'龭' => '𩨎',
+'龯' => '𨱆',
+'𠌥' => '𠆿',
+'𠏢' => '𠉗',
+'𠕂' => '再',
+'𠕅' => '再',
+'𠞆' => '𠛆',
+'𠞰' => '剿',
+'𠠎' => '𠚳',
+'𡄔' => '𠴢',
+'𡄣' => '𠵸',
+'𡅏' => '𠲥',
+'𡑭' => '𡋗',
+'𡓾' => '𡋀',
+'𡚁' => '弊',
+'𡞵' => '㛟',
+'𡠹' => '㛿',
+'𡢃' => '㛠',
+'𡨥' => '寇',
+'𡮉' => '𡭜',
+'𡮣' => '𡭬',
+'𡻕' => '岁',
+'𡾱' => '㟜',
+'𢣚' => '𢘝',
+'𢣭' => '𢘞',
+'𢶫' => '𢫞',
+'𢷮' => '𢫊',
+'𢹿' => '𢬦',
+'𣙎' => '㭣',
+'𣙜' => '榷',
+'𣝕' => '𣘷',
+'𣞻' => '𣘓',
+'𣠲' => '𣑶',
+'𣯴' => '𣭤',
+'𣾷' => '㳢',
+'𣿉' => '𣶫',
+'𤁣' => '𣺽',
+'𤋮' => '熙',
+'𤒎' => '𤊀',
+'𤨏' => '琐',
+'𤪺' => '㻘',
+'𤫩' => '㻏',
+'𤱈' => '亩',
+'𤳸' => '𤳄',
+'𤸫' => '𤶧',
+'𤺥' => '瘩',
+'𥌃' => '𥅘',
+'𥕥' => '𥐰',
+'𥖅' => '𥐯',
+'𥢢' => '䅪',
+'𥨐' => '𥧂',
+'𥵃' => '𥱔',
+'𥵊' => '𥭉',
+'𥸠' => '𥮋',
+'𥼽' => '𥹥',
+'𥽖' => '𥺇',
+'𥿊' => '𦈈',
+'𦂅' => '𦈒',
+'𦃄' => '𦈗',
+'𦊱' => '挂',
+'𦍑' => '羌',
+'𦕈' => '眇',
+'𦢈' => '𣍨',
+'𦣎' => '𦟗',
+'𦪽' => '𦨩',
+'𦵏' => '葬',
+'𧔥' => '𧒭',
+'𧜗' => '䘞',
+'𧜵' => '䙊',
+'𧝞' => '䘛',
+'𧩙' => '䜥',
+'𧳟' => '𧳕',
+'𧵳' => '䞌',
+'𧶔' => '𧹓',
+'𧶧' => '䞎',
+'𨄣' => '𨀱',
+'𨅍' => '𨁴',
+'𨇁' => '𧿈',
+'𨇞' => '𨅫',
+'𨈊' => '𨂺',
+'𨈌' => '𨄄',
+'𨊰' => '䢀',
+'𨊸' => '䢁',
+'𨊻' => '𨐆',
+'𨋢' => '䢂',
+'𨎮' => '𨐉',
+'𨏠' => '𨐇',
+'𨏥' => '𨐊',
+'𨤻' => '𨤰',
+'𨥛' => '𨱀',
+'𨦫' => '䦀',
+'𨧜' => '䦁',
+'𨧱' => '𨱊',
+'𨫒' => '𨱐',
+'𨮂' => '𨱕',
+'𨯅' => '䥿',
+'𨳑' => '𨸁',
+'𨳕' => '𨸀',
+'𨴗' => '𨸅',
+'𨵩' => '𨸆',
+'𨵸' => '𨸇',
+'𨶀' => '𨸉',
+'𨶏' => '𨸊',
+'𨶮' => '𨸌',
+'𨶲' => '𨸋',
+'𨷲' => '𨸎',
+'𨽏' => '𨸘',
+'𨽻' => '隶',
+'𩎢' => '𩏾',
+'𩏪' => '𩏽',
+'𩓐' => '脖',
+'𩓣' => '𩖕',
+'𩗀' => '𩙦',
+'𩗗' => '飓',
+'𩗡' => '𩙧',
+'𩘀' => '𩙩',
+'𩘝' => '𩙭',
+'𩘹' => '𩙨',
+'𩘺' => '𩙬',
+'𩙈' => '𩙰',
+'𩚛' => '𩟿',
+'𩚥' => '𩠀',
+'𩚵' => '𩠁',
+'𩛆' => '𩠂',
+'𩛩' => '𩠃',
+'𩜇' => '𩠉',
+'𩜦' => '𩠆',
+'𩜵' => '𩠊',
+'𩝔' => '𩠋',
+'𩞄' => '𩠎',
+'𩞦' => '𩠏',
+'𩞯' => '䭪',
+'𩟐' => '𩠅',
+'𩠴' => '𩠠',
+'𩡺' => '𩧦',
+'𩢡' => '𩧬',
+'𩢴' => '𩧵',
+'𩢸' => '𩧳',
+'𩢾' => '𩧮',
+'𩣏' => '𩧶',
+'𩣑' => '䯃',
+'𩣵' => '𩧻',
+'𩣺' => '𩧼',
+'𩤊' => '𩧩',
+'𩤙' => '𩨆',
+'𩤲' => '𩨉',
+'𩤸' => '𩨅',
+'𩥄' => '𩨋',
+'𩥇' => '𩨍',
+'𩥉' => '𩧱',
+'𩥑' => '𩨌',
+'𩧆' => '𩨐',
+'𩭙' => '𩬣',
+'𩯳' => '𩯒',
+'𩰀' => '𩬤',
+'𩳤' => '𩲒',
+'𩵩' => '𩽺',
+'𩵹' => '𩽻',
+'𩶘' => '䲞',
+'𩶰' => '𩽿',
+'𩶱' => '𩽽',
+'𩷰' => '𩾄',
+'𩸃' => '𩾅',
+'𩸦' => '𩾆',
+'𩽇' => '𩾎',
+'𩿪' => '𪉄',
+'𪀦' => '𪉅',
+'𪀾' => '𪉋',
+'𪁈' => '𪉉',
+'𪁖' => '𪉌',
+'𪂆' => '𪉎',
+'𪃍' => '𪉐',
+'𪃏' => '𪉏',
+'𪄆' => '𪉔',
+'𪄕' => '𪉒',
+'𪇳' => '𪉕',
+'𪈼' => '𪉓',
+'𪋿' => '𪎍',
+'𪔵' => '𪔭',
+'𪘀' => '𪚏',
+'𪘯' => '𪚐',
+'『' => '‘',
+'』' => '’',
+'「' => '“',
+'「' => '“',
+'」' => '”',
+'」' => '”',
+'。陞' => '。升',
+'《易乾' => '《易乾',
+'一釐' => '一厘',
+'上昇' => '上升',
+'不穀' => '不穀',
+'專著' => '专著',
+'乾一坛' => '乾一坛',
+'乾一壇' => '乾一坛',
+'乾一組' => '乾一组',
+'乾一组' => '乾一组',
+'乾上乾下' => '乾上乾下',
+'乾东' => '乾东',
+'乾東' => '乾东',
+'乾為天' => '乾为天',
+'乾為陽' => '乾为阳',
+'乾九' => '乾九',
+'乾乾' => '乾乾',
+'乾亨' => '乾亨',
+'乾仪' => '乾仪',
+'乾儀' => '乾仪',
+'乾位' => '乾位',
+'乾健' => '乾健',
+'乾健也' => '乾健也',
+'乾元' => '乾元',
+'乾光' => '乾光',
+'乾兴' => '乾兴',
+'乾興' => '乾兴',
+'乾冈' => '乾冈',
+'乾岡' => '乾冈',
+'乾刘' => '乾刘',
+'乾劉' => '乾刘',
+'乾刚' => '乾刚',
+'乾剛' => '乾刚',
+'乾务' => '乾务',
+'乾務' => '乾务',
+'乾化' => '乾化',
+'乾卦' => '乾卦',
+'乾县' => '乾县',
+'乾縣' => '乾县',
+'乾台' => '乾台',
+'乾吉' => '乾吉',
+'乾启' => '乾启',
+'乾啟' => '乾启',
+'乾命' => '乾命',
+'乾和' => '乾和',
+'乾嘉' => '乾嘉',
+'乾图' => '乾图',
+'乾圖' => '乾图',
+'乾坤' => '乾坤',
+'乾城' => '乾城',
+'乾基' => '乾基',
+'乾天也' => '乾天也',
+'乾始' => '乾始',
+'乾姓' => '乾姓',
+'乾宁' => '乾宁',
+'乾寧' => '乾宁',
+'乾宅' => '乾宅',
+'乾宇' => '乾宇',
+'乾安' => '乾安',
+'乾定' => '乾定',
+'乾封' => '乾封',
+'乾居' => '乾居',
+'乾岗' => '乾岗',
+'乾崗' => '乾岗',
+'乾巛' => '乾巛',
+'乾州' => '乾州',
+'乾录' => '乾录',
+'乾錄' => '乾录',
+'乾律' => '乾律',
+'乾德' => '乾德',
+'乾心' => '乾心',
+'乾忠' => '乾忠',
+'乾文' => '乾文',
+'乾断' => '乾断',
+'乾斷' => '乾断',
+'乾方' => '乾方',
+'乾施' => '乾施',
+'乾旦' => '乾旦',
+'乾明' => '乾明',
+'乾昧' => '乾昧',
+'乾晖' => '乾晖',
+'乾暉' => '乾晖',
+'乾景' => '乾景',
+'乾晷' => '乾晷',
+'乾曜' => '乾曜',
+'乾构' => '乾构',
+'乾構' => '乾构',
+'乾枢' => '乾枢',
+'乾樞' => '乾枢',
+'乾栋' => '乾栋',
+'乾棟' => '乾栋',
+'乾步' => '乾步',
+'乾氏' => '乾氏',
+'乾沓和' => '乾沓和',
+'乾沓婆' => '乾沓婆',
+'乾泉' => '乾泉',
+'乾淳' => '乾淳',
+'乾清' => '乾清',
+'乾渥' => '乾渥',
+'乾潭' => '乾潭',
+'乾灵' => '乾灵',
+'乾靈' => '乾灵',
+'乾生元' => '乾生元',
+'乾男' => '乾男',
+'乾皋' => '乾皋',
+'乾盛世' => '乾盛世',
+'乾矢' => '乾矢',
+'乾祐' => '乾祐',
+'乾神' => '乾神',
+'乾穹' => '乾穹',
+'乾窦' => '乾窦',
+'乾竇' => '乾窦',
+'乾竺' => '乾竺',
+'乾笃' => '乾笃',
+'乾篤' => '乾笃',
+'乾符' => '乾符',
+'乾策' => '乾策',
+'乾精' => '乾精',
+'乾紅' => '乾红',
+'乾红' => '乾红',
+'乾綱' => '乾纲',
+'乾纲' => '乾纲',
+'乾紐' => '乾纽',
+'乾纽' => '乾纽',
+'乾絡' => '乾络',
+'乾络' => '乾络',
+'乾統' => '乾统',
+'乾统' => '乾统',
+'乾維' => '乾维',
+'乾维' => '乾维',
+'乾罗' => '乾罗',
+'乾羅' => '乾罗',
+'乾花' => '乾花',
+'乾荫' => '乾荫',
+'乾蔭' => '乾荫',
+'乾行' => '乾行',
+'乾衡' => '乾衡',
+'乾西' => '乾西',
+'乾覆' => '乾覆',
+'乾象' => '乾象',
+'乾象历' => '乾象历',
+'乾象歷' => '乾象历',
+'乾貞' => '乾贞',
+'乾贞' => '乾贞',
+'乾貴士' => '乾贵士',
+'乾贵士' => '乾贵士',
+'乾貺' => '乾贶',
+'乾贶' => '乾贶',
+'乾車' => '乾车',
+'乾车' => '乾车',
+'乾軸' => '乾轴',
+'乾轴' => '乾轴',
+'乾通' => '乾通',
+'乾造' => '乾造',
+'乾道' => '乾道',
+'乾鉴' => '乾鉴',
+'乾鑒' => '乾鉴',
+'乾鈞' => '乾钧',
+'乾钧' => '乾钧',
+'乾闥' => '乾闼',
+'乾闼' => '乾闼',
+'乾陀' => '乾陀',
+'乾陵' => '乾陵',
+'乾隆' => '乾隆',
+'乾音' => '乾音',
+'乾顧' => '乾顾',
+'乾顾' => '乾顾',
+'乾風' => '乾风',
+'乾风' => '乾风',
+'乾首' => '乾首',
+'乾馬' => '乾马',
+'乾马' => '乾马',
+'乾鵠' => '乾鹄',
+'乾鹄' => '乾鹄',
+'乾鵲' => '乾鹊',
+'乾鹊' => '乾鹊',
+'乾龍' => '乾龙',
+'乾龙' => '乾龙',
+'乾,健也' => '乾,健也',
+'乾,天也' => '乾,天也',
+'五箇山' => '五箇山',
+'什么' => '什么',
+'仇讎' => '仇雠',
+'以微知著' => '以微知著',
+'仰屋著書' => '仰屋著书',
+'彷彿' => '仿佛',
+'夥計' => '伙计',
+'佛頭著糞' => '佛头著粪',
+'偵蒐' => '侦搜',
+'倖一郎' => '倖一郎',
+'倖田' => '倖田',
+'候覆' => '候复',
+'藉助' => '借助',
+'藉口' => '借口',
+'藉手' => '借手',
+'藉故' => '借故',
+'藉機' => '借机',
+'藉此' => '借此',
+'藉由' => '借由',
+'藉端' => '借端',
+'藉詞' => '借词',
+'傒倖' => '傒倖',
+'先名後姓' => '先名后姓',
+'兒寬' => '兒宽',
+'六么' => '六幺',
+'蘭質薰心' => '兰质薰心',
+'內聯陞' => '内联升',
+'憑藉' => '凭借',
+'初昇' => '初升',
+'利欲薰心' => '利欲薰心',
+'剋了' => '剋了',
+'剋架' => '剋架',
+'剖釐' => '剖厘',
+'陞為' => '升为',
+'陞了' => '升了',
+'昇仙' => '升仙',
+'陞任' => '升任',
+'昇華' => '升华',
+'昇天' => '升天',
+'陞官' => '升官',
+'昇平' => '升平',
+'昇汞' => '升汞',
+'陞用' => '升用',
+'陞補' => '升补',
+'陞遷' => '升迁',
+'昇降' => '升降',
+'卓著' => '卓著',
+'博和託' => '博和讬',
+'歷陞' => '历升',
+'釐改' => '厘改',
+'釐整' => '厘整',
+'釐正' => '厘正',
+'釐毫' => '厘毫',
+'釐清' => '厘清',
+'釐訂' => '厘订',
+'釐革' => '厘革',
+'原著' => '原著',
+'又陞' => '又升',
+'反反覆覆' => '反反复复',
+'反覆' => '反复',
+'可穿著' => '可穿著',
+'吃衣著飯' => '吃衣著饭',
+'合著' => '合著',
+'同陞和' => '同升和',
+'名著' => '名著',
+'吳克羣' => '吴克羣',
+'周易乾' => '周易乾',
+'諠譁' => '喧哗',
+'回覆' => '回复',
+'土著' => '土著',
+'坤乾' => '坤乾',
+'墨瀋' => '墨渖',
+'覆查' => '复查',
+'覆核' => '复核',
+'覆检' => '复检',
+'復甦' => '复苏',
+'多么' => '多么',
+'大麴' => '大曲',
+'天道为乾' => '天道为乾',
+'天道為乾' => '天道为乾',
+'奧區' => '奧区',
+'如瀋' => '如渖',
+'姓么' => '姓幺',
+'子餘' => '子馀',
+'字乾生' => '字乾生',
+'孙乾' => '孙乾',
+'孫乾' => '孙乾',
+'宏碁' => '宏碁',
+'官陞' => '官升',
+'將軍抽俥' => '将军抽俥',
+'將軍抽車' => '将军抽車',
+'爾冬陞' => '尔冬升',
+'尼乾陀' => '尼乾陀',
+'侷促' => '局促',
+'跼促' => '局促',
+'侷限' => '局限',
+'跼限' => '局限',
+'山崎闇齋' => '山崎闇斋',
+'岳託' => '岳讬',
+'巨著' => '巨著',
+'乾乾淨淨' => '干干净净',
+'乾乾脆脆' => '干干脆脆',
+'乾泉水' => '干泉水',
+'年陞' => '年升',
+'么九' => '幺九',
+'么二三' => '幺二三',
+'么元' => '幺元',
+'么鳳' => '幺凤',
+'么半' => '幺半',
+'么半群' => '幺半群',
+'么廝' => '幺厮',
+'幺厮' => '幺厮',
+'么叔' => '幺叔',
+'么女' => '幺女',
+'么媽' => '幺妈',
+'么妹' => '幺妹',
+'么姓' => '幺姓',
+'么姨' => '幺姨',
+'么娘' => '幺娘',
+'么孃' => '幺娘',
+'幺孃' => '幺娘',
+'么子' => '幺子',
+'么小' => '幺小',
+'么弟' => '幺弟',
+'么正' => '幺正',
+'么氏' => '幺氏',
+'么爸' => '幺爸',
+'么爹' => '幺爹',
+'么篇' => '幺篇',
+'么舅' => '幺舅',
+'么蛾子' => '幺蛾子',
+'么謙' => '幺谦',
+'么麼' => '幺麽',
+'么麽' => '幺麽',
+'么麽小丑' => '幺麽小丑',
+'慶餘' => '庆馀',
+'康乾' => '康乾',
+'张法乾' => '张法乾',
+'張法乾' => '张法乾',
+'彰明較著' => '彰明较著',
+'待覆' => '待复',
+'後姓' => '後姓',
+'慫慂' => '怂恿',
+'怎么' => '怎么',
+'恩威並著' => '恩威并著',
+'噁心' => '恶心',
+'情蒐' => '情搜',
+'情鍾' => '情钟',
+'惏悷' => '惏悷',
+'惏慄' => '惏慄',
+'慘澹' => '惨淡',
+'成效顯著' => '成效显著',
+'成績顯著' => '成绩显著',
+'所鍾' => '所钟',
+'手鍊' => '手链',
+'扞格' => '扞格',
+'執著' => '执著',
+'批覆' => '批复',
+'承乾' => '承乾',
+'拉鍊' => '拉链',
+'拙著' => '拙著',
+'拚命' => '拚命',
+'拚搏' => '拚搏',
+'拚死' => '拚死',
+'拾瀋' => '拾渖',
+'拿破崙' => '拿破仑',
+'挨剋' => '挨剋',
+'提昇' => '提升',
+'蒐錄' => '搜录',
+'蒐索' => '搜索',
+'蒐羅' => '搜罗',
+'蒐藏' => '搜藏',
+'蒐證' => '搜证',
+'蒐購' => '搜购',
+'蒐輯' => '搜辑',
+'蒐採' => '搜采',
+'蒐采' => '搜采',
+'蒐集' => '搜集',
+'搥打' => '搥打',
+'搥胸頓足' => '搥胸顿足',
+'撰著' => '撰著',
+'效果顯著' => '效果显著',
+'文徵明' => '文徵明',
+'觔斗' => '斤斗',
+'新著' => '新著',
+'於世成' => '於世成',
+'於之瑩' => '於之莹',
+'於之莹' => '於之莹',
+'於乎' => '於乎',
+'於乙于同' => '於乙于同',
+'於乙宇同' => '於乙宇同',
+'於于同' => '於于同',
+'於哲' => '於哲',
+'於夫罗' => '於夫罗',
+'於夫羅' => '於夫罗',
+'於姓' => '於姓',
+'於宇同' => '於宇同',
+'於崇文' => '於崇文',
+'於志賀' => '於志贺',
+'於志贺' => '於志贺',
+'於戲' => '於戏',
+'於梨华' => '於梨华',
+'於梨華' => '於梨华',
+'於氏' => '於氏',
+'於潜' => '於潜',
+'於潛縣' => '於潜县',
+'於祥玉' => '於祥玉',
+'於菟' => '於菟',
+'於賢德' => '於贤德',
+'於除鞬' => '於除鞬',
+'施讎' => '施雠',
+'旋乾轉坤' => '旋乾转坤',
+'旋乾转坤' => '旋乾转坤',
+'無言不讎' => '无言不雠',
+'曠若發矇' => '旷若发矇',
+'崑崙' => '昆仑',
+'崑劇' => '昆剧',
+'崑山' => '昆山',
+'崑曲' => '昆曲',
+'崑腔' => '昆腔',
+'崑蘇' => '昆苏',
+'崑調' => '昆调',
+'易·乾' => '易·乾',
+'易經·乾' => '易经·乾',
+'易经·乾' => '易经·乾',
+'易經乾' => '易经乾',
+'易经乾' => '易经乾',
+'昭著' => '昭著',
+'顯著' => '显著',
+'顯著地' => '显著地',
+'顯著地位' => '显著地位',
+'顯著性' => '显著性',
+'顯著成績' => '显著成绩',
+'顯著效果' => '显著效果',
+'顯著特點' => '显著特点',
+'晉陞' => '晋升',
+'暗闇' => '暗闇',
+'麴黴' => '曲霉',
+'曾运乾' => '曾运乾',
+'曾運乾' => '曾运乾',
+'月陞' => '月升',
+'朝乾夕惕' => '朝乾夕惕',
+'朱有燉' => '朱有燉',
+'朱淛' => '朱淛',
+'硃砂' => '朱砂',
+'硃紅' => '朱红',
+'硃色' => '朱色',
+'朴於宇同' => '朴於宇同',
+'李乾德' => '李乾德',
+'李乾順' => '李乾顺',
+'李乾顺' => '李乾顺',
+'李澤鉅' => '李泽钜',
+'李祕' => '李祕',
+'李譔' => '李譔',
+'柳詒徵' => '柳诒徵',
+'柳诒徵' => '柳诒徵',
+'校讎' => '校雠',
+'楈枒' => '楈枒',
+'樊於期' => '樊於期',
+'殘瀋' => '残渖',
+'慇勤' => '殷勤',
+'慇懃' => '殷勤',
+'比較顯著' => '比较显著',
+'毫釐' => '毫厘',
+'氆氌' => '氆氌',
+'沈沒' => '沉没',
+'沈澱' => '沉淀',
+'沈積' => '沉积',
+'沈船' => '沉船',
+'沈重' => '沉重',
+'沈默' => '沉默',
+'氾濫' => '泛滥',
+'洗鍊' => '洗练',
+'瀋液' => '渖液',
+'薰習' => '熏习',
+'薰心' => '熏心',
+'薰沐' => '熏沐',
+'薰陶' => '熏陶',
+'薰香' => '熏香',
+'爨翫' => '爨翫',
+'獨鍾' => '独钟',
+'王道乾' => '王道乾',
+'王餘魚' => '王馀鱼',
+'甚夥' => '甚夥',
+'男为乾' => '男为乾',
+'男為乾' => '男为乾',
+'男性为乾' => '男性为乾',
+'男性為乾' => '男性为乾',
+'療效顯著' => '疗效显著',
+'白瀋' => '白渖',
+'皁保' => '皁保',
+'目劄' => '目劄',
+'直昇' => '直升',
+'睹微知著' => '睹微知著',
+'瞭台' => '瞭台',
+'瞭臺' => '瞭台',
+'瞭望' => '瞭望',
+'矇眬' => '矇眬',
+'矇矓' => '矇眬',
+'石碁' => '石碁',
+'石碁鎮' => '石碁镇',
+'碩託' => '硕讬',
+'鹼菜' => '硷菜',
+'碁圣' => '碁圣',
+'碁聖' => '碁圣',
+'碁所' => '碁所',
+'祕宜' => '祕宜',
+'穀旦' => '穀旦',
+'穀梁' => '穀梁',
+'穀水' => '穀水',
+'穀阳' => '穀阳',
+'穀陽' => '穀阳',
+'穿著者' => '穿着者',
+'竹昇' => '竹升',
+'答覆' => '答复',
+'米泽瑠美' => '米泽瑠美',
+'米瀋' => '米渖',
+'餬口' => '糊口',
+'繙㠾' => '繙㠾',
+'遶境' => '绕境',
+'線國安' => '缐国安',
+'線姓' => '缐姓',
+'編著' => '编著',
+'老么' => '老幺',
+'肉乾乾' => '肉干干',
+'肘手鍊足' => '肘手链足',
+'甦醒' => '苏醒',
+'苧烯' => '苧烯',
+'薴烯' => '苧烯',
+'蘋果' => '苹果',
+'荠苧' => '荠苧',
+'榮陞' => '荣升',
+'萧乾' => '萧乾',
+'蕭乾' => '萧乾',
+'著書' => '著书',
+'著書立說' => '著书立说',
+'著作' => '著作',
+'著名' => '著名',
+'著錄' => '著录',
+'著錄規則' => '著录规则',
+'著文' => '著文',
+'著有' => '著有',
+'著稱' => '著称',
+'著者' => '著者',
+'著身' => '著身',
+'著述' => '著述',
+'蔡孝乾' => '蔡孝乾',
+'蔡絛' => '蔡絛',
+'行餘' => '行馀',
+'覆蓋' => '覆盖',
+'見微知著' => '见微知著',
+'見著' => '见著',
+'視微知著' => '视微知著',
+'言幾析理' => '言幾析理',
+'諲譔' => '諲譔',
+'譩譆' => '譩譆',
+'託庸' => '讬庸',
+'託恩多' => '讬恩多',
+'託麻' => '讬麻',
+'論著' => '论著',
+'譯著' => '译著',
+'謝肇淛' => '谢肇淛',
+'象乾' => '象乾',
+'躊躇滿志' => '踌躇滿志',
+'較著' => '较著',
+'近角聪信' => '近角聪信',
+'这么' => '这么',
+'造麴' => '造曲',
+'遺著' => '遗著',
+'那么' => '那么',
+'那麽' => '那麽',
+'郭子乾' => '郭子乾',
+'酒麴' => '酒曲',
+'醉瀋' => '醉渖',
+'醯壶' => '醯壶',
+'醯壺' => '醯壶',
+'醯酱' => '醯酱',
+'醯醬' => '醯酱',
+'醯醋' => '醯醋',
+'醯醢' => '醯醢',
+'醯雞' => '醯鸡',
+'醯鸡' => '醯鸡',
+'重覆' => '重复',
+'金鍊' => '金链',
+'鍾情' => '钟情',
+'鍾意' => '钟意',
+'鍾靈' => '钟灵',
+'鍾愛' => '钟爱',
+'鐵鍊' => '铁链',
+'鉸鍊' => '铰链',
+'銀硃' => '银朱',
+'銀鍊' => '银链',
+'鍊子' => '链子',
+'鍊條' => '链条',
+'鍊表' => '链表',
+'鍊鎖' => '链锁',
+'鍊錘' => '链锤',
+'鎖鍊' => '锁链',
+'闇公' => '闇公',
+'閻懷禮' => '闫怀礼',
+'阳为乾' => '阳为乾',
+'陽為乾' => '阳为乾',
+'阿部正瞭' => '阿部正瞭',
+'陆徵祥' => '陆徵祥',
+'陸徵祥' => '陆徵祥',
+'陈乾生' => '陈乾生',
+'陳乾生' => '陈乾生',
+'陈元扞' => '陈元扞',
+'陳元扞' => '陈元扞',
+'陈公乾生' => '陈公乾生',
+'陳公乾生' => '陈公乾生',
+'陈遇乾' => '陈遇乾',
+'陳遇乾' => '陈遇乾',
+'陳堵' => '陳堵',
+'陳禕' => '陳禕',
+'雍乾' => '雍乾',
+'讎夷' => '雠夷',
+'讎定' => '雠定',
+'讎校' => '雠校',
+'讎正' => '雠正',
+'讎問' => '雠问',
+'項鍊' => '项链',
+'飛昇' => '飞升',
+'飭令' => '飭令',
+'飽託' => '饱讬',
+'餘慶' => '馀庆',
+'餘瀋' => '馀渖',
+'馬鞌' => '马鞍',
+'高昇' => '高升',
+'高陞' => '高升',
+'鬱姓' => '鬱姓',
+'鬱氏' => '鬱氏',
+'魏徵' => '魏徵',
+'魚乾乾' => '鱼干干',
+'麽氏' => '麽氏',
+'麼麼' => '麽麽',
+'麽麽' => '麽麽',
+'黃麴毒素' => '黄曲毒素',
+'黃潤乾' => '黄润乾',
+'黄润乾' => '黄润乾',
+'龍鍾' => '龙钟',
+',陞' => ',升',
+);
+
+public static $zh2TW = array(
+'0字节' => '0位元組',
+'0杆' => '0桿',
+'1字节' => '1位元組',
+'1杆' => '1桿',
+'2字节' => '2位元組',
+'2杆' => '2桿',
+'3字节' => '3位元組',
+'3杆' => '3桿',
+'4字节' => '4位元組',
+'4杆' => '4桿',
+'5字节' => '5位元組',
+'5杆' => '5桿',
+'6字节' => '6位元組',
+'6杆' => '6桿',
+'7字节' => '7位元組',
+'7杆' => '7桿',
+'8字节' => '8位元組',
+'8杆' => '8桿',
+'9字节' => '9位元組',
+'9杆' => '9桿',
+'甲型肝炎' => 'A型肝炎',
+'甲肝' => 'A肝',
+'乙型肝炎' => 'B型肝炎',
+'乙肝' => 'B肝',
+'丙型肝炎' => 'C型肝炎',
+'丙肝' => 'C肝',
+'IP地址' => 'IP位址',
+'乔戈里峰' => 'K2',
+'·威尔士' => '·威爾士',
+'·威爾士' => '·威爾士',
+'一杆' => '一桿',
+'七杆' => '七桿',
+'三杆' => '三桿',
+'三极管' => '三極體',
+'三極管' => '三極體',
+'达累斯萨拉姆' => '三蘭港',
+'上落客' => '上下客',
+'落車' => '下車',
+'不來梅' => '不萊梅',
+'不来梅' => '不萊梅',
+'以太网' => '乙太網',
+'九杆' => '九桿',
+'了結他' => '了結他',
+'二手烟' => '二手菸',
+'二手煙' => '二手菸',
+'二杆' => '二桿',
+'二极管' => '二極體',
+'二極管' => '二極體',
+'交互设计' => '互動設計',
+'五杆' => '五桿',
+'阿塞拜疆' => '亞塞拜然',
+'阿斯旺' => '亞斯文',
+'人工智能' => '人工智慧',
+'人机交互' => '人機互動',
+'行人路' => '人行道',
+'石勒苏益格' => '什勒斯維希',
+'石勒蘇益格' => '什勒斯維希',
+'界面' => '介面',
+'伊利诺伊州' => '伊利諾州',
+'伊斯坦布尔' => '伊斯坦堡',
+'伊斯坦布爾' => '伊斯坦堡',
+'伊斯兰堡' => '伊斯蘭瑪巴德',
+'伊斯蘭堡' => '伊斯蘭瑪巴德',
+'埃博拉' => '伊波拉',
+'伊丽莎白' => '伊莉莎白',
+'俯卧撑' => '伏地挺身',
+'掌上壓' => '伏地挺身',
+'伯明翰' => '伯明罕',
+'服务器' => '伺服器',
+'佛罗伦萨' => '佛羅倫斯',
+'操作系统' => '作業系統',
+'系数' => '係數',
+'避孕套' => '保險套',
+'傅里叶' => '傅立葉',
+'光盘' => '光碟',
+'光驱' => '光碟機',
+'开普勒' => '克卜勒',
+'開普勒' => '克卜勒',
+'克罗地亚' => '克羅埃西亞',
+'克羅地亞' => '克羅埃西亞',
+'克里斯托弗' => '克里斯多福',
+'万维网' => '全球資訊網',
+'八杆' => '八桿',
+'公共交通' => '公共運輸',
+'六杆' => '六桿',
+'凯瑟琳' => '凱薩琳',
+'嘉芙蓮' => '凱薩琳',
+'划着独木舟' => '划著獨木舟',
+'划着竹筏' => '划著竹筏',
+'划着船' => '划著船',
+'打印' => '列印',
+'列支敦士登' => '列支敦斯登',
+'前波美拉尼亚' => '前波莫瑞',
+'前波美拉尼亞' => '前波莫瑞',
+'加蓬' => '加彭',
+'加沙地带' => '加薩走廊',
+'加沙地帶' => '加薩走廊',
+'包豪斯' => '包浩斯',
+'北朝鲜' => '北韓',
+'局域网' => '區域網',
+'局域网络' => '區域網路',
+'十杆' => '十桿',
+'特立尼达和托巴哥' => '千里達托貝哥',
+'特立尼達和多巴哥' => '千里達托貝哥',
+'南朝鲜' => '南韓',
+'卡斯特罗' => '卡斯楚',
+'卡塔尔' => '卡達',
+'卡塔爾' => '卡達',
+'铆足' => '卯足',
+'打印机' => '印表機',
+'打印機' => '印表機',
+'厄利垂亚' => '厄利垂亞',
+'厄立特里亚' => '厄利垂亞',
+'厄立特里亞' => '厄利垂亞',
+'厄瓜多' => '厄瓜多',
+'厄瓜多尔' => '厄瓜多',
+'厄瓜多爾' => '厄瓜多',
+'源代码' => '原始碼',
+'圆珠笔' => '原子筆',
+'反烟' => '反菸',
+'反煙' => '反菸',
+'可卡因' => '古柯鹼',
+'便携式' => '可攜式',
+'叱咤' => '叱吒',
+'叱咤9' => '叱咤9',
+'叱咤M' => '叱咤M',
+'叱咤叱' => '叱咤叱',
+'叱咤咤' => '叱咤咤',
+'叱咤樂壇' => '叱咤樂壇',
+'斯坦福大学' => '史丹福大學',
+'斯皮尔伯格' => '史匹柏',
+'斯特劳斯' => '史特勞斯',
+'斯威士兰' => '史瓦濟蘭',
+'斯威士蘭' => '史瓦濟蘭',
+'斯蒂芬' => '史蒂芬',
+'斯大林' => '史達林',
+'結他' => '吉他',
+'乞力馬札羅' => '吉力馬札羅',
+'乞力马扎罗' => '吉力馬札羅',
+'吉布堤' => '吉布地',
+'吉布提' => '吉布地',
+'基里巴斯' => '吉里巴斯',
+'图瓦卢' => '吐瓦魯',
+'圖瓦盧' => '吐瓦魯',
+'吸烟' => '吸菸',
+'吸煙' => '吸菸',
+'吕宋烟' => '呂宋菸',
+'呂宋煙' => '呂宋菸',
+'格丁根' => '哥廷根',
+'哥特式' => '哥德式',
+'哥斯达黎加' => '哥斯大黎加',
+'哥斯達黎加' => '哥斯大黎加',
+'卡拉奇' => '喀拉蚩',
+'乔治·奥威尔' => '喬治·歐威爾',
+'佐治亚' => '喬治亞',
+'佐治亞' => '喬治亞',
+'格魯吉亞' => '喬治亞',
+'格鲁吉亚' => '喬治亞',
+'单反相机' => '單眼相機',
+'單鏡反光機' => '單眼相機',
+'嘯咤' => '嘯吒',
+'四杆' => '四桿',
+'图卢兹' => '土魯斯',
+'圖盧茲' => '土魯斯',
+'戛纳' => '坎城',
+'堪培拉' => '坎培拉',
+'坦桑尼亚' => '坦尚尼亞',
+'坦桑尼亞' => '坦尚尼亞',
+'端口' => '埠',
+'首席执行官' => '執行長',
+'报道' => '報導',
+'塑料袋' => '塑膠袋',
+'塞舌尔' => '塞席爾',
+'塞舌爾' => '塞席爾',
+'萨拉热窝' => '塞拉耶佛',
+'薩拉熱窩' => '塞拉耶佛',
+'塞尔维亚和黑山' => '塞爾維亞與蒙特內哥羅',
+'塞爾維亞和黑山' => '塞爾維亞與蒙特內哥羅',
+'塞爾維亞與蒙特內哥羅' => '塞爾維亞與蒙特內哥羅',
+'塞维利亚' => '塞維亞',
+'西維爾' => '塞維亞',
+'塞黑' => '塞蒙',
+'共和联邦' => '大英國協',
+'英联邦' => '大英國協',
+'英聯邦' => '大英國協',
+'太空飛行員' => '太空人',
+'宇航员' => '太空人',
+'穿梭機' => '太空梭',
+'航天飞机' => '太空梭',
+'宇航服' => '太空衣',
+'航天器' => '太空飛行器',
+'尼日利亚' => '奈及利亞',
+'尼日利亞' => '奈及利亞',
+'忌廉' => '奶油',
+'荷里活' => '好萊塢',
+'威廉姆斯' => '威廉士',
+'威斯特法伦' => '威斯伐倫',
+'威斯特法倫' => '威斯伐倫',
+'威士顿康星' => '威斯康辛',
+'威尔士' => '威爾斯',
+'威爾士' => '威爾斯',
+'字库' => '字型檔',
+'存盘' => '存檔',
+'孟德爾遜' => '孟德爾頌',
+'门德尔松' => '孟德爾頌',
+'安哈尔特' => '安哈特',
+'安哈爾特' => '安哈特',
+'安提瓜和巴布达' => '安地卡及巴布達',
+'安提瓜和巴布達' => '安地卡及巴布達',
+'洪都拉斯' => '宏都拉斯',
+'密歇根' => '密西根',
+'宽带' => '寬頻',
+'老挝人民民主共和国' => '寮人民民主共和國',
+'老撾人民民主共和國' => '寮人民民主共和國',
+'老挝' => '寮國',
+'老撾' => '寮國',
+'老挝语' => '寮語',
+'老撾語' => '寮語',
+'波里活' => '寶萊塢',
+'对着干' => '對著幹',
+'高峰时段' => '尖峰時段',
+'高峰时间' => '尖峰時間',
+'贊比亞' => '尚比亞',
+'赞比亚' => '尚比亞',
+'尼克松' => '尼克森',
+'尼日尔' => '尼日',
+'尼日爾' => '尼日',
+'雅马哈' => '山葉',
+'机床' => '工具機',
+'機床' => '工具機',
+'珍寶客機' => '巨無霸客機',
+'发达国家' => '已開發國家',
+'巴塞罗那' => '巴塞隆納',
+'巴塞隆拿' => '巴塞隆納',
+'巴布亚新几内亚' => '巴布亞紐幾內亞',
+'巴布亞新畿內亞' => '巴布亞紐幾內亞',
+'巴士拉' => '巴斯拉',
+'巴巴多斯' => '巴貝多',
+'佈' => '布',
+'布基納法索' => '布吉納法索',
+'布基纳法索' => '布吉納法索',
+'布什' => '布希',
+'布殊' => '布希',
+'勃兰登堡' => '布蘭登堡',
+'勃蘭登堡' => '布蘭登堡',
+'布里斯托尔' => '布里斯托',
+'布隆方丹' => '布隆泉',
+'希拉莉' => '希拉蕊',
+'希拉里' => '希拉蕊',
+'希特拉' => '希特勒',
+'巴尔米拉环礁' => '帕邁拉環礁',
+'帕劳' => '帛琉',
+'希拉克' => '席哈克',
+'账' => '帳',
+'干着急' => '干著急',
+'干着' => '幹著',
+'畿內亞' => '幾內亞',
+'几内亚比绍' => '幾內亞比索',
+'幾內亞比紹' => '幾內亞比索',
+'比利牛斯' => '庇里牛斯',
+'库尔德人' => '庫德人',
+'库尔德族' => '庫德族',
+'康涅狄格' => '康乃狄克',
+'约翰斯顿岛' => '強斯頓環礁',
+'汇编' => '彙編',
+'形而上学' => '形上學',
+'形而上學' => '形上學',
+'得克萨斯' => '德克薩斯',
+'得克薩斯' => '德克薩斯',
+'德累斯頓' => '德勒斯登',
+'德累斯顿' => '德勒斯登',
+'德里达' => '德希達',
+'特拉华' => '德拉瓦',
+'特拉華' => '德拉瓦',
+'快闪存储器' => '快閃記憶體',
+'闪存' => '快閃記憶體',
+'想象' => '想像',
+'愛德文' => '愛德溫',
+'艾滋' => '愛滋',
+'艾奧瓦' => '愛荷華',
+'爱德华州' => '愛達荷州',
+'应用程序' => '應用程式',
+'戈尔巴乔夫' => '戈巴契夫',
+'戈爾巴喬夫' => '戈巴契夫',
+'戒烟' => '戒菸',
+'戒煙' => '戒菸',
+'戴克里先' => '戴克里先',
+'打印度' => '打印度',
+'抽烟' => '抽菸',
+'抽煙' => '抽菸',
+'拉普兰' => '拉布蘭',
+'拒烟' => '拒菸',
+'拒煙' => '拒菸',
+'卷烟' => '捲菸',
+'捲煙' => '捲菸',
+'積架' => '捷豹',
+'控件' => '控制項',
+'推杆' => '推桿',
+'第比利斯' => '提比里西',
+'挥杆' => '揮桿',
+'揮杆' => '揮桿',
+'搜索引擎' => '搜尋引擎',
+'摩根士丹利' => '摩根史坦利',
+'台球' => '撞球',
+'攻打' => '攻打',
+'数字化' => '數位化',
+'數碼化' => '數位化',
+'数字技术' => '數位技術',
+'數碼技術' => '數位技術',
+'数字照相机' => '數位照相機',
+'数码照相机' => '數位照相機',
+'數碼照相機' => '數位照相機',
+'数码相机' => '數位相機',
+'數碼相機' => '數位相機',
+'数字信号' => '數位訊號',
+'數碼訊號' => '數位訊號',
+'数字电视' => '數位電視',
+'數碼電視' => '數位電視',
+'調制解調器' => '數據機',
+'调制解调器' => '數據機',
+'斯洛文尼亚' => '斯洛維尼亞',
+'斯洛文尼亞' => '斯洛維尼亞',
+'新罕布什尔' => '新罕布夏',
+'施罗德' => '施洛德',
+'旱烟' => '旱菸',
+'旱煙' => '旱菸',
+'普利策' => '普利茲',
+'芯片' => '晶片',
+'智能卡' => '智慧卡',
+'智能手机' => '智慧型手機',
+'智能手機' => '智慧型手機',
+'智能电话' => '智慧型電話',
+'智能電話' => '智慧型電話',
+'知識產權' => '智慧財產權',
+'知识产权' => '智慧財產權',
+'萌島' => '曼島',
+'马恩岛' => '曼島',
+'木杆' => '木桿',
+'列奥纳多' => '李奧納多',
+'杜塞尔多夫' => '杜塞道夫',
+'杜塞爾多夫' => '杜塞道夫',
+'迪拜' => '杜拜',
+'东盟' => '東協',
+'亚细安' => '東協',
+'東盟' => '東協',
+'东南亚国家联盟' => '東南亞國家協會',
+'東南亞國家聯盟' => '東南亞國家協會',
+'柏林墙' => '柏林圍牆',
+'柏林牆' => '柏林圍牆',
+'乍得' => '查德',
+'查韦斯' => '查維茲',
+'克林頓' => '柯林頓',
+'克林顿' => '柯林頓',
+'戴卓爾' => '柴契爾',
+'撒切尔' => '柴契爾',
+'格林納達' => '格瑞那達',
+'格林纳达' => '格瑞那達',
+'桃金娘' => '桃金孃',
+'台式电脑' => '桌上型電腦',
+'乒乓' => '桌球',
+'乒乓球' => '桌球',
+'杆弟' => '桿弟',
+'杆身' => '桿身',
+'杆头' => '桿頭',
+'杆頭' => '桿頭',
+'梅尔·吉布森' => '梅爾·吉勃遜',
+'梵高' => '梵谷',
+'桑巴舞' => '森巴舞',
+'榴莲' => '榴槤',
+'榴蓮' => '榴槤',
+'枪支' => '槍枝',
+'标准杆' => '標準桿',
+'標準杆' => '標準桿',
+'毛里求斯' => '模里西斯',
+'毛里裘斯' => '模里西斯',
+'机器人' => '機器人',
+'機械人' => '機器人',
+'概率' => '機率',
+'電單車' => '機車',
+'枱' => '檯',
+'字段' => '欄位',
+'奥巴马' => '歐巴馬',
+'奧巴馬' => '歐巴馬',
+'正在叱咤' => '正在叱咤',
+'文莱' => '汶萊',
+'沙律' => '沙拉',
+'沙地阿拉伯' => '沙烏地阿拉伯',
+'沙特阿拉伯' => '沙烏地阿拉伯',
+'法属圭亚那' => '法屬蓋亞那',
+'波斯尼亚' => '波士尼亞',
+'波斯尼亞' => '波士尼亞',
+'波斯尼亚和黑塞哥维那' => '波士尼亞赫塞哥維納',
+'波斯尼亞黑塞哥維那' => '波士尼亞赫塞哥維納',
+'博茨瓦納' => '波札那',
+'博茨瓦纳' => '波札那',
+'波黑' => '波赫',
+'洋烟' => '洋菸',
+'洋煙' => '洋菸',
+'帕特里克' => '派屈克',
+'海洛英' => '海洛因',
+'侯賽因' => '海珊',
+'侯赛因' => '海珊',
+'鼠标' => '滑鼠',
+'汉诺威' => '漢諾瓦',
+'漢诺威' => '漢諾瓦',
+'烤烟' => '烤菸',
+'烤煙' => '烤菸',
+'无烟日' => '無菸日',
+'無煙日' => '無菸日',
+'无烟环境' => '無菸環境',
+'無煙環境' => '無菸環境',
+'烟熏' => '煙燻',
+'首席运营官' => '營運長',
+'熏烤' => '燻烤',
+'熏肉' => '燻肉',
+'熏黑' => '燻黑',
+'版权信息' => '版權資訊',
+'疯牛症' => '狂牛症',
+'鐵托' => '狄托',
+'铁托' => '狄托',
+'塞拉利昂' => '獅子山',
+'独联体' => '獨立國協',
+'獨聯體' => '獨立國協',
+'独立国家联合体' => '獨立國家國協',
+'獨立國家聯合體' => '獨立國家國協',
+'波利尼西亚' => '玻里尼西亞',
+'波利尼西亞' => '玻里尼西亞',
+'本傑明' => '班傑明',
+'本杰明' => '班傑明',
+'球杆' => '球桿',
+'理查德' => '理察',
+'卢塞恩' => '琉森',
+'危地馬拉' => '瓜地馬拉',
+'危地马拉' => '瓜地馬拉',
+'巴伦西亚' => '瓦倫西亞',
+'華倫西亞' => '瓦倫西亞',
+'冈比亚' => '甘比亞',
+'岡比亞' => '甘比亞',
+'肯尼迪' => '甘迺迪',
+'留尼汪' => '留尼旺',
+'毕加索' => '畢卡索',
+'迭代' => '疊代',
+'徵狀' => '症狀',
+'勃朗宁' => '白朗寧',
+'百慕大' => '百慕達',
+'卢旺达' => '盧安達',
+'盧旺達' => '盧安達',
+'睾' => '睪',
+'知识产权局' => '知識產權局',
+'知識產權局' => '知識產權署',
+'知識產權署' => '知識產權署',
+'知识产权署' => '知識產權署',
+'硅' => '矽',
+'硅藻' => '硅藻',
+'硬盘' => '硬碟',
+'硬件' => '硬體',
+'盘片' => '碟片',
+'磁盘' => '磁碟',
+'磁道' => '磁軌',
+'禁烟' => '禁菸',
+'禁煙' => '禁菸',
+'福尔马林' => '福馬林',
+'福爾馬林' => '福馬林',
+'私烟' => '私菸',
+'私煙' => '私菸',
+'程序员' => '程式設計師',
+'编程语言' => '程式語言',
+'空气质量' => '空氣品質',
+'空氣質素' => '空氣品質',
+'突尼斯' => '突尼西亞',
+'绑紧跳' => '笨豬跳',
+'蹦极跳' => '笨豬跳',
+'短信' => '簡訊',
+'纽黑文' => '紐哈芬',
+'新奥尔良' => '紐奧良',
+'新奧爾良' => '紐奧良',
+'新几内亚' => '紐幾內亞',
+'新西兰' => '紐西蘭',
+'新西蘭' => '紐西蘭',
+'紙煙' => '紙菸',
+'纸烟' => '紙菸',
+'索尔仁尼琴' => '索忍尼辛',
+'索贊尼辛' => '索忍尼辛',
+'所罗门群岛' => '索羅門群島',
+'所羅門群島' => '索羅門群島',
+'索馬里' => '索馬利亞',
+'索马里' => '索馬利亞',
+'索馬里蘭' => '索馬利蘭',
+'索马里兰' => '索馬利蘭',
+'維爾京群島' => '維京群島',
+'维尔京群岛' => '維京群島',
+'弗吉尼亚' => '維吉尼亞',
+'佛得角' => '維德角',
+'维特根斯坦' => '維根斯坦',
+'網絡遊戲' => '網路遊戲',
+'网络游戏' => '網路遊戲',
+'互联网' => '網際網路',
+'互联网络' => '網際網路',
+'互聯網' => '網際網路',
+'互聯網絡' => '網際網路',
+'因特网' => '網際網路',
+'系着' => '繫著',
+'卢瓦尔' => '羅亞爾',
+'盧瓦爾' => '羅亞爾',
+'卢浮宫' => '羅浮宮',
+'樂行童軍' => '羅浮童軍',
+'意大利' => '義大利',
+'昂山素姬' => '翁山蘇姬',
+'昂山素季' => '翁山蘇姬',
+'圣基茨和尼维斯' => '聖克里斯多福及尼維斯',
+'聖吉斯納域斯' => '聖克里斯多福及尼維斯',
+'圣文森特和格林纳丁斯' => '聖文森及格瑞那丁',
+'聖文森特和格林納丁斯' => '聖文森及格瑞那丁',
+'圣赫勒拿' => '聖赫倫那',
+'圣卢西亚' => '聖露西亞',
+'聖盧西亞' => '聖露西亞',
+'圣马力诺' => '聖馬利諾',
+'聖馬力諾' => '聖馬利諾',
+'肯尼亚' => '肯亞',
+'氨基酸' => '胺基酸',
+'自由泳' => '自由式',
+'三藩市' => '舊金山',
+'艾森豪威尔' => '艾森豪',
+'埃菲尔' => '艾菲爾',
+'阿里埃勒·沙龍' => '艾里爾·夏隆',
+'阿里埃勒·沙龙' => '艾里爾·夏隆',
+'帕塔亚' => '芭達亞',
+'黎克特制' => '芮氏',
+'里氏0' => '芮氏0',
+'里氏1' => '芮氏1',
+'里氏2' => '芮氏2',
+'里氏3' => '芮氏3',
+'里氏4' => '芮氏4',
+'里氏5' => '芮氏5',
+'里氏6' => '芮氏6',
+'里氏7' => '芮氏7',
+'里氏8' => '芮氏8',
+'里氏9' => '芮氏9',
+'里氏地震规模' => '芮氏地震規模',
+'里氏规模' => '芮氏規模',
+'里氏震级' => '芮氏規模',
+'当且仅当' => '若且唯若',
+'味美思' => '苦艾酒',
+'毛里塔尼亚' => '茅利塔尼亞',
+'毛里塔尼亞' => '茅利塔尼亞',
+'霍尔木兹' => '荷姆茲',
+'霍爾木茲' => '荷姆茲',
+'荷李活道' => '荷李活道',
+'莫桑比克' => '莫三比克',
+'瓦文萨' => '華勒沙',
+'華里沙' => '華勒沙',
+'瓦格纳' => '華格納',
+'烟具' => '菸具',
+'煙具' => '菸具',
+'烟品' => '菸品',
+'煙品' => '菸品',
+'烟嘴' => '菸嘴',
+'煙嘴' => '菸嘴',
+'烟卷' => '菸捲',
+'煙捲' => '菸捲',
+'烟斗' => '菸斗',
+'煙斗' => '菸斗',
+'烟民' => '菸民',
+'煙民' => '菸民',
+'烟灰' => '菸灰',
+'煙灰' => '菸灰',
+'烟瘾' => '菸癮',
+'煙癮' => '菸癮',
+'烟丝' => '菸絲',
+'煙絲' => '菸絲',
+'烟草' => '菸草',
+'煙草' => '菸草',
+'烟叶' => '菸葉',
+'煙葉' => '菸葉',
+'烟蒂' => '菸蒂',
+'煙蒂' => '菸蒂',
+'烟袋' => '菸袋',
+'煙袋' => '菸袋',
+'烟农' => '菸農',
+'煙農' => '菸農',
+'烟酒' => '菸酒',
+'煙酒' => '菸酒',
+'烟头' => '菸頭',
+'煙頭' => '菸頭',
+'烟鬼' => '菸鬼',
+'煙鬼' => '菸鬼',
+'烟碱' => '菸鹼',
+'煙鹼' => '菸鹼',
+'万历朝鲜战争' => '萬曆朝鮮戰爭',
+'瓦努阿图' => '萬那杜',
+'瓦努阿圖' => '萬那杜',
+'叶利钦' => '葉爾欽',
+'葉利欽' => '葉爾欽',
+'埃里温' => '葉里溫',
+'埃里溫' => '葉里溫',
+'也門' => '葉門',
+'也门' => '葉門',
+'着' => '著',
+'着眼于' => '著眼於',
+'科摩罗' => '葛摩',
+'科摩羅' => '葛摩',
+'格林美獎' => '葛萊美獎',
+'格莱美奖' => '葛萊美獎',
+'黑山共和国' => '蒙特內哥羅共和國',
+'黑山共和國' => '蒙特內哥羅共和國',
+'滿地可' => '蒙特婁',
+'蒙特利尔' => '蒙特婁',
+'蒙特利爾' => '蒙特婁',
+'普密蓬' => '蒲美蓬',
+'布隆迪' => '蒲隆地',
+'圭亚那' => '蓋亞那',
+'肖斯塔科维奇' => '蕭士塔高維奇',
+'蕭士達高維契' => '蕭士塔高維奇',
+'肖邦' => '蕭邦',
+'薛定谔' => '薛丁格',
+'扎伊尔' => '薩伊',
+'扎伊爾' => '薩伊',
+'素檀' => '蘇丹',
+'苏里南' => '蘇利南',
+'浮罗交怡' => '蘭卡威',
+'浮羅交怡' => '蘭卡威',
+'劳拉' => '蘿拉',
+'荧光' => '螢光',
+'荧屏' => '螢屏',
+'屏幕' => '螢幕',
+'行人路权' => '行人路權',
+'行人路權' => '行人路權',
+'流動網絡' => '行動網路',
+'移动网络' => '行動網路',
+'流動電話' => '行動電話',
+'移动电话' => '行動電話',
+'冲着' => '衝著',
+'埃塞俄比亚' => '衣索比亞',
+'埃塞俄比亞' => '衣索比亞',
+'克隆人' => '複製人',
+'国际象棋' => '西洋棋',
+'國際象棋' => '西洋棋',
+'赫梯' => '西臺',
+'分辨率' => '解析度',
+'解像度' => '解析度',
+'译码' => '解碼',
+'出租车' => '計程車',
+'约翰逊' => '詹森',
+'诺曼底' => '諾曼第',
+'瑙魯' => '諾魯',
+'瑙鲁' => '諾魯',
+'科特迪瓦' => '象牙海岸',
+'碧咸' => '貝克漢',
+'貝爾格萊德' => '貝爾格勒',
+'贝尔格莱德' => '貝爾格勒',
+'伯利兹' => '貝里斯',
+'伯利茲' => '貝里斯',
+'首席财务官' => '財務長',
+'集装箱' => '貨櫃',
+'数据库' => '資料庫',
+'數據庫' => '資料庫',
+'信息时代' => '資訊時代',
+'信息论' => '資訊理論',
+'乔布斯' => '賈伯斯',
+'本·拉登' => '賓·拉登',
+'宾西法尼亚' => '賓夕法尼亞',
+'本拉登' => '賓拉登',
+'利比里亚' => '賴比瑞亞',
+'利比里亞' => '賴比瑞亞',
+'莱索托' => '賴索托',
+'萊索托' => '賴索托',
+'塞浦路斯' => '賽普勒斯',
+'赫丘勒·波洛' => '赫丘勒·白羅',
+'赫鲁晓夫' => '赫魯雪夫',
+'切尔诺贝利' => '車諾比',
+'软驱' => '軟碟機',
+'軟件' => '軟體',
+'软件' => '軟體',
+'津巴布韋' => '辛巴威',
+'津巴布韦' => '辛巴威',
+'径入' => '逕入',
+'径到' => '逕到',
+'径取' => '逕取',
+'径启' => '逕啟',
+'径寄' => '逕寄',
+'径庭' => '逕庭',
+'径往' => '逕往',
+'径自' => '逕自',
+'径行' => '逕行',
+'径迎' => '逕迎',
+'链接' => '連結',
+'連結他' => '連結他',
+'进制' => '進位',
+'达·芬奇' => '達·文西',
+'达芬奇' => '達文西',
+'溫納圖萬' => '那杜',
+'丘吉尔' => '邱吉爾',
+'多普勒' => '都卜勒',
+'酰' => '醯',
+'里士满' => '里奇蒙',
+'金沙萨' => '金夏沙',
+'金沙薩' => '金夏沙',
+'健力士世界紀錄' => '金氏世界紀錄',
+'健力士世界纪录' => '金氏世界紀錄',
+'吉尼斯世界纪录' => '金氏世界紀錄',
+'钚' => '鈽',
+'鈎' => '鉤',
+'钩' => '鉤',
+'锎' => '鉲',
+'锫' => '鉳',
+'镅' => '鋂',
+'镎' => '錼',
+'钫' => '鍅',
+'炼金' => '鍊金',
+'锻炼' => '鍛鍊',
+'锝' => '鎝',
+'鐵杆' => '鐵桿',
+'铁杆' => '鐵桿',
+'泰坦尼克号' => '鐵達尼號',
+'锿' => '鑀',
+'关系着' => '關係著',
+'写保护' => '防寫',
+'阿布扎比' => '阿布達比',
+'阿拉伯联合酋长国' => '阿拉伯聯合大公國',
+'阿拉伯聯合酋長國' => '阿拉伯聯合大公國',
+'亚拉巴马' => '阿拉巴馬',
+'阿联酋' => '阿聯',
+'阿聯酋' => '阿聯',
+'罗纳德·里根' => '隆納·雷根',
+'私隱' => '隱私',
+'耶加達' => '雅加達',
+'雅尔塔' => '雅爾達',
+'雅爾塔' => '雅爾達',
+'雅穆苏克雷' => '雅穆索戈',
+'雅穆蘇克雷' => '雅穆索戈',
+'悉尼' => '雪梨',
+'雪茄烟' => '雪茄菸',
+'雪茄煙' => '雪茄菸',
+'莱特湾' => '雷伊泰灣',
+'萊特灣' => '雷伊泰灣',
+'激光' => '雷射',
+'雷诺阿' => '雷諾瓦',
+'电子烟' => '電子菸',
+'電子煙' => '電子菸',
+'晶体管' => '電晶體',
+'晶體管' => '電晶體',
+'电杆' => '電桿',
+'电线杆' => '電線桿',
+'电脑程序' => '電腦程式',
+'计算机程序' => '電腦程式',
+'荷尔斯泰因' => '霍爾斯坦',
+'荷爾斯泰因' => '霍爾斯坦',
+'面包着' => '面包著',
+'朝鲜战争' => '韓戰',
+'声卡' => '音效卡',
+'缺省' => '預設',
+'导弹' => '飛彈',
+'糊口' => '餬口',
+'香烟' => '香菸',
+'香煙' => '香菸',
+'馬里共和國' => '馬利共和國',
+'马里共和国' => '馬利共和國',
+'马拉维' => '馬拉威',
+'馬斯特里赫特' => '馬斯垂克',
+'马斯特里赫特' => '馬斯垂克',
+'马耳他' => '馬爾他',
+'馬爾代夫' => '馬爾地夫',
+'马尔代夫' => '馬爾地夫',
+'馬利蘭' => '馬里蘭',
+'高清电视' => '高畫質電視',
+'斗着' => '鬥著',
+'魯賓斯·巴里切羅' => '魯本·巴瑞切羅',
+'咪高峰' => '麥克風',
+'迈克尔' => '麥可',
+'麦克尔' => '麥可',
+'迈凯轮' => '麥拿輪',
+'邁凱輪' => '麥拿輪',
+'马萨诸塞' => '麻薩諸塞',
+'戴安娜' => '黛安娜',
+'狄安娜' => '黛安娜',
+'点烟' => '點菸',
+'點煙' => '點菸',
+'霉素' => '黴素',
+);
+
+public static $zh2HK = array(
+'0字节' => '0位元組',
+'1字节' => '1位元組',
+'2字节' => '2位元組',
+'3字节' => '3位元組',
+'4字节' => '4位元組',
+'5字节' => '5位元組',
+'6字节' => '6位元組',
+'7字节' => '7位元組',
+'8字节' => '8位元組',
+'9字节' => '9位元組',
+'IP地址' => 'IP位址',
+'·威尔士' => '·威爾士',
+'·威爾士' => '·威爾士',
+'一地里' => '一地裏',
+'一年里' => '一年裏',
+'三十六著' => '三十六着',
+'三極體' => '三極管',
+'旧金山' => '三藩市',
+'舊金山' => '三藩市',
+'上台面' => '上枱面',
+'下著' => '下着',
+'下著作' => '下著作',
+'下著名' => '下著名',
+'下著有' => '下著有',
+'下著称' => '下著稱',
+'下著稱' => '下著稱',
+'下著者' => '下著者',
+'下著述' => '下著述',
+'下著录' => '下著錄',
+'下著錄' => '下著錄',
+'不占' => '不佔',
+'不萊梅' => '不來梅',
+'不著痕跡' => '不着痕跡',
+'不著邊際' => '不着邊際',
+'世纪里' => '世紀裏',
+'C型肝炎' => '丙型肝炎',
+'C肝' => '丙肝',
+'并发布' => '並發佈',
+'中文里' => '中文裏',
+'乘著' => '乘着',
+'乘著作' => '乘著作',
+'乘著名' => '乘著名',
+'乘著書' => '乘著書',
+'乘著称' => '乘著稱',
+'乘著稱' => '乘著稱',
+'乘著者' => '乘著者',
+'乘著述' => '乘著述',
+'乘著錄' => '乘著錄',
+'B型肝炎' => '乙型肝炎',
+'B肝' => '乙肝',
+'吉力馬札羅' => '乞力馬札羅',
+'葉門' => '也門',
+'事里' => '事裏',
+'二極體' => '二極管',
+'因特网' => '互聯網',
+'網際網路' => '互聯網',
+'井里' => '井裏',
+'亮著' => '亮着',
+'亮著作' => '亮著作',
+'亮著名' => '亮著名',
+'亮著書' => '亮著書',
+'亮著称' => '亮著稱',
+'亮著稱' => '亮著稱',
+'亮著者' => '亮著者',
+'亮著述' => '亮著述',
+'亮著錄' => '亮著錄',
+'人工智慧' => '人工智能',
+'人数里' => '人數裏',
+'仗著' => '仗着',
+'仗著作' => '仗著作',
+'仗著名' => '仗著名',
+'仗著書' => '仗著書',
+'仗著稱' => '仗著稱',
+'仗著者' => '仗著者',
+'仗著述' => '仗著述',
+'仗著錄' => '仗著錄',
+'代表著' => '代表着',
+'代表著作' => '代表著作',
+'代表著名' => '代表著名',
+'代表著書' => '代表著書',
+'代表著稱' => '代表著稱',
+'代表著者' => '代表著者',
+'代表著述' => '代表著述',
+'代表著錄' => '代表著錄',
+'伊斯蘭瑪巴德' => '伊斯蘭堡',
+'埃博拉' => '伊波拉',
+'伏著' => '伏着',
+'貝里斯' => '伯利茲',
+'伯明罕' => '伯明翰',
+'伴著' => '伴着',
+'伴著作' => '伴著作',
+'伴著名' => '伴著名',
+'伴著書' => '伴著書',
+'伴著稱' => '伴著稱',
+'伴著者' => '伴著者',
+'伴著述' => '伴著述',
+'伴著錄' => '伴著錄',
+'布下了' => '佈下了',
+'布下的' => '佈下的',
+'布光' => '佈光',
+'布告' => '佈告',
+'布局' => '佈局',
+'布展' => '佈展',
+'布控' => '佈控',
+'布于' => '佈於',
+'布於' => '佈於',
+'布施' => '佈施',
+'布景' => '佈景',
+'布满' => '佈滿',
+'布滿' => '佈滿',
+'布置' => '佈置',
+'布設' => '佈設',
+'布设' => '佈設',
+'布警' => '佈警',
+'布道' => '佈道',
+'布防' => '佈防',
+'布阵' => '佈陣',
+'布陣' => '佈陣',
+'布雷、' => '佈雷、',
+'布雷。' => '佈雷。',
+'布雷封鎖' => '佈雷封鎖',
+'布雷封锁' => '佈雷封鎖',
+'布雷的' => '佈雷的',
+'布雷艇' => '佈雷艇',
+'布雷舰' => '佈雷艦',
+'布雷艦' => '佈雷艦',
+'布雷速度' => '佈雷速度',
+'布雷,' => '佈雷,',
+'布雷;' => '佈雷;',
+'布点' => '佈點',
+'布點' => '佈點',
+'低著' => '低着',
+'低著作' => '低著作',
+'低著名' => '低著名',
+'低著書' => '低著書',
+'低著称' => '低著稱',
+'低著稱' => '低著稱',
+'低著者' => '低著者',
+'低著述' => '低著述',
+'低著錄' => '低著錄',
+'住著' => '住着',
+'住著作' => '住著作',
+'住著名' => '住著名',
+'住著書' => '住著書',
+'住著稱' => '住著稱',
+'住著者' => '住著者',
+'住著述' => '住著述',
+'住著錄' => '住著錄',
+'占0' => '佔0',
+'占1' => '佔1',
+'占2' => '佔2',
+'占3' => '佔3',
+'占4' => '佔4',
+'占5' => '佔5',
+'占6' => '佔6',
+'占7' => '佔7',
+'占8' => '佔8',
+'占9' => '佔9',
+'占A' => '佔A',
+'占B' => '佔B',
+'占C' => '佔C',
+'占D' => '佔D',
+'占E' => '佔E',
+'占F' => '佔F',
+'占G' => '佔G',
+'占H' => '佔H',
+'占I' => '佔I',
+'占J' => '佔J',
+'占K' => '佔K',
+'占L' => '佔L',
+'占M' => '佔M',
+'占N' => '佔N',
+'占O' => '佔O',
+'占P' => '佔P',
+'占Q' => '佔Q',
+'占R' => '佔R',
+'占S' => '佔S',
+'占T' => '佔T',
+'占U' => '佔U',
+'占V' => '佔V',
+'占W' => '佔W',
+'占X' => '佔X',
+'占Y' => '佔Y',
+'占Z' => '佔Z',
+'占〇' => '佔〇',
+'占一' => '佔一',
+'占七' => '佔七',
+'占三' => '佔三',
+'占上風' => '佔上風',
+'占上风' => '佔上風',
+'占下' => '佔下',
+'占下風' => '佔下風',
+'占下风' => '佔下風',
+'占不占' => '佔不佔',
+'占不足' => '佔不足',
+'占世界' => '佔世界',
+'占中' => '佔中',
+'占主' => '佔主',
+'占主要' => '佔主要',
+'占九' => '佔九',
+'占了' => '佔了',
+'占二' => '佔二',
+'占五' => '佔五',
+'占人便宜' => '佔人便宜',
+'占位' => '佔位',
+'占住' => '佔住',
+'占占' => '佔佔',
+'占便宜' => '佔便宜',
+'占俄' => '佔俄',
+'占个' => '佔個',
+'占個' => '佔個',
+'占个位' => '佔個位',
+'占個位' => '佔個位',
+'占亿' => '佔億',
+'占億' => '佔億',
+'占优' => '佔優',
+'占優' => '佔優',
+'占先' => '佔先',
+'占光' => '佔光',
+'占全' => '佔全',
+'占两' => '佔兩',
+'占兩' => '佔兩',
+'占八' => '佔八',
+'占六' => '佔六',
+'占分' => '佔分',
+'占到' => '佔到',
+'占加' => '佔加',
+'占劣' => '佔劣',
+'占北' => '佔北',
+'占十' => '佔十',
+'占千' => '佔千',
+'占半' => '佔半',
+'占南' => '佔南',
+'占印' => '佔印',
+'占去' => '佔去',
+'占取' => '佔取',
+'占台' => '佔台',
+'占囁' => '佔囁',
+'占四' => '佔四',
+'占国' => '佔國',
+'占國' => '佔國',
+'占在' => '佔在',
+'占地' => '佔地',
+'占场' => '佔場',
+'占場' => '佔場',
+'占压' => '佔壓',
+'占壓' => '佔壓',
+'占多' => '佔多',
+'占大' => '佔大',
+'占好' => '佔好',
+'占小' => '佔小',
+'占少' => '佔少',
+'占局部' => '佔局部',
+'占屋' => '佔屋',
+'占山为' => '佔山為',
+'占山為' => '佔山為',
+'占市' => '佔市',
+'占平均' => '佔平均',
+'占床' => '佔床',
+'占座' => '佔座',
+'占後' => '佔後',
+'占得' => '佔得',
+'占德' => '佔德',
+'占所有' => '佔所有',
+'占掉' => '佔掉',
+'占据' => '佔據',
+'占據' => '佔據',
+'占整' => '佔整',
+'占新' => '佔新',
+'占有' => '佔有',
+'占东' => '佔東',
+'占東' => '佔東',
+'占查' => '佔查',
+'占次' => '佔次',
+'占比' => '佔比',
+'占法' => '佔法',
+'占满' => '佔滿',
+'占滿' => '佔滿',
+'占澳' => '佔澳',
+'占为' => '佔為',
+'占為' => '佔為',
+'占率' => '佔率',
+'占用' => '佔用',
+'占毕' => '佔畢',
+'占畢' => '佔畢',
+'占百' => '佔百',
+'占尽' => '佔盡',
+'占盡' => '佔盡',
+'占着' => '佔着',
+'占著' => '佔着',
+'占網' => '佔網',
+'占网' => '佔網',
+'占線' => '佔線',
+'占线' => '佔線',
+'占总' => '佔總',
+'占總' => '佔總',
+'占缺' => '佔缺',
+'占美国' => '佔美國',
+'占美國' => '佔美國',
+'占耕' => '佔耕',
+'占至多' => '佔至多',
+'占至少' => '佔至少',
+'占臺' => '佔臺',
+'占英' => '佔英',
+'占万' => '佔萬',
+'占萬' => '佔萬',
+'占著名' => '佔著名',
+'占著者' => '佔著者',
+'占葡' => '佔葡',
+'占苏' => '佔蘇',
+'占蘇' => '佔蘇',
+'占西' => '佔西',
+'占資' => '佔資',
+'占资' => '佔資',
+'占起' => '佔起',
+'占超过' => '佔超過',
+'占超過' => '佔超過',
+'占过' => '佔過',
+'占過' => '佔過',
+'占道' => '佔道',
+'占零' => '佔零',
+'占領' => '佔領',
+'占领' => '佔領',
+'占头' => '佔頭',
+'占頭' => '佔頭',
+'占头筹' => '佔頭籌',
+'占頭籌' => '佔頭籌',
+'占香' => '佔香',
+'占馬' => '佔馬',
+'占马' => '佔馬',
+'占高枝' => '佔高枝',
+'維德角' => '佛得角',
+'作品里' => '作品裏',
+'來著' => '來着',
+'來著作' => '來著作',
+'來著名' => '來著名',
+'來著書' => '來著書',
+'來著稱' => '來著稱',
+'來著者' => '來著者',
+'來著述' => '來著述',
+'來著錄' => '來著錄',
+'侵占' => '侵佔',
+'俄占' => '俄佔',
+'保障著' => '保障着',
+'保障著作' => '保障著作',
+'保障著名' => '保障著名',
+'保障著書' => '保障著書',
+'保障著稱' => '保障著稱',
+'保障著者' => '保障著者',
+'保障著述' => '保障著述',
+'保障著錄' => '保障著錄',
+'信著' => '信着',
+'信著作' => '信著作',
+'信著名' => '信著名',
+'信著書' => '信著書',
+'信著称' => '信著稱',
+'信著稱' => '信著稱',
+'信著者' => '信著者',
+'信著述' => '信著述',
+'信著錄' => '信著錄',
+'个月里' => '個月裏',
+'个里' => '個裏',
+'倒楣' => '倒霉',
+'候著' => '候着',
+'候著作' => '候著作',
+'候著名' => '候著名',
+'候著書' => '候著書',
+'候著稱' => '候著稱',
+'候著者' => '候著者',
+'候著述' => '候著述',
+'候著錄' => '候著錄',
+'借著' => '借着',
+'借著作' => '借著作',
+'借著名' => '借著名',
+'借著書' => '借著書',
+'借著稱' => '借著稱',
+'借著者' => '借著者',
+'借著述' => '借著述',
+'借著錄' => '借著錄',
+'假里' => '假裏',
+'做著' => '做着',
+'做著作' => '做著作',
+'做著名' => '做著名',
+'做著書' => '做著書',
+'做著稱' => '做著稱',
+'做著者' => '做著者',
+'做著述' => '做著述',
+'做著錄' => '做著錄',
+'吉尼斯世界纪录' => '健力士世界紀錄',
+'金氏世界紀錄' => '健力士世界紀錄',
+'側著' => '側着',
+'側著作' => '側著作',
+'側著名' => '側著名',
+'側著書' => '側著書',
+'側著稱' => '側著稱',
+'側著者' => '側著者',
+'側著述' => '側著述',
+'側著錄' => '側著錄',
+'偷著' => '偷着',
+'偷著作' => '偷著作',
+'偷著名' => '偷著名',
+'偷著書' => '偷著書',
+'偷著稱' => '偷著稱',
+'偷著者' => '偷著者',
+'偷著述' => '偷著述',
+'偷著錄' => '偷著錄',
+'備著' => '備着',
+'備著作' => '備著作',
+'備著名' => '備著名',
+'備著書' => '備著書',
+'備著稱' => '備著稱',
+'備著者' => '備著者',
+'備著述' => '備著述',
+'備著錄' => '備著錄',
+'傻里傻气' => '傻裏傻氣',
+'雇员' => '僱員',
+'雇用' => '僱用',
+'凶惡' => '兇惡',
+'凶殘' => '兇殘',
+'凶殺' => '兇殺',
+'先占' => '先佔',
+'雪鐵龍' => '先進',
+'雪铁龙' => '先進',
+'光著' => '光着',
+'光著作' => '光著作',
+'光著名' => '光著名',
+'光著書' => '光著書',
+'光著称' => '光著稱',
+'光著稱' => '光著稱',
+'光著者' => '光著者',
+'光著述' => '光著述',
+'光著錄' => '光著錄',
+'柯林頓' => '克林頓',
+'克羅埃西亞' => '克羅地亞',
+'公布' => '公佈',
+'冒著' => '冒着',
+'冒著作' => '冒著作',
+'冒著名' => '冒著名',
+'冒著書' => '冒著書',
+'冒著稱' => '冒著稱',
+'冒著者' => '冒著者',
+'冒著述' => '冒著述',
+'冒著錄' => '冒著錄',
+'冰山里' => '冰山裏',
+'恺撒' => '凱撒',
+'函数里' => '函數裏',
+'分布' => '分佈',
+'分布于' => '分佈於',
+'分佈著' => '分佈着',
+'分布著' => '分佈着',
+'分占' => '分佔',
+'分钟里' => '分鐘裏',
+'錢尼' => '切尼',
+'切尔诺贝利' => '切爾諾貝爾',
+'列支敦斯登' => '列支敦士登',
+'別著' => '別着',
+'賴比瑞亞' => '利比里亞',
+'刮著' => '刮着',
+'到山里' => '到山裏',
+'制著' => '制着',
+'制著作' => '制著作',
+'制著名' => '制著名',
+'制著書' => '制著書',
+'制著稱' => '制著稱',
+'制著者' => '制著者',
+'制著述' => '制著述',
+'制著錄' => '制著錄',
+'刻著' => '刻着',
+'刻著作' => '刻著作',
+'刻著名' => '刻著名',
+'刻著書' => '刻著書',
+'刻著称' => '刻著稱',
+'刻著稱' => '刻著稱',
+'刻著者' => '刻著者',
+'刻著述' => '刻著述',
+'刻著錄' => '刻著錄',
+'前波莫瑞' => '前波美拉尼亞',
+'剪彩' => '剪綵',
+'割占' => '割佔',
+'劃著' => '劃着',
+'击剑' => '劍擊',
+'擊劍' => '劍擊',
+'加薩走廊' => '加沙地帶',
+'迦納' => '加納',
+'加彭' => '加蓬',
+'努力著' => '努力着',
+'努力著作' => '努力著作',
+'努力著名' => '努力著名',
+'努力著書' => '努力著書',
+'努力著称' => '努力著稱',
+'努力著稱' => '努力著稱',
+'努力著者' => '努力著者',
+'努力著述' => '努力著述',
+'努力著錄' => '努力著錄',
+'布蘭登堡' => '勃蘭登堡',
+'動著' => '動着',
+'動著作' => '動著作',
+'動著名' => '動著名',
+'動著書' => '動著書',
+'動著稱' => '動著稱',
+'動著者' => '動著者',
+'動著述' => '動著述',
+'動著錄' => '動著錄',
+'包著' => '包着',
+'北朝鲜' => '北韓',
+'南朝鲜' => '南韓',
+'波札那' => '博茨瓦納',
+'占卜' => '占卜',
+'占国桥' => '占國橋',
+'占國橋' => '占國橋',
+'占有五不' => '占有五不',
+'占著作' => '占著作',
+'占著稱' => '占著稱',
+'占著述' => '占著述',
+'占著錄' => '占著錄',
+'卡普里亚蒂' => '卡佩雅蒂',
+'喀拉蚩' => '卡拉奇',
+'卡斯楚' => '卡斯特羅',
+'印著' => '印着',
+'印著作' => '印著作',
+'印著名' => '印著名',
+'印著書' => '印著書',
+'印著稱' => '印著稱',
+'印著者' => '印著者',
+'印著述' => '印著述',
+'印著錄' => '印著錄',
+'瓜地馬拉' => '危地馬拉',
+'厄瓜多' => '厄瓜多爾',
+'厄瓜多尔' => '厄瓜多爾',
+'厄瓜多爾' => '厄瓜多爾',
+'厄利垂亚' => '厄立特里亞',
+'厄利垂亞' => '厄立特里亞',
+'源代码' => '原始碼',
+'去山里' => '去山裏',
+'参数里' => '參數裏',
+'受著' => '受着',
+'受著作' => '受著作',
+'受著名' => '受著名',
+'受著書' => '受著書',
+'受著稱' => '受著稱',
+'受著者' => '受著者',
+'受著述' => '受著述',
+'受著錄' => '受著錄',
+'丛林里' => '叢林裏',
+'口里' => '口裏',
+'只占' => '只佔',
+'叫著' => '叫着',
+'叫著作' => '叫著作',
+'叫著名' => '叫著名',
+'叫著書' => '叫著書',
+'叫著稱' => '叫著稱',
+'叫著者' => '叫著者',
+'叫著述' => '叫著述',
+'叫著錄' => '叫著錄',
+'古柯鹼' => '可卡因',
+'叱吒' => '叱咤',
+'斯坦福大学' => '史丹福大學',
+'史匹柏' => '史匹堡',
+'斯皮尔伯格' => '史匹堡',
+'史蒂芬·史匹柏' => '史提芬·史匹堡',
+'斯蒂芬·斯皮尔伯格' => '史提芬·史匹堡',
+'吃不著' => '吃不着',
+'吃得著' => '吃得着',
+'吃著' => '吃着',
+'吃里扒外' => '吃裏扒外',
+'吃里爬外' => '吃裏爬外',
+'吉布地' => '吉布堤',
+'吊著' => '吊着',
+'向著' => '向着',
+'向著作' => '向著作',
+'向著名' => '向著名',
+'向著書' => '向著書',
+'向著稱' => '向著稱',
+'向著者' => '向著者',
+'向著述' => '向著述',
+'向著錄' => '向著錄',
+'吞占' => '吞佔',
+'吧台' => '吧枱',
+'含著' => '含着',
+'含著作' => '含著作',
+'含著名' => '含著名',
+'含著書' => '含著書',
+'含著稱' => '含著稱',
+'含著者' => '含著者',
+'含著述' => '含著述',
+'含著錄' => '含著錄',
+'吹著' => '吹着',
+'吹著作' => '吹著作',
+'吹著名' => '吹著名',
+'吹著書' => '吹著書',
+'吹著稱' => '吹著稱',
+'吹著者' => '吹著者',
+'吹著述' => '吹著述',
+'吹著錄' => '吹著錄',
+'呆著' => '呆着',
+'呆里呆气' => '呆裏呆氣',
+'味著' => '味着',
+'味著作' => '味著作',
+'味著名' => '味著名',
+'味著書' => '味著書',
+'味著称' => '味著稱',
+'味著稱' => '味著稱',
+'味著者' => '味著者',
+'味著述' => '味著述',
+'味著錄' => '味著錄',
+'咖哩' => '咖喱',
+'麥克風' => '咪高峰',
+'麦克风' => '咪高峰',
+'哥特式' => '哥德式',
+'哥斯大黎加' => '哥斯達黎加',
+'哪里' => '哪裏',
+'哭著' => '哭着',
+'哭著作' => '哭著作',
+'哭著名' => '哭著名',
+'哭著書' => '哭著書',
+'哭著稱' => '哭著稱',
+'哭著者' => '哭著者',
+'哭著述' => '哭著述',
+'哭著錄' => '哭著錄',
+'唱著' => '唱着',
+'唱著作' => '唱著作',
+'唱著名' => '唱著名',
+'唱著書' => '唱著書',
+'唱著稱' => '唱著稱',
+'唱著者' => '唱著者',
+'唱著述' => '唱著述',
+'唱著錄' => '唱著錄',
+'喝著' => '喝着',
+'喝著作' => '喝著作',
+'喝著名' => '喝著名',
+'喝著書' => '喝著書',
+'喝著稱' => '喝著稱',
+'喝著者' => '喝著者',
+'喝著述' => '喝著述',
+'喝著錄' => '喝著錄',
+'賈伯斯' => '喬布斯',
+'乔治·奥威尔' => '喬治·歐威爾',
+'单反相机' => '單鏡反光機',
+'單眼相機' => '單鏡反光機',
+'嗅不著' => '嗅不着',
+'嗅得著' => '嗅得着',
+'嗅著' => '嗅着',
+'凯瑟琳' => '嘉芙蓮',
+'凱薩琳' => '嘉芙蓮',
+'嘯吒' => '嘯咤',
+'嘴里' => '嘴裏',
+'嚷著' => '嚷着',
+'嚷著作' => '嚷著作',
+'嚷著名' => '嚷著名',
+'嚷著書' => '嚷著書',
+'嚷著稱' => '嚷著稱',
+'嚷著者' => '嚷著者',
+'嚷著述' => '嚷著述',
+'嚷著錄' => '嚷著錄',
+'回著' => '回着',
+'回著名' => '回著名',
+'因著' => '因着',
+'因著〈' => '因著〈',
+'因著《' => '因著《',
+'因著作' => '因著作',
+'因著名' => '因著名',
+'因著書' => '因著書',
+'因著稱' => '因著稱',
+'因著者' => '因著者',
+'因著述' => '因著述',
+'因著錄' => '因著錄',
+'困著' => '困着',
+'困著作' => '困著作',
+'困著名' => '困著名',
+'困著書' => '困著書',
+'困著稱' => '困著稱',
+'困著者' => '困著者',
+'困著述' => '困著述',
+'困著錄' => '困著錄',
+'固著' => '固着',
+'圈占' => '圈佔',
+'圈里' => '圈裏',
+'西洋棋' => '國際象棋',
+'圍著' => '圍着',
+'圍著作' => '圍著作',
+'圍著名' => '圍著名',
+'圍著書' => '圍著書',
+'圍著稱' => '圍著稱',
+'圍著者' => '圍著者',
+'圍著述' => '圍著述',
+'圍著錄' => '圍著錄',
+'园里' => '園裏',
+'吐瓦魯' => '圖瓦盧',
+'土魯斯' => '圖盧茲',
+'图里的' => '圖裏的',
+'图里,' => '圖裏,',
+'土里' => '土裏',
+'在山里' => '在山裏',
+'蓋亞那' => '圭亞那',
+'地占' => '地佔',
+'地图里' => '地圖裏',
+'堪培拉' => '坎培拉',
+'坐台' => '坐枱',
+'坐著' => '坐着',
+'坐著作' => '坐著作',
+'坐著名' => '坐著名',
+'坐著書' => '坐著書',
+'坐著稱' => '坐著稱',
+'坐著者' => '坐著者',
+'坐著述' => '坐著述',
+'坐著錄' => '坐著錄',
+'坑里' => '坑裏',
+'坦尚尼亞' => '坦桑尼亞',
+'衣索匹亞' => '埃塞俄比亚',
+'衣索比亞' => '埃塞俄比亞',
+'葉里溫' => '埃里溫',
+'城市里' => '城市裏',
+'城里' => '城裏',
+'域里' => '域裏',
+'吉里巴斯' => '基里巴斯',
+'堅貞著' => '堅貞着',
+'场里' => '場裏',
+'塗著' => '塗着',
+'塞普勒斯' => '塞浦路斯',
+'賽普勒斯' => '塞浦路斯',
+'塞爾維亞與蒙特內哥羅' => '塞爾維亞和黑山',
+'塞席爾' => '塞舌爾',
+'境里' => '境裏',
+'壓著' => '壓着',
+'壓著作' => '壓著作',
+'壓著名' => '壓著名',
+'壓著書' => '壓著書',
+'壓著稱' => '壓著稱',
+'壓著者' => '壓著者',
+'壓著述' => '壓著述',
+'壓著錄' => '壓著錄',
+'壶里' => '壺裏',
+'多占' => '多佔',
+'夜晚里' => '夜晚裏',
+'夜里' => '夜裏',
+'夢有五不占' => '夢有五不占',
+'梦有五不占' => '夢有五不占',
+'夢著' => '夢着',
+'夢著作' => '夢著作',
+'夢著名' => '夢著名',
+'夢著書' => '夢著書',
+'夢著稱' => '夢著稱',
+'夢著者' => '夢著者',
+'夢著述' => '夢著述',
+'夢著錄' => '夢著錄',
+'梦里' => '夢裏',
+'天里' => '天裏',
+'宇航员' => '太空人',
+'夾著' => '夾着',
+'夾著作' => '夾著作',
+'夾著名' => '夾著名',
+'夾著書' => '夾著書',
+'夾著稱' => '夾著稱',
+'夾著者' => '夾著者',
+'夾著述' => '夾著述',
+'夾著錄' => '夾著錄',
+'奥占' => '奧佔',
+'奧占' => '奧佔',
+'歐巴馬' => '奧巴馬',
+'妆台' => '妝枱',
+'威斯伐倫' => '威斯特法倫',
+'威尔士' => '威爾斯',
+'威爾士' => '威爾斯',
+'子里' => '子裏',
+'字里行间' => '字裏行間',
+'存在著' => '存在着',
+'存著' => '存着',
+'存著作' => '存著作',
+'存著名' => '存著名',
+'孟德爾頌' => '孟德爾遜',
+'门德尔松' => '孟德爾遜',
+'學著' => '學着',
+'學著作' => '學著作',
+'學著名' => '學著名',
+'學著書' => '學著書',
+'學著稱' => '學著稱',
+'學著者' => '學著者',
+'學著述' => '學著述',
+'學著錄' => '學著錄',
+'学里' => '學裏',
+'守著' => '守着',
+'守著作' => '守著作',
+'守著名' => '守著名',
+'守著書' => '守著書',
+'守著称' => '守著稱',
+'守著稱' => '守著稱',
+'守著者' => '守著者',
+'守著述' => '守著述',
+'守著錄' => '守著錄',
+'安哈特' => '安哈爾特',
+'安地卡及巴布達' => '安提瓜和巴布達',
+'定著' => '定着',
+'定著作' => '定著作',
+'定著名' => '定著名',
+'定著書' => '定著書',
+'定著称' => '定著稱',
+'定著稱' => '定著稱',
+'定著者' => '定著者',
+'定著述' => '定著述',
+'定著錄' => '定著錄',
+'宣布' => '宣佈',
+'宫里' => '宮裏',
+'家里' => '家裏',
+'密布' => '密佈',
+'密西根' => '密歇根',
+'沃尓沃' => '富豪',
+'寡占' => '寡佔',
+'写字台' => '寫字枱',
+'寫著' => '寫着',
+'寫著作' => '寫著作',
+'寫著名' => '寫著名',
+'寫著書' => '寫著書',
+'寫著稱' => '寫著稱',
+'寫著者' => '寫著者',
+'寫著述' => '寫著述',
+'寫著錄' => '寫著錄',
+'宝里宝气' => '寶裏寶氣',
+'封面里' => '封面裏',
+'将占' => '將佔',
+'將占' => '將佔',
+'将占卜' => '將占卜',
+'將占卜' => '將占卜',
+'专辑里' => '專輯裏',
+'尋著' => '尋着',
+'尋著作' => '尋著作',
+'尋著名' => '尋著名',
+'尋著書' => '尋著書',
+'尋著稱' => '尋著稱',
+'尋著者' => '尋著者',
+'尋著述' => '尋著述',
+'尋著錄' => '尋著錄',
+'對著' => '對着',
+'對著作' => '對著作',
+'對著名' => '對著名',
+'對著書' => '對著書',
+'對著稱' => '對著稱',
+'對著者' => '對著者',
+'對著述' => '對著述',
+'對著錄' => '對著錄',
+'小时里' => '小時裏',
+'少占' => '少佔',
+'就里' => '就裏',
+'尼克松' => '尼克遜',
+'奈及利亞' => '尼日利亞',
+'局里' => '局裏',
+'屋里' => '屋裏',
+'展著' => '展着',
+'展著作' => '展著作',
+'展著名' => '展著名',
+'展著書' => '展著書',
+'展著稱' => '展著稱',
+'展著者' => '展著者',
+'展著述' => '展著述',
+'展著錄' => '展著錄',
+'屯里' => '屯裏',
+'山里有' => '山裏有',
+'山里的' => '山裏的',
+'甘比亞' => '岡比亞',
+'岸裡' => '岸裡',
+'工作台' => '工作枱',
+'已占' => '已佔',
+'巴塞罗那' => '巴塞隆拿',
+'巴塞隆納' => '巴塞隆拿',
+'巴貝多' => '巴巴多斯',
+'巴布亞紐幾內亞' => '巴布亞新畿內亞',
+'巴士拉' => '巴斯拉',
+'巷里' => '巷裏',
+'市占' => '市佔',
+'市里的' => '市裏的',
+'布吉納法索' => '布基納法索',
+'布什' => '布殊',
+'布里斯托尔' => '布里斯托',
+'蒲隆地' => '布隆迪',
+'希冀著' => '希冀着',
+'席哈克' => '希拉克',
+'希拉蕊' => '希拉莉',
+'希特勒' => '希特拉',
+'帛琉' => '帕勞',
+'巴尔米拉环礁' => '帕邁拉環礁',
+'帕劳' => '帛琉',
+'帶著' => '帶着',
+'帶著作' => '帶著作',
+'帶著名' => '帶著名',
+'帶著書' => '帶著書',
+'帶著稱' => '帶著稱',
+'帶著者' => '帶著者',
+'帶著述' => '帶著述',
+'帶著錄' => '帶著錄',
+'幅图里' => '幅圖裏',
+'幫著' => '幫着',
+'幫著作' => '幫著作',
+'幫著名' => '幫著名',
+'幫著書' => '幫著書',
+'幫著稱' => '幫著稱',
+'幫著者' => '幫著者',
+'幫著述' => '幫著述',
+'幫著錄' => '幫著錄',
+'干着急' => '干着急',
+'賓士' => '平治',
+'年代里' => '年代裏',
+'年里' => '年裏',
+'干着' => '幹着',
+'幹著' => '幹着',
+'幹著名' => '幹著名',
+'幹著稱' => '幹著稱',
+'幾內亞比索' => '幾內亞比紹',
+'店里' => '店裏',
+'庫德人' => '庫爾德人',
+'庫德族' => '庫爾德族',
+'坎城' => '康城',
+'戛纳' => '康城',
+'庙里' => '廟裏',
+'广播里' => '廣播裏',
+'強占' => '強佔',
+'强占' => '強佔',
+'约翰斯顿岛' => '強斯頓環礁',
+'弹子台' => '彈子枱',
+'蹦床' => '彈床',
+'弹珠台' => '彈珠枱',
+'形上學' => '形而上學',
+'谢丽·布莱尔' => '彭雪玲',
+'往里' => '往裏',
+'待著' => '待着',
+'待著作' => '待著作',
+'待著名' => '待著名',
+'待著書' => '待著書',
+'待著稱' => '待著稱',
+'待著者' => '待著者',
+'待著述' => '待著述',
+'待著錄' => '待著錄',
+'得著' => '得着',
+'得著作' => '得著作',
+'得著名' => '得著名',
+'得著書' => '得著書',
+'得著稱' => '得著稱',
+'得著者' => '得著者',
+'得著述' => '得著述',
+'得著錄' => '得著錄',
+'从图里' => '從圖裏',
+'从山里' => '從山裏',
+'从里到外' => '從裏到外',
+'从里向外' => '從裏向外',
+'循著' => '循着',
+'循著作' => '循著作',
+'循著名' => '循著名',
+'循著書' => '循著書',
+'循著稱' => '循著稱',
+'循著者' => '循著者',
+'循著述' => '循著述',
+'循著錄' => '循著錄',
+'征占' => '徵佔',
+'徵占' => '徵佔',
+'德占' => '德佔',
+'得克萨斯' => '德克薩斯',
+'德勒斯登' => '德累斯頓',
+'澈底' => '徹底',
+'心著' => '心着',
+'心著作' => '心著作',
+'心著名' => '心著名',
+'心著書' => '心著書',
+'心著称' => '心著稱',
+'心著稱' => '心著稱',
+'心著者' => '心著者',
+'心著述' => '心著述',
+'心著錄' => '心著錄',
+'心里' => '心裏',
+'心里面' => '心裏面',
+'忍著' => '忍着',
+'忍著作' => '忍著作',
+'忍著名' => '忍著名',
+'忍著書' => '忍著書',
+'忍著稱' => '忍著稱',
+'忍著者' => '忍著者',
+'忍著述' => '忍著述',
+'忍著錄' => '忍著錄',
+'忙著' => '忙着',
+'忙著作' => '忙著作',
+'忙著名' => '忙著名',
+'忙著書' => '忙著書',
+'忙著稱' => '忙著稱',
+'忙著者' => '忙著者',
+'忙著述' => '忙著述',
+'忙著錄' => '忙著錄',
+'忙里' => '忙裏',
+'忠貞著' => '忠貞着',
+'急著' => '急着',
+'急著作' => '急著作',
+'急著名' => '急著名',
+'急著書' => '急著書',
+'急著稱' => '急著稱',
+'急著者' => '急著者',
+'急著述' => '急著述',
+'急著錄' => '急著錄',
+'怪里怪气' => '怪裏怪氣',
+'悠著' => '悠着',
+'悠著作' => '悠著作',
+'悠著名' => '悠著名',
+'悠著書' => '悠著書',
+'悠著稱' => '悠著稱',
+'悠著者' => '悠著者',
+'悠著述' => '悠著述',
+'悠著錄' => '悠著錄',
+'悶著' => '悶着',
+'想象' => '想像',
+'想著' => '想着',
+'想著作' => '想著作',
+'想著名' => '想著名',
+'想著書' => '想著書',
+'想著称' => '想著稱',
+'想著稱' => '想著稱',
+'想著者' => '想著者',
+'想著述' => '想著述',
+'想著錄' => '想著錄',
+'意占' => '意佔',
+'義占' => '意佔',
+'義大利' => '意大利',
+'艾滋' => '愛滋',
+'愛著' => '愛着',
+'愛著作' => '愛著作',
+'愛著名' => '愛著名',
+'愛著書' => '愛著書',
+'愛著稱' => '愛著稱',
+'愛著者' => '愛著者',
+'愛著述' => '愛著述',
+'愛著錄' => '愛著錄',
+'慌里慌张' => '慌裏慌張',
+'慣著' => '慣着',
+'慣著作' => '慣著作',
+'慣著名' => '慣著名',
+'慣著書' => '慣著書',
+'慣著稱' => '慣著稱',
+'慣著者' => '慣著者',
+'慣著述' => '慣著述',
+'慣著錄' => '慣著錄',
+'宪法里' => '憲法裏',
+'应用程序' => '應用程式',
+'應著' => '應着',
+'應著作' => '應著作',
+'應著名' => '應著名',
+'應著書' => '應著書',
+'應著稱' => '應著稱',
+'應著者' => '應著者',
+'應著述' => '應著述',
+'應著錄' => '應著錄',
+'懷著' => '懷着',
+'懷著作' => '懷著作',
+'懷著名' => '懷著名',
+'懷著書' => '懷著書',
+'懷著稱' => '懷著稱',
+'懷著者' => '懷著者',
+'懷著述' => '懷著述',
+'懷著錄' => '懷著錄',
+'怀里' => '懷裏',
+'戀著' => '戀着',
+'戀著作' => '戀著作',
+'戀著名' => '戀著名',
+'戀著書' => '戀著書',
+'戀著稱' => '戀著稱',
+'戀著者' => '戀著者',
+'戀著述' => '戀著述',
+'戀著錄' => '戀著錄',
+'戈巴契夫' => '戈爾巴喬夫',
+'戰著' => '戰着',
+'戰著作' => '戰著作',
+'戰著名' => '戰著名',
+'戰著書' => '戰著書',
+'戰著稱' => '戰著稱',
+'戰著者' => '戰著者',
+'戰著述' => '戰著述',
+'戰著錄' => '戰著錄',
+'戏彩娱亲' => '戲綵娛親',
+'戲彩娛親' => '戲綵娛親',
+'戏里' => '戲裏',
+'撒切尔' => '戴卓爾',
+'柴契爾' => '戴卓爾',
+'狄安娜' => '戴安娜',
+'黛安娜' => '戴安娜',
+'戴著' => '戴着',
+'戴著作' => '戴著作',
+'戴著名' => '戴著名',
+'戴著書' => '戴著書',
+'戴著稱' => '戴著稱',
+'戴著者' => '戴著者',
+'戴著述' => '戴著述',
+'戴著錄' => '戴著錄',
+'房里' => '房裏',
+'所占' => '所佔',
+'索羅門群島' => '所羅門群島',
+'手里' => '手裏',
+'手里剑' => '手裏劍',
+'列印' => '打印',
+'印表機' => '打印機',
+'打著' => '打着',
+'打著作' => '打著作',
+'打著名' => '打著名',
+'打著書' => '打著書',
+'打著稱' => '打著稱',
+'打著者' => '打著者',
+'打著述' => '打著述',
+'打著錄' => '打著錄',
+'扛著' => '扛着',
+'扛著作' => '扛著作',
+'扛著名' => '扛著名',
+'扛著書' => '扛著書',
+'扛著稱' => '扛著稱',
+'扛著者' => '扛著者',
+'扛著述' => '扛著述',
+'扛著錄' => '扛著錄',
+'找不著' => '找不着',
+'找得著' => '找得着',
+'承宣布政' => '承宣布政',
+'抓著' => '抓着',
+'抓著作' => '抓著作',
+'抓著名' => '抓著名',
+'抓著稱' => '抓著稱',
+'抓著者' => '抓著者',
+'抓著述' => '抓著述',
+'抓著錄' => '抓著錄',
+'披著' => '披着',
+'披著作' => '披著作',
+'披著名' => '披著名',
+'披著書' => '披著書',
+'披著稱' => '披著稱',
+'披著者' => '披著者',
+'披著述' => '披著述',
+'披著錄' => '披著錄',
+'抬著' => '抬着',
+'抬著作' => '抬著作',
+'抬著名' => '抬著名',
+'抬著稱' => '抬著稱',
+'抬著者' => '抬著者',
+'抬著述' => '抬著述',
+'抬著錄' => '抬著錄',
+'抱著' => '抱着',
+'抱著作' => '抱著作',
+'抱著名' => '抱著名',
+'抱著稱' => '抱著稱',
+'抱著者' => '抱著者',
+'抱著述' => '抱著述',
+'抱著錄' => '抱著錄',
+'拉著' => '拉着',
+'拉著作' => '拉著作',
+'拉著名' => '拉著名',
+'拉著書' => '拉著書',
+'拉著稱' => '拉著稱',
+'拉著者' => '拉著者',
+'拉著述' => '拉著述',
+'拉著錄' => '拉著錄',
+'拎著' => '拎着',
+'拎著作' => '拎著作',
+'拎著名' => '拎著名',
+'拎著稱' => '拎著稱',
+'拎著者' => '拎著者',
+'拎著述' => '拎著述',
+'拎著錄' => '拎著錄',
+'拖著' => '拖着',
+'拖著作' => '拖著作',
+'拖著名' => '拖著名',
+'拖著稱' => '拖著稱',
+'拖著者' => '拖著者',
+'拖著述' => '拖著述',
+'拖著錄' => '拖著錄',
+'拼著' => '拼着',
+'拼著作' => '拼著作',
+'拼著名' => '拼著名',
+'拼著稱' => '拼著稱',
+'拼著者' => '拼著者',
+'拼著述' => '拼著述',
+'拼著錄' => '拼著錄',
+'拿著' => '拿着',
+'拿著作' => '拿著作',
+'拿著名' => '拿著名',
+'拿著稱' => '拿著稱',
+'拿著者' => '拿著者',
+'拿著述' => '拿著述',
+'拿著錄' => '拿著錄',
+'持著' => '持着',
+'持著作' => '持著作',
+'持著名' => '持著名',
+'持著稱' => '持著稱',
+'持著者' => '持著者',
+'持著述' => '持著述',
+'持著錄' => '持著錄',
+'挑著' => '挑着',
+'挑著作' => '挑著作',
+'挑著名' => '挑著名',
+'挑著稱' => '挑著稱',
+'挑著者' => '挑著者',
+'挑著述' => '挑著述',
+'挑著錄' => '挑著錄',
+'挨著' => '挨着',
+'挨著作' => '挨著作',
+'挨著名' => '挨著名',
+'挨著稱' => '挨著稱',
+'挨著者' => '挨著者',
+'挨著述' => '挨著述',
+'挨著錄' => '挨著錄',
+'捆著' => '捆着',
+'捆著作' => '捆著作',
+'捆著名' => '捆著名',
+'捆著稱' => '捆著稱',
+'捆著者' => '捆著者',
+'捆著述' => '捆著述',
+'捆著錄' => '捆著錄',
+'伏地挺身' => '掌上壓',
+'俯卧撑' => '掌上壓',
+'掖著' => '掖着',
+'掖著作' => '掖著作',
+'掖著名' => '掖著名',
+'掖著稱' => '掖著稱',
+'掖著者' => '掖著者',
+'掖著述' => '掖著述',
+'掖著錄' => '掖著錄',
+'掙著' => '掙着',
+'掙著作' => '掙著作',
+'掙著名' => '掙著名',
+'掙著書' => '掙著書',
+'掙著稱' => '掙著稱',
+'掙著者' => '掙著者',
+'掙著述' => '掙著述',
+'掙著錄' => '掙著錄',
+'掛著' => '掛着',
+'接著' => '接着',
+'接著作' => '接著作',
+'接著名' => '接著名',
+'接著稱' => '接著稱',
+'接著者' => '接著者',
+'接著述' => '接著述',
+'接著錄' => '接著錄',
+'揉著' => '揉着',
+'揉著作' => '揉著作',
+'揉著名' => '揉著名',
+'揉著書' => '揉著書',
+'揉著稱' => '揉著稱',
+'揉著者' => '揉著者',
+'揉著述' => '揉著述',
+'揉著錄' => '揉著錄',
+'提著' => '提着',
+'提著作' => '提著作',
+'提著名' => '提著名',
+'提著稱' => '提著稱',
+'提著者' => '提著者',
+'提著述' => '提著述',
+'提著錄' => '提著錄',
+'揮著' => '揮着',
+'揮著作' => '揮著作',
+'揮著名' => '揮著名',
+'揮著稱' => '揮著稱',
+'揮著者' => '揮著者',
+'揮著述' => '揮著述',
+'揮著錄' => '揮著錄',
+'搜索引擎' => '搜尋引擎',
+'抢占' => '搶佔',
+'搶占' => '搶佔',
+'摟著' => '摟着',
+'摟著作' => '摟著作',
+'摟著名' => '摟著名',
+'摟著稱' => '摟著稱',
+'摟著者' => '摟著者',
+'摟著述' => '摟著述',
+'摟著錄' => '摟著錄',
+'折台' => '摺枱',
+'撒马尔罕' => '撒馬爾罕',
+'撼著' => '撼着',
+'撼著作' => '撼著作',
+'撼著名' => '撼著名',
+'撼著書' => '撼著書',
+'撼著稱' => '撼著稱',
+'撼著者' => '撼著者',
+'撼著述' => '撼著述',
+'撼著錄' => '撼著錄',
+'擋著' => '擋着',
+'擋著作' => '擋著作',
+'擋著名' => '擋著名',
+'擋著稱' => '擋著稱',
+'擋著者' => '擋著者',
+'擋著述' => '擋著述',
+'擋著錄' => '擋著錄',
+'擔著' => '擔着',
+'據著' => '據着',
+'據著作' => '據著作',
+'據著名' => '據著名',
+'據著書' => '據著書',
+'據著稱' => '據著稱',
+'據著者' => '據著者',
+'據著述' => '據著述',
+'據著錄' => '據著錄',
+'擡著' => '擡着',
+'摆布' => '擺佈',
+'擺布' => '擺佈',
+'擺著' => '擺着',
+'擺著作' => '擺著作',
+'擺著名' => '擺著名',
+'擺著稱' => '擺著稱',
+'擺著者' => '擺著者',
+'擺著述' => '擺著述',
+'擺著錄' => '擺著錄',
+'攻占' => '攻佔',
+'放著' => '放着',
+'放著作' => '放著作',
+'放著名' => '放著名',
+'放著称' => '放著稱',
+'放著稱' => '放著稱',
+'敞著' => '敞着',
+'敞著作' => '敞著作',
+'敞著名' => '敞著名',
+'敞著稱' => '敞著稱',
+'敞著者' => '敞著者',
+'敞著述' => '敞著述',
+'敞著錄' => '敞著錄',
+'散布' => '散佈',
+'散佈著' => '散佈着',
+'散布著' => '散佈着',
+'数字照相机' => '数碼照相機',
+'數位照相機' => '数碼照相機',
+'數著' => '數着',
+'数字化' => '數碼化',
+'數位化' => '數碼化',
+'数字技术' => '數碼技術',
+'數位技術' => '數碼技術',
+'數位相機' => '數碼相機',
+'数字信号' => '數碼訊號',
+'數碼訊號' => '數碼訊號',
+'数字电视' => '數碼電視',
+'數位電視' => '數碼電視',
+'數著作' => '數著作',
+'數著名' => '數著名',
+'數著稱' => '數著稱',
+'數著者' => '數著者',
+'數著述' => '數著述',
+'數著錄' => '數著錄',
+'斥著' => '斥着',
+'斥著作' => '斥著作',
+'斥著名' => '斥著名',
+'斥著書' => '斥著書',
+'斥著稱' => '斥著稱',
+'斥著者' => '斥著者',
+'斥著述' => '斥著述',
+'斥著錄' => '斥著錄',
+'史瓦濟蘭' => '斯威士蘭',
+'斯洛維尼亞' => '斯洛文尼亞',
+'紐澳良' => '新奧爾良',
+'紐西蘭' => '新西蘭',
+'方法里' => '方法裏',
+'族里' => '族裏',
+'日占' => '日佔',
+'日里' => '日裏',
+'昂山素季' => '昂山素姬',
+'翁山蘇姬' => '昂山素姬',
+'昂著' => '昂着',
+'昂著作' => '昂著作',
+'昂著名' => '昂著名',
+'昂著書' => '昂著書',
+'昂著稱' => '昂著稱',
+'昂著者' => '昂著者',
+'昂著述' => '昂著述',
+'昂著錄' => '昂著錄',
+'星罗棋布' => '星羅棋佈',
+'星羅棋布' => '星羅棋佈',
+'映著' => '映着',
+'映著作' => '映著作',
+'映著名' => '映著名',
+'映著書' => '映著書',
+'映著稱' => '映著稱',
+'映著者' => '映著者',
+'映著述' => '映著述',
+'映著錄' => '映著錄',
+'晃著' => '晃着',
+'晃著作' => '晃著作',
+'晃著名' => '晃著名',
+'晃著稱' => '晃著稱',
+'晃著者' => '晃著者',
+'晃著述' => '晃著述',
+'晃著錄' => '晃著錄',
+'晶元' => '晶片',
+'芯片' => '晶片',
+'智慧型' => '智能',
+'智慧卡' => '智能卡',
+'智慧手機' => '智能手機',
+'暗地里' => '暗地裏',
+'暗沟里' => '暗溝裏',
+'暗著' => '暗着',
+'暗著作' => '暗著作',
+'暗著名' => '暗著名',
+'暗著書' => '暗著書',
+'暗著稱' => '暗著稱',
+'暗著者' => '暗著者',
+'暗著述' => '暗著述',
+'暗著錄' => '暗著錄',
+'暗里' => '暗裏',
+'会占' => '會佔',
+'會占' => '會佔',
+'会占卜' => '會占卜',
+'會占卜' => '會占卜',
+'会里' => '會裏',
+'月裡来' => '月裏來',
+'有著' => '有着',
+'有著作' => '有著作',
+'有著名' => '有著名',
+'有著書' => '有著書',
+'有著稱' => '有著稱',
+'有著者' => '有著者',
+'有著述' => '有著述',
+'有著錄' => '有著錄',
+'罗纳德·里根' => '朗奴·列根',
+'罗纳尔多' => '朗拿度',
+'罗纳尔迪尼奥' => '朗拿甸奴',
+'望著' => '望着',
+'望著作' => '望著作',
+'望著名' => '望著名',
+'望著書' => '望著書',
+'望著稱' => '望著稱',
+'望著者' => '望著者',
+'望著述' => '望著述',
+'望著錄' => '望著錄',
+'朝著' => '朝着',
+'朝著作' => '朝著作',
+'朝著名' => '朝著名',
+'朝著稱' => '朝著稱',
+'朝著者' => '朝著者',
+'朝著述' => '朝著述',
+'朝著錄' => '朝著錄',
+'板球' => '木球',
+'賓·拉登' => '本·拉登',
+'班傑明' => '本傑明',
+'賓拉登' => '本拉登',
+'本著' => '本着',
+'本著作' => '本著作',
+'本著名' => '本著名',
+'本著書' => '本著書',
+'本著稱' => '本著稱',
+'本著者' => '本著者',
+'本著述' => '本著述',
+'本著錄' => '本著錄',
+'里瓦尔多' => '李華度',
+'村里' => '村裏',
+'杜塞道夫' => '杜塞爾多夫',
+'迪拜' => '杜拜',
+'東協助' => '東協助',
+'東協會' => '東協會',
+'東協議' => '東協議',
+'東南亞國家協會' => '東南亞國家聯盟',
+'亚细安' => '東盟',
+'東協' => '東盟',
+'板著臉' => '板着臉',
+'枕著' => '枕着',
+'枕著作' => '枕著作',
+'枕著名' => '枕著名',
+'枕著稱' => '枕著稱',
+'枕著者' => '枕著者',
+'枕著述' => '枕著述',
+'枕著錄' => '枕著錄',
+'檯' => '枱',
+'台布' => '枱布',
+'台历' => '枱曆',
+'台灯' => '枱燈',
+'台面上' => '枱面上',
+'台面化' => '枱面化',
+'柏林墙' => '柏林圍牆',
+'奧黛莉·朵杜' => '柯德莉·塔圖',
+'奥黛丽·赫本' => '柯德莉·夏萍',
+'奧黛麗·赫本' => '柯德莉·夏萍',
+'哥廷根' => '格丁根',
+'格瑞那達' => '格林納達',
+'格莱美奖' => '格林美獎',
+'葛萊美獎' => '格林美獎',
+'格鲁吉亚' => '格魯吉亞',
+'框里' => '框裏',
+'台式电脑' => '桌上型電腦',
+'台球' => '桌球',
+'撞球' => '桌球',
+'梅鐸' => '梅鐸',
+'默多克' => '梅鐸',
+'梳著' => '梳着',
+'梳著作' => '梳著作',
+'梳著名' => '梳著名',
+'梳著稱' => '梳著稱',
+'梳著者' => '梳著者',
+'梳著述' => '梳著述',
+'梳著錄' => '梳著錄',
+'棉里' => '棉裏',
+'桑巴舞' => '森巴舞',
+'森林里' => '森林裏',
+'棺材里' => '棺材裏',
+'榴莲' => '榴槤',
+'榴蓮' => '榴槤',
+'樂著' => '樂着',
+'樂著作' => '樂著作',
+'樂著名' => '樂著名',
+'樂著書' => '樂著書',
+'樂著稱' => '樂著稱',
+'樂著者' => '樂著者',
+'樂著述' => '樂著述',
+'樂著錄' => '樂著錄',
+'標志著' => '標志着',
+'寶獅' => '標致',
+'標誌著' => '標誌着',
+'树林里' => '樹林裏',
+'工具機' => '機床',
+'机器人' => '機械人',
+'機器人' => '機械人',
+'柜台' => '櫃枱',
+'柜里' => '櫃裏',
+'历史里' => '歷史裏',
+'死里求生' => '死裏求生',
+'死里逃生' => '死裏逃生',
+'殺著' => '殺着',
+'殺著作' => '殺著作',
+'殺著名' => '殺著名',
+'殺著書' => '殺著書',
+'殺著稱' => '殺著稱',
+'殺著者' => '殺著者',
+'殺著述' => '殺著述',
+'殺著錄' => '殺著錄',
+'壳里' => '殼裏',
+'茅利塔尼亞' => '毛里塔尼亞',
+'模里西斯' => '毛里裘斯',
+'毛里求斯' => '毛里裘斯',
+'公厘' => '毫米',
+'公釐' => '毫米',
+'水来汤里去' => '水來湯裏去',
+'水里' => '水裏',
+'求著' => '求着',
+'求著作' => '求著作',
+'求著名' => '求著名',
+'求著書' => '求著書',
+'求著稱' => '求著稱',
+'求著者' => '求著者',
+'求著述' => '求著述',
+'求著錄' => '求著錄',
+'池里' => '池裏',
+'汙' => '污',
+'文莱' => '汶萊',
+'沈著' => '沈着',
+'沉著' => '沉着',
+'沉著作' => '沉著作',
+'沉著名' => '沉著名',
+'沉著書' => '沉著書',
+'沉著稱' => '沉著稱',
+'沉著者' => '沉著者',
+'沉著述' => '沉著述',
+'沉著錄' => '沉著錄',
+'沖著' => '沖着',
+'沖著。' => '沖著。',
+'沖著《' => '沖著《',
+'沖著,' => '沖著,',
+'沙地阿拉伯' => '沙特阿拉伯',
+'沙烏地阿拉伯' => '沙特阿拉伯',
+'沙里淘金' => '沙裏淘金',
+'河里' => '河裏',
+'沿著' => '沿着',
+'沿著作' => '沿著作',
+'沿著名' => '沿著名',
+'沿著書' => '沿著書',
+'沿著稱' => '沿著稱',
+'沿著者' => '沿著者',
+'沿著述' => '沿著述',
+'沿著錄' => '沿著錄',
+'法占' => '法佔',
+'法里,' => '法裏,',
+'玻里尼西亞' => '波利尼西亞',
+'波士尼亞' => '波斯尼亞',
+'波士尼亞赫塞哥維納' => '波斯尼亞黑塞哥維那',
+'宝莱坞' => '波里活',
+'寶萊塢' => '波里活',
+'幫浦' => '泵',
+'洞里' => '洞裏',
+'辛巴威' => '津巴布韋',
+'宏都拉斯' => '洪都拉斯',
+'活著' => '活着',
+'活著作' => '活著作',
+'活著名' => '活著名',
+'活著書' => '活著書',
+'活著稱' => '活著稱',
+'活著者' => '活著者',
+'活著述' => '活著述',
+'活著錄' => '活著錄',
+'移动网络' => '流動網絡',
+'行動網路' => '流動網絡',
+'移动电话' => '流動電話',
+'行動電話' => '流動電話',
+'流著' => '流着',
+'流著作' => '流著作',
+'流著名' => '流著名',
+'流著書' => '流著書',
+'流著稱' => '流著稱',
+'流著者' => '流著者',
+'流著述' => '流著述',
+'流著錄' => '流著錄',
+'流露著' => '流露着',
+'浮著' => '浮着',
+'蘭卡威' => '浮羅交怡',
+'浮著作' => '浮著作',
+'浮著名' => '浮著名',
+'浮著書' => '浮著書',
+'浮著稱' => '浮著稱',
+'浮著者' => '浮著者',
+'浮著述' => '浮著述',
+'浮著錄' => '浮著錄',
+'海上布雷' => '海上佈雷',
+'海洛因' => '海洛英',
+'海湾布雷' => '海灣佈雷',
+'海灣布雷' => '海灣佈雷',
+'涼著' => '涼着',
+'涼著作' => '涼著作',
+'涼著名' => '涼著名',
+'涼著書' => '涼著書',
+'涼著稱' => '涼著稱',
+'涼著者' => '涼著者',
+'涼著述' => '涼著述',
+'涼著錄' => '涼著錄',
+'深山里' => '深山裏',
+'渊里' => '淵裏',
+'渴著' => '渴着',
+'渴著作' => '渴著作',
+'渴著名' => '渴著名',
+'渴著書' => '渴著書',
+'渴著稱' => '渴著稱',
+'渴著者' => '渴著者',
+'渴著述' => '渴著述',
+'渴著錄' => '渴著錄',
+'湊合著' => '湊合着',
+'湖里' => '湖裏',
+'准将' => '準將',
+'准將' => '準將',
+'准尉' => '準尉',
+'溢著' => '溢着',
+'溢著作' => '溢著作',
+'溢著名' => '溢著名',
+'溢著書' => '溢著書',
+'溢著稱' => '溢著稱',
+'溢著者' => '溢著者',
+'溢著述' => '溢著述',
+'溢著錄' => '溢著錄',
+'演著' => '演着',
+'演著作' => '演著作',
+'演著名' => '演著名',
+'演著書' => '演著書',
+'演著稱' => '演著稱',
+'演著者' => '演著者',
+'演著述' => '演著述',
+'演著錄' => '演著錄',
+'漠里' => '漠裏',
+'漢諾瓦' => '漢諾威',
+'漫著' => '漫着',
+'漫著作' => '漫著作',
+'漫著名' => '漫著名',
+'漫著書' => '漫著書',
+'漫著稱' => '漫著稱',
+'漫著者' => '漫著者',
+'漫著述' => '漫著述',
+'漫著錄' => '漫著錄',
+'潜意识里' => '潛意識裏',
+'潤著' => '潤着',
+'潤著作' => '潤著作',
+'潤著名' => '潤著名',
+'潤著書' => '潤著書',
+'潤著稱' => '潤著稱',
+'潤著者' => '潤著者',
+'潤著述' => '潤著述',
+'潤著錄' => '潤著錄',
+'潭里' => '潭裏',
+'溼' => '濕',
+'火山里' => '火山裏',
+'火箭布雷' => '火箭佈雷',
+'為著' => '為着',
+'為著《' => '為著《',
+'為著作' => '為著作',
+'為著名' => '為著名',
+'為著稱' => '為著稱',
+'為著者' => '為著者',
+'為著述' => '為著述',
+'為著錄' => '為著錄',
+'菸' => '煙',
+'照占' => '照佔',
+'照著' => '照着',
+'照著作' => '照著作',
+'照著名' => '照著名',
+'照著書' => '照著書',
+'照著稱' => '照著稱',
+'照著者' => '照著者',
+'照著述' => '照著述',
+'照著錄' => '照著錄',
+'燒著' => '燒着',
+'燒著作' => '燒著作',
+'燒著名' => '燒著名',
+'燒著書' => '燒著書',
+'燒著稱' => '燒著稱',
+'燒著者' => '燒著者',
+'燒著述' => '燒著述',
+'燒著錄' => '燒著錄',
+'爭著' => '爭着',
+'爭著作' => '爭著作',
+'爭著名' => '爭著名',
+'爭著書' => '爭著書',
+'爭著稱' => '爭著稱',
+'爭著者' => '爭著者',
+'爭著述' => '爭著述',
+'爭著錄' => '爭著錄',
+'墙里' => '牆裏',
+'版图里' => '版圖裏',
+'版权信息' => '版權資訊',
+'千里達托貝哥' => '特立尼達和多巴哥',
+'牽著' => '牽着',
+'牽著作' => '牽著作',
+'牽著名' => '牽著名',
+'牽著書' => '牽著書',
+'牽著稱' => '牽著稱',
+'牽著者' => '牽著者',
+'牽著述' => '牽著述',
+'牽著錄' => '牽著錄',
+'犯不著' => '犯不着',
+'犯不著作' => '犯不著作',
+'犯不著名' => '犯不著名',
+'犯不著書' => '犯不著書',
+'犯不著稱' => '犯不著稱',
+'犯不著者' => '犯不著者',
+'犯不著述' => '犯不著述',
+'犯不著錄' => '犯不著錄',
+'犯得著' => '犯得着',
+'狂占' => '狂佔',
+'猜著' => '猜着',
+'猜著作' => '猜著作',
+'猜著名' => '猜著名',
+'猜著書' => '猜著書',
+'猜著稱' => '猜著稱',
+'猜著者' => '猜著者',
+'猜著述' => '猜著述',
+'猜著錄' => '猜著錄',
+'猶豫著' => '猶豫着',
+'狱里' => '獄裏',
+'独占' => '獨佔',
+'獨占' => '獨佔',
+'獨立國家國協' => '獨立國家聯合體',
+'獨立國協' => '獨聯體',
+'獲著' => '獲着',
+'獲著作' => '獲著作',
+'獲著名' => '獲著名',
+'獲著書' => '獲著書',
+'獲著稱' => '獲著稱',
+'獲著者' => '獲著者',
+'獲著述' => '獲著述',
+'獲著錄' => '獲著錄',
+'班固著' => '班固著',
+'班里' => '班裏',
+'球台' => '球枱',
+'卢塞恩' => '琉森',
+'諾鲁' => '瑙魯',
+'萬那杜' => '瓦努阿圖',
+'肯尼迪' => '甘迺迪',
+'甜著' => '甜着',
+'甜著作' => '甜著作',
+'甜著名' => '甜著名',
+'甜著書' => '甜著書',
+'甜著稱' => '甜著稱',
+'甜著者' => '甜著者',
+'甜著述' => '甜著述',
+'甜著錄' => '甜著錄',
+'用不著' => '用不着',
+'用得著' => '用得着',
+'用法里' => '用法裏',
+'用著' => '用着',
+'用著作' => '用著作',
+'用著名' => '用著名',
+'用著書' => '用著書',
+'用著稱' => '用著稱',
+'用著者' => '用著者',
+'用著述' => '用著述',
+'用著錄' => '用著錄',
+'田里' => '田裏',
+'由表及里' => '由表及裏',
+'A型肝炎' => '甲型肝炎',
+'A肝' => '甲肝',
+'界里' => '界裏',
+'留著' => '留着',
+'留著作' => '留著作',
+'留著名' => '留著名',
+'留著書' => '留著書',
+'留著稱' => '留著稱',
+'留著者' => '留著者',
+'留著述' => '留著述',
+'留著錄' => '留著錄',
+'畫著' => '畫着',
+'畫著作' => '畫著作',
+'畫著名' => '畫著名',
+'畫著稱' => '畫著稱',
+'畫著者' => '畫著者',
+'當著' => '當着',
+'當著作' => '當著作',
+'過著作' => '當著作',
+'當著名' => '當著名',
+'過著名' => '當著名',
+'當著書' => '當著書',
+'過著書' => '當著書',
+'當著稱' => '當著稱',
+'過著稱' => '當著稱',
+'當著者' => '當著者',
+'過著者' => '當著者',
+'當著述' => '當著述',
+'過著述' => '當著述',
+'當著錄' => '當著錄',
+'過著錄' => '當著錄',
+'几内亚' => '畿內亞',
+'幾內亞' => '畿內亞',
+'迭代' => '疊代',
+'疑著' => '疑着',
+'疑著作' => '疑著作',
+'疑著名' => '疑著名',
+'疑著書' => '疑著書',
+'疑著稱' => '疑著稱',
+'疑著者' => '疑著者',
+'疑著述' => '疑著述',
+'疑著錄' => '疑著錄',
+'狂牛症' => '瘋牛症',
+'发布' => '發佈',
+'發布' => '發佈',
+'發著' => '發着',
+'發著《' => '發著《',
+'發著作' => '發著作',
+'發著名' => '發著名',
+'發著稱' => '發著稱',
+'發著者' => '發著者',
+'白里透红' => '白裏透紅',
+'戈登·布朗' => '白高敦',
+'百科里' => '百科裏',
+'的图里' => '的圖裏',
+'的山里' => '的山裏',
+'皮里春秋' => '皮裏春秋',
+'皮里阳秋' => '皮裏陽秋',
+'皺著' => '皺着',
+'皺著作' => '皺著作',
+'皺著名' => '皺著名',
+'皺著書' => '皺著書',
+'皺著稱' => '皺著稱',
+'皺著者' => '皺著者',
+'皺著述' => '皺著述',
+'皺著錄' => '皺著錄',
+'盒里' => '盒裏',
+'盛著' => '盛着',
+'盛著作' => '盛著作',
+'盛著名' => '盛著名',
+'盛著書' => '盛著書',
+'盛著稱' => '盛著稱',
+'盛著者' => '盛著者',
+'盛著述' => '盛著述',
+'盛著錄' => '盛著錄',
+'盘里' => '盤裏',
+'盧安達' => '盧旺達',
+'羅亞爾' => '盧瓦爾',
+'盯著' => '盯着',
+'盯著作' => '盯著作',
+'盯著名' => '盯著名',
+'盯著書' => '盯著書',
+'盯著稱' => '盯著稱',
+'盯著者' => '盯著者',
+'盯著述' => '盯著述',
+'盯著錄' => '盯著錄',
+'看不著' => '看不着',
+'看得著' => '看得着',
+'看法里' => '看法裏',
+'看著' => '看着',
+'看著作' => '看著作',
+'看著名' => '看著名',
+'看著書' => '看著書',
+'看著稱' => '看著稱',
+'看著者' => '看著者',
+'看著述' => '看著述',
+'看著錄' => '看著錄',
+'眼眶里' => '眼眶裏',
+'眼睛里' => '眼睛裏',
+'眼里' => '眼裏',
+'著什' => '着什',
+'著他' => '着他',
+'著你' => '着你',
+'著力' => '着力',
+'著地' => '着地',
+'著墨' => '着墨',
+'著她' => '着她',
+'著妳' => '着妳',
+'著它' => '着它',
+'著實' => '着實',
+'著忙' => '着忙',
+'著急' => '着急',
+'著想' => '着想',
+'著意' => '着意',
+'著我' => '着我',
+'著手' => '着手',
+'著數' => '着數',
+'著法' => '着法',
+'著涼' => '着涼',
+'著火' => '着火',
+'著甚麽' => '着甚麽',
+'著眼' => '着眼',
+'著祂' => '着祂',
+'著筆' => '着筆',
+'著絲' => '着絲',
+'著緊' => '着緊',
+'著腳' => '着腳',
+'著艦' => '着艦',
+'著色' => '着色',
+'著落' => '着落',
+'著衣' => '着衣',
+'著裝' => '着裝',
+'著迷' => '着迷',
+'著重' => '着重',
+'著錄' => '着錄',
+'著陸' => '着陸',
+'著鞭' => '着鞭',
+'睡不著' => '睡不着',
+'睡得著' => '睡得着',
+'睡著' => '睡着',
+'睡著作' => '睡著作',
+'睡著名' => '睡著名',
+'睡著書' => '睡著書',
+'睡著稱' => '睡著稱',
+'睡著者' => '睡著者',
+'睡著述' => '睡著述',
+'睡著錄' => '睡著錄',
+'瞞著' => '瞞着',
+'瞞著作' => '瞞著作',
+'瞞著名' => '瞞著名',
+'瞞著書' => '瞞著書',
+'瞞著稱' => '瞞著稱',
+'瞞著者' => '瞞著者',
+'瞞著述' => '瞞著述',
+'瞞著錄' => '瞞著錄',
+'瞪著' => '瞪着',
+'瞪著作' => '瞪著作',
+'瞪著名' => '瞪著名',
+'瞪著書' => '瞪著書',
+'瞪著稱' => '瞪著稱',
+'瞪著者' => '瞪著者',
+'瞪著述' => '瞪著述',
+'瞪著錄' => '瞪著錄',
+'矛盾著' => '矛盾着',
+'智慧財產權' => '知識產權',
+'智財權' => '知識產權',
+'短信' => '短訊',
+'簡訊' => '短訊',
+'什勒斯維希' => '石勒蘇益格',
+'硅' => '矽',
+'硅藻' => '硅藻',
+'硬件' => '硬件',
+'硬體' => '硬件',
+'碗里' => '碗裏',
+'貝克漢' => '碧咸',
+'贝克汉姆' => '碧咸',
+'社里' => '社裏',
+'福馬林' => '福爾馬林',
+'福著' => '福着',
+'福著作' => '福著作',
+'福著名' => '福著名',
+'福著書' => '福著書',
+'福著稱' => '福著稱',
+'福著者' => '福著者',
+'福著述' => '福著述',
+'福著錄' => '福著錄',
+'秀发布' => '秀發佈',
+'私下里' => '私下裏',
+'隐私' => '私隱',
+'隱私' => '私隱',
+'葛摩' => '科摩羅',
+'程序员' => '程式設計師',
+'捷豹' => '積架',
+'稳占' => '穩佔',
+'穩占' => '穩佔',
+'穫著' => '穫着',
+'空中布雷' => '空中佈雷',
+'空投布雷' => '空投佈雷',
+'空气质量' => '空氣質素',
+'空氣品質' => '空氣質素',
+'空著' => '空着',
+'空著作' => '空著作',
+'空著名' => '空著名',
+'空著書' => '空著書',
+'空著稱' => '空著稱',
+'空著者' => '空著者',
+'空著述' => '空著述',
+'空著錄' => '空著錄',
+'太空梭' => '穿梭機',
+'航天飞机' => '穿梭機',
+'穿著' => '穿着',
+'穿著作' => '穿著作',
+'穿著名' => '穿著名',
+'穿著書' => '穿著書',
+'穿著稱' => '穿著稱',
+'穿著者' => '穿著者',
+'穿著述' => '穿著述',
+'穿著錄' => '穿著錄',
+'窝里' => '窩裏',
+'窝里斗' => '窩裏鬥',
+'立著' => '立着',
+'立著《' => '立著《',
+'立著作' => '立著作',
+'立著名' => '立著名',
+'立著有' => '立著有',
+'立著称' => '立著稱',
+'立著稱' => '立著稱',
+'立著者' => '立著者',
+'立著(' => '立著(',
+'站著' => '站着',
+'站著作' => '站著作',
+'站著名' => '站著名',
+'站著書' => '站著書',
+'站著稱' => '站著稱',
+'站著者' => '站著者',
+'站著述' => '站著述',
+'站著錄' => '站著錄',
+'竪著' => '竪着',
+'笑著' => '笑着',
+'笑著作' => '笑著作',
+'笑著名' => '笑著名',
+'笑著書' => '笑著書',
+'笑著稱' => '笑著稱',
+'笑著者' => '笑著者',
+'笑著述' => '笑著述',
+'笑著錄' => '笑著錄',
+'笑里藏刀' => '笑裏藏刀',
+'提比里西' => '第比利斯',
+'管著' => '管着',
+'管著作' => '管著作',
+'管著名' => '管著名',
+'管著書' => '管著書',
+'管著稱' => '管著稱',
+'管著者' => '管著者',
+'管著述' => '管著述',
+'管著錄' => '管著錄',
+'箱里' => '箱裏',
+'节目里' => '節目裏',
+'簽著' => '簽着',
+'篮板球' => '籃板球',
+'籃板球' => '籃板球',
+'迈克尔' => '米高',
+'麦克尔' => '米高',
+'迈克尔·欧文' => '米高·奧雲',
+'糊里糊涂' => '糊裏糊塗',
+'系列里' => '系列裏',
+'係數' => '系數',
+'系里' => '系裏',
+'約占' => '約佔',
+'约占' => '約佔',
+'紐賓士域' => '紐賓士域',
+'索尔仁尼琴' => '索贊尼辛',
+'索忍尼辛' => '索贊尼辛',
+'索馬利亞' => '索馬里',
+'索馬利里' => '索馬里',
+'紮著' => '紮着',
+'紮著作' => '紮著作',
+'紮著名' => '紮著名',
+'紮著書' => '紮著書',
+'紮著稱' => '紮著稱',
+'紮著者' => '紮著者',
+'紮著述' => '紮著述',
+'紮著錄' => '紮著錄',
+'组里' => '組裏',
+'吉他' => '結他',
+'結彩' => '結綵',
+'结彩' => '結綵',
+'綁著' => '綁着',
+'綁著作' => '綁著作',
+'綁著名' => '綁著名',
+'綁著書' => '綁著書',
+'綁著稱' => '綁著稱',
+'綁著者' => '綁著者',
+'綁著述' => '綁著述',
+'綁著錄' => '綁著錄',
+'网站里' => '網站裏',
+'網路' => '網絡',
+'网里' => '網裏',
+'彩带' => '綵帶',
+'彩帶' => '綵帶',
+'彩排' => '綵排',
+'彩楼' => '綵樓',
+'彩樓' => '綵樓',
+'彩牌楼' => '綵牌樓',
+'彩牌樓' => '綵牌樓',
+'彩球' => '綵球',
+'彩綢' => '綵綢',
+'彩绸' => '綵綢',
+'彩线' => '綵綫',
+'彩線' => '綵線',
+'彩船' => '綵船',
+'彩衣' => '綵衣',
+'线图里' => '線圖裏',
+'緝凶' => '緝兇',
+'县里' => '縣裏',
+'缝里' => '縫裏',
+'縱著' => '縱着',
+'总数里' => '總數裏',
+'尖峰時段' => '繁忙時段',
+'尖峰時間' => '繁忙時間',
+'正體中文' => '繁體中文',
+'繃著' => '繃着',
+'繞著' => '繞着',
+'繞著作' => '繞著作',
+'繞著名' => '繞著名',
+'繞著書' => '繞著書',
+'繞著稱' => '繞著稱',
+'繞著者' => '繞著者',
+'繞著述' => '繞著述',
+'繞著錄' => '繞著錄',
+'系着' => '繫着',
+'繫著' => '繫着',
+'纏著' => '纏着',
+'纏著作' => '纏著作',
+'纏著名' => '纏著名',
+'纏著書' => '纏著書',
+'纏著稱' => '纏著稱',
+'纏著者' => '纏著者',
+'纏著述' => '纏著述',
+'纏著錄' => '纏著錄',
+'罩著' => '罩着',
+'罩著作' => '罩著作',
+'罩著名' => '罩著名',
+'罩著書' => '罩著書',
+'罩著稱' => '罩著稱',
+'罩著者' => '罩著者',
+'罩著述' => '罩著述',
+'罩著錄' => '罩著錄',
+'罵著' => '罵着',
+'罵著作' => '罵著作',
+'罵著名' => '罵著名',
+'罵著書' => '罵著書',
+'罵著稱' => '罵著稱',
+'罵著者' => '罵著者',
+'罵著述' => '罵著述',
+'罵著錄' => '罵著錄',
+'卢浮宫' => '羅浮宮',
+'美占' => '美佔',
+'美著' => '美着',
+'美著作' => '美著作',
+'美著名' => '美著名',
+'美著書' => '美著書',
+'美著称' => '美著稱',
+'美著稱' => '美著稱',
+'美著者' => '美著者',
+'美著述' => '美著述',
+'美著錄' => '美著錄',
+'耀著' => '耀着',
+'耀著作' => '耀著作',
+'耀著名' => '耀著名',
+'耀著書' => '耀著書',
+'耀著稱' => '耀著稱',
+'耀著者' => '耀著者',
+'耀著述' => '耀著述',
+'耀著錄' => '耀著錄',
+'寮國' => '老撾',
+'寮人民民主共和國' => '老撾人民民主共和國',
+'寮語' => '老撾語',
+'考著' => '考着',
+'考著作' => '考著作',
+'考著名' => '考著名',
+'考著書' => '考著書',
+'考著稱' => '考著稱',
+'考著者' => '考著者',
+'考著述' => '考著述',
+'考著錄' => '考著錄',
+'圣基茨和尼维斯' => '聖吉斯納域斯',
+'聖克里斯多福及尼維斯' => '聖吉斯納域斯',
+'聖文森及格瑞那丁' => '聖文森特和格林納丁斯',
+'聖露西亞' => '聖盧西亞',
+'聖馬利諾' => '聖馬力諾',
+'聽不著' => '聽不着',
+'聽得著' => '聽得着',
+'聽著' => '聽着',
+'聽著作' => '聽著作',
+'聽著名' => '聽著名',
+'聽著書' => '聽著書',
+'聽著稱' => '聽著稱',
+'聽著者' => '聽著者',
+'聽著述' => '聽著述',
+'聽著錄' => '聽著錄',
+'肚里' => '肚裏',
+'肯尼亚' => '肯雅',
+'胃里' => '胃裏',
+'背地里' => '背地裏',
+'背著' => '背着',
+'背著作' => '背著作',
+'背著名' => '背著名',
+'背著書' => '背著書',
+'背著稱' => '背著稱',
+'背著者' => '背著者',
+'背著述' => '背著述',
+'背著錄' => '背著錄',
+'胡里胡涂' => '胡裏胡塗',
+'腰里' => '腰裏',
+'膠著' => '膠着',
+'膠著作' => '膠著作',
+'膠著名' => '膠著名',
+'膠著書' => '膠著書',
+'膠著稱' => '膠著稱',
+'膠著者' => '膠著者',
+'膠著述' => '膠著述',
+'膠著錄' => '膠著錄',
+'塑料袋' => '膠袋',
+'臨著' => '臨着',
+'臨著作' => '臨著作',
+'臨著名' => '臨著名',
+'臨著書' => '臨著書',
+'臨著稱' => '臨著稱',
+'臨著者' => '臨著者',
+'臨著述' => '臨著述',
+'臨著錄' => '臨著錄',
+'自行火炮' => '自走炮',
+'與著' => '與着',
+'與著作' => '與著作',
+'與著名' => '與著名',
+'與著書' => '與著書',
+'與著稱' => '與著稱',
+'與著者' => '與著者',
+'與著述' => '與著述',
+'與著錄' => '與著錄',
+'舒马赫' => '舒麥加',
+'愛荷華' => '艾奧瓦',
+'爱荷华' => '艾奧瓦',
+'埃菲尔' => '艾菲爾',
+'帕塔亚' => '芭達亞',
+'花盆里' => '花盆裏',
+'苑里' => '苑裏',
+'苑裡' => '苑裡',
+'苦著' => '苦着',
+'苦著作' => '苦著作',
+'苦著名' => '苦著名',
+'苦著書' => '苦著書',
+'苦著稱' => '苦著稱',
+'苦著者' => '苦著者',
+'苦著述' => '苦著述',
+'苦著錄' => '苦著錄',
+'苦里' => '苦裏',
+'英占' => '英佔',
+'共和联邦' => '英聯邦',
+'大英國協' => '英聯邦',
+'草丛里' => '草叢裏',
+'霍爾斯坦' => '荷爾斯泰因',
+'好莱坞' => '荷里活',
+'好萊塢' => '荷里活',
+'庄里' => '莊裏',
+'莫三比克' => '莫桑比克',
+'巴伦西亚' => '華倫西亞',
+'巴倫西亞' => '華倫西亞',
+'瓦倫西亞' => '華倫西亞',
+'瓦文萨' => '華里沙',
+'華勒沙' => '華里沙',
+'菲利普亲王' => '菲臘親王',
+'菲利普親王' => '菲臘親王',
+'賴索托' => '萊索托',
+'马恩岛' => '萌島',
+'馬自達' => '萬事得',
+'马自达' => '萬事得',
+'万历朝鲜战争' => '萬曆朝鮮戰爭',
+'落著' => '落着',
+'落著作' => '落著作',
+'落著名' => '落著名',
+'落著書' => '落著書',
+'落著稱' => '落著稱',
+'落著者' => '落著者',
+'落著述' => '落著述',
+'落著錄' => '落著錄',
+'葉爾欽' => '葉利欽',
+'葡占' => '葡佔',
+'葫芦里卖甚么药' => '葫蘆裏賣甚麼藥',
+'滿地可' => '蒙特利爾',
+'蒙特婁' => '蒙特利爾',
+'蒙著' => '蒙着',
+'蒙著作' => '蒙著作',
+'蒙著名' => '蒙著名',
+'蒙著書' => '蒙著書',
+'蒙著稱' => '蒙著稱',
+'蒙著者' => '蒙著者',
+'蒙著述' => '蒙著述',
+'蒙著錄' => '蒙著錄',
+'蓋著' => '蓋着',
+'蓋著作' => '蓋著作',
+'蓋著名' => '蓋著名',
+'蓋著稱' => '蓋著稱',
+'肖斯塔科维奇' => '蕭士達高維契',
+'蕭士塔高維奇' => '蕭士達高維契',
+'肖邦' => '蕭邦',
+'薛丁格' => '薛定諤',
+'塞拉耶佛' => '薩拉熱窩',
+'萨达姆' => '薩達姆',
+'藉著' => '藉着',
+'藏著' => '藏着',
+'藏著作' => '藏著作',
+'藏著名' => '藏著名',
+'藏著書' => '藏著書',
+'藏著稱' => '藏著稱',
+'藏著者' => '藏著者',
+'藏著述' => '藏著述',
+'藏著錄' => '藏著錄',
+'蘊涵著' => '蘊涵着',
+'蘸著' => '蘸着',
+'蘸著作' => '蘸著作',
+'蘸著名' => '蘸著名',
+'蘸著書' => '蘸著書',
+'蘸著稱' => '蘸著稱',
+'蘸著者' => '蘸著者',
+'蘸著述' => '蘸著述',
+'蘸著錄' => '蘸著錄',
+'蜜里调油' => '蜜裏調油',
+'荧屏' => '螢屏',
+'屏幕' => '螢幕',
+'人行道' => '行人路',
+'行家里手' => '行家裏手',
+'首席执行官' => '行政總裁',
+'行著' => '行着',
+'行著作' => '行著作',
+'行著名' => '行著名',
+'行著書' => '行著書',
+'行著稱' => '行著稱',
+'行著者' => '行著者',
+'行著述' => '行著述',
+'行著錄' => '行著錄',
+'衝著' => '衝着',
+'衣著' => '衣着',
+'衣著作' => '衣著作',
+'衣著名' => '衣著名',
+'衣著書' => '衣著書',
+'衣著稱' => '衣著稱',
+'衣著者' => '衣著者',
+'衣著述' => '衣著述',
+'衣著錄' => '衣著錄',
+'表里' => '表裏',
+'表里一致' => '表裏一致',
+'表里不一' => '表裏不一',
+'表里如一' => '表裏如一',
+'表里山河' => '表裏山河',
+'袋里' => '袋裏',
+'袖里' => '袖裏',
+'被里' => '被裏',
+'裡' => '裏',
+'里勾外连' => '裏勾外連',
+'里屋' => '裏屋',
+'里层' => '裏層',
+'里带' => '裏帶',
+'里弦' => '裏弦',
+'里应外合' => '裏應外合',
+'里海' => '裏海',
+'里脊' => '裏脊',
+'里衣' => '裏衣',
+'里通外国' => '裏通外國',
+'里通外敌' => '裏通外敵',
+'里边' => '裏邊',
+'里间' => '裏間',
+'里面' => '裏面',
+'里头' => '裏頭',
+'裝著' => '裝着',
+'裝著作' => '裝著作',
+'裝著名' => '裝著名',
+'裝著書' => '裝著書',
+'裝著稱' => '裝著稱',
+'裝著者' => '裝著者',
+'裝著述' => '裝著述',
+'裝著錄' => '裝著錄',
+'裡冷' => '裡冷',
+'裹著' => '裹着',
+'裹著作' => '裹著作',
+'裹著名' => '裹著名',
+'裹著書' => '裹著書',
+'裹著稱' => '裹著稱',
+'裹著者' => '裹著者',
+'裹著述' => '裹著述',
+'裹著錄' => '裹著錄',
+'衬里' => '襯裏',
+'西占' => '西佔',
+'塞維亞' => '西維爾',
+'塞维利亚' => '西維爾',
+'要占' => '要佔',
+'要占卜' => '要占卜',
+'覆著' => '覆着',
+'覆蓋著' => '覆蓋着',
+'見著' => '見着',
+'見著作' => '見著作',
+'見著名' => '見著名',
+'見著書' => '見著書',
+'見著稱' => '見著稱',
+'見著者' => '見著者',
+'見著述' => '見著述',
+'見著錄' => '見著錄',
+'視著' => '視着',
+'視著名' => '視著名',
+'角落里' => '角落裏',
+'分辨率' => '解像度',
+'解析度' => '解像度',
+'言里' => '言裏',
+'計畫' => '計劃',
+'記著' => '記着',
+'記著作' => '記著作',
+'記著名' => '記著名',
+'記著書' => '記著書',
+'記著稱' => '記著稱',
+'記著者' => '記著者',
+'記著述' => '記著述',
+'記著錄' => '記著錄',
+'試著' => '試着',
+'試著作' => '試著作',
+'試著名' => '試著名',
+'試著書' => '試著書',
+'試著稱' => '試著稱',
+'試著者' => '試著者',
+'試著述' => '試著述',
+'試著錄' => '試著錄',
+'话里有话' => '話裏有話',
+'语法里' => '語法裏',
+'語著' => '語着',
+'語著作' => '語著作',
+'語著名' => '語著名',
+'語著書' => '語著書',
+'語著稱' => '語著稱',
+'語著者' => '語著者',
+'語著述' => '語著述',
+'語著錄' => '語著錄',
+'语里' => '語裏',
+'說著' => '說着',
+'說著作' => '說著作',
+'說著稱' => '說著稱',
+'說著者' => '說著者',
+'說著述' => '說著述',
+'數據機' => '調制解調器',
+'诺曼底' => '諾曼第',
+'警戒著' => '警戒着',
+'變著' => '變着',
+'變著作' => '變著作',
+'變著名' => '變著名',
+'變著書' => '變著書',
+'變著稱' => '變著稱',
+'變著者' => '變著者',
+'變著述' => '變著述',
+'變著錄' => '變著錄',
+'豎著' => '豎着',
+'豎著作' => '豎著作',
+'豎著名' => '豎著名',
+'豎著書' => '豎著書',
+'豎著稱' => '豎著稱',
+'豎著者' => '豎著者',
+'豎著述' => '豎著述',
+'豎著錄' => '豎著錄',
+'象徵著名' => '象徵著名',
+'象徵著' => '象著着',
+'貝爾格勒' => '貝爾格萊德',
+'布莱尔' => '貝理雅',
+'負著' => '負着',
+'貢寮' => '貢寮',
+'買凶' => '買兇',
+'費占' => '費佔',
+'费占' => '費佔',
+'信息时代' => '資訊時代',
+'赌台' => '賭枱',
+'尚比亞' => '贊比亞',
+'西臺人' => '赫梯人',
+'西臺國' => '赫梯國',
+'西臺帝' => '赫梯帝',
+'西臺文' => '赫梯文',
+'西臺族' => '赫梯族',
+'西臺王' => '赫梯王',
+'西臺語' => '赫梯語',
+'赫魯雪夫' => '赫魯曉夫',
+'走為上著' => '走為上着',
+'走著' => '走着',
+'走著作' => '走著作',
+'走著名' => '走著名',
+'走著書' => '走著書',
+'走著稱' => '走著稱',
+'走著者' => '走著者',
+'走著述' => '走著述',
+'走著錄' => '走著錄',
+'趕著' => '趕着',
+'趕著作' => '趕著作',
+'趕著名' => '趕著名',
+'趕著書' => '趕著書',
+'趕著稱' => '趕著稱',
+'趕著者' => '趕著者',
+'趕著述' => '趕著述',
+'趕著錄' => '趕著錄',
+'趴著' => '趴着',
+'趴著作' => '趴著作',
+'趴著名' => '趴著名',
+'趴著書' => '趴著書',
+'趴著稱' => '趴著稱',
+'趴著者' => '趴著者',
+'趴著述' => '趴著述',
+'趴著錄' => '趴著錄',
+'跑著' => '跑着',
+'跑著作' => '跑著作',
+'跑著名' => '跑著名',
+'跑著書' => '跑著書',
+'跑著稱' => '跑著稱',
+'跑著者' => '跑著者',
+'跑著述' => '跑著述',
+'跑著錄' => '跑著錄',
+'跟著' => '跟着',
+'跟著作' => '跟著作',
+'跟著名' => '跟著名',
+'跟著書' => '跟著書',
+'跟著稱' => '跟著稱',
+'跟著者' => '跟著者',
+'跟著述' => '跟著述',
+'跟著錄' => '跟著錄',
+'跪著' => '跪着',
+'跪著作' => '跪著作',
+'跪著名' => '跪著名',
+'跪著書' => '跪著書',
+'跪著稱' => '跪著稱',
+'跪著者' => '跪著者',
+'跪著述' => '跪著述',
+'跪著錄' => '跪著錄',
+'路图里' => '路圖裏',
+'跳著' => '跳着',
+'跳著作' => '跳著作',
+'跳著名' => '跳著名',
+'跳著書' => '跳著書',
+'跳著稱' => '跳著稱',
+'跳著者' => '跳著者',
+'跳著述' => '跳著述',
+'跳著錄' => '跳著錄',
+'踏著' => '踏着',
+'踏著作' => '踏著作',
+'踏著名' => '踏著名',
+'踏著稱' => '踏著稱',
+'踏著者' => '踏著者',
+'踏著述' => '踏著述',
+'踏著錄' => '踏著錄',
+'踩著' => '踩着',
+'踩著作' => '踩著作',
+'踩著名' => '踩著名',
+'踩著書' => '踩著書',
+'踩著稱' => '踩著稱',
+'踩著者' => '踩著者',
+'踩著述' => '踩著述',
+'踩著錄' => '踩著錄',
+'躍著' => '躍着',
+'躍著作' => '躍著作',
+'躍著名' => '躍著名',
+'躍著書' => '躍著書',
+'躍著稱' => '躍著稱',
+'躍著者' => '躍著者',
+'躍著述' => '躍著述',
+'躍著錄' => '躍著錄',
+'身著' => '身着',
+'身著作' => '身著作',
+'身著名' => '身著名',
+'身著書' => '身著書',
+'身著稱' => '身著稱',
+'身著者' => '身著者',
+'身著述' => '身著述',
+'身著錄' => '身著錄',
+'躺著' => '躺着',
+'躺著作' => '躺著作',
+'躺著名' => '躺著名',
+'躺著書' => '躺著書',
+'躺著稱' => '躺著稱',
+'躺著者' => '躺著者',
+'躺著述' => '躺著述',
+'躺著錄' => '躺著錄',
+'车库里' => '車庫裏',
+'车站里' => '車站裏',
+'车里' => '車裏',
+'车里雅宾斯克' => '車里雅賓斯克',
+'軟體' => '軟件',
+'軟體動物' => '軟體動物',
+'軟體家具' => '軟體家具',
+'載著' => '載着',
+'載著作' => '載著作',
+'載著名' => '載著名',
+'載著書' => '載著書',
+'載著稱' => '載著稱',
+'載著者' => '載著者',
+'載著述' => '載著述',
+'載著錄' => '載著錄',
+'轉著' => '轉着',
+'轉著作' => '轉著作',
+'轉著名' => '轉著名',
+'轉著書' => '轉著書',
+'轉著稱' => '轉著稱',
+'轉著者' => '轉著者',
+'轉著述' => '轉著述',
+'轉著錄' => '轉著錄',
+'办公台' => '辦公枱',
+'辦著' => '辦着',
+'辦著作' => '辦著作',
+'辦著名' => '辦著名',
+'辦著書' => '辦著書',
+'辦著稱' => '辦著稱',
+'辦著者' => '辦著者',
+'辦著述' => '辦著述',
+'辦著錄' => '辦著錄',
+'迫著' => '迫着',
+'追著' => '追着',
+'追著作' => '追著作',
+'追著名' => '追著名',
+'追著書' => '追著書',
+'追著稱' => '追著稱',
+'追著者' => '追著者',
+'追著述' => '追著述',
+'追著錄' => '追著錄',
+'逆著' => '逆着',
+'逆著作' => '逆著作',
+'逆著名' => '逆著名',
+'逆著書' => '逆著書',
+'逆著稱' => '逆著稱',
+'逆著者' => '逆著者',
+'逆著述' => '逆著述',
+'逆著錄' => '逆著錄',
+'径入' => '逕入',
+'径到' => '逕到',
+'径取' => '逕取',
+'径启' => '逕啟',
+'径寄' => '逕寄',
+'径庭' => '逕庭',
+'径往' => '逕往',
+'径自' => '逕自',
+'径行' => '逕行',
+'径迎' => '逕迎',
+'这里' => '這裏',
+'连占' => '連佔',
+'連占' => '連佔',
+'連著' => '連着',
+'链接' => '連結',
+'連著作' => '連著作',
+'連著名' => '連著名',
+'連著書' => '連著書',
+'連著稱' => '連著稱',
+'連著者' => '連著者',
+'連著述' => '連著述',
+'連著錄' => '連著錄',
+'进占' => '進佔',
+'進占' => '進佔',
+'演化論' => '進化論',
+'逼著' => '逼着',
+'逼著作' => '逼著作',
+'逼著名' => '逼著名',
+'逼著書' => '逼著書',
+'逼著稱' => '逼著稱',
+'逼著者' => '逼著者',
+'逼著述' => '逼著述',
+'逼著錄' => '逼著錄',
+'遇著' => '遇着',
+'遇著作' => '遇著作',
+'遇著名' => '遇著名',
+'遇著書' => '遇著書',
+'遇著称' => '遇著稱',
+'遇著稱' => '遇著稱',
+'遇著者' => '遇著者',
+'遇著述' => '遇著述',
+'遇著錄' => '遇著錄',
+'游戏里' => '遊戲裏',
+'遍布' => '遍佈',
+'遍佈著' => '遍佈着',
+'遍布著' => '遍佈着',
+'過著' => '過着',
+'达·芬奇' => '達·文西',
+'达芬奇' => '達文西',
+'達著' => '達着',
+'達著作' => '達著作',
+'達著名' => '達著名',
+'達著書' => '達著書',
+'達著稱' => '達著稱',
+'達著者' => '達著者',
+'達著述' => '達著述',
+'達著錄' => '達著錄',
+'还占' => '還佔',
+'還占' => '還佔',
+'邋里邋遢' => '邋裏邋遢',
+'那里' => '那裏',
+'都市里' => '都市裏',
+'配合著' => '配合着',
+'配合著名' => '配合著名',
+'配图里' => '配圖裏',
+'配著' => '配着',
+'配著作' => '配著作',
+'配著名' => '配著名',
+'配著書' => '配著書',
+'配著稱' => '配著稱',
+'配著者' => '配著者',
+'配著述' => '配著述',
+'配著錄' => '配著錄',
+'醯' => '酰',
+'醜著' => '醜着',
+'醜著作' => '醜著作',
+'醜著名' => '醜著名',
+'醜著書' => '醜著書',
+'醜著稱' => '醜著稱',
+'醜著者' => '醜著者',
+'醜著述' => '醜著述',
+'醜著錄' => '醜著錄',
+'醯壶' => '醯壺',
+'醯壺' => '醯壺',
+'醯醋' => '醯醋',
+'醯醢' => '醯醢',
+'醯酱' => '醯醬',
+'醯醬' => '醯醬',
+'醯雞' => '醯雞',
+'醯鸡' => '醯雞',
+'釀著' => '釀着',
+'釀著作' => '釀著作',
+'釀著名' => '釀著名',
+'釀著書' => '釀著書',
+'釀著稱' => '釀著稱',
+'釀著者' => '釀著者',
+'釀著述' => '釀著述',
+'釀著錄' => '釀著錄',
+'金装玉里' => '金裝玉裏',
+'鉤' => '鈎',
+'鋪著' => '鋪着',
+'鋪著作' => '鋪著作',
+'鋪著名' => '鋪著名',
+'鋪著書' => '鋪著書',
+'鋪著稱' => '鋪著稱',
+'鋪著者' => '鋪著者',
+'鋪著述' => '鋪著述',
+'鋪著錄' => '鋪著錄',
+'镜图里' => '鏡圖裏',
+'钟在寺里' => '鐘在寺裏',
+'狄托' => '鐵托',
+'泰坦尼克号' => '鐵達尼號',
+'门里' => '門裏',
+'閉著' => '閉着',
+'閉著作' => '閉著作',
+'閉著名' => '閉著名',
+'閉著書' => '閉著書',
+'閉著稱' => '閉著稱',
+'閉著者' => '閉著者',
+'閉著述' => '閉著述',
+'閉著錄' => '閉著錄',
+'克卜勒' => '開普勒',
+'開著' => '開着',
+'開著作' => '開著作',
+'開著名' => '開著名',
+'開著書' => '開著書',
+'開著稱' => '開著稱',
+'開著者' => '開著者',
+'開著述' => '開著述',
+'開著錄' => '開著錄',
+'开诚布公' => '開誠佈公',
+'開誠布公' => '開誠佈公',
+'閑著' => '閑着',
+'閑著作' => '閑著作',
+'閑著名' => '閑著名',
+'閑著書' => '閑著書',
+'閑著稱' => '閑著稱',
+'閑著者' => '閑著者',
+'閑著述' => '閑著述',
+'閑著錄' => '閑著錄',
+'閒著' => '閒着',
+'间里' => '間裏',
+'關係著' => '關係着',
+'關著' => '關着',
+'關著作' => '關著作',
+'關著名' => '關著名',
+'關著書' => '關著書',
+'關著稱' => '關著稱',
+'關著者' => '關著者',
+'關著述' => '關著述',
+'關著錄' => '關著錄',
+'聞不著' => '闻不着',
+'聞得著' => '闻得着',
+'聞著' => '闻着',
+'亞塞拜然' => '阿塞拜疆',
+'阿布達比' => '阿布扎比',
+'阿拉伯聯合大公國' => '阿拉伯聯合酋長國',
+'亞斯文' => '阿斯旺',
+'阿联酋' => '阿聯酋',
+'艾里爾·夏隆' => '阿里埃勒·沙龍',
+'附著' => '附着',
+'附著作' => '附著作',
+'附著名' => '附著名',
+'附著書' => '附著書',
+'附著稱' => '附著稱',
+'附著者' => '附著者',
+'附著述' => '附著述',
+'附著錄' => '附著錄',
+'陋著' => '陋着',
+'陋著作' => '陋著作',
+'陋著名' => '陋著名',
+'陋著書' => '陋著書',
+'陋著稱' => '陋著稱',
+'陋著者' => '陋著者',
+'陋著述' => '陋著述',
+'陋著錄' => '陋著錄',
+'院里' => '院裏',
+'陪著' => '陪着',
+'陪著作' => '陪著作',
+'陪著名' => '陪著名',
+'陪著書' => '陪著書',
+'陪著稱' => '陪著稱',
+'陪著者' => '陪著者',
+'陪著述' => '陪著述',
+'陪著錄' => '陪著錄',
+'阴沟里翻船' => '陰溝裏翻船',
+'隔著' => '隔着',
+'隔著作' => '隔著作',
+'隔著名' => '隔著名',
+'隔著書' => '隔著書',
+'隔著稱' => '隔著稱',
+'隔著者' => '隔著者',
+'隔著述' => '隔著述',
+'隔著錄' => '隔著錄',
+'隨著' => '隨着',
+'隨著作' => '隨著作',
+'隨著名' => '隨著名',
+'隨著書' => '隨著書',
+'隨著稱' => '隨著稱',
+'隨著者' => '隨著者',
+'隨著述' => '隨著述',
+'隨著錄' => '隨著錄',
+'隐占' => '隱佔',
+'隱占' => '隱佔',
+'雅爾達' => '雅爾塔',
+'雅著' => '雅着',
+'雅穆索戈' => '雅穆蘇克雷',
+'雅著作' => '雅著作',
+'雅著名' => '雅著名',
+'雅著書' => '雅著書',
+'雅著称' => '雅著稱',
+'雅著稱' => '雅著稱',
+'雅著者' => '雅著者',
+'雅著述' => '雅著述',
+'雅著錄' => '雅著錄',
+'集数里' => '集數裏',
+'集里' => '集裏',
+'雜著' => '雜着',
+'雜著作' => '雜著作',
+'雜著名' => '雜著名',
+'雜著書' => '雜著書',
+'雜著稱' => '雜著稱',
+'雜著者' => '雜著者',
+'雜著述' => '雜著述',
+'雜著錄' => '雜著錄',
+'鸡蛋里挑骨头' => '雞蛋裏挑骨頭',
+'冰淇淋' => '雪糕',
+'冰激凌' => '雪糕',
+'雪里' => '雪裏',
+'云里雾里' => '雲裏霧裏',
+'莱特湾' => '雷伊泰灣',
+'萊特灣' => '雷伊泰灣',
+'电影里' => '電影裏',
+'晶体管' => '電晶體',
+'晶體管' => '電晶體',
+'电梯里' => '電梯裏',
+'电脑程序' => '電腦程式',
+'计算机程序' => '電腦程式',
+'电视里' => '電視裏',
+'霄裡' => '霄裡',
+'荷姆茲' => '霍爾木茲',
+'雾里' => '霧裏',
+'霸占' => '霸佔',
+'非占不可' => '非佔不可',
+'靠著' => '靠着',
+'靠著作' => '靠著作',
+'靠著名' => '靠著名',
+'靠著称' => '靠著稱',
+'靠著稱' => '靠著稱',
+'靠著者' => '靠著者',
+'靠著述' => '靠著述',
+'靠著录' => '靠著錄',
+'靠著錄' => '靠著錄',
+'面包著' => '面包着',
+'鞋里' => '鞋裏',
+'鞭辟入里' => '鞭辟入裏',
+'朝鲜战争' => '韓戰',
+'響著' => '響着',
+'響著作' => '響著作',
+'響著名' => '響著名',
+'響著書' => '響著書',
+'響著稱' => '響著稱',
+'響著者' => '響著者',
+'響著述' => '響著述',
+'響著錄' => '響著錄',
+'頂著' => '頂着',
+'頂著作' => '頂著作',
+'頂著名' => '頂著名',
+'頂著書' => '頂著書',
+'頂著稱' => '頂著稱',
+'頂著者' => '頂著者',
+'頂著述' => '頂著述',
+'頂著錄' => '頂著錄',
+'順著' => '順着',
+'順著作' => '順著作',
+'順著名' => '順著名',
+'順著書' => '順著書',
+'順著稱' => '順著稱',
+'順著者' => '順著者',
+'順著述' => '順著述',
+'順著錄' => '順著錄',
+'頒布' => '頒佈',
+'颁布' => '頒佈',
+'領著' => '領着',
+'領著作' => '領著作',
+'領著名' => '領著名',
+'領著書' => '領著書',
+'領著稱' => '領著稱',
+'領著者' => '領著者',
+'領著述' => '領著述',
+'領著錄' => '領著錄',
+'头里' => '頭裏',
+'风里' => '風裏',
+'颳著' => '颳着',
+'飃著' => '飃着',
+'飄著' => '飄着',
+'飄著作' => '飄著作',
+'飄著名' => '飄著名',
+'飄著書' => '飄著書',
+'飄著稱' => '飄著稱',
+'飄著者' => '飄著者',
+'飄著述' => '飄著述',
+'飄著錄' => '飄著錄',
+'餐台' => '餐枱',
+'馆里' => '館裏',
+'糊口' => '餬口',
+'馬里蘭' => '馬利蘭',
+'马里兰' => '馬利蘭',
+'马拉特·萨芬' => '馬拉特·沙芬',
+'馬斯垂克' => '馬斯特里赫特',
+'馬爾地夫' => '馬爾代夫',
+'馬利共和國' => '馬里共和國',
+'駕著' => '駕着',
+'駕著作' => '駕著作',
+'駕著名' => '駕著名',
+'駕著書' => '駕著書',
+'駕著稱' => '駕著稱',
+'駕著者' => '駕著者',
+'駕著述' => '駕著述',
+'駕著錄' => '駕著錄',
+'騎著' => '騎着',
+'騎著作' => '騎著作',
+'騎著名' => '騎著名',
+'騎著書' => '騎著書',
+'騎著稱' => '騎著稱',
+'騎著者' => '騎著者',
+'騎著述' => '騎著述',
+'騎著錄' => '騎著錄',
+'騙著' => '騙着',
+'騙著作' => '騙著作',
+'騙著名' => '騙著名',
+'騙著書' => '騙著書',
+'騙著稱' => '騙著稱',
+'騙著者' => '騙著者',
+'騙著述' => '騙著述',
+'騙著錄' => '騙著錄',
+'驶著' => '驶着',
+'体里' => '體裏',
+'高畫質' => '高清',
+'高著' => '高着',
+'高著作' => '高著作',
+'高著名' => '高著名',
+'高著書' => '高著書',
+'高著称' => '高著稱',
+'高著稱' => '高著稱',
+'高著者' => '高著者',
+'高著述' => '高著述',
+'高著錄' => '高著錄',
+'斗着' => '鬥着',
+'鬥著' => '鬥着',
+'鬥著作' => '鬥著作',
+'鬥著名' => '鬥著名',
+'鬥著書' => '鬥著書',
+'鬥著稱' => '鬥著稱',
+'鬥著者' => '鬥著者',
+'鬥著述' => '鬥著述',
+'鬥著錄' => '鬥著錄',
+'鬧著' => '鬧着',
+'牛軋' => '鳥結',
+'牛轧' => '鳥結',
+'鳩占' => '鳩佔',
+'鸠占' => '鳩佔',
+'麗著' => '麗着',
+'麗著作' => '麗著作',
+'麗著名' => '麗著名',
+'麗著書' => '麗著書',
+'麗著稱' => '麗著稱',
+'麗著者' => '麗著者',
+'麗著述' => '麗著述',
+'麗著錄' => '麗著錄',
+'麼著' => '麼着',
+'芮氏0' => '黎克特制0',
+'里氏0' => '黎克特制0',
+'芮氏1' => '黎克特制1',
+'里氏1' => '黎克特制1',
+'芮氏2' => '黎克特制2',
+'里氏2' => '黎克特制2',
+'芮氏3' => '黎克特制3',
+'里氏3' => '黎克特制3',
+'芮氏4' => '黎克特制4',
+'里氏4' => '黎克特制4',
+'芮氏5' => '黎克特制5',
+'里氏5' => '黎克特制5',
+'芮氏6' => '黎克特制6',
+'里氏6' => '黎克特制6',
+'芮氏7' => '黎克特制7',
+'里氏7' => '黎克特制7',
+'芮氏8' => '黎克特制8',
+'里氏8' => '黎克特制8',
+'芮氏9' => '黎克特制9',
+'里氏9' => '黎克特制9',
+'芮氏地震規模' => '黎克特制地震震級',
+'里氏地震规模' => '黎克特制地震震級',
+'芮氏規模' => '黎克特制震級',
+'里氏规模' => '黎克特制震級',
+'里氏震级' => '黎克特制震級',
+'黏著' => '黏着',
+'黏著作' => '黏著作',
+'黏著名' => '黏著名',
+'黏著書' => '黏著書',
+'黏著稱' => '黏著稱',
+'黏著者' => '黏著者',
+'黏著述' => '黏著述',
+'黏著錄' => '黏著錄',
+'蒙特內哥羅' => '黑山',
+'點著' => '點着',
+'點著作' => '點著作',
+'點著名' => '點著名',
+'點著書' => '點著書',
+'點著稱' => '點著稱',
+'點著者' => '點著者',
+'點著述' => '點著述',
+'點著錄' => '點著錄',
+'点里' => '點裏',
+'点里程' => '點里程',
+'鼓里' => '鼓裏',
+);
+
+public static $zh2CN = array(
+'16進位制' => '16进位制',
+'16進位' => '16进制',
+'IP位址' => 'IP地址',
+'一份子' => '一分子',
+'全球資訊網' => '万维网',
+'三十六著' => '三十六着',
+'三極體' => '三极管',
+'下著' => '下着',
+'下著作' => '下著作',
+'下著名' => '下著名',
+'下著录' => '下著录',
+'下著錄' => '下著录',
+'下著有' => '下著有',
+'下著称' => '下著称',
+'下著稱' => '下著称',
+'下著者' => '下著者',
+'下著述' => '下著述',
+'不著' => '不着',
+'不著書' => '不著书',
+'不著名' => '不著名',
+'不著錄' => '不著录',
+'不著稱' => '不著称',
+'不著述' => '不著述',
+'與著' => '与着',
+'與著書' => '与著书',
+'與著作' => '与著作',
+'與著名' => '与著名',
+'與著錄' => '与著录',
+'與著稱' => '与著称',
+'與著者' => '与著者',
+'與著述' => '与著述',
+'醜著' => '丑着',
+'醜著書' => '丑著书',
+'醜著作' => '丑著作',
+'醜著名' => '丑著名',
+'醜著錄' => '丑著录',
+'醜著稱' => '丑著称',
+'醜著者' => '丑著者',
+'醜著述' => '丑著述',
+'邱吉爾' => '丘吉尔',
+'C型肝炎' => '丙型肝炎',
+'C肝' => '丙肝',
+'東協會' => '东协会',
+'東協助' => '东协助',
+'東協議' => '东协议',
+'東南亞國家協會' => '东南亚国家联盟',
+'亚细安' => '东盟',
+'東協' => '东盟',
+'仲介' => '中介',
+'臨著' => '临着',
+'臨著書' => '临著书',
+'臨著作' => '临著作',
+'臨著名' => '临著名',
+'臨著錄' => '临著录',
+'臨著稱' => '临著称',
+'臨著者' => '临著者',
+'臨著述' => '临著述',
+'為著' => '为着',
+'為著《' => '为著《',
+'為著作' => '为著作',
+'為著名' => '为著名',
+'為著錄' => '为著录',
+'為著稱' => '为著称',
+'為著者' => '为著者',
+'為著述' => '为著述',
+'主機板' => '主板',
+'麗著' => '丽着',
+'麗著書' => '丽著书',
+'麗著作' => '丽著作',
+'麗著名' => '丽著名',
+'麗著錄' => '丽著录',
+'麗著稱' => '丽著称',
+'麗著者' => '丽著者',
+'麗著述' => '丽著述',
+'麼著' => '么着',
+'樂著' => '乐着',
+'樂著書' => '乐著书',
+'樂著作' => '乐著作',
+'樂著名' => '乐著名',
+'樂著錄' => '乐著录',
+'樂著稱' => '乐著称',
+'樂著者' => '乐著者',
+'樂著述' => '乐著述',
+'賈伯斯' => '乔布斯',
+'喬治·歐威爾' => '乔治·奥威尔',
+'乘著' => '乘着',
+'乘著書' => '乘著书',
+'乘著作' => '乘著作',
+'乘著名' => '乘著名',
+'乘著錄' => '乘著录',
+'乘著称' => '乘著称',
+'乘著稱' => '乘著称',
+'乘著者' => '乘著者',
+'乘著述' => '乘著述',
+'B型肝炎' => '乙型肝炎',
+'B肝' => '乙肝',
+'吉力馬札羅' => '乞力马扎罗',
+'葉門' => '也门',
+'買帳' => '买账',
+'了結他' => '了结他',
+'爭著' => '争着',
+'爭著書' => '争著书',
+'爭著作' => '争著作',
+'爭著名' => '争著名',
+'爭著錄' => '争著录',
+'爭著稱' => '争著称',
+'爭著者' => '争著者',
+'爭著述' => '争著述',
+'二極體' => '二极管',
+'二進位制' => '二进位制',
+'二進位' => '二进制',
+'網際網絡' => '互联网',
+'網際網路' => '互联网',
+'亞歷山卓' => '亚历山大',
+'雅穆索戈' => '亚穆苏克罗',
+'交帳' => '交账',
+'亮著' => '亮着',
+'亮著書' => '亮著书',
+'亮著作' => '亮著作',
+'亮著名' => '亮著名',
+'亮著錄' => '亮著录',
+'亮著称' => '亮著称',
+'亮著稱' => '亮著称',
+'亮著者' => '亮著者',
+'亮著述' => '亮著述',
+'人工智慧' => '人工智能',
+'行人路' => '人行道',
+'甚麼' => '什么',
+'甚麽' => '什么',
+'仗著' => '仗着',
+'仗著書' => '仗著书',
+'仗著作' => '仗著作',
+'仗著名' => '仗著名',
+'仗著錄' => '仗著录',
+'仗著稱' => '仗著称',
+'仗著者' => '仗著者',
+'仗著述' => '仗著述',
+'付帳' => '付账',
+'代表著' => '代表着',
+'代表著書' => '代表著书',
+'代表著作' => '代表著作',
+'代表著名' => '代表著名',
+'代表著錄' => '代表著录',
+'代表著稱' => '代表著称',
+'代表著者' => '代表著者',
+'代表著述' => '代表著述',
+'乙太網' => '以太网',
+'伊莉莎白' => '伊丽莎白',
+'伊利諾' => '伊利诺伊',
+'伊利諾伊' => '伊利诺伊',
+'伊斯蘭瑪巴德' => '伊斯兰堡',
+'伊斯坦堡' => '伊斯坦布尔',
+'伏著' => '伏着',
+'優先順序' => '优先级',
+'傳著' => '传着',
+'傳著書' => '传著书',
+'傳著作' => '传著作',
+'傳著名' => '传著名',
+'傳著錄' => '传著录',
+'傳著稱' => '传著称',
+'傳著者' => '传著者',
+'傳著述' => '传著述',
+'貝里斯' => '伯利兹',
+'伯明罕' => '伯明翰',
+'伴著' => '伴着',
+'伴著書' => '伴著书',
+'伴著作' => '伴著作',
+'伴著名' => '伴著名',
+'伴著錄' => '伴著录',
+'伴著稱' => '伴著称',
+'伴著者' => '伴著者',
+'伴著述' => '伴著述',
+'點陣圖' => '位图',
+'低著' => '低着',
+'低著書' => '低著书',
+'低著作' => '低著作',
+'低著名' => '低著名',
+'低著錄' => '低著录',
+'低著称' => '低著称',
+'低著稱' => '低著称',
+'低著者' => '低著者',
+'低著述' => '低著述',
+'住著' => '住着',
+'住著書' => '住著书',
+'住著作' => '住著作',
+'住著名' => '住著名',
+'住著錄' => '住著录',
+'住著称' => '住著称',
+'住著稱' => '住著称',
+'住著者' => '住著者',
+'住著述' => '住著述',
+'餘' => '余',
+'維德角' => '佛得角',
+'侏儸紀' => '侏罗纪',
+'側著' => '侧着',
+'側著書' => '侧著书',
+'側著作' => '侧著作',
+'側著名' => '侧著名',
+'側著錄' => '侧著录',
+'側著稱' => '侧著称',
+'側著者' => '侧著者',
+'側著述' => '侧著述',
+'可攜式' => '便携式',
+'攜帶型' => '便携式',
+'保護著' => '保护着',
+'保障著' => '保障着',
+'保障著書' => '保障著书',
+'保障著作' => '保障著作',
+'保障著名' => '保障著名',
+'保障著錄' => '保障著录',
+'保障著称' => '保障著称',
+'保障著稱' => '保障著称',
+'保障著者' => '保障著者',
+'保障著述' => '保障著述',
+'資訊時代' => '信息时代',
+'資訊理論' => '信息论',
+'信著' => '信着',
+'信著書' => '信著书',
+'信著作' => '信著作',
+'信著名' => '信著名',
+'信著錄' => '信著录',
+'信著称' => '信著称',
+'信著稱' => '信著称',
+'信著者' => '信著者',
+'信著述' => '信著述',
+'伏地挺身' => '俯卧撑',
+'掌上壓' => '俯卧撑',
+'倒帳' => '倒账',
+'候著' => '候着',
+'候著書' => '候著书',
+'候著作' => '候著作',
+'候著名' => '候著名',
+'候著錄' => '候著录',
+'候著稱' => '候著称',
+'候著者' => '候著者',
+'候著述' => '候著述',
+'借著' => '借着',
+'藉著' => '借着',
+'借著書' => '借著书',
+'借著作' => '借著作',
+'借著名' => '借著名',
+'借著錄' => '借著录',
+'借著稱' => '借著称',
+'借著者' => '借著者',
+'借著述' => '借著述',
+'假帳' => '假账',
+'做著' => '做着',
+'做著書' => '做著书',
+'做著作' => '做著作',
+'做著名' => '做著名',
+'做著錄' => '做著录',
+'做著稱' => '做著称',
+'做著者' => '做著者',
+'做著述' => '做著述',
+'偷著' => '偷着',
+'偷著書' => '偷著书',
+'偷著作' => '偷著作',
+'偷著名' => '偷著名',
+'偷著錄' => '偷著录',
+'偷著稱' => '偷著称',
+'偷著者' => '偷著者',
+'偷著述' => '偷著述',
+'傅利葉' => '傅里叶',
+'母音' => '元音',
+'光著' => '光着',
+'光著書' => '光著书',
+'光著作' => '光著作',
+'光著名' => '光著名',
+'光著錄' => '光著录',
+'光著称' => '光著称',
+'光著稱' => '光著称',
+'光著者' => '光著者',
+'光著述' => '光著述',
+'光碟機' => '光驱',
+'柯林頓' => '克林顿',
+'克羅埃西亞' => '克罗地亚',
+'轉殖' => '克隆',
+'複製人' => '克隆人',
+'入帳' => '入账',
+'八進位制' => '八进位制',
+'八進位' => '八进制',
+'西元1' => '公元1',
+'西元2' => '公元2',
+'西元3' => '公元3',
+'西元4' => '公元4',
+'西元5' => '公元5',
+'西元6' => '公元6',
+'西元7' => '公元7',
+'西元8' => '公元8',
+'西元9' => '公元9',
+'西元前' => '公元前',
+'公帳' => '公账',
+'六進位制' => '六进位制',
+'六進位' => '六进制',
+'關著' => '关着',
+'關係著' => '关系着',
+'關著書' => '关著书',
+'關著作' => '关著作',
+'關著名' => '关著名',
+'關著錄' => '关著录',
+'關著稱' => '关著称',
+'關著者' => '关著者',
+'關著述' => '关著述',
+'關帳' => '关账',
+'記憶體' => '内存',
+'甘比亞' => '冈比亚',
+'冒著' => '冒着',
+'冒著書' => '冒著书',
+'冒著作' => '冒著作',
+'冒著名' => '冒著名',
+'冒著錄' => '冒著录',
+'冒著稱' => '冒著称',
+'冒著者' => '冒著者',
+'冒著述' => '冒著述',
+'寫著' => '写着',
+'寫著書' => '写著书',
+'寫著作' => '写著作',
+'寫著名' => '写著名',
+'寫著錄' => '写著录',
+'寫著稱' => '写著称',
+'寫著者' => '写著者',
+'寫著述' => '写著述',
+'沖著' => '冲着',
+'衝著' => '冲着',
+'沖著。' => '冲著。',
+'沖著《' => '冲著《',
+'沖著(' => '冲著(',
+'沖著,' => '冲著,',
+'沖帳' => '冲账',
+'涼著' => '凉着',
+'涼著書' => '凉著书',
+'涼著作' => '凉著作',
+'涼著名' => '凉著名',
+'涼著錄' => '凉著录',
+'涼著稱' => '凉著称',
+'涼著者' => '凉著者',
+'涼著述' => '凉著述',
+'湊合著' => '凑合着',
+'畿內亞' => '几内亚',
+'幾內亞比索' => '几内亚比绍',
+'凱薩琳' => '凯瑟琳',
+'嘉芙蓮' => '凯瑟琳',
+'份內' => '分内',
+'份外' => '分外',
+'分佈著' => '分布着',
+'分布著' => '分布着',
+'解像度' => '分辨率',
+'解析度' => '分辨率',
+'份量' => '分量',
+'車諾比' => '切尔诺贝利',
+'劃著' => '划着',
+'李奧納多' => '列奥那多',
+'列支敦斯登' => '列支敦士登',
+'賴比瑞亞' => '利比里亚',
+'別著' => '别着',
+'刮著' => '刮着',
+'颳著' => '刮着',
+'到帳' => '到账',
+'制著' => '制着',
+'制著書' => '制著书',
+'制著作' => '制著作',
+'制著名' => '制著名',
+'制著錄' => '制著录',
+'制著稱' => '制著称',
+'制著者' => '制著者',
+'制著述' => '制著述',
+'煞車' => '刹车',
+'刻著' => '刻着',
+'刻著書' => '刻著书',
+'刻著作' => '刻著作',
+'刻著名' => '刻著名',
+'刻著錄' => '刻著录',
+'刻著称' => '刻著称',
+'刻著稱' => '刻著称',
+'刻著者' => '刻著者',
+'刻著述' => '刻著述',
+'前波莫瑞' => '前波美拉尼亚',
+'辦著' => '办着',
+'辦著書' => '办著书',
+'辦著作' => '办著作',
+'辦著名' => '办著名',
+'辦著錄' => '办著录',
+'辦著稱' => '办著称',
+'辦著者' => '办著者',
+'辦著述' => '办著述',
+'加薩走廊' => '加沙地带',
+'迦納' => '加纳',
+'加彭' => '加蓬',
+'動著' => '动着',
+'動著書' => '动著书',
+'動著作' => '动著作',
+'動著名' => '动著名',
+'動著錄' => '动著录',
+'動著稱' => '动著称',
+'動著者' => '动著者',
+'動著述' => '动著述',
+'努力著' => '努力着',
+'努力著書' => '努力著书',
+'努力著作' => '努力著作',
+'努力著名' => '努力著名',
+'努力著錄' => '努力著录',
+'努力著称' => '努力著称',
+'努力著稱' => '努力著称',
+'努力著者' => '努力著者',
+'努力著述' => '努力著述',
+'蘿拉' => '劳拉',
+'布蘭登堡' => '勃兰登堡',
+'白朗寧' => '勃朗宁',
+'包著' => '包着',
+'北韓' => '北朝鲜',
+'十進位制' => '十进位制',
+'十進位' => '十进制',
+'公升' => '升',
+'單眼相機' => '单反相机',
+'單鏡反光機' => '单反相机',
+'波札那' => '博茨瓦纳',
+'占著' => '占着',
+'占著作' => '占著作',
+'占著名' => '占著名',
+'占著者' => '占著者',
+'喀拉蚩' => '卡拉奇',
+'卡斯楚' => '卡斯特罗',
+'卡佩雅蒂' => '卡普里亚蒂',
+'盧安達' => '卢旺达',
+'羅浮宮' => '卢浮宫',
+'羅亞爾' => '卢瓦尔',
+'印著' => '印着',
+'印著書' => '印著书',
+'印著作' => '印著作',
+'印著名' => '印著名',
+'印著錄' => '印著录',
+'印著稱' => '印著称',
+'印著者' => '印著者',
+'印著述' => '印著述',
+'瓜地馬拉' => '危地马拉',
+'厄瓜多' => '厄瓜多尔',
+'厄瓜多尔' => '厄瓜多尔',
+'厄瓜多爾' => '厄瓜多尔',
+'厄利垂亚' => '厄立特里亚',
+'厄利垂亞' => '厄立特里亚',
+'厄立特里亞' => '厄立特里亚',
+'壓著' => '压着',
+'壓著書' => '压著书',
+'壓著作' => '压著作',
+'壓著名' => '压著名',
+'壓著錄' => '压著录',
+'壓著稱' => '压著称',
+'壓著者' => '压著者',
+'壓著述' => '压著述',
+'發著' => '发着',
+'發著《' => '发著《',
+'發著作' => '发著作',
+'發著名' => '发著名',
+'發著稱' => '发著称',
+'發著者' => '发著者',
+'已開發國家' => '发达国家',
+'受著' => '受着',
+'受著書' => '受著书',
+'受著作' => '受著作',
+'受著名' => '受著名',
+'受著錄' => '受著录',
+'受著稱' => '受著称',
+'受著者' => '受著者',
+'受著述' => '受著述',
+'變著' => '变着',
+'變著書' => '变著书',
+'變著作' => '变著作',
+'變著名' => '变著名',
+'變著錄' => '变著录',
+'變著稱' => '变著称',
+'變著者' => '变著者',
+'變著述' => '变著述',
+'隻字片語' => '只字片语',
+'隻言片語' => '只言片语',
+'唯讀' => '只读',
+'叫著' => '叫着',
+'叫著書' => '叫著书',
+'叫著作' => '叫著作',
+'叫著名' => '叫著名',
+'叫著錄' => '叫著录',
+'叫著稱' => '叫著称',
+'叫著者' => '叫著者',
+'叫著述' => '叫著述',
+'桌上型電腦' => '台式电脑',
+'撞球' => '台球',
+'台帳' => '台账',
+'叱吒' => '叱咤',
+'吃著' => '吃着',
+'結他' => '吉他',
+'健力士世界紀錄' => '吉尼斯世界纪录',
+'金氏世界紀錄' => '吉尼斯世界纪录',
+'吉布地' => '吉布提',
+'吊著' => '吊着',
+'名份' => '名分',
+'向著' => '向着',
+'向著書' => '向著书',
+'向著作' => '向著作',
+'向著名' => '向著名',
+'向著錄' => '向著录',
+'向著稱' => '向著称',
+'向著者' => '向著者',
+'向著述' => '向著述',
+'含著' => '含着',
+'含著書' => '含著书',
+'含著作' => '含著作',
+'含著名' => '含著名',
+'含著錄' => '含著录',
+'含著稱' => '含著称',
+'含著者' => '含著者',
+'含著述' => '含著述',
+'聽著' => '听着',
+'聽著書' => '听著书',
+'聽著作' => '听著作',
+'聽著名' => '听著名',
+'聽著錄' => '听著录',
+'聽著稱' => '听著称',
+'聽著者' => '听著者',
+'聽著述' => '听著述',
+'吹著' => '吹着',
+'吹著書' => '吹著书',
+'吹著作' => '吹著作',
+'吹著名' => '吹著名',
+'吹著錄' => '吹著录',
+'吹著稱' => '吹著称',
+'吹著者' => '吹著者',
+'吹著述' => '吹著述',
+'呆著' => '呆着',
+'呆帳' => '呆账',
+'味著' => '味着',
+'味著書' => '味著书',
+'味著作' => '味著作',
+'味著名' => '味著名',
+'味著錄' => '味著录',
+'味著称' => '味著称',
+'味著稱' => '味著称',
+'味著者' => '味著者',
+'味著述' => '味著述',
+'咖哩' => '咖喱',
+'諮' => '咨',
+'響著' => '响着',
+'響著書' => '响著书',
+'響著作' => '响著作',
+'響著名' => '响著名',
+'響著錄' => '响著录',
+'響著稱' => '响著称',
+'響著者' => '响著者',
+'響著述' => '响著述',
+'哥斯大黎加' => '哥斯达黎加',
+'哥德式' => '哥特式',
+'哭著' => '哭着',
+'哭著書' => '哭著书',
+'哭著作' => '哭著作',
+'哭著名' => '哭著名',
+'哭著錄' => '哭著录',
+'哭著稱' => '哭著称',
+'哭著者' => '哭著者',
+'哭著述' => '哭著述',
+'唱著' => '唱着',
+'唱著書' => '唱著书',
+'唱著作' => '唱著作',
+'唱著名' => '唱著名',
+'唱著錄' => '唱著录',
+'唱著稱' => '唱著称',
+'唱著者' => '唱著者',
+'唱著述' => '唱著述',
+'啸吒' => '啸咤',
+'喝著' => '喝着',
+'喝著書' => '喝著书',
+'喝著作' => '喝著作',
+'喝著名' => '喝著名',
+'喝著錄' => '喝著录',
+'喝著稱' => '喝著称',
+'喝著者' => '喝著者',
+'喝著述' => '喝著述',
+'嗅著' => '嗅着',
+'雜訊' => '噪声',
+'嚷著' => '嚷着',
+'嚷著書' => '嚷著书',
+'嚷著作' => '嚷著作',
+'嚷著名' => '嚷著名',
+'嚷著錄' => '嚷著录',
+'嚷著稱' => '嚷著称',
+'嚷著者' => '嚷著者',
+'嚷著述' => '嚷著述',
+'回著' => '回着',
+'回著名' => '回著名',
+'因著' => '因着',
+'因著〈' => '因著〈',
+'因著《' => '因著《',
+'因著書' => '因著书',
+'因著作' => '因著作',
+'因著名' => '因著名',
+'因著录' => '因著录',
+'因著錄' => '因著录',
+'因著稱' => '因著称',
+'因著者' => '因著者',
+'因著述' => '因著述',
+'困著' => '困着',
+'困著書' => '困著书',
+'困著作' => '困著作',
+'困著名' => '困著名',
+'困著錄' => '困著录',
+'困著稱' => '困著称',
+'困著者' => '困著者',
+'困著述' => '困著述',
+'圍著' => '围着',
+'圍著書' => '围著书',
+'圍著作' => '围著作',
+'圍著名' => '围著名',
+'圍著錄' => '围著录',
+'圍著稱' => '围著称',
+'圍著者' => '围著者',
+'圍著述' => '围著述',
+'韌體' => '固件',
+'固著' => '固着',
+'西洋棋' => '国际象棋',
+'土魯斯' => '图卢兹',
+'吐瓦魯' => '图瓦卢',
+'原子筆' => '圆珠笔',
+'聖露西亞' => '圣卢西亚',
+'聖克里斯多福及尼維斯' => '圣基茨和尼维斯',
+'聖吉斯納域斯' => '圣基茨和尼维斯',
+'聖文森及格瑞那丁' => '圣文森特和格林纳丁斯',
+'聖馬利諾' => '圣马力诺',
+'蓋亞那' => '圭亚那',
+'坐著' => '坐着',
+'坐著書' => '坐著书',
+'坐著作' => '坐著作',
+'坐著名' => '坐著名',
+'坐著錄' => '坐著录',
+'坐著稱' => '坐著称',
+'坐著者' => '坐著者',
+'坐著述' => '坐著述',
+'堅貞著' => '坚贞着',
+'坦尚尼亞' => '坦桑尼亚',
+'伊波拉' => '埃博拉',
+'衣索匹亞' => '埃塞俄比亚',
+'衣索比亞' => '埃塞俄比亚',
+'艾菲爾' => '埃菲尔',
+'葉里溫' => '埃里温',
+'功能變數名稱' => '域名',
+'吉里巴斯' => '基里巴斯',
+'堂姊' => '堂姐',
+'坎培拉' => '堪培拉',
+'塑膠袋' => '塑料袋',
+'塞爾維亞與蒙特內哥羅' => '塞尔维亚和黑山',
+'塞拉利昂' => '塞拉利昂',
+'塞普勒斯' => '塞浦路斯',
+'賽普勒斯' => '塞浦路斯',
+'塞維亞' => '塞维利亚',
+'西維爾' => '塞维利亚',
+'塞席爾' => '塞舌尔',
+'音效卡' => '声卡',
+'備著' => '备着',
+'備著書' => '备著书',
+'備著作' => '备著作',
+'備著名' => '备著名',
+'備著錄' => '备著录',
+'備著稱' => '备著称',
+'備著者' => '备著者',
+'備著述' => '备著述',
+'外部連結' => '外部链接',
+'托巴哥' => '多巴哥',
+'都卜勒' => '多普勒',
+'多明尼加' => '多米尼加',
+'大姊' => '大姐',
+'天份' => '天分',
+'夾著' => '夹着',
+'夾著書' => '夹著书',
+'夾著作' => '夹著作',
+'夾著名' => '夹著名',
+'夾著錄' => '夹著录',
+'夾著稱' => '夹著称',
+'夾著者' => '夹著者',
+'夾著述' => '夹著述',
+'賓士' => '奔驰',
+'歐巴馬' => '奥巴马',
+'柯德莉·夏萍' => '奥黛丽·赫本',
+'忌廉' => '奶油',
+'荷里活' => '好莱坞',
+'姊夫' => '姐夫',
+'姊姊' => '姐姐',
+'姊弟' => '姐弟',
+'威爾斯' => '威尔士',
+'威斯伐倫' => '威斯特法伦',
+'字型大小' => '字号',
+'字型檔' => '字库',
+'欄位' => '字段',
+'位元組' => '字节',
+'存在著' => '存在着',
+'存著' => '存着',
+'存著作' => '存著作',
+'存著名' => '存著名',
+'學姊' => '学姐',
+'學著' => '学着',
+'學著書' => '学著书',
+'學著作' => '学著作',
+'學著名' => '学著名',
+'學著錄' => '学著录',
+'學著稱' => '学著称',
+'學著者' => '学著者',
+'學著述' => '学著述',
+'太空飛行員' => '宇航员',
+'太空衣' => '宇航服',
+'守著' => '守着',
+'守著書' => '守著书',
+'守著作' => '守著作',
+'守著名' => '守著名',
+'守著錄' => '守著录',
+'守著称' => '守著称',
+'守著稱' => '守著称',
+'守著者' => '守著者',
+'守著述' => '守著述',
+'安哈特' => '安哈尔特',
+'安地卡及巴布達' => '安提瓜和巴布达',
+'巨集' => '宏',
+'定著' => '定着',
+'定著書' => '定著书',
+'定著作' => '定著作',
+'定著名' => '定著名',
+'定著錄' => '定著录',
+'定著称' => '定著称',
+'定著稱' => '定著称',
+'定著者' => '定著者',
+'定著述' => '定著述',
+'波里活' => '宝莱坞',
+'寬頻' => '宽带',
+'密执安' => '密歇根',
+'密西根' => '密歇根',
+'對著' => '对着',
+'對著書' => '对著书',
+'對著作' => '对著作',
+'對著名' => '对著名',
+'對著錄' => '对著录',
+'對著稱' => '对著称',
+'對著者' => '对著者',
+'對著述' => '对著述',
+'對帳' => '对账',
+'尋著' => '寻着',
+'尋著書' => '寻著书',
+'尋著作' => '寻著作',
+'尋著名' => '寻著名',
+'尋著錄' => '寻著录',
+'尋著稱' => '寻著称',
+'尋著者' => '寻著者',
+'尋著述' => '寻著述',
+'飛彈' => '导弹',
+'祖雲達斯' => '尤文图斯',
+'奈及利亞' => '尼日利亚',
+'尼日爾' => '尼日尔',
+'區域網' => '局域网',
+'區域網路' => '局域网络',
+'螢幕' => '屏幕',
+'展著' => '展着',
+'展著書' => '展著书',
+'展著作' => '展著作',
+'展著名' => '展著名',
+'展著錄' => '展著录',
+'展著稱' => '展著称',
+'展著者' => '展著者',
+'展著述' => '展著述',
+'瓦倫西亞' => '巴伦西亚',
+'華倫西亞' => '巴伦西亚',
+'巴塞隆拿' => '巴塞罗那',
+'巴塞隆納' => '巴塞罗那',
+'巴斯拉' => '巴士拉',
+'帕邁拉環礁' => '巴尔米拉环礁',
+'巴貝多' => '巴巴多斯',
+'巴布亞紐幾內亞' => '巴布亚新几内亚',
+'布殊' => '布什',
+'布吉納法索' => '布基纳法索',
+'布隆泉' => '布隆方丹',
+'蒲隆地' => '布隆迪',
+'希冀著' => '希冀着',
+'席哈克' => '希拉克',
+'希拉莉' => '希拉里',
+'希拉蕊' => '希拉里',
+'希特拉' => '希特勒',
+'帛琉' => '帕劳',
+'派屈克' => '帕特里克',
+'頻寬' => '带宽',
+'帶著' => '带着',
+'帶著書' => '带著书',
+'帶著作' => '带著作',
+'帶著名' => '带著名',
+'帶著錄' => '带著录',
+'帶著稱' => '带著称',
+'帶著者' => '带著者',
+'帶著述' => '带著述',
+'幫著' => '帮着',
+'幫著書' => '帮著书',
+'幫著作' => '帮著作',
+'幫著名' => '帮著名',
+'幫著錄' => '帮著录',
+'幫著稱' => '帮著称',
+'幫著者' => '帮著者',
+'幫著述' => '帮著述',
+'乾姊' => '干姐',
+'幹著' => '干着',
+'幹著名' => '幹著名',
+'幹著稱' => '幹著称',
+'庇護著' => '庇护着',
+'庫德人' => '库尔德人',
+'庫德族' => '库尔德族',
+'應用程式' => '应用程序',
+'應著' => '应着',
+'應著書' => '应著书',
+'應著作' => '应著作',
+'應著名' => '应著名',
+'應著錄' => '应著录',
+'應著稱' => '应著称',
+'應著者' => '应著者',
+'應著述' => '应著述',
+'建帳' => '建账',
+'克卜勒' => '开普勒',
+'開著' => '开着',
+'開著書' => '开著书',
+'開著作' => '开著作',
+'開著名' => '开著名',
+'開著錄' => '开著录',
+'開著稱' => '开著称',
+'開著者' => '开著者',
+'開著述' => '开著述',
+'開帳' => '开账',
+'非同步' => '异步',
+'若且唯若' => '当且仅当',
+'當著' => '当着',
+'當著書' => '当著书',
+'當著作' => '当著作',
+'當著名' => '当著名',
+'當著錄' => '当著录',
+'當著稱' => '当著称',
+'當著者' => '当著者',
+'當著述' => '当著述',
+'錄影帶' => '录像带',
+'形上學' => '形而上学',
+'澈底' => '彻底',
+'逕入' => '径入',
+'逕到' => '径到',
+'逕取' => '径取',
+'逕啟' => '径启',
+'逕寄' => '径寄',
+'逕庭' => '径庭',
+'逕往' => '径往',
+'逕自' => '径自',
+'逕行' => '径行',
+'逕迎' => '径迎',
+'待著' => '待着',
+'待著書' => '待著书',
+'待著作' => '待著作',
+'待著名' => '待著名',
+'待著錄' => '待著录',
+'待著稱' => '待著称',
+'待著者' => '待著者',
+'待著述' => '待著述',
+'得著' => '得着',
+'得著書' => '得著书',
+'得著作' => '得著作',
+'得著名' => '得著名',
+'得著錄' => '得著录',
+'得著稱' => '得著称',
+'得著者' => '得著者',
+'得著述' => '得著述',
+'御姊' => '御姐',
+'迴圈' => '循环',
+'循著' => '循着',
+'循著書' => '循著书',
+'循著作' => '循著作',
+'循著名' => '循著名',
+'循著錄' => '循著录',
+'循著稱' => '循著称',
+'循著者' => '循著者',
+'循著述' => '循著述',
+'德勒斯登' => '德累斯顿',
+'德希達' => '德里达',
+'心著' => '心着',
+'心著書' => '心著书',
+'心著作' => '心著作',
+'心著名' => '心著名',
+'心著錄' => '心著录',
+'心著称' => '心著称',
+'心著稱' => '心著称',
+'心著者' => '心著者',
+'心著述' => '心著述',
+'忍著' => '忍着',
+'忍著書' => '忍著书',
+'忍著作' => '忍著作',
+'忍著名' => '忍著名',
+'忍著錄' => '忍著录',
+'忍著稱' => '忍著称',
+'忍著者' => '忍著者',
+'忍著述' => '忍著述',
+'忙著' => '忙着',
+'忙著書' => '忙著书',
+'忙著作' => '忙著作',
+'忙著名' => '忙著名',
+'忙著錄' => '忙著录',
+'忙著稱' => '忙著称',
+'忙著者' => '忙著者',
+'忙著述' => '忙著述',
+'忠貞著' => '忠贞着',
+'懷著' => '怀着',
+'懷著書' => '怀著书',
+'懷著作' => '怀著作',
+'懷著名' => '怀著名',
+'懷著錄' => '怀著录',
+'懷著稱' => '怀著称',
+'懷著者' => '怀著者',
+'懷著述' => '怀著述',
+'急著' => '急着',
+'急著書' => '急著书',
+'急著作' => '急著作',
+'急著名' => '急著名',
+'急著錄' => '急著录',
+'急著稱' => '急著称',
+'急著者' => '急著者',
+'急著述' => '急著述',
+'匯流排' => '总线',
+'總帳' => '总账',
+'戀著' => '恋着',
+'戀著書' => '恋著书',
+'戀著作' => '恋著作',
+'戀著名' => '恋著名',
+'戀著錄' => '恋著录',
+'戀著稱' => '恋著称',
+'戀著者' => '恋著者',
+'戀著述' => '恋著述',
+'恰如其份' => '恰如其分',
+'悠著' => '悠着',
+'悠著書' => '悠著书',
+'悠著作' => '悠著作',
+'悠著名' => '悠著名',
+'悠著錄' => '悠著录',
+'悠著稱' => '悠著称',
+'悠著者' => '悠著者',
+'悠著述' => '悠著述',
+'慣著' => '惯着',
+'慣著書' => '惯著书',
+'慣著作' => '惯著作',
+'慣著名' => '惯著名',
+'慣著錄' => '惯著录',
+'慣著稱' => '惯著称',
+'慣著者' => '惯著者',
+'慣著述' => '惯著述',
+'想著' => '想着',
+'想著書' => '想著书',
+'想著作' => '想著作',
+'想著名' => '想著名',
+'想著錄' => '想著录',
+'想著称' => '想著称',
+'想著稱' => '想著称',
+'想著者' => '想著者',
+'想著述' => '想著述',
+'義大利' => '意大利',
+'戈巴契夫' => '戈尔巴乔夫',
+'成份' => '成分',
+'戰著' => '战着',
+'戰著書' => '战著书',
+'戰著作' => '战著作',
+'戰著名' => '战著名',
+'戰著錄' => '战著录',
+'戰著稱' => '战著称',
+'戰著者' => '战著者',
+'戰著述' => '战著述',
+'坎城' => '戛纳',
+'黛安娜' => '戴安娜',
+'戴著' => '戴着',
+'戴著書' => '戴著书',
+'戴著作' => '戴著作',
+'戴著名' => '戴著名',
+'戴著錄' => '戴著录',
+'戴著稱' => '戴著称',
+'戴著者' => '戴著者',
+'戴著述' => '戴著述',
+'索羅門群島' => '所罗门群岛',
+'紮著' => '扎着',
+'紮著書' => '扎著书',
+'紮著作' => '扎著作',
+'紮著名' => '扎著名',
+'紮著錄' => '扎著录',
+'紮著稱' => '扎著称',
+'紮著者' => '扎著者',
+'紮著述' => '扎著述',
+'列印' => '打印',
+'印表機' => '打印机',
+'打著' => '打着',
+'打著書' => '打著书',
+'打著作' => '打著作',
+'打著名' => '打著名',
+'打著錄' => '打著录',
+'打著稱' => '打著称',
+'打著者' => '打著者',
+'打著述' => '打著述',
+'扛著' => '扛着',
+'扛著書' => '扛著书',
+'扛著作' => '扛著作',
+'扛著名' => '扛著名',
+'扛著錄' => '扛著录',
+'扛著稱' => '扛著称',
+'扛著者' => '扛著者',
+'扛著述' => '扛著述',
+'掃瞄' => '扫描',
+'掃瞄器' => '扫描仪',
+'抓著' => '抓着',
+'抓著作' => '抓著作',
+'抓著名' => '抓著名',
+'抓著錄' => '抓著录',
+'抓著稱' => '抓著称',
+'抓著者' => '抓著者',
+'抓著述' => '抓著述',
+'投機份子' => '投机分子',
+'護著' => '护着',
+'護著書' => '护著书',
+'護著作' => '护著作',
+'護著名' => '护著名',
+'護著錄' => '护著录',
+'護著稱' => '护著称',
+'護著者' => '护著者',
+'護著述' => '护著述',
+'報帳' => '报账',
+'披著' => '披着',
+'披著書' => '披著书',
+'披著作' => '披著作',
+'披著名' => '披著名',
+'披著錄' => '披著录',
+'披著稱' => '披著称',
+'披著者' => '披著者',
+'披著述' => '披著述',
+'抬著' => '抬着',
+'擡著' => '抬着',
+'抬著作' => '抬著作',
+'抬著名' => '抬著名',
+'抬著錄' => '抬著录',
+'抬著稱' => '抬著称',
+'抬著者' => '抬著者',
+'抬著述' => '抬著述',
+'抱著' => '抱着',
+'抱著作' => '抱著作',
+'抱著名' => '抱著名',
+'抱著錄' => '抱著录',
+'抱著稱' => '抱著称',
+'抱著者' => '抱著者',
+'抱著述' => '抱著述',
+'擔著' => '担着',
+'拉著' => '拉着',
+'拉著書' => '拉著书',
+'拉著作' => '拉著作',
+'拉著名' => '拉著名',
+'拉著錄' => '拉著录',
+'拉著稱' => '拉著称',
+'拉著者' => '拉著者',
+'拉著述' => '拉著述',
+'拎著' => '拎着',
+'拎著作' => '拎著作',
+'拎著名' => '拎著名',
+'拎著錄' => '拎著录',
+'拎著稱' => '拎著称',
+'拎著者' => '拎著者',
+'拎著述' => '拎著述',
+'拖著' => '拖着',
+'拖著作' => '拖著作',
+'拖著名' => '拖著名',
+'拖著錄' => '拖著录',
+'拖著稱' => '拖著称',
+'拖著者' => '拖著者',
+'拖著述' => '拖著述',
+'拼著' => '拼着',
+'拼著作' => '拼著作',
+'拼著名' => '拼著名',
+'拼著錄' => '拼著录',
+'拼著稱' => '拼著称',
+'拼著者' => '拼著者',
+'拼著述' => '拼著述',
+'拿著' => '拿着',
+'拿著作' => '拿著作',
+'拿著名' => '拿著名',
+'拿著錄' => '拿著录',
+'拿著稱' => '拿著称',
+'拿著者' => '拿著者',
+'拿著述' => '拿著述',
+'持著' => '持着',
+'持著作' => '持著作',
+'持著名' => '持著名',
+'持著錄' => '持著录',
+'持著稱' => '持著称',
+'持著者' => '持著者',
+'持著述' => '持著述',
+'掛著' => '挂着',
+'挑著' => '挑着',
+'挑著作' => '挑著作',
+'挑著名' => '挑著名',
+'挑著錄' => '挑著录',
+'挑著稱' => '挑著称',
+'挑著者' => '挑著者',
+'挑著述' => '挑著述',
+'擋著' => '挡着',
+'擋著作' => '挡著作',
+'擋著名' => '挡著名',
+'擋著錄' => '挡著录',
+'擋著稱' => '挡著称',
+'擋著者' => '挡著者',
+'擋著述' => '挡著述',
+'掙著' => '挣着',
+'掙著書' => '挣著书',
+'掙著作' => '挣著作',
+'掙著名' => '挣著名',
+'掙著錄' => '挣著录',
+'掙著稱' => '挣著称',
+'掙著者' => '挣著者',
+'掙著述' => '挣著述',
+'揮著' => '挥着',
+'揮著作' => '挥著作',
+'揮著名' => '挥著名',
+'揮著錄' => '挥著录',
+'揮著稱' => '挥著称',
+'揮著者' => '挥著者',
+'揮著述' => '挥著述',
+'挨著' => '挨着',
+'挨著作' => '挨著作',
+'挨著名' => '挨著名',
+'挨著錄' => '挨著录',
+'挨著稱' => '挨著称',
+'挨著者' => '挨著者',
+'挨著述' => '挨著述',
+'捆著' => '捆着',
+'捆著作' => '捆著作',
+'捆著名' => '捆著名',
+'捆著錄' => '捆著录',
+'捆著稱' => '捆著称',
+'捆著者' => '捆著者',
+'捆著述' => '捆著述',
+'據著' => '据着',
+'據著書' => '据著书',
+'據著作' => '据著作',
+'據著名' => '据著名',
+'據著錄' => '据著录',
+'據著稱' => '据著称',
+'據著者' => '据著者',
+'據著述' => '据著述',
+'積架' => '捷豹',
+'掖著' => '掖着',
+'掖著作' => '掖著作',
+'掖著名' => '掖著名',
+'掖著錄' => '掖著录',
+'掖著稱' => '掖著称',
+'掖著者' => '掖著者',
+'掖著述' => '掖著述',
+'接著' => '接着',
+'接著作' => '接著作',
+'接著名' => '接著名',
+'接著錄' => '接著录',
+'接著稱' => '接著称',
+'接著者' => '接著者',
+'接著述' => '接著述',
+'控制項' => '控件',
+'揉著' => '揉着',
+'揉著書' => '揉著书',
+'揉著作' => '揉著作',
+'揉著名' => '揉著名',
+'揉著錄' => '揉著录',
+'揉著稱' => '揉著称',
+'揉著者' => '揉著者',
+'揉著述' => '揉著述',
+'提著' => '提着',
+'提著作' => '提著作',
+'提著名' => '提著名',
+'提著錄' => '提著录',
+'提著稱' => '提著称',
+'提著者' => '提著者',
+'提著述' => '提著述',
+'外掛程式' => '插件',
+'摟著' => '搂着',
+'摟著作' => '搂著作',
+'摟著名' => '搂著名',
+'摟著錄' => '搂著录',
+'摟著稱' => '搂著称',
+'摟著者' => '搂著者',
+'摟著述' => '搂著述',
+'搜尋引擎' => '搜索引擎',
+'擺著' => '摆着',
+'擺著作' => '摆著作',
+'擺著名' => '摆著名',
+'擺著錄' => '摆著录',
+'擺著稱' => '摆著称',
+'擺著者' => '摆著者',
+'擺著述' => '摆著述',
+'電單車' => '摩托车',
+'戴卓爾' => '撒切尔',
+'柴契爾' => '撒切尔',
+'撼著' => '撼着',
+'撼著書' => '撼著书',
+'撼著作' => '撼著作',
+'撼著名' => '撼著名',
+'撼著錄' => '撼著录',
+'撼著稱' => '撼著称',
+'撼著者' => '撼著者',
+'撼著述' => '撼著述',
+'作業系統' => '操作系统',
+'收帳' => '收账',
+'放著' => '放着',
+'放著作' => '放著作',
+'放著名' => '放著名',
+'放著称' => '放著称',
+'放著稱' => '放著称',
+'放帳' => '放账',
+'敞著' => '敞着',
+'敞著作' => '敞著作',
+'敞著名' => '敞著名',
+'敞著錄' => '敞著录',
+'敞著稱' => '敞著称',
+'敞著者' => '敞著者',
+'敞著述' => '敞著述',
+'散佈著' => '散布着',
+'散布著' => '散布着',
+'數位訊號' => '数字信号',
+'數碼訊號' => '数字信号',
+'數位化' => '数字化',
+'數位技術' => '数字技术',
+'數位電視' => '数字电视',
+'數碼電視' => '数字电视',
+'資料庫' => '数据库',
+'數著' => '数着',
+'數位照相機' => '数码照相机',
+'數位相機' => '数码相机',
+'數著作' => '数著作',
+'數著名' => '数著名',
+'數著錄' => '数著录',
+'數著稱' => '数著称',
+'數著者' => '数著者',
+'數著述' => '数著述',
+'汶萊' => '文莱',
+'鬥著' => '斗着',
+'鬥著書' => '斗著书',
+'鬥著作' => '斗著作',
+'鬥著名' => '斗著名',
+'鬥著錄' => '斗著录',
+'鬥著稱' => '斗著称',
+'鬥著者' => '斗著者',
+'鬥著述' => '斗著述',
+'斥著' => '斥着',
+'斥著書' => '斥著书',
+'斥著作' => '斥著作',
+'斥著名' => '斥著名',
+'斥著錄' => '斥著录',
+'斥著稱' => '斥著称',
+'斥著者' => '斥著者',
+'斥著述' => '斥著述',
+'史丹福大學' => '斯坦福大学',
+'史達林' => '斯大林',
+'史瓦濟蘭' => '斯威士兰',
+'斯洛維尼亞' => '斯洛文尼亚',
+'史特勞斯' => '斯特劳斯',
+'紐幾內亞' => '新几内亚',
+'紐澤西' => '新泽西',
+'紐西蘭' => '新西兰',
+'舊帳' => '旧账',
+'三藩市' => '旧金山',
+'昂山素姬' => '昂山素季',
+'翁山蘇姬' => '昂山素季',
+'昂著' => '昂着',
+'昂著書' => '昂著书',
+'昂著作' => '昂著作',
+'昂著名' => '昂著名',
+'昂著錄' => '昂著录',
+'昂著稱' => '昂著称',
+'昂著者' => '昂著者',
+'昂著述' => '昂著述',
+'明白帳' => '明白账',
+'映著' => '映着',
+'映著書' => '映著书',
+'映著作' => '映著作',
+'映著名' => '映著名',
+'映著錄' => '映著录',
+'映著稱' => '映著称',
+'映著者' => '映著者',
+'映著述' => '映著述',
+'顯示卡' => '显卡',
+'显著' => '显著',
+'顯著' => '显著',
+'晃著' => '晃着',
+'晃著作' => '晃著作',
+'晃著名' => '晃著名',
+'晃著錄' => '晃著录',
+'晃著稱' => '晃著称',
+'晃著者' => '晃著者',
+'晃著述' => '晃著述',
+'普利茲' => '普利策',
+'蒲美蓬' => '普密蓬',
+'蒲朗克' => '普朗克',
+'電晶體' => '晶体管',
+'智慧型' => '智能',
+'智慧卡' => '智能卡',
+'智慧手機' => '智能手机',
+'暗著' => '暗着',
+'暗著書' => '暗著书',
+'暗著作' => '暗著作',
+'暗著名' => '暗著名',
+'暗著錄' => '暗著录',
+'暗著稱' => '暗著称',
+'暗著者' => '暗著者',
+'暗著述' => '暗著述',
+'有著' => '有着',
+'有著書' => '有著书',
+'有著作' => '有著作',
+'有著名' => '有著名',
+'有著錄' => '有著录',
+'有著稱' => '有著称',
+'有著者' => '有著者',
+'有著述' => '有著述',
+'伺服器' => '服务器',
+'望著' => '望着',
+'望著作' => '望著作',
+'望著名' => '望著名',
+'望著錄' => '望著录',
+'望著稱' => '望著称',
+'望著者' => '望著者',
+'望著述' => '望著述',
+'朝著' => '朝着',
+'朝著作' => '朝著作',
+'朝著名' => '朝著名',
+'朝著錄' => '朝著录',
+'朝著稱' => '朝著称',
+'朝著者' => '朝著者',
+'朝著述' => '朝著述',
+'賓·拉登' => '本·拉登',
+'本份' => '本分',
+'賓拉登' => '本拉登',
+'本本份份' => '本本分分',
+'班傑明' => '本杰明',
+'本著' => '本着',
+'本著書' => '本著书',
+'本著作' => '本著作',
+'本著名' => '本著名',
+'本著錄' => '本著录',
+'本著稱' => '本著称',
+'本著者' => '本著者',
+'本著述' => '本著述',
+'本帳' => '本账',
+'機械人' => '机器人',
+'工具機' => '机床',
+'殺著' => '杀着',
+'殺著書' => '杀著书',
+'殺著作' => '杀著作',
+'殺著名' => '杀著名',
+'殺著錄' => '杀著录',
+'殺著稱' => '杀著称',
+'殺著者' => '杀著者',
+'殺著述' => '杀著述',
+'雜著' => '杂着',
+'雜著書' => '杂著书',
+'雜著作' => '杂著作',
+'雜著名' => '杂著名',
+'雜著錄' => '杂著录',
+'雜著稱' => '杂著称',
+'雜著者' => '杂著者',
+'雜著述' => '杂著述',
+'杜塞道夫' => '杜塞尔多夫',
+'來著' => '来着',
+'來著書' => '来著书',
+'來著作' => '来著作',
+'來著名' => '来著名',
+'來著錄' => '来著录',
+'來著稱' => '来著称',
+'來著者' => '来著者',
+'來著述' => '来著述',
+'板著臉' => '板着脸',
+'枕著' => '枕着',
+'枕著作' => '枕著作',
+'枕著名' => '枕著名',
+'枕著錄' => '枕著录',
+'枕著稱' => '枕著称',
+'枕著者' => '枕著者',
+'枕著述' => '枕著述',
+'槍枝' => '枪支',
+'柏林圍牆' => '柏林墙',
+'查帳' => '查账',
+'查維茲' => '查韦斯',
+'標志著' => '标志着',
+'標誌著' => '标志着',
+'格瑞那達' => '格林纳达',
+'格林美獎' => '格莱美奖',
+'葛萊美獎' => '格莱美奖',
+'森巴舞' => '桑巴舞',
+'梅赫西迪' => '梅赛德斯',
+'夢著' => '梦着',
+'夢著書' => '梦著书',
+'夢著作' => '梦著作',
+'夢著名' => '梦著名',
+'夢著錄' => '梦著录',
+'夢著稱' => '梦著称',
+'夢著者' => '梦著者',
+'夢著述' => '梦著述',
+'梳著' => '梳着',
+'梳著作' => '梳著作',
+'梳著名' => '梳著名',
+'梳著錄' => '梳著录',
+'梳著稱' => '梳著称',
+'梳著者' => '梳著者',
+'梳著述' => '梳著述',
+'梵谷' => '梵高',
+'機率' => '概率',
+'欠帳' => '欠账',
+'死帳' => '死账',
+'庇里牛斯' => '比利牛斯',
+'畢卡索' => '毕加索',
+'茅利塔尼亞' => '毛里塔尼亚',
+'模里西斯' => '毛里求斯',
+'毛里裘斯' => '毛里求斯',
+'公厘' => '毫米',
+'公釐' => '毫米',
+'氧份' => '氧分',
+'胺基酸' => '氨基酸',
+'水份' => '水分',
+'水氣' => '水汽',
+'求著' => '求着',
+'求著書' => '求著书',
+'求著作' => '求著作',
+'求著名' => '求著名',
+'求著錄' => '求著录',
+'求著稱' => '求著称',
+'求著者' => '求著者',
+'求著述' => '求著述',
+'漢諾瓦' => '汉诺威',
+'沈著' => '沉着',
+'沉著' => '沉着',
+'沉著書' => '沉著书',
+'沉著作' => '沉著作',
+'沉著名' => '沉著名',
+'沉著錄' => '沉著录',
+'沉著稱' => '沉著称',
+'沉著者' => '沉著者',
+'沉著述' => '沉著述',
+'沙地阿拉伯' => '沙特阿拉伯',
+'沙烏地阿拉伯' => '沙特阿拉伯',
+'沿著' => '沿着',
+'沿著書' => '沿著书',
+'沿著作' => '沿著作',
+'沿著名' => '沿著名',
+'沿著錄' => '沿著录',
+'沿著稱' => '沿著称',
+'沿著者' => '沿著者',
+'沿著述' => '沿著述',
+'玻里尼西亞' => '波利尼西亚',
+'波士尼亞' => '波斯尼亚',
+'波士尼亞赫塞哥維納' => '波斯尼亚和黑塞哥维那',
+'鐵達尼號' => '泰坦尼克号',
+'幫浦' => '泵',
+'辛巴威' => '津巴布韦',
+'宏都拉斯' => '洪都拉斯',
+'活著' => '活着',
+'活著書' => '活著书',
+'活著作' => '活著作',
+'活著名' => '活著名',
+'活著錄' => '活著录',
+'活著稱' => '活著称',
+'活著者' => '活著者',
+'活著述' => '活著述',
+'流水帳' => '流水账',
+'流著' => '流着',
+'流著書' => '流著书',
+'流著作' => '流著作',
+'流著名' => '流著名',
+'流著錄' => '流著录',
+'流著稱' => '流著称',
+'流著者' => '流著者',
+'流著述' => '流著述',
+'流露著' => '流露着',
+'浮著' => '浮着',
+'蘭卡威' => '浮罗交怡',
+'浮著書' => '浮著书',
+'浮著作' => '浮著作',
+'浮著名' => '浮著名',
+'浮著錄' => '浮著录',
+'浮著稱' => '浮著称',
+'浮著者' => '浮著者',
+'浮著述' => '浮著述',
+'海洛英' => '海洛因',
+'海浬' => '海里',
+'塗著' => '涂着',
+'潤著' => '润着',
+'潤著書' => '润著书',
+'潤著作' => '润著作',
+'潤著名' => '润著名',
+'潤著錄' => '润著录',
+'潤著稱' => '润著称',
+'潤著者' => '润著者',
+'潤著述' => '润著述',
+'混帳' => '混账',
+'清澈' => '清澈',
+'清帳' => '清账',
+'渴著' => '渴着',
+'渴著書' => '渴著书',
+'渴著作' => '渴著作',
+'渴著名' => '渴著名',
+'渴著錄' => '渴著录',
+'渴著稱' => '渴著称',
+'渴著者' => '渴著者',
+'渴著述' => '渴著述',
+'原始碼' => '源代码',
+'溢著' => '溢着',
+'溢著書' => '溢著书',
+'溢著作' => '溢著作',
+'溢著名' => '溢著名',
+'溢著錄' => '溢著录',
+'溢著稱' => '溢著称',
+'溢著者' => '溢著者',
+'溢著述' => '溢著述',
+'滑鼠蛇' => '滑鼠蛇',
+'滿16進位' => '满16进位',
+'滿二進位' => '满二进位',
+'滿八進位' => '满八进位',
+'滿六進位' => '满六进位',
+'滿十六進位' => '满十六进位',
+'滿十進位' => '满十进位',
+'滿著' => '满着',
+'滿著作' => '满著作',
+'滿著名' => '满著名',
+'滿著者' => '满著者',
+'演著' => '演着',
+'演著書' => '演著书',
+'演著作' => '演著作',
+'演著名' => '演著名',
+'演著錄' => '演著录',
+'演著稱' => '演著称',
+'演著者' => '演著者',
+'演著述' => '演著述',
+'漫著' => '漫着',
+'漫著書' => '漫著书',
+'漫著作' => '漫著作',
+'漫著名' => '漫著名',
+'漫著錄' => '漫著录',
+'漫著稱' => '漫著称',
+'漫著者' => '漫著者',
+'漫著述' => '漫著述',
+'雷射' => '激光',
+'點著' => '点着',
+'點著作' => '点著作',
+'點著名' => '点著名',
+'點著錄' => '点著录',
+'點著稱' => '点著称',
+'點著者' => '点著者',
+'點著述' => '点著述',
+'爛帳' => '烂账',
+'燒著' => '烧着',
+'燒著作' => '烧著作',
+'燒著名' => '烧著名',
+'燒著錄' => '烧著录',
+'燒著稱' => '烧著称',
+'燒著者' => '烧著者',
+'燒著述' => '烧著述',
+'照著' => '照着',
+'照著書' => '照著书',
+'照著作' => '照著作',
+'照著名' => '照著名',
+'照著錄' => '照著录',
+'照著稱' => '照著称',
+'照著者' => '照著者',
+'照著述' => '照著述',
+'愛護著' => '爱护着',
+'愛著' => '爱着',
+'愛著書' => '爱著书',
+'愛著作' => '爱著作',
+'愛著名' => '爱著名',
+'愛著錄' => '爱著录',
+'愛著稱' => '爱著称',
+'愛著者' => '爱著者',
+'愛著述' => '爱著述',
+'牽著' => '牵着',
+'牽著書' => '牵著书',
+'牽著作' => '牵著作',
+'牽著名' => '牵著名',
+'牽著錄' => '牵著录',
+'牽著稱' => '牵著称',
+'牽著者' => '牵著者',
+'牽著述' => '牵著述',
+'千里達' => '特立尼达',
+'千里達及托巴哥' => '特立尼达和多巴哥',
+'千里達托貝哥' => '特立尼达和托巴哥',
+'狗隻' => '犬只',
+'猶豫著' => '犹豫着',
+'獨立國家國協' => '独立国家联合体',
+'獨立國協' => '独联体',
+'猜著' => '猜着',
+'猜著書' => '猜着书',
+'猜著作' => '猜著作',
+'猜著名' => '猜著名',
+'猜著錄' => '猜著录',
+'猜著稱' => '猜著称',
+'猜著者' => '猜著者',
+'猜著述' => '猜著述',
+'玩著' => '玩着',
+'班固著' => '班固著',
+'溫納圖' => '瓦努阿图',
+'萬那杜' => '瓦努阿图',
+'華勒沙' => '瓦文萨',
+'華里沙' => '瓦文萨',
+'甜著' => '甜着',
+'甜著書' => '甜著书',
+'甜著作' => '甜著作',
+'甜著名' => '甜著名',
+'甜著錄' => '甜著录',
+'甜著稱' => '甜著称',
+'甜著者' => '甜著者',
+'甜著述' => '甜著述',
+'用著' => '用着',
+'用著書' => '用著书',
+'用著作' => '用著作',
+'用著名' => '用著名',
+'用著錄' => '用著录',
+'用著稱' => '用著称',
+'用著者' => '用著者',
+'用著述' => '用著述',
+'A型肝炎' => '甲型肝炎',
+'A肝' => '甲肝',
+'電視劇集' => '电视剧',
+'電視影集' => '电视系列剧',
+'畫著' => '画着',
+'畫著作' => '画著作',
+'畫著名' => '画著名',
+'畫著稱' => '画著称',
+'畫著者' => '画著者',
+'介面' => '界面',
+'留著' => '留着',
+'留著書' => '留着书',
+'留著作' => '留著作',
+'留著名' => '留著名',
+'留著錄' => '留著录',
+'留著稱' => '留著称',
+'留著者' => '留著者',
+'留著述' => '留著述',
+'疑著' => '疑着',
+'疑著書' => '疑著书',
+'疑著作' => '疑著作',
+'疑著名' => '疑著名',
+'疑著錄' => '疑著录',
+'疑著稱' => '疑著称',
+'疑著者' => '疑著者',
+'疑著述' => '疑著述',
+'狂牛症' => '疯牛病',
+'徵狀' => '症状',
+'百慕達' => '百慕大',
+'皮雅斯·布士南' => '皮尔斯·布鲁斯南',
+'皺著' => '皱着',
+'皺著書' => '皱著书',
+'皺著作' => '皱著作',
+'皺著名' => '皱著名',
+'皺著錄' => '皱著录',
+'皺著稱' => '皱著称',
+'皺著者' => '皱著者',
+'皺著述' => '皱著述',
+'鹽份' => '盐分',
+'蓋著' => '盖着',
+'蓋著作' => '盖著作',
+'蓋著名' => '盖著名',
+'蓋著稱' => '盖著称',
+'盛著' => '盛着',
+'盛著書' => '盛著书',
+'盛著作' => '盛著作',
+'盛著名' => '盛著名',
+'盛著錄' => '盛著录',
+'盛著稱' => '盛著称',
+'盛著者' => '盛著者',
+'盛著述' => '盛著述',
+'盯著' => '盯着',
+'盯著書' => '盯着书',
+'盯著作' => '盯著作',
+'盯著名' => '盯著名',
+'盯著錄' => '盯著录',
+'盯著稱' => '盯著称',
+'盯著者' => '盯著者',
+'盯著述' => '盯著述',
+'看著' => '看着',
+'看著書' => '看着书',
+'看著作' => '看著作',
+'看著名' => '看著名',
+'看著錄' => '看著录',
+'看著稱' => '看著称',
+'看著者' => '看著者',
+'看著述' => '看著述',
+'著業' => '着业',
+'著絲' => '着丝',
+'著麼' => '着么',
+'著人' => '着人',
+'著什麼' => '着什么',
+'著甚麽' => '着什么',
+'著他' => '着他',
+'著令' => '着令',
+'著位' => '着位',
+'著體' => '着体',
+'著你' => '着你',
+'著便' => '着便',
+'著涼' => '着凉',
+'著力' => '着力',
+'著勁' => '着劲',
+'著號' => '着号',
+'著呢' => '着呢',
+'著哩' => '着哩',
+'著地' => '着地',
+'著墨' => '着墨',
+'著聲' => '着声',
+'著處' => '着处',
+'著她' => '着她',
+'著妳' => '着妳',
+'著姓' => '着姓',
+'著它' => '着它',
+'著定' => '着定',
+'著實' => '着实',
+'著己' => '着己',
+'著帳' => '着帐',
+'著床' => '着床',
+'著庸' => '着庸',
+'著式' => '着式',
+'著錄' => '着录',
+'著心' => '着心',
+'著志' => '着志',
+'著忙' => '着忙',
+'著急' => '着急',
+'著惱' => '着恼',
+'著驚' => '着惊',
+'著想' => '着想',
+'著意' => '着意',
+'著慌' => '着慌',
+'著我' => '着我',
+'著手' => '着手',
+'著抹' => '着抹',
+'著摸' => '着摸',
+'著撰' => '着撰',
+'著數' => '着数',
+'著明' => '着明',
+'著末' => '着末',
+'著極' => '着极',
+'著格' => '着格',
+'著棋' => '着棋',
+'著氣' => '着气',
+'著法' => '着法',
+'著淺' => '着浅',
+'著火' => '着火',
+'著然' => '着然',
+'著甚' => '着甚',
+'著生' => '着生',
+'著疑' => '着疑',
+'著白' => '着白',
+'著相' => '着相',
+'著眼' => '着眼',
+'著著' => '着着',
+'著祂' => '着祂',
+'著積' => '着积',
+'著稿' => '着稿',
+'著筆' => '着笔',
+'著籍' => '着籍',
+'著緊' => '着紧',
+'著緑' => '着緑',
+'著絆' => '着绊',
+'著績' => '着绩',
+'著緋' => '着绯',
+'著綠' => '着绿',
+'著肉' => '着肉',
+'著腳' => '着脚',
+'著艦' => '着舰',
+'著色' => '着色',
+'著節' => '着节',
+'著花' => '着花',
+'著莫' => '着莫',
+'著落' => '着落',
+'著槁' => '着藁',
+'著衣' => '着衣',
+'著裝' => '着装',
+'著要' => '着要',
+'著警' => '着警',
+'著趣' => '着趣',
+'著邊' => '着边',
+'著迷' => '着迷',
+'著跡' => '着迹',
+'著重' => '着重',
+'著録' => '着録',
+'著聞' => '着闻',
+'著陸' => '着陆',
+'著雝' => '着雝',
+'著鞭' => '着鞭',
+'著題' => '着题',
+'著魔' => '着魔',
+'睡著' => '睡着',
+'睡著書' => '睡著书',
+'睡著作' => '睡著作',
+'睡著名' => '睡著名',
+'睡著錄' => '睡著录',
+'睡著稱' => '睡著称',
+'睡著者' => '睡著者',
+'睡著述' => '睡著述',
+'瞞著' => '瞒着',
+'瞞著書' => '瞒著书',
+'瞞著作' => '瞒著作',
+'瞞著名' => '瞒著名',
+'瞞著錄' => '瞒著录',
+'瞞著稱' => '瞒著称',
+'瞞著者' => '瞒著者',
+'瞞著述' => '瞒著述',
+'瞧著' => '瞧着',
+'瞧著書' => '瞧着书',
+'瞧著作' => '瞧著作',
+'瞧著名' => '瞧著名',
+'瞧著錄' => '瞧著录',
+'瞧著稱' => '瞧著称',
+'瞧著者' => '瞧著者',
+'瞧著述' => '瞧著述',
+'瞪著' => '瞪着',
+'瞪著書' => '瞪著书',
+'瞪著作' => '瞪著作',
+'瞪著名' => '瞪著名',
+'瞪著錄' => '瞪著录',
+'瞪著稱' => '瞪著称',
+'瞪著者' => '瞪著者',
+'瞪著述' => '瞪著述',
+'矛盾著' => '矛盾着',
+'智慧財產權' => '知识产权',
+'智財權' => '知识产权',
+'知識份子' => '知识分子',
+'什勒斯維希' => '石勒苏益格',
+'矽塵' => '矽尘',
+'矽尘' => '矽尘',
+'矽肺' => '矽肺',
+'矽鋼' => '矽钢',
+'矽钢' => '矽钢',
+'矽' => '硅',
+'矽片' => '硅片',
+'矽谷' => '硅谷',
+'硬體' => '硬件',
+'硬碟' => '硬盘',
+'磁碟' => '磁盘',
+'磁軌' => '磁道',
+'福馬林' => '福尔马林',
+'福著' => '福着',
+'福著書' => '福著书',
+'福著作' => '福著作',
+'福著名' => '福著名',
+'福著錄' => '福著录',
+'福著稱' => '福著称',
+'福著者' => '福著者',
+'福著述' => '福著述',
+'私帳' => '私账',
+'葛摩' => '科摩罗',
+'象牙海岸' => '科特迪瓦',
+'積極份子' => '积极分子',
+'流動電話' => '移动电话',
+'行動電話' => '移动电话',
+'流動網絡' => '移动网络',
+'行動網路' => '移动网络',
+'程式設計師' => '程序员',
+'程式控制' => '程控',
+'空中巴士' => '空中客车',
+'空氣品質' => '空气质量',
+'空氣質素' => '空气质量',
+'空著' => '空着',
+'空著書' => '空著书',
+'空著作' => '空著作',
+'空著名' => '空著名',
+'空著錄' => '空著录',
+'空著稱' => '空著称',
+'空著者' => '空著者',
+'空著述' => '空著述',
+'穿著' => '穿着',
+'穿著書' => '穿著书',
+'穿著作' => '穿著作',
+'穿著名' => '穿著名',
+'穿著錄' => '穿著录',
+'穿著稱' => '穿著称',
+'穿著者' => '穿著者',
+'穿著述' => '穿著述',
+'突尼西亞' => '突尼斯',
+'立著' => '立着',
+'立著《' => '立著《',
+'立著作' => '立著作',
+'立著名' => '立著名',
+'立著有' => '立著有',
+'立著称' => '立著称',
+'立著稱' => '立著称',
+'立著者' => '立著者',
+'立著(' => '立著(',
+'豎著' => '竖着',
+'豎著書' => '竖著书',
+'豎著作' => '竖著作',
+'豎著名' => '竖著名',
+'豎著錄' => '竖著录',
+'豎著稱' => '竖著称',
+'豎著者' => '竖著者',
+'豎著述' => '竖著述',
+'站著' => '站着',
+'站著書' => '站著书',
+'站著作' => '站著作',
+'站著名' => '站著名',
+'站著錄' => '站著录',
+'站著稱' => '站著称',
+'站著者' => '站著者',
+'站著述' => '站著述',
+'笑著' => '笑着',
+'笑著書' => '笑著书',
+'笑著作' => '笑著作',
+'笑著名' => '笑著名',
+'笑著錄' => '笑著录',
+'笑著稱' => '笑著称',
+'笑著者' => '笑著者',
+'笑著述' => '笑著述',
+'筆帳' => '笔账',
+'提比里西' => '第比利斯',
+'簽著' => '签着',
+'簽帳' => '签账',
+'運算元' => '算子',
+'演算法' => '算法',
+'算帳' => '算账',
+'管著' => '管着',
+'管著書' => '管著书',
+'管著作' => '管著作',
+'管著名' => '管著名',
+'管著錄' => '管著录',
+'管著稱' => '管著称',
+'管著者' => '管著者',
+'管著述' => '管著述',
+'管帳' => '管账',
+'公尺' => '米',
+'糊塗帳' => '糊涂账',
+'糖份' => '糖分',
+'動畫影集' => '系列动画片',
+'繫著' => '系着',
+'索忍尼辛' => '索尔仁尼琴',
+'索贊尼辛' => '索尔仁尼琴',
+'蘇辛尼津' => '索尔仁尼琴',
+'索馬利亞' => '索马里',
+'索馬利蘭' => '索马里兰',
+'正體中文' => '繁体中文',
+'強斯頓環礁' => '约翰斯顿岛',
+'縱著' => '纵着',
+'組份' => '组分',
+'經常帳' => '经常账',
+'經濟帳' => '经济账',
+'綁著' => '绑着',
+'綁著書' => '绑著书',
+'綁著作' => '绑著作',
+'綁著名' => '绑著名',
+'綁著錄' => '绑著录',
+'綁著稱' => '绑著称',
+'綁著者' => '绑著者',
+'綁著述' => '绑著述',
+'結帳' => '结账',
+'繞著' => '绕着',
+'繞著書' => '绕著书',
+'繞著作' => '绕著作',
+'繞著名' => '绕著名',
+'繞著錄' => '绕著录',
+'繞著稱' => '绕著称',
+'繞著者' => '绕著者',
+'繞著述' => '绕著述',
+'維根斯坦' => '维特根斯坦',
+'繃著' => '绷着',
+'緣份' => '缘分',
+'纏著' => '缠着',
+'纏著書' => '缠著书',
+'纏著作' => '缠著作',
+'纏著名' => '缠著名',
+'纏著錄' => '缠著录',
+'纏著稱' => '缠著称',
+'纏著者' => '缠著者',
+'纏著述' => '缠著述',
+'網站連結' => '网站链接',
+'網路' => '网络',
+'網頁連結' => '网页链接',
+'罩著' => '罩着',
+'罩著書' => '罩著书',
+'罩著作' => '罩著作',
+'罩著名' => '罩著名',
+'罩著錄' => '罩著录',
+'罩著稱' => '罩著称',
+'罩著者' => '罩著者',
+'罩著述' => '罩著述',
+'美著' => '美着',
+'美著書' => '美著书',
+'美著作' => '美著作',
+'美著名' => '美著名',
+'美著錄' => '美著录',
+'美著称' => '美著称',
+'美著稱' => '美著称',
+'美著者' => '美著者',
+'美著述' => '美著述',
+'耀著' => '耀着',
+'耀著書' => '耀著书',
+'耀著作' => '耀著作',
+'耀著名' => '耀著名',
+'耀著錄' => '耀著录',
+'耀著稱' => '耀著称',
+'耀著者' => '耀著者',
+'耀著述' => '耀著述',
+'寮國' => '老挝',
+'寮人民民主共和國' => '老挝人民民主共和国',
+'寮語' => '老挝语',
+'考著' => '考着',
+'考著書' => '考著书',
+'考著作' => '考著作',
+'考著名' => '考著名',
+'考著錄' => '考著录',
+'考著稱' => '考著称',
+'考著者' => '考著者',
+'考著述' => '考著述',
+'職份' => '职分',
+'辛康納利' => '肖恩·康纳利',
+'蕭士塔高維奇' => '肖斯塔科维奇',
+'蕭士達高維契' => '肖斯塔科维奇',
+'甘迺迪' => '肯尼迪',
+'背著' => '背着',
+'背著書' => '背著书',
+'背著作' => '背著作',
+'背著名' => '背著名',
+'背著錄' => '背著录',
+'背著稱' => '背著称',
+'背著者' => '背著者',
+'背著述' => '背著述',
+'膠著' => '胶着',
+'膠著書' => '胶著书',
+'膠著作' => '胶著作',
+'膠著名' => '胶著名',
+'膠著錄' => '胶著录',
+'膠著稱' => '胶著称',
+'膠著者' => '胶著者',
+'膠著述' => '胶著述',
+'舒麥加' => '舒马赫',
+'太空梭' => '航天飞机',
+'穿梭機' => '航天飞机',
+'愛滋' => '艾滋',
+'晶元' => '芯片',
+'晶片' => '芯片',
+'蘇利南' => '苏里南',
+'苦著' => '苦着',
+'苦著書' => '苦著书',
+'苦著作' => '苦著作',
+'苦著名' => '苦著名',
+'苦著錄' => '苦著录',
+'苦著稱' => '苦著称',
+'苦著者' => '苦著者',
+'苦著述' => '苦著述',
+'英吋' => '英寸',
+'英呎' => '英尺',
+'共和联邦' => '英联邦',
+'大英國協' => '英联邦',
+'士多啤梨' => '草莓',
+'螢光棒' => '荧光棒',
+'螢屏' => '荧屏',
+'霍爾斯坦' => '荷尔斯泰因',
+'莫三比克' => '莫桑比克',
+'雷伊泰灣' => '莱特湾',
+'賴索托' => '莱索托',
+'獲著' => '获着',
+'穫著' => '获着',
+'獲著書' => '获著书',
+'獲著作' => '获著作',
+'獲著名' => '获著名',
+'獲著錄' => '获著录',
+'獲著稱' => '获著称',
+'獲著者' => '获著者',
+'獲著述' => '获著述',
+'塞拉耶佛' => '萨拉热窝',
+'落著' => '落着',
+'落著書' => '落著书',
+'落著作' => '落著作',
+'落著名' => '落著名',
+'落著錄' => '落著录',
+'落著稱' => '落著称',
+'落著者' => '落著者',
+'落著述' => '落著述',
+'滿地可' => '蒙特利尔',
+'蒙特婁' => '蒙特利尔',
+'蒙著' => '蒙着',
+'蒙著書' => '蒙著书',
+'蒙著作' => '蒙著作',
+'蒙著名' => '蒙著名',
+'蒙著錄' => '蒙著录',
+'蒙著稱' => '蒙著称',
+'蒙著者' => '蒙著者',
+'蒙著述' => '蒙著述',
+'藍芽' => '蓝牙',
+'蘊涵著' => '蕴涵着',
+'薛丁格' => '薛定谔',
+'藏著' => '藏着',
+'藏著書' => '藏著书',
+'藏著作' => '藏著作',
+'藏著名' => '藏著名',
+'藏著錄' => '藏著录',
+'藏著稱' => '藏著称',
+'藏著者' => '藏著者',
+'藏著述' => '藏著述',
+'蘸著' => '蘸着',
+'蘸著書' => '蘸著书',
+'蘸著作' => '蘸著作',
+'蘸著名' => '蘸著名',
+'蘸著錄' => '蘸著录',
+'蘸著稱' => '蘸著称',
+'蘸著者' => '蘸著者',
+'蘸著述' => '蘸著述',
+'行人路权' => '行人路权',
+'行人路權' => '行人路权',
+'行著' => '行着',
+'行著書' => '行著书',
+'行著作' => '行著作',
+'行著名' => '行著名',
+'行著錄' => '行著录',
+'行著稱' => '行著称',
+'行著者' => '行著者',
+'行著述' => '行著述',
+'衣著' => '衣着',
+'衣著書' => '衣著书',
+'衣著作' => '衣著作',
+'衣著名' => '衣著名',
+'衣著錄' => '衣著录',
+'衣著称' => '衣著称',
+'衣著稱' => '衣著称',
+'衣著者' => '衣著者',
+'衣著述' => '衣著述',
+'表姊' => '表姐',
+'裝著' => '装着',
+'裝著書' => '装著书',
+'裝著作' => '装著作',
+'裝著名' => '装著名',
+'裝著錄' => '装著录',
+'裝著稱' => '装著称',
+'裝著者' => '装著者',
+'裝著述' => '装著述',
+'裹著' => '裹着',
+'裹著書' => '裹著书',
+'裹著作' => '裹著作',
+'裹著名' => '裹著名',
+'裹著錄' => '裹著录',
+'裹著稱' => '裹著称',
+'裹著者' => '裹著者',
+'裹著述' => '裹著述',
+'要帳' => '要账',
+'覆蓋著' => '覆盖着',
+'覆著' => '覆着',
+'見著' => '见着',
+'見著書' => '见著书',
+'見著作' => '见著作',
+'見著名' => '见著名',
+'見著錄' => '见著录',
+'見著稱' => '见著称',
+'見著者' => '见著者',
+'見著述' => '见著述',
+'規畫' => '规划',
+'視著' => '视着',
+'視著名' => '视著名',
+'占士邦' => '詹姆斯·邦德',
+'警戒著' => '警戒着',
+'計畫' => '计划',
+'電腦程式' => '计算机程序',
+'認帳' => '认账',
+'記著' => '记着',
+'記著書' => '记著书',
+'記著作' => '记著作',
+'記著名' => '记著名',
+'記著錄' => '记著录',
+'記著稱' => '记著称',
+'記著者' => '记著者',
+'記著述' => '记著述',
+'記帳' => '记账',
+'片語' => '词组',
+'試著' => '试着',
+'試著書' => '试著书',
+'試著作' => '试著作',
+'試著名' => '试著名',
+'試著錄' => '试著录',
+'試著稱' => '试著称',
+'試著者' => '试著者',
+'試著述' => '试著述',
+'語著' => '语着',
+'語著書' => '语著书',
+'語著作' => '语著作',
+'語著名' => '语著名',
+'語著錄' => '语著录',
+'語著稱' => '语著称',
+'語著者' => '语著者',
+'語著述' => '语著述',
+'說著' => '说着',
+'說著作' => '说著作',
+'說著稱' => '说著称',
+'說著者' => '说著者',
+'說著述' => '说著述',
+'諾曼第' => '诺曼底',
+'數據機' => '调制解调器',
+'象徵著' => '象征着',
+'象徵著名' => '象征著名',
+'碧咸' => '贝克汉姆',
+'貝爾格勒' => '贝尔格莱德',
+'負著' => '负着',
+'貢寮' => '贡寮',
+'帳上' => '账上',
+'帳冊' => '账册',
+'帳務' => '账务',
+'帳單' => '账单',
+'帳號' => '账号',
+'帳外' => '账外',
+'帳戶' => '账户',
+'帳房' => '账房',
+'帳本' => '账本',
+'帳款' => '账款',
+'帳目' => '账目',
+'帳簿' => '账簿',
+'帳面' => '账面',
+'賒帳' => '赊账',
+'賴帳' => '赖账',
+'尚比亞' => '赞比亚',
+'西臺人' => '赫梯人',
+'西臺國' => '赫梯国',
+'西臺帝' => '赫梯帝',
+'西臺文' => '赫梯文',
+'西臺族' => '赫梯族',
+'西臺王' => '赫梯王',
+'西臺語' => '赫梯语',
+'赫魯雪夫' => '赫鲁晓夫',
+'走為上著' => '走为上着',
+'走著' => '走着',
+'走著書' => '走著书',
+'走著作' => '走著作',
+'走著名' => '走著名',
+'走著錄' => '走著录',
+'走著稱' => '走著称',
+'走著者' => '走著者',
+'走著述' => '走著述',
+'趕著' => '赶着',
+'趕著書' => '赶著书',
+'趕著作' => '赶著作',
+'趕著名' => '赶著名',
+'趕著錄' => '赶著录',
+'趕著稱' => '赶著称',
+'趕著者' => '赶著者',
+'趕著述' => '赶著述',
+'超連結' => '超链接',
+'趴著' => '趴着',
+'趴著書' => '趴著书',
+'趴著作' => '趴著作',
+'趴著名' => '趴著名',
+'趴著錄' => '趴著录',
+'趴著稱' => '趴著称',
+'趴著者' => '趴著者',
+'趴著述' => '趴著述',
+'躍著' => '跃着',
+'躍著書' => '跃著书',
+'躍著作' => '跃著作',
+'躍著名' => '跃著名',
+'躍著錄' => '跃著录',
+'躍著稱' => '跃著称',
+'躍著者' => '跃著者',
+'躍著述' => '跃著述',
+'跑著' => '跑着',
+'跑著書' => '跑著书',
+'跑著作' => '跑著作',
+'跑著名' => '跑著名',
+'跑著錄' => '跑著录',
+'跑著稱' => '跑著称',
+'跑著者' => '跑著者',
+'跑著述' => '跑著述',
+'跟著' => '跟着',
+'跟著書' => '跟著书',
+'跟著作' => '跟著作',
+'跟著名' => '跟著名',
+'跟著錄' => '跟著录',
+'跟著稱' => '跟著称',
+'跟著者' => '跟著者',
+'跟著述' => '跟著述',
+'跪著' => '跪着',
+'跪著書' => '跪著书',
+'跪著作' => '跪著作',
+'跪著名' => '跪著名',
+'跪著錄' => '跪著录',
+'跪著稱' => '跪著称',
+'跪著者' => '跪著者',
+'跪著述' => '跪著述',
+'跳著' => '跳着',
+'跳著書' => '跳著书',
+'跳著作' => '跳著作',
+'跳著名' => '跳著名',
+'跳著錄' => '跳著录',
+'跳著稱' => '跳著称',
+'跳著者' => '跳著者',
+'跳著述' => '跳著述',
+'踏著' => '踏着',
+'踏著書' => '踏著书',
+'踏著作' => '踏著作',
+'踏著名' => '踏著名',
+'踏著錄' => '踏著录',
+'踏著稱' => '踏著称',
+'踏著者' => '踏著者',
+'踏著述' => '踏著述',
+'踩著' => '踩着',
+'踩著書' => '踩著书',
+'踩著作' => '踩著作',
+'踩著名' => '踩著名',
+'踩著錄' => '踩著录',
+'踩著稱' => '踩著称',
+'踩著者' => '踩著者',
+'踩著述' => '踩著述',
+'笨豬跳' => '蹦极跳',
+'绑紧跳' => '蹦极跳',
+'身分' => '身份',
+'身著' => '身着',
+'身著書' => '身著书',
+'身著作' => '身著作',
+'身著名' => '身著名',
+'身著錄' => '身著录',
+'身著稱' => '身著称',
+'身著者' => '身著者',
+'身著述' => '身著述',
+'躺著' => '躺着',
+'躺著書' => '躺著书',
+'躺著作' => '躺著作',
+'躺著名' => '躺著名',
+'躺著錄' => '躺著录',
+'躺著稱' => '躺著称',
+'躺著者' => '躺著者',
+'躺著述' => '躺著述',
+'轉著' => '转着',
+'轉著書' => '转著书',
+'轉著作' => '转著作',
+'轉著名' => '转著名',
+'轉著錄' => '转著录',
+'轉著稱' => '转著称',
+'轉著者' => '转著者',
+'轉著述' => '转著述',
+'轉帳' => '转账',
+'軟體' => '软件',
+'軟體動物' => '软体动物',
+'軟體家具' => '软体家具',
+'軟碟機' => '软驱',
+'載著' => '载着',
+'載著書' => '载著书',
+'載著作' => '载著作',
+'載著名' => '载著名',
+'載著錄' => '载著录',
+'載著稱' => '载著称',
+'載著者' => '载著者',
+'載著述' => '载著述',
+'達·文西' => '达·芬奇',
+'達著' => '达着',
+'三蘭港' => '达累斯萨拉姆',
+'達文西' => '达芬奇',
+'達著書' => '达著书',
+'達著作' => '达著作',
+'達著名' => '达著名',
+'達著錄' => '达著录',
+'達著稱' => '达著称',
+'達著者' => '达著者',
+'達著述' => '达著述',
+'過份' => '过分',
+'過著' => '过着',
+'過著作' => '过著作',
+'過著名' => '过著名',
+'過著錄' => '过著录',
+'過著稱' => '过著称',
+'過著者' => '过著者',
+'過著述' => '过著述',
+'米高·奧雲' => '迈克尔·欧文',
+'還帳' => '还账',
+'演化論' => '进化论',
+'進帳' => '进账',
+'連著' => '连着',
+'連結他' => '连结他',
+'連著書' => '连著书',
+'連著作' => '连著作',
+'連著名' => '连著名',
+'連著錄' => '连著录',
+'連著稱' => '连著称',
+'連著者' => '连著者',
+'連著述' => '连著述',
+'杜拜' => '迪拜',
+'迫著' => '迫着',
+'疊代' => '迭代',
+'追著' => '追着',
+'追著書' => '追著书',
+'追著作' => '追著作',
+'追著名' => '追著名',
+'追著錄' => '追著录',
+'追著稱' => '追著称',
+'追著者' => '追著者',
+'追著述' => '追著述',
+'逆著' => '逆着',
+'逆著書' => '逆著书',
+'逆著作' => '逆著作',
+'逆著名' => '逆著名',
+'逆著錄' => '逆著录',
+'逆著稱' => '逆著称',
+'逆著者' => '逆著者',
+'逆著述' => '逆著述',
+'逼著' => '逼着',
+'逼著書' => '逼著书',
+'逼著作' => '逼著作',
+'逼著名' => '逼著名',
+'逼著錄' => '逼著录',
+'逼著稱' => '逼著称',
+'逼著者' => '逼著者',
+'逼著述' => '逼著述',
+'遇著' => '遇着',
+'遇著書' => '遇著书',
+'遇著作' => '遇著作',
+'遇著名' => '遇著名',
+'遇著錄' => '遇著录',
+'遇著称' => '遇著称',
+'遇著稱' => '遇著称',
+'遇著者' => '遇著者',
+'遇著述' => '遇著述',
+'遍佈著' => '遍布着',
+'遍布著' => '遍布着',
+'部份' => '部分',
+'配合著' => '配合着',
+'配合著名' => '配合著名',
+'配著' => '配着',
+'配著書' => '配著书',
+'配著作' => '配著作',
+'配著名' => '配著名',
+'配著錄' => '配著录',
+'配著稱' => '配著称',
+'配著者' => '配著者',
+'配著述' => '配著述',
+'釀著' => '酿着',
+'釀著書' => '酿著书',
+'釀著作' => '酿著作',
+'釀著名' => '酿著名',
+'釀著錄' => '酿著录',
+'釀著稱' => '酿著称',
+'釀著者' => '酿著者',
+'釀著述' => '酿著述',
+'黎克特制' => '里氏',
+'芮氏0' => '里氏0',
+'芮氏1' => '里氏1',
+'芮氏2' => '里氏2',
+'芮氏3' => '里氏3',
+'芮氏4' => '里氏4',
+'芮氏5' => '里氏5',
+'芮氏6' => '里氏6',
+'芮氏7' => '里氏7',
+'芮氏8' => '里氏8',
+'芮氏9' => '里氏9',
+'芮氏地震規模' => '里氏地震规模',
+'芮氏規模' => '里氏震级',
+'金夏沙' => '金沙萨',
+'鈽' => '钚',
+'鍅' => '钫',
+'狄托' => '铁托',
+'卯足' => '铆足',
+'鋪著' => '铺着',
+'鋪著書' => '铺著书',
+'鋪著作' => '铺著作',
+'鋪著名' => '铺著名',
+'鋪著錄' => '铺著录',
+'鋪著稱' => '铺著称',
+'鋪著者' => '铺著者',
+'鋪著述' => '铺著述',
+'鏈結' => '链接',
+'銷帳' => '销账',
+'鉲' => '锎',
+'鎝' => '锝',
+'鉳' => '锫',
+'鑀' => '锿',
+'鋂' => '镅',
+'錼' => '镎',
+'孟德爾遜' => '门德尔松',
+'孟德爾頌' => '门德尔松',
+'快閃記憶體' => '闪存',
+'閉著' => '闭着',
+'閉著書' => '闭著书',
+'閉著作' => '闭著作',
+'閉著名' => '闭著名',
+'閉著錄' => '闭著录',
+'閉著稱' => '闭著称',
+'閉著者' => '闭著者',
+'閉著述' => '闭著述',
+'閑著' => '闲着',
+'閒著' => '闲着',
+'閑著書' => '闲著书',
+'閑著作' => '闲著作',
+'閑著名' => '闲著名',
+'閑著錄' => '闲著录',
+'閑著稱' => '闲著称',
+'閑著者' => '闲著者',
+'閑著述' => '闲著述',
+'悶著' => '闷着',
+'鬧著' => '闹着',
+'聞著' => '闻着',
+'亞塞拜然' => '阿塞拜疆',
+'阿布達比' => '阿布扎比',
+'阿拉伯聯合大公國' => '阿拉伯联合酋长国',
+'亞斯文' => '阿斯旺',
+'附著' => '附着',
+'附著書' => '附著书',
+'附著作' => '附著作',
+'附著名' => '附著名',
+'附著錄' => '附著录',
+'附著稱' => '附著称',
+'附著者' => '附著者',
+'附著述' => '附著述',
+'陋著' => '陋着',
+'陋著書' => '陋著书',
+'陋著作' => '陋著作',
+'陋著名' => '陋著名',
+'陋著錄' => '陋著录',
+'陋著稱' => '陋著称',
+'陋著者' => '陋著者',
+'陋著述' => '陋著述',
+'陪著' => '陪着',
+'陪著書' => '陪著书',
+'陪著作' => '陪著作',
+'陪著名' => '陪著名',
+'陪著錄' => '陪著录',
+'陪著稱' => '陪著称',
+'陪著者' => '陪著者',
+'陪著述' => '陪著述',
+'隨著' => '随着',
+'隨著書' => '随著书',
+'隨著作' => '随著作',
+'隨著名' => '随著名',
+'隨著錄' => '随著录',
+'隨著稱' => '随著称',
+'隨著者' => '随著者',
+'隨著述' => '随著述',
+'私隱' => '隐私',
+'隔著' => '隔着',
+'隔著書' => '隔著书',
+'隔著作' => '隔著作',
+'隔著名' => '隔著名',
+'隔著錄' => '隔著录',
+'隔著稱' => '隔著称',
+'隔著者' => '隔著者',
+'隔著述' => '隔著述',
+'耶加達' => '雅加达',
+'雅爾達' => '雅尔塔',
+'雅著' => '雅着',
+'雅著書' => '雅著书',
+'雅著作' => '雅著作',
+'雅著名' => '雅著名',
+'雅著錄' => '雅著录',
+'雅著称' => '雅著称',
+'雅著稱' => '雅著称',
+'雅著者' => '雅著者',
+'雅著述' => '雅著述',
+'雷諾瓦' => '雷诺阿',
+'荷姆茲' => '霍尔木兹',
+'非份' => '非分',
+'靠著' => '靠着',
+'靠著作' => '靠著作',
+'靠著名' => '靠著名',
+'靠著錄' => '靠著录',
+'靠著稱' => '靠著称',
+'靠著者' => '靠著者',
+'靠著述' => '靠著述',
+'南韓' => '韩国',
+'音樂錄影帶' => '音乐录影带',
+'頂著' => '顶着',
+'頂著書' => '顶著书',
+'頂著作' => '顶著作',
+'頂著名' => '顶著名',
+'頂著錄' => '顶著录',
+'頂著稱' => '顶著称',
+'頂著者' => '顶著者',
+'頂著述' => '顶著述',
+'順著' => '顺着',
+'順著書' => '顺著书',
+'順著作' => '顺著作',
+'順著名' => '顺著名',
+'順著錄' => '顺著录',
+'順著稱' => '顺著称',
+'順著者' => '顺著者',
+'順著述' => '顺著述',
+'領著' => '领着',
+'領著書' => '领著书',
+'領著作' => '领著作',
+'領著名' => '领著名',
+'領著錄' => '领著录',
+'領著稱' => '领著称',
+'領著者' => '领著者',
+'領著述' => '领著述',
+'飃著' => '飘着',
+'飄著' => '飘着',
+'飄著書' => '飘著书',
+'飄著作' => '飘著作',
+'飄著名' => '飘著名',
+'飄著錄' => '飘著录',
+'飄著稱' => '飘著称',
+'飄著者' => '飘著者',
+'飄著述' => '飘著述',
+'行政總裁' => '首席执行官',
+'執行長、' => '首席执行官、',
+'執行長。' => '首席执行官。',
+'執行長,' => '首席执行官,',
+'財務長、' => '首席财务官、',
+'財務長。' => '首席财务官。',
+'財務長,' => '首席财务官,',
+'營運長、' => '首席运营官、',
+'營運長。' => '首席运营官。',
+'營運長,' => '首席运营官,',
+'馬爾地夫' => '马尔代夫',
+'萌島' => '马恩岛',
+'馬拉威' => '马拉维',
+'馬斯垂克' => '马斯特里赫特',
+'馬爾他' => '马耳他',
+'麻薩諸塞' => '马萨诸塞',
+'馬利共和國' => '马里共和国',
+'駛著' => '驶着',
+'駕著' => '驾着',
+'駕著書' => '驾著书',
+'駕著作' => '驾著作',
+'駕著名' => '驾著名',
+'駕著錄' => '驾著录',
+'駕著稱' => '驾著称',
+'駕著者' => '驾著者',
+'駕著述' => '驾著述',
+'罵著' => '骂着',
+'罵著書' => '骂著书',
+'罵著作' => '骂著作',
+'罵著名' => '骂著名',
+'罵著錄' => '骂著录',
+'罵著稱' => '骂著称',
+'罵著者' => '骂著者',
+'罵著述' => '骂著述',
+'騎著' => '骑着',
+'騎著書' => '骑著书',
+'騎著作' => '骑著作',
+'騎著名' => '骑著名',
+'騎著錄' => '骑著录',
+'騎著稱' => '骑著称',
+'騎著者' => '骑著者',
+'騎著述' => '骑著述',
+'騙著' => '骗着',
+'騙著書' => '骗著书',
+'騙著作' => '骗著作',
+'騙著名' => '骗著名',
+'騙著錄' => '骗著录',
+'騙著稱' => '骗著称',
+'騙著者' => '骗著者',
+'騙著述' => '骗著述',
+'尖峰時段' => '高峰时段',
+'尖峰時間' => '高峰时间',
+'高畫質' => '高清',
+'高著' => '高着',
+'高著書' => '高著书',
+'高著作' => '高著作',
+'高著名' => '高著名',
+'高著錄' => '高著录',
+'高著称' => '高著称',
+'高著稱' => '高著称',
+'高著者' => '高著者',
+'高著述' => '高著述',
+'魚雷' => '鱼雷',
+'鱼雷' => '鱼雷',
+'咪高峰' => '麦克风',
+'黏著' => '黏着',
+'黏著書' => '黏著书',
+'黏著作' => '黏著作',
+'黏著名' => '黏著名',
+'黏著錄' => '黏著录',
+'黏著稱' => '黏著称',
+'黏著者' => '黏著者',
+'黏著述' => '黏著述',
+'蒙特內哥羅' => '黑山',
+'滑鼠' => '鼠标',
+);
+}
index 47d10c2..983b3ce 100644 (file)
        "resetpass_submit": "ضبط كلمة السر والدخول",
        "changepassword-success": "تم تغيير كلمة السر بنجاح!",
        "changepassword-throttled": "لديك محاولات تسجيل دخول كثيرة حديثة. من فضلك انتظر $1 قبل المحاولة ثانية.",
+       "botpasswords-label-appid": "اسم البوت:",
+       "botpasswords-label-create": "أنشأ",
        "botpasswords-label-cancel": "ألغ",
        "botpasswords-label-delete": "احذف",
        "botpasswords-label-resetpassword": "أعد ضبط كلمة السر",
        "version-hook-subscribedby": "يستخدم بواسطة",
        "version-version": "($1)",
        "version-no-ext-name": "[لا اسم]",
-       "version-svn-revision": "ن$1",
        "version-license": "ترخيص ميدياويكي",
        "version-ext-license": "ترخيص",
        "version-ext-colheader-name": "امتداد",
        "pagelang-select-lang": "اختر اللغة",
        "right-pagelang": "تغيير لغة الصفحة",
        "action-pagelang": "تغيير لغة الصفحة",
-       "log-name-pagelang": "تغÙ\8aÙ\8aر Ø³Ø¬Ù\84 Ø§Ù\84صÙ\81Ø­ة",
+       "log-name-pagelang": "سجÙ\84 ØªØºÙ\8aÙ\8aر Ø§Ù\84Ù\84غة",
        "log-description-pagelang": "هذا سجل تغيرات في صفحة اللغات.",
-       "logentry-pagelang-pagelang": " {{GENDER:$2|غÙ\8aÙ\91ر|غÙ\8aّرت}} $1 لغة الصفحة «$3» من $4 إلى $5.",
+       "logentry-pagelang-pagelang": " {{GENDER:$2|غÙ\8aÙ\8eÙ\91ر|غÙ\8aÙ\8eّرت}} $1 لغة الصفحة «$3» من $4 إلى $5.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (مفعل)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''معطل''')",
        "mediastatistics": "إحصاءات الميديا",
        "mediastatistics-header-text": "نصي",
        "mediastatistics-header-executable": "تنفيذية",
        "mediastatistics-header-archive": "صيغ مضغوطة",
+       "mediastatistics-header-total": "كل الملفات",
        "json-warn-trailing-comma": "تمت إزالة {{PLURAL:$1|فاصلة انتهائية واحدة|فاصلتين انتهائيتين|$1 فاصلات انتهائية|$1 فاصلة انتهائية}} من JSON",
        "json-error-unknown": "وقعت مشكلة مع JSON. رسالة الخطأ: $1",
        "json-error-depth": "عمق الستاك الأقصى تم تجاوزه",
index 4d13aab..80935bb 100644 (file)
        "mergehistory-from": "Páxina d'orixe:",
        "mergehistory-into": "Páxina de destín:",
        "mergehistory-list": "Historial d'ediciones fusionable",
-       "mergehistory-merge": "Les siguientes revisiones de [[:$1]] puen fusionase en [[:$2]]. Usa la columna de botones d'opción pa fusionar namaí les revisiones creaes na y enantes de la hora especificada. has fixate en que si uses los enllaces de navegación esborraránse les seleiciones feches nesta columna.",
+       "mergehistory-merge": "Les siguientes revisiones de [[:$1]] puen fusionase'n [[:$2]]. Usa la columna de botones d'opción pa fusionar namai les revisiones creaes na y enantes de la hora especificada.\nHas fixate en que si uses los enllaces de navegación esborraránse les seleiciones feches nesta columna.",
        "mergehistory-go": "Amosar ediciones fusionables",
        "mergehistory-submit": "Fusionar revisiones",
        "mergehistory-empty": "Nun se pue fusionar nenguna revisión.",
        "recentchangescount": "Númberu d'ediciones p'amosar de mou predetermináu:",
        "prefs-help-recentchangescount": "Incluye los cambios recientes, los historiales de páxines y los rexistros.",
        "prefs-help-watchlist-token2": "Esta ye la clave secreta pa la canal de noticies web de la so llista de vixilancia.\nCualquiera que la sepa podrá lleer la so llista de vixilancia; nun la comparta.\n[[Special:ResetTokens|Calque equí si necesita reaniciala]].",
-       "savedprefs": "Les tos preferencies quedaron grabaes.",
+       "savedprefs": "Guardáronse les preferencies.",
        "savedrights": "Guardáronse los permisos d'{{GENDER:$1|usuariu|usuaria}} de $1.",
        "timezonelegend": "Estaya horaria:",
        "localtime": "Hora llocal:",
        "right-import": "Importar páxines dende otres wikis",
        "right-importupload": "Importar páxines dende un ficheru xubíu",
        "right-patrol": "Marcar ediciones d'otros como supervisaes",
-       "right-autopatrol": "Marcar automáticamente les ediciones como supervisaes",
+       "right-autopatrol": "Marcar automáticamente les ediciones propies como supervisaes",
        "right-patrolmarks": "Ver les marques de supervisión nos cambeos de recién",
        "right-unwatchedpages": "Ver una llista de páxines non vixilaes",
        "right-mergehistory": "Fusionar historiales de páxines",
-       "right-userrights": "Editar tolos drechos d'usuariu",
-       "right-userrights-interwiki": "Editar los drechos d'usuariu d'usuarios d'otros sitios wiki",
+       "right-userrights": "Editar tolos permisos d'usuariu",
+       "right-userrights-interwiki": "Editar los permisos d'usuariu de los usuarios d'otres wikis",
        "right-siteadmin": "Candar y descandar la base de datos",
        "right-override-export-depth": "Esportar páxines, incluyendo páxines enllazaes fasta una fondura de 5",
        "right-sendemail": "Unviar corréu a otros usuarios",
        "right-managechangetags": "Crear y desaniciar [[Special:Tags|etiquetes]] dende la base de datos",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetes]] xunto colos cambios propios",
        "right-changetags": "Amestar y desaniciar [[Special:Tags|etiquetes]] arbitraries en revisiones individuales y entraes del rexistru",
-       "grant-generic": "Conxuntu de drechos \"$1\"",
+       "grant-generic": "Conxuntu de drechos «$1»",
        "grant-group-page-interaction": "Interactuar con páxines",
        "grant-group-file-interaction": "Interactuar con multimedia",
        "grant-group-watchlist-interaction": "Interactuar cola to llista de vixilancia",
        "grant-viewmywatchlist": "Ver la to llista de siguimientu",
        "newuserlogpage": "Rexistru de creación d'usuarios",
        "newuserlogpagetext": "Esti ye un rexistru de creación d'usuarios.",
-       "rightslog": "Rexistru de perfil d'usuariu",
-       "rightslogtext": "Esti ye un rexistru de los cambeos de los perfiles d'usuariu.",
+       "rightslog": "Rexistru de permisos d'usuariu",
+       "rightslogtext": "Esti ye un rexistru de los cambeos nos permisos d'usuariu.",
        "action-read": "lleer esta páxina",
        "action-edit": "editar esta páxina",
        "action-createpage": "crear páxines",
        "action-minoredit": "marcar esta edición como menor",
        "action-move": "treslladar esta páxina",
        "action-move-subpages": "treslladar esta páxina y les sos subpáxines",
-       "action-move-rootuserpages": "treslladar páxines d'un usuariu root",
+       "action-move-rootuserpages": "treslladar páxines principales d'usuariu",
        "action-move-categorypages": "treslladar les páxines de categoría",
-       "action-movefile": "treslladar esti archivu",
-       "action-upload": "xubir esti archivu",
-       "action-reupload": "sobreescribir esti archivu esistente",
-       "action-reupload-shared": "sustituyir esti archivu nun direutoriu compartíu",
-       "action-upload_by_url": "xubir esti archivu dende una direición URL",
+       "action-movefile": "treslladar esti ficheru",
+       "action-upload": "xubir esti ficheru",
+       "action-reupload": "reemplazar esti ficheru esistente",
+       "action-reupload-shared": "sustituyir esti ficheru d'un direutoriu compartíu",
+       "action-upload_by_url": "xubir esti ficheru dende una URL",
        "action-writeapi": "usar l'API d'escritura",
        "action-delete": "desaniciar esta páxina",
-       "action-deleterevision": "eliminar esta revisión",
+       "action-deleterevision": "desaniciar esta revisión",
        "action-deletedhistory": "ver l'historial elimináu d'esta páxina",
        "action-browsearchive": "buscar páxines desaniciaes",
        "action-undelete": "restaurar esta páxina",
-       "action-suppressrevision": "revisar y restaurar esta revisión oculta",
+       "action-suppressrevision": "revisar y restaurar esta revisión tapecida",
        "action-suppressionlog": "ver esti rexistru priváu",
        "action-block": "bloquiar qu'esti usuariu edite",
        "action-protect": "camudar los niveles de proteición pa esta páxina",
        "action-autopatrol": "marcar la to edición como supervisada",
        "action-unwatchedpages": "ver la llista de páxines non vixilaes",
        "action-mergehistory": "fusionar l'historial d'esta páxina",
-       "action-userrights": "editar tolos drechos d'usuariu",
-       "action-userrights-interwiki": "editar los drechos d'usuariu d'usuarios d'otres wikis",
+       "action-userrights": "editar tolos permisos d'usuariu",
+       "action-userrights-interwiki": "editar los permisos d'usuariu de los usuarios d'otres wikis",
        "action-siteadmin": "candar o descandar la base de datos",
        "action-sendemail": "unviar correos",
        "action-editmywatchlist": "editar la llista de vixilancia",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
-       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usuariu|ususarios}} vixilando]",
+       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usuariu|usuarios}} vixilando]",
        "rc_categories": "Llendar a les categoríes (dixebrar con \"|\"):",
        "rc_categories_any": "Cualquiera de les esbillaes",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} dempués del cambiu",
        "autochange-username": "Cambiu automáticu de MediaWiki",
        "upload": "Xubir ficheru",
        "uploadbtn": "Xubir ficheru",
-       "reuploaddesc": "Cancelar la xubida y tornar al formulariu de xubíes",
+       "reuploaddesc": "Encaboxar la xubida y tornar al formulariu de xubíes",
        "upload-tryagain": "Unviar descripción camudada del ficheru",
        "uploadnologin": "Nun anició sesión",
        "uploadnologintext": "Tien d'$1 pa xubir ficheros.",
-       "upload_directory_missing": "El direutoriu de xubida ($1) nun esiste y nun pudo ser creáu pol sirvidor de web.",
-       "upload_directory_read_only": "El sirvidor nun pue modificar el direutoriu de xubida d'archivos ($1).",
+       "upload_directory_missing": "El direutoriu de xubida ($1) nun esiste y nun pudo crease pol sirvidor web.",
+       "upload_directory_read_only": "El sirvidor web nun pue escribir nel direutoriu de xubíes ($1).",
        "uploaderror": "Error de xubida",
        "upload-recreate-warning": "'''Avisu: Se desanició o treslladó un ficheru con esi nome.'''\n\nEquí s'ufre'l rexistru de desaniciu y treslláu d'esta páxina por comodidá:",
        "uploadtext": "Usa'l formulariu de más abaxo pa xubir ficheros.\nPa ver o buscar ficheros xubíos previamente, vete a la [[Special:FileList|llista de ficheros xubíos]]. Les (re)xubíes tamién queden conseñaes nel [[Special:Log/upload|rexistru de xubíes]], y los desanicios nel [[Special:Log/delete|rexistru de desanicios]].\n\nPa incluir un ficheru nuna páxina, usa un enllaz con ún de los siguientes formatos:\n*<strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ficheru.jpg]]</nowiki></code></strong> pa usar la versión completa del ficheru\n*<strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Ficheru.png|200px|thumb|left|testu alternativu]]</nowiki></code></strong> pa usar una versión de 200 píxeles d'anchu nun cuadru nel marxe izquierdu con «testu alternativu» como descripción\n*<strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Ficheru.ogg]]</nowiki></code></strong> pa enllazar al ficheru direutamente ensin amosalu",
        "uploaded-script-svg": "Alcontróse l'elementu «$1» que puede recibir scripts nel ficheru SVG xubíu.",
        "uploaded-hostile-svg": "Alcontróse CSS inseguru nel elementu d'estilu del ficheru SVG xubíu.",
        "uploaded-event-handler-on-svg": "Nun se permite configurar los atributos de controladores de socesos <code>$1=\"$2\"</code> nos ficheros SVG.",
-       "uploaded-href-attribute-svg": "Nun se permiten los atributos href <code>&lt;$1 $2=\"$3\"&gt;</code> con destín nun llocal (p. ex. http://, javascript:, etc) nos ficheros SVG.",
-       "uploaded-href-unsafe-target-svg": "Alcontróse un \"href\" a un destín inseguru <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
+       "uploaded-href-attribute-svg": "Los atributos href de los ficheros SVG are sólo pueden enllazar a destinos http:// o https://, alcontróse <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Alcontróse un href a datos inseguros: la URI de destín <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
        "uploaded-animate-svg": "Alcontróse la etiqueta \"animate\" que puede cambiar href, usando l'atributu \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
        "uploaded-setting-event-handler-svg": "Ta torgada la configuración d'atributos del xestor de socesos. Alcontróse <code>&lt;$1 $2=\"$3\"&gt;</code> nel ficheru SVG xubíu.",
        "uploaded-setting-href-svg": "Usar la etiqueta «set» p'amestar l'atributu «href» al elementu padre ta torgao.",
        "expand_templates_preview_fail_html": "<em>Como {{SITENAME}} tien activáu el códigu HTML puru y hebo una perda de datos de la sesión, la vista previa ta tapecida como precaución escontra ataques de JavaScript.</em>\n\n<strong>Si esti ye un intentu llexítimu d'accesu a la vista previa, vuelvi a intentalo.</strong>\nSi inda nun funciona, intenta [[Special:UserLogout|salir]] y volver a entrar na to cuenta.",
        "expand_templates_preview_fail_html_anon": "<em>Como {{SITENAME}} tien activáu el códigu HTML puru y nun aniciasti sesión, la vista previa ta tapecida como precaución escontra ataques de JavaScript.</em>\n\n<strong>Si esti ye un intentu llexítimu d'accesu a la vista previa, intenta [[Special:UserLogin|entrar]] y vuelvi a intentalo.</strong>",
        "expand_templates_input_missing": "Fai falta dar daqué de testu d'entrada.",
-       "pagelanguage": "Selector de llingua de la páxina",
+       "pagelanguage": "Cambiar la llingua de la páxina",
        "pagelang-name": "Páxina",
        "pagelang-language": "Llingua",
        "pagelang-use-default": "Usar la llingua predeterminada",
        "pagelang-submit": "Unviar",
        "right-pagelang": "Cambiar la llingua de la páxina",
        "action-pagelang": "cambiar la llingua de la páxina",
-       "log-name-pagelang": "Rexistru de cambios de llingua",
+       "log-name-pagelang": "Rexistru de cambeos d'idioma",
        "log-description-pagelang": "Esti ye un rexistru de los cambios de llingua de les páxines.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} la llingua de la páxina $3 del $4 al $5.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} la llingua de $3 del $4 al $5.",
        "default-skin-not-found": "¡Vaya! L'aspeutu predetermináu pa la to wiki, definíu en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nLa instalación paez qu'incluye {{PLURAL:$4|el siguiente aspeutu|los siguientes aspeutos}}. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo {{PLURAL:$4|activalu|activalos y escoyer el predetermináu}}.\n\n$2\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o direutamente'l códigu fonte usando algún otru métodu. Esto ye d'esperar. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org's], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git pa descargar aspeutos].\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki.\n\n; Si acabes d'anovar MediaWiki:\n: MediaWiki 1.24 y más nuevu yá nun activa automáticamente los aspeutos instalaos (llei [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Pues apegar {{PLURAL:$5|la llinia siguiente|les llinies siguientes}} en <code>LocalSettings.php</code> p'activar {{PLURAL:$5|l'aspeutu instaláu|tolos aspeutos instalaos}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si acabes d'editar <code>LocalSettings.php</code>:\n: Vuelvi a comprobar los nomes de los aspeutos por si hai errores d'escritura.",
        "default-skin-not-found-no-skins": "L'aspeutu predetermináu pa la to wiki, definíu en <code>$wgDefaultSkin</code> como <code>$1</code> nun ta disponible.\n\nNun tienes aspeutos instalaos.\n\n; Si acabes d'instalar MediaWiki:\n: Probablemente instalasti dende git, o'l códigu fonte direutamente usando algún otru métodu. Esto ye d'esperar. MediaWiki 1.24 y más nuevu nun incluye nengún aspeutu nel repositoriu principal. Intenta instalar dellos aspeutos dende'l [https://www.mediawiki.org/wiki/Category:All_skins direutoriu d'aspeutos de mediawiki.org], asina:\n:* Descargando [https://www.mediawiki.org/wiki/Download l'instalador tarball], que vien con dellos aspeutos y estensiones. Pues copiar y apegar el direutoriu <code>skins/</code> d'ehí.\n:* Descargando paquetes tar d'aspeutu individuales de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*  [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git pa descargar aspeutos].\n: Facer esto nun tendría d'interferir col to repositoriu git si yes un desendolcador de MediaWiki. Llei [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] pa más información sobro cómo activar los aspeutos y escoyer el predetermináu.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activáu)",
index 9cf6493..f53fc65 100644 (file)
        "prefs-labs": "آزماییشی اؤزل‌لیکلر",
        "prefs-user-pages": "ایستیفاده‌چی صحیفه‌لری",
        "prefs-personal": "ایشلدن وئری‌لری",
-       "prefs-rc": "سون دَییشیکلیکلر",
+       "prefs-rc": "سÙ\88Ù\92Ù\86 Ø¯Ù\8eÛ\8cÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©Ù\84ر",
        "prefs-watchlist": "ایزله‌دیکلر",
        "prefs-editwatchlist": "ایزله‌دیکلریم صفحه‌‌لری دَییشدیر",
        "prefs-editwatchlist-label": "بۆتون ایزله‌دیکلرینیزین دَییشدیرمه‌سی:",
        "nchanges": "$1 {{PLURAL:$1|دَییشیکلیک}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|سون گوروش دن}}",
        "enhancedrc-history": "گئچمیش",
-       "recentchanges": "سون دَییشیکلیکلر",
+       "recentchanges": "سÙ\88Ù\92Ù\86 Ø¯Ù\8eÛ\8cÛ\8cØ´Û\8cÚ©Ù\84Û\8cÚ©Ù\84ر",
        "recentchanges-legend": "سون دَییشیکلیکلر سئچمه‌لری",
        "recentchanges-summary": "بۇ صفحه‌ده، بۇ ویکیده وئریلن ان سوْن دَییشیکلیکلری ایزله‌یین.",
        "recentchanges-noresult": "وئریلمیش دؤنم‌ده، بو معیارلارا تطبیق اولان دَییشدیرمه یوخدور.",
        "uncategorizedpages": "بؤلمه‌سیز صحیفه‌لر",
        "uncategorizedcategories": "بؤلمه‌سیز بؤلمه‌لر",
        "uncategorizedimages": "بؤلمه‌سیز شکیل‌لر",
-       "uncategorizedtemplates": "بؤلمه‌سیز شابلونلار",
+       "uncategorizedtemplates": "بؤلمه‌سیز شابلونلار",
        "unusedcategories": "ایستیفاده ائدیلمه‌میش بؤلمه‌لر",
        "unusedimages": "ایشلنمه‌میش فایل‌لار",
        "wantedcategories": "یسته نن بؤلمه‌لر",
        "deletepage": "صحیفه‌‌نی سیل",
        "confirm": "تصدیق ائت",
        "excontent": "کؤهنه مظمون: '$1'",
-       "excontentauthor": "ترکÛ\8cب: '$1 (Ù\88'[[Special:Contributions/$2|$2]]' ØªØ§Ø±Û\8cØ®Ú\86Ù\87â\80\8cدÙ\87 Ù\81اÙ\84Û\8cتÛ\8c Ù\82ئÛ\8cد Ø§Ø¦Ø¯Û\8cÙ\84Ù\86 Û\8cئگاÙ\86Ù\87 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8câ\80\8cدÛ\8cر)",
+       "excontentauthor": "صÙ\81Ø­Ù\87 Ø§Û\8cÚ\86Û\8cÙ\86دÙ\87â\80\8cÚ©Û\8cÙ\84ر Ø¨Û\87 Ø§Û\8cدÛ\8c: Â«$1» Ù\88 ØªÚ©Ø¬Ù\87 Ú\86اÙ\84Û\8cشاÙ\86 Â«[[Special:Contributions/$2|$2]] ([[User talk:$2|داÙ\86Û\8cØ´Û\8cÙ\82]])» Ø§Û\8cدÛ\8c.",
        "exbeforeblank": "سیلینمه‌دن اوولکی مزمون: '$1",
        "delete-confirm": "سیل $1",
        "delete-legend": "سیل",
        "sp-contributions-toponly": "تکجه سون نوسخه اولان دییشیکلری گؤستر",
        "sp-contributions-newonly": "تکجه صفحه یاراتماق دَییشیکلیکلرینی گؤستر",
        "sp-contributions-submit": "آختار",
-       "whatlinkshere": "بو صفحه‌یه باغلانتیلار",
+       "whatlinkshere": "بۇ صحیفه‌‌يه باغلانتیلار",
        "whatlinkshere-title": "«$1»-ه باغلانان صحیفه‌لر",
        "whatlinkshere-page": "صفحه:",
        "linkshere": "آشاغیداکی صفحه‌لر '''[[:$1]]'''-ه باغلانیب:",
        "allmessagesname": "آد",
        "allmessagesdefault": "دفالت دانیشیق متنی",
        "allmessagescurrent": "ایندیکی متن",
-       "allmessagestext": "بو مئدیا ویکی-ده اولان سیستئم مئساژلارینین سیاهی‌سی‌دیر. اگر مئدیا ویکی-نی لوکاللاش‌دیرماق ایشینده کؤمک ائتمک ایسییرسینیزسه، لطفاً [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net]-ا باش چکین.",
+       "allmessagestext": "بۇ مئدیاویکی-ده اوْلان سیستم مئساژلاری‌نین سیاهی‌سی‌دیر. اگر مئدیاویکی-نی لوْکاللاشدیرماق ایشینده کؤمک ائتمک ایسه‌يیرسینیزسه، لطفاً [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] و [//translatewiki.net translatewiki.net]-ه باش چکین.",
        "allmessagesnotsupportedDB": "'''$ wgUseDatabaseMessages''' باغ‌لی اولدوغو اوچون '{{ns:special}}: Allmessages ایستیفاده‌یه آچیق دئییل.",
        "allmessages-filter-legend": "سۆزگَج",
        "allmessages-filter": "خصوصی ائتمک وضعیتینه گؤره فیلترلی:",
        "others": "آیریلار",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|وسئر|یستیفاده‌چی}} $1",
        "anonusers": "{{SITENAME}} آنونیم {{PLURAL:$2|وسئر|یستیفاده‌چی}} $1",
-       "creditspage": "صحیفه اعتبارلاری",
+       "creditspage": "صفحه اعتبارلاری",
        "nocredits": "بو صحیفه اوچون هئچ بیر اعتیبار بیلگیلری ال‌ده دئییل.",
        "spamprotectiontitle": "فایداسیز یازما قوروما فیلتری",
        "spamprotectiontext": "سیز قئید ائتمک ایسته‌دیگینیز یازینین قاباغی، اِسپم فیلتِریله، آلیندی.\nبو ایش، اوندا ائشیک قره‌لیست‌ده اولان بیر سایتا باغلانتی وئرمک اوچون اولا بیلر.",
        "pageinfo-header-basic": "اساس معلومات‌لار",
        "pageinfo-header-edits": "تاریخچه نی دییشدیر",
        "pageinfo-header-restrictions": "صفحه دن محافظت ائله مک",
-       "pageinfo-header-properties": "صحیفه خصوصیت‌لری",
+       "pageinfo-header-properties": "صفحه خصوصیتلری",
        "pageinfo-display-title": "گؤستریلن باشلیق",
        "pageinfo-default-sort": "فرض ائدیلن سیرالاما آچاری",
        "pageinfo-length": "صحیفه‌‌ اوزونلوغو (بايت)",
        "img-lang-go": "گئت",
        "ascending_abbrev": "آرتما سیراسینا گؤره",
        "descending_abbrev": "آزالما سیراسینا گؤره",
-       "table_pager_next": "سÙ\88Ù\86راکÛ\8c ØµØ­Û\8cÙ\81ه",
+       "table_pager_next": "سÙ\88Ù\92Ù\86راکÛ\8c ØµÙ\81Ø­ه",
        "table_pager_prev": "قاباغکی صحیفه",
        "table_pager_first": "ایلک صحیفه‌‌",
        "table_pager_last": "سون صحیفه‌‌",
index c8e00f8..8cb4b42 100644 (file)
        "searchrelated": "ҡағылышлы",
        "searchall": "барыһы",
        "showingresults": "Түбәндә №&nbsp;<strong>$2</strong> һөҙөмтәнән башлап <strong>$1</strong> {{PLURAL:$1|һөҙөмтә}} күрһәтелгән.",
+       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> нәтижәнән <strong>$1</strong>| <strong>$3</strong> нәтижәләрҙән <strong>$1 — $2</strong>}}",
        "search-nonefound": "Был һорауға яуап биреүсе һөҙөмтәләр табылманы.",
        "powersearch-legend": "Киңәйтелгән эҙләү",
        "powersearch-ns": "Исем аралыҡтарында эҙләү:",
        "recentchanges-label-unpatrolled": "Был төҙәтеү ҡаралмаған әле",
        "recentchanges-label-plusminus": "Бит шул тиклем байтҡа үҙгәрҙе",
        "recentchanges-legend-heading": "'''Легенда:'''",
-       "recentchanges-legend-newpage": "$1 — яңы бит",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|Яңы биттәр исемлеген]] ҡарағыҙ)",
        "rcnotefrom": "Түбәндә '''$2''' башлап ('''$1''' тиклем) үҙгәртеүҙәр күрһәтелгән.",
        "rclistfrom": "$3 $2 башлап яңы үҙгәртеүҙәрҙе күрһәт.",
        "rcshowhideminor": "бәләкәй төҙәтеүҙәрҙе $1",
        "tooltip-pt-logout": "Сығырға",
        "tooltip-pt-createaccount": "Мотлаҡ булмаһа ла, Һеҙгә иҫәп яҙмаһы төҙөргө һәм системала танылырға тәҡдим итәбеҙ.",
        "tooltip-ca-talk": "Биттең эстәлеге тураһында фекерләшеү",
-       "tooltip-ca-edit": "ҺеÒ\99 Ð±Ñ\8bл Ð±Ð¸Ñ\82Ñ\82е Ò¯Ò\99гÓ\99Ñ\80Ñ\82Ó\99 Ð°Ð»Ð°Ò»Ñ\8bÒ\93Ñ\8bÒ\99. Ð\97инһаÑ\80, Ñ\8fÒ\99Ñ\8bп Ò¡Ñ\83йÑ\8bÑ\80 Ð°Ð»Ð´Ñ\8bнан Ò¡Ð°Ñ\80ап Ñ\81Ñ\8bÒ\93Ñ\8bÒ\93Ñ\8bÒ\99",
+       "tooltip-ca-edit": "Ð\91Ñ\8bл Ð±Ð¸Ñ\82Ñ\82е Ò¯Ò\99гÓ\99Ñ\80Ñ\82еÑ\80гÓ\99",
        "tooltip-ca-addsection": "Яңы бүлек эшләргә",
        "tooltip-ca-viewsource": "Был бит үҙгәртеүҙән һаҡланған.\nТик сығанаҡ текстын ғына ҡарай һәм күсереп ала алаһығыҙ.",
        "tooltip-ca-history": "Биттең төҙәтеүҙәр исемлеге",
        "tooltip-t-recentchangeslinked": "Был биттән һылтанған биттәрҙә һуңғы үҙгәртеүҙәр",
        "tooltip-feed-rss": "Был бит өсөн RSS-таҫма",
        "tooltip-feed-atom": "Был бит өсөн Atom-таҫма",
-       "tooltip-t-contributions": "Был ҡулланыусының кереткән өлөшөн ҡарарға",
+       "tooltip-t-contributions": "{{GENDER:$1|Был ҡулланыусының}} кереткән өлөшөн ҡарарға",
        "tooltip-t-emailuser": "Был ҡулланыусыға хат ебәрергә",
        "tooltip-t-upload": "Рәсем йәки тауыш эстәлекле файлдарҙы тейәргә",
        "tooltip-t-specialpages": "Барлыҡ махсус биттәр исемлеге",
        "spam_reverting": "$1 һылтанмаһыҙ һуңғы өлгөгә ҡайтарыу",
        "spam_blanking": "Бөтә өлгөләрҙә лә $1 һылтанмаһы бар, таҙартыу",
        "spam_deleting": "Бөтә өлгөләрҙә лә $1 һылтанма бар, таҙартыу бара",
-       "simpleantispam-label": "Спамға ҡаршы тикшереү.\nБыны '''ТУЛТЫРМАҒЫҘ'''!",
+       "simpleantispam-label": "Спамға ҡаршы тикшереү.\nБыны <strong>ТУЛТЫРМАҒЫҘ</strong>!",
        "pageinfo-title": "«$1» буйынса мәғлүмәт",
        "pageinfo-not-current": "Ғәфү итегеҙ, был мәғлүмәтте иҫке версиялар өсөн күрһәтеп булмай.",
        "pageinfo-header-basic": "Төп мәғлүмәт",
index 8daa609..682b540 100644 (file)
        "botpasswords-label-delete": "Выдаліць",
        "botpasswords-label-resetpassword": "Ачысьціць пароль",
        "botpasswords-label-grants": "Прыдатныя дазволы:",
+       "botpasswords-help-grants": "Кожны дазвол дае доступ да правоў удзельніка, якія ўжо мае рахунак удзельніка. Глядзіце [[Special:ListGrants|табліцу дазволаў]] дзеля дадатковых зьвестак.",
        "botpasswords-label-restrictions": "Абмежаваньні на выкарыстаньне:",
        "botpasswords-label-grants-column": "Дазволена",
+       "botpasswords-bad-appid": "Назва робата «$1» зьяўляецца няслушнай.",
+       "botpasswords-insert-failed": "Не атрымалася дадаць робата зь імем «$1». Магчыма, ён ужо быў дададзены?",
+       "botpasswords-update-failed": "Не атрымалася абнавіць робата зь імем «$1». Магчыма, ён быў выдалены?",
+       "botpasswords-created-title": "Пароль робата створаны",
        "resetpass_forbidden": "Пароль ня можа быць зьменены",
        "resetpass-no-info": "Для непасрэднага доступу да гэтай старонкі Вам неабходна ўвайсьці ў сыстэму.",
        "resetpass-submit-loggedin": "Зьмяніць пароль",
        "uploaded-script-svg": "У загружаным SVG-файле знойдзены небясьпечны элемэнт з падтрымкай сцэнароў «$1».",
        "uploaded-hostile-svg": "Знойдзены небясьпечны CSS у элемэнце стылю загружанага SVG-файла.",
        "uploaded-event-handler-on-svg": "Усталёўваць атрыбуты апрацоўніка падзеяў <code>$1=\"$2\"</code> не дазволена для SVG-файлаў.",
-       "uploaded-href-attribute-svg": "У SVG-файлах не дазволеныя href-атрыбуты <code>&lt;$1 $2=\"$3\"&gt;</code> зь нелякальнай мэтай (напрыклад, http://, javascript:, і г. д.).",
-       "uploaded-href-unsafe-target-svg": "У загружаным SVG-файле знойдзеная спасылка на небясьпечную мэту <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "У загружаным SVG-файле знойдзеная спасылка на небясьпечныя зьвесткі: URI-мэты <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "У загружаным SVG-файле знойдзены тэг «animate», які можа зьмяняць спасылку з дапамогай атрыбуту «from» <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Усталёўка атрыбутаў апрацоўкі падзеяў заблякаваная, у загружаным SVG-файле знойдзены код <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-href-svg": "Выкарыстаньне тэгу «set» для дадаваньня атрыбуту «href» у бацькоўскі элемэнт заблякаванае.",
        "whatlinkshere": "Спасылкі на старонку",
        "whatlinkshere-title": "Старонкі, якія спасылаюцца на $1",
        "whatlinkshere-page": "Старонка:",
-       "linkshere": "Наступныя старонкі спасылаюцца на '''[[:$1]]''':",
+       "linkshere": "Наступныя старонкі спасылаюцца на <strong>[[:$1]]</strong>:",
        "nolinkshere": "Ніводная старонка не спасылаецца на '''[[:$1]]'''.",
        "nolinkshere-ns": "Ніводная старонка не спасылаецца на '''[[:$1]]''' з выбранай прасторы назваў.",
        "isredirect": "старонка-перанакіраваньне",
        "istemplate": "уключэньне",
        "isimage": "спасылка на файл",
        "whatlinkshere-prev": "{{PLURAL:$1|папярэдняя|папярэднія}} $1",
-       "whatlinkshere-next": "{{PLURAL:$1|наступная|наступныя|наступныя}} $1",
+       "whatlinkshere-next": "{{PLURAL:$1|наступная|наступныя}} $1",
        "whatlinkshere-links": "← спасылкі",
        "whatlinkshere-hideredirs": "$1 перанакіраваньні",
        "whatlinkshere-hidetrans": "$1 уключэньні",
        "version-hook-subscribedby": "Падпісаны на",
        "version-version": "($1)",
        "version-no-ext-name": "[бяз назвы]",
-       "version-svn-revision": "(r$2)",
        "version-license": "Ліцэнзія MediaWiki",
        "version-ext-license": "Ліцэнзія",
        "version-ext-colheader-name": "Пашырэньне",
        "version-libraries-authors": "Аўтары",
        "redirect": "Перанакіраваньне да файла, удзельніка, старонкі, вэрсіі або журнала",
        "redirect-legend": "Перанакіраваньне да файла або старонкі",
-       "redirect-summary": "Гэтая спэцыяльная старонка перанакіруе да файла (паводле імя файла), старонкі (паводле нумару вэрсіі або старонкі) або старонкі ўдзельніка (паводле нумару ўдзельніка). Ужываньне: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] або [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "Гэтая спэцыяльная старонка перанакіруе да файла (паводле імя файла), старонкі (паводле нумару вэрсіі або старонкі), старонкі ўдзельніка (паводле нумару ўдзельніка) або запісу ў журнале падзеяў (паводле нумару ў журнале). Ужываньне: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]],[[{{#Special:Redirect}}/user/101]] або [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Перайсьці",
        "redirect-lookup": "Шукаць паводле:",
        "redirect-value": "Значэньне:",
        "expand_templates_preview": "Папярэдні прагляд",
        "expand_templates_preview_fail_html": "<em>Праз тое што {{SITENAME}} мае ўключаным сыры HTML і адбылася страта зьвестак сэсіі, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, паспрабуйце яшчэ раз.</strong>\nКалі гэта не спрацуе, паспрабуйце [[Special:UserLogout|выйсьці]] і ўвайсьці яшчэ раз.",
        "expand_templates_preview_fail_html_anon": "<em>Праз тое што {{SITENAME}} мае ўключаным сыры HTML і вы не ўвайшлі ў сыстэму, папярэдні прагляд схаваны, як засьцярога ад атакаў з дапамогай JavaScript.</em>\n\n<strong>Калі гэта слушная спроба перадпрагляду, калі ласка, [[Special:UserLogin|увайдзіце ў сыстэму]] і паспрабуйце яшчэ раз.</strong>",
-       "pagelanguage": "Ð\92Ñ\8bбаÑ\80 мовы старонкі",
+       "pagelanguage": "Ð\97Ñ\8cмена мовы старонкі",
        "pagelang-name": "Старонка",
        "pagelang-language": "Мова",
        "pagelang-use-default": "Ужываць мову па змоўчаньні",
        "action-pagelang": "зьмену мовы старонкі",
        "log-name-pagelang": "Журнал зьменаў мовы",
        "log-description-pagelang": "Гэта журнал зьменаў мовы старонак.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} мову старонкі $3 з $4 на $5.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} мову старонкі $3 з $4 на $5",
        "default-skin-not-found": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code dir=\"ltr\">$wgDefaultSkin</code> як <code>$1</code> недаступная.\n\nВашае ўсталяваньне, падобна, уключае {{PLURAL:$4|наступную тэму афармленьне|наступныя тэмы афармленьня}}. Глядзіце старонку [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць {{PLURAL:$4|яе|іх і абраць тэму па змоўчаньні}}.\n\n$2\n\n; Калі вы толькі што ўсталявалі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins каталёгу тэмаў mediawiki.org]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code>skins/</code> зь яго.\n:* Спампуйце tarball-усталёўнікі для асобных тэмаў з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Выкарыстайце Git, каб спампаваць тэмы афармленьня].\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча.\n\n; Калі вы толькі што абнавілі MediaWiki:\n: MediaWiki вэрсіі 1.24 і навейшыя больш не падключаюць тэмы афармленьня аўтаматычна (глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Інструкцыя:Аўтаматычнае выяўленьне тэмаў афармленьня]). Вы можаце дадаць {{PLURAL:$5|наступны радок у|наступныя радкі ў}} <code>LocalSettings.php</code>, каб падключыць {{PLURAL:$5|усталяваную тэму|усе ўсталяваныя тэмы}} афармленьня:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Калі вы толькі што зьмянілі <code>LocalSettings.php</code>:\n: Пераправерце назвы тэмаў афармленьня на наяўнасьць памылак.",
        "default-skin-not-found-no-skins": "Упс! Тэма афармленьня па змоўчаньні для вашай вікі, вызначаная ў <code>$wgDefaultSkin</code> як <code>$1</code>, недаступная.\n\nВы ня маеце ўсталяваных тэмаў афармленьня.\n\n; Калі вы толькі што ўсталявалі або абнавілі MediaWiki:\n: Напэўна вы ўсталявалі з git або наўпрост з крынічнага коду з ужываньнем іншага мэтаду. Гэта чакана. MediaWiki вэрсіі 1.24 і навейшыя ня ўтрымліваюць тэмы афармленьня ў галоўным сховішчы. Паспрабуйце ўсталяваць некалькі тэмаў афармленьня з [https://www.mediawiki.org/wiki/Category:All_skins каталёгу тэмаў mediawiki.org]:\n:* Спампуйце [https://www.mediawiki.org/wiki/Download tarball-усталёўнік], які ўтрымлівае некалькі тэмаў і пашырэньняў. Вы можаце скапіяваць каталёг <code dir=\"ltr\">skins/</code> зь яго.\n:* Спампуйце tarball-усталёўнікі для асобны тэмаў афармленьня з [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Выкарыстайце Git, каб спампаваць тэмы афармленьня].\n: Калі вы распрацоўнік MediaWiki, гэта не павінна ўплываць на вашае git-сховішча. Глядзіце [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя:Наладка тэмаў афармленьня] дзеля інфармацыі, як падключыць іх і абраць тэму па змоўчаньні.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (уключана)",
index 2df341f..1ebe1b4 100644 (file)
        "botpasswords-label-delete": "অপসারণ",
        "botpasswords-label-resetpassword": "পাসওয়ার্ড পুনঃস্থাপন",
        "botpasswords-label-grants": "প্রয়োগযোগ্য মঞ্জুরি:",
+       "botpasswords-label-grants-column": "অনুমদিত",
+       "botpasswords-bad-appid": "\"$1\" বট নামটি সঠিক নয়।",
+       "botpasswords-insert-failed": "\"$1\" নামের বট যুক্ত করা যায়নি। আগে থেকেই তালিকায় রয়েছে?",
+       "botpasswords-update-failed": "\"$1\" নামের বট যুক্ত করা যায়নি। আগে অপসারণ করা হয়েছিল?",
+       "botpasswords-created-title": "বট পাসওয়ার্ড তৈরী করা হয়েছে",
+       "botpasswords-created-body": "\"$1\", বট পাসওয়ার্ড তৈরী করা হয়েছে।",
+       "botpasswords-updated-title": "বট পাসওয়ার্ড আপডেট করা হয়েছে",
+       "botpasswords-updated-body": "\"$1\" বট পাসওয়ার্ডটি সফলভাবে হালনাগাদ করা হয়েছে।",
+       "botpasswords-deleted-title": "বট পাসওয়ার্ড অপসারণ করা হয়েছে",
        "resetpass_forbidden": "পাসওয়ার্ড পরিবর্তন করা সম্ভব নয়",
        "resetpass-no-info": "এই পাতাটিতে সরাসরি প্রবেশাধিকার পেতে আপনাকে অবশ্যই লগইন করতে হবে।",
        "resetpass-submit-loggedin": "পাসওয়ার্ড পরিবর্তন",
        "right-changetags": "নির্দিষ্ট সংস্করণ এবং দীর্ঘ সম্পাদনাগুলোতে [[Special:Tags|ট্যাগ]] সংযোজন ও অপসারণ করুন",
        "grant-group-email": "ইমেইল পাঠান",
        "grant-createaccount": "অ্যাকাউন্ট তৈরি করুন",
+       "grant-editmycssjs": "আপনার সিএসএস/জাভাস্ক্রিপ্ট সম্পাদনা করুন",
        "grant-editmyoptions": "আপনার ব্যবহারকারী পছন্দসমূহ সম্পাদনা করুন",
        "grant-editmywatchlist": "আপনার নজরতালিকা সম্পাদনা করুন",
+       "grant-basic": "মৌলিক অধিকার",
        "newuserlogpage": "ব্যবহারকারী সৃষ্টির লগ",
        "newuserlogpagetext": "এটি নতুন ব্যবহারকারী সৃষ্টির লগ",
        "rightslog": "ব্যবহারকারীর অধিকার লগ",
        "foreign-structured-upload-form-label-infoform-categories": "বিষয়শ্রেণীসমূহ",
        "foreign-structured-upload-form-label-infoform-date": "তারিখ",
        "foreign-structured-upload-form-label-not-own-work-local-local": "এছাড়াও আপনি [[Special:Upload|ডিফল্ট আপলোডের পাতা]] চেষ্টা করতে পারেন।",
+       "foreign-structured-upload-form-2-label-ccbysa": "[https://creativecommons.org/licenses/by-sa/4.0/deed.bn ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন-শেয়ার অ্যালাইক ৪.০] লাইসেন্সের আওতায় এটি ইন্টারনেটে <strong>চিরতরে প্রকাশ করা ঠিক হবে</strong>",
        "foreign-structured-upload-form-3-label-yes": "হ্যাঁ",
        "foreign-structured-upload-form-3-label-no": "না",
        "backend-fail-stream": "\"$1\" ফাইলের স্ট্রিম দেখানো যাচ্ছে না।",
        "changecontentmodel-reason-label": "কারণ:",
        "changecontentmodel-success-title": "বিষয়বস্তুর প্রতিরূপ পরিবর্তিত হয়েছিলো",
        "changecontentmodel-success-text": "[[:$1]]-এর বিষয়বস্তুর ধরণ পরিবর্তন হয়েছে।",
+       "log-name-contentmodel": "বিষয়বস্তুর মডেল পরিবর্তন লগ",
        "logentry-contentmodel-change": "$1 $3 পাতার বিষয়বস্তুর মডেল \"$4\" থেকে \"$5\"-এ {{GENDER:$2|পরিবর্তন করেছেন}}",
        "logentry-contentmodel-change-revertlink": "প্রত্যাবর্তন",
        "logentry-contentmodel-change-revert": "প্রত্যাবর্তন",
        "export-download": "ফাইল হিসেবে সংরক্ষণ করা হোক",
        "export-templates": "টেমপ্লেট অন্তর্ভুক্তি",
        "export-pagelinks": "সম্পর্কিত পাতাগুলো এই ধাপ পর্যন্ত যুক্ত করো:",
+       "export-manual": "হাতেকরে পাতা যোগ করুন:",
        "allmessages": "সিস্টেম বার্তাসমূহ",
        "allmessagesname": "নাম",
        "allmessagesdefault": "আদি টেক্সট",
        "pageinfo-category-files": "ফাইলের সংখ্যা",
        "markaspatrolleddiff": "পরীক্ষিত হিসেবে চিহ্নিত করুন",
        "markaspatrolledtext": "এই পাতাটি পরীক্ষিত হিসেবে চিহ্নিত করুন",
+       "markaspatrolledtext-file": "এই ফাইলের সংস্করণ পরীক্ষিত হিসেবে চিহ্নিত করুন",
        "markedaspatrolled": "পরীক্ষিত বলে চিহ্নিত করুন",
        "markedaspatrolledtext": "আপনার নির্বাচিত সংস্করণ [[:$1]] পরীক্ষিত বলে চিহ্নিত করা হয়েছে।",
        "rcpatroldisabled": "সাম্প্রতিক পরিবর্তন প্যাট্রোল নিষ্ক্রিয়",
        "widthheightpage": "$1 × $2, $3টি {{PLURAL:$1|পাতা}}",
        "file-info": "ফাইলের আকার: $1, MIME ধরণ: $2",
        "file-info-size": "$1 × $2 পিক্সেল, ফাইলের আকার: $3, এমআইএমই ধরণ: $4",
-       "file-info-size-pages": "$1 × $2 পিক্সেল, fফাইলের আকার: $3, MIME ধরন: $4, $5 {{PLURAL:$5|পাতা|পাতাসমূহ}}",
+       "file-info-size-pages": "$1 × $2 পিক্সেল, ফাইলের আকার: $3, MIME ধরন: $4, $5টি {{PLURAL:$5|পাতা}}",
        "file-nohires": "এর চেয়ে বেশি রেজোলিউশন লভ্য নয়।",
        "svg-long-desc": "এসভিজি ফাইল, সাধারণত $1 × $2 পিক্সেল, ফাইলের আকার: $3",
        "svg-long-desc-animated": "এনিমেটেড এসভিজি ফাইল, সাধারণত $1 × $2 পিক্সেল, ফাইলের আকার: $3",
        "exif-morepermissionsurl": "অতিরিক্ত লাইসেন্সিং তথ্যাদি",
        "exif-attributionurl": "যখন এই কাজটি পুনরায় ব্যবহার করবেন, অনুগ্রহ করে এই লিংকটি যোগ করুন",
        "exif-preferredattributionname": "যখন এই কাজটি পুনরায় ব্যবহার করবেন, অনুগ্রহ করে প্রণেতাকে ক্রেডিট দিন",
-       "exif-pngfilecomment": "পিএনজি ফাইল কমেন্ট",
+       "exif-pngfilecomment": "পিএনজি ফাইলের মন্তব্য",
        "exif-disclaimer": "দাবিত্যাগ",
        "exif-contentwarning": "বিষয়বস্তু সতর্কবার্তা",
-       "exif-giffilecomment": "জিআইএফ ফাইল কমেন্ট",
+       "exif-giffilecomment": "জিআইএফ ফাইলের মন্তব্য",
        "exif-intellectualgenre": "উপাদানের প্রকার",
        "exif-subjectnewscode": "বিষয় কোড",
        "exif-scenecode": "আইপিটিসি সিন কোড",
        "exif-compression-4": "সিসিআইটিটি গ্রুপ ৪ ফ্যাক্স এনকোডিং",
        "exif-copyrighted-true": "কপিরাইটকৃত",
        "exif-copyrighted-false": "কপিরাইট সংক্রান্ত তথ্য নেই",
+       "exif-photometricinterpretation-1": "কালো এবং সাদা (কালো হল 0)",
        "exif-unknowndate": "অজানা তারিখ",
        "exif-orientation-1": "সাধারণ",
        "exif-orientation-2": "অনুভূমিকভাবে উল্টানো",
        "scarytranscludefailed-httpstatus": "[$1: HTTP $2 এর জন্য টেমপ্লেট আনা বিফল হয়েছে]",
        "scarytranscludetoolong": "[URL অতিরিক্ত দীর্ঘ]",
        "deletedwhileediting": "'''সতর্কীকরণ''': আপনি পাতাটি সম্পাদনা শুরু করার পরে তা মুছে ফেলা হয়েছে!",
-       "confirmrecreate": "আপনি সম্পাদনা শুরু করার পর ব্যবহারকারী [[User:$1|$1]] ([[User talk:$1|আলাপ]]) এই পাতাটি মুছে দিয়েছেন, নিচের কারণ দেখিয়ে:\n: ''$2''\nআপনি সত্যিই যে পাতাটি পুনরায় সৃষ্টি করতে চান, তা দয়া করে নিশ্চিত করুন।",
-       "confirmrecreate-noreason": "আপনি সম্পাদনা শুরু করার পর ব্যবহারকারী [[User:$1|$1]] ([[User talk:$1|আলাপ]]) এই পাতাটি মুছে দিয়েছেন। আপনি সত্যিই যে পাতাটি পুনরায় সৃষ্টি করতে চান, তা দয়া করে নিশ্চিত করুন।",
+       "confirmrecreate": "আপনি সম্পাদনা শুরু করার পর ব্যবহারকারী [[User:$1|$1]] ([[User talk:$1|আলাপ]]) এই পাতাটি মুছে দিয়েছেন, নিচের কারণ দেখিয়ে:\n: <em>$2</em>\nআপনি সত্যিই যে পাতাটি পুনরায় সৃষ্টি করতে চান, তা দয়া করে নিশ্চিত করুন।",
+       "confirmrecreate-noreason": "আপনি সম্পাদনা শুরু করার পর ব্যবহারকারী [[User:$1|$1]] ([[User talk:$1|আলাপ]]) এই পাতাটি {{GENDER:$1|মুছে}} দিয়েছেন। আপনি সত্যিই যে পাতাটি পুনরায় সৃষ্টি করতে চান, তা দয়া করে নিশ্চিত করুন।",
        "recreate": "পুনরায় তৈরি করো",
        "confirm_purge_button": "ঠিক আছে",
        "confirm-purge-top": "এই পাতার ক্যাশে পরিষ্কার করতে চান?",
        "htmlform-title-not-exists": "$1-এর অস্তিত্ব নেই।",
        "htmlform-user-not-exists": "<strong>$1</strong>-এর অস্তিত্ব নেই।",
        "htmlform-user-not-valid": "<strong>$1</strong> একটি বৈধ ব্যবহারকারীর নাম নয়।",
-       "sqlite-has-fts": "$1 সহ পূর্ণ টেক্সট সার্চ সমর্থন",
-       "sqlite-no-fts": "$1 বাদে পূর্ণ টেক্সট সার্চ সমর্থন",
+       "sqlite-has-fts": "$1 সহ পূর্ণ-পাঠ্য অনুসন্ধান সমর্থন",
+       "sqlite-no-fts": "$1 বাদে পূর্ণ-পাঠ্য অনুসন্ধান সমর্থন",
        "logentry-delete-delete": "$1 কর্তৃক $3 পাতাটি অপসারিত হয়েছে",
        "logentry-delete-restore": "$1 কর্তৃক $3 পাতাটি {{GENDER:$2|ফিরিয়ে আনা}} হয়েছে",
        "logentry-delete-event": "$1 {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহের}} দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
        "api-error-blacklisted": "অনুগ্রহ করে অপর কোনো বর্ণনামূলক নাম ব্যবহার করুন।",
        "sessionprovider-generic": "$1টি সেশন",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "কুকি-ভিত্তিক সেশন",
+       "sessionprovider-nocookies": "কুকি নিষ্ক্রিয় করা। নিশ্চিত করুন যে আপনার কুকি সক্রিয় আছে এবং আবার শুরু করুন।",
        "randomrootpage": "অজানা মূল পাতা"
 }
index d52c605..f688bae 100644 (file)
        "rcshowhidemine": "$1 moje izmjene",
        "rcshowhidemine-show": "Prikaži",
        "rcshowhidemine-hide": "Sakrij",
-       "rcshowhidecategorization": "$1 kategorizaciju stranice",
+       "rcshowhidecategorization": "$1 kategorizaciju stranica",
        "rcshowhidecategorization-show": "Prikaži",
        "rcshowhidecategorization-hide": "Sakrij",
        "rclinks": "Prikaži posljednjih $1 izmjena u posljednjih $2 dana<br />$3",
        "uploaded-script-svg": "Pronađen skriptni element \"$1\" u postavljenoj SVG datoteci.",
        "uploaded-hostile-svg": "Pronađen nesiguran CSS u stilskom elementu postavljene SVG datoteke.",
        "uploaded-event-handler-on-svg": "Nije dozvoljeno postavljanje atributa koji kontroliraju događaje <code>$1=\"$2\"</code> u SVG datotekama.",
-       "uploaded-href-attribute-svg": "href atributi <code>&lt;$1 $2=\"$3\"&gt;</code> sa nelokalnom metom (npr. http://, javascript:, etc) nisu dozvoljeni u SVG datotekama.",
        "uploaded-href-unsafe-target-svg": "Pronađen href sa nesigurnom metom <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
        "uploaded-animate-svg": "Pronađena \"animate\" oznaka koja možda mijenja href koristeći se \"from\" atributom <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
        "uploaded-setting-event-handler-svg": "Postavljanje kontrole događaja je blokirano, pronađeno <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
        "filename-thumb-name": "Izgleda da je naslov u obliku sličice. Nemojte postavljati sličice nazad na istu wiki. Ako je riječ o nečemu drugom, popravite naziv datoteke tako da ima više značenja i da nema prefiks sličice.",
        "filename-bad-prefix": "Naziv datoteke koju postavljate počinje sa '''\"$1\"''', što je naziv koji obično automatski dodjeljuju digitalni fotoaparati i kamere.\nMolimo Vas da odaberete naziv datoteke koji opisuje njen sadržaj.",
        "filename-prefix-blacklist": " #<!-- ostavite ovu liniju onakvom kakva jeste --> <pre>\n# Sintaksa je slijedeća:\n#   * Sve od karaktera \"#\" pa do kraja je komentar\n#   * Svaka neprazna linija je prefiks za tipična imena datoteka koja automatski dodjeljuje digitalna kamera\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # neki mobilni telefoni\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # razni\n #</pre> <!-- ostavite ovu liniju onakvom kakva jeste -->",
-       "upload-success-subj": "Uspješno slanje",
-       "upload-success-msg": "Vaša datoteka iz [$2] je uspješno postavljena. Dostupna je ovdje: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problem pri postavljanju",
-       "upload-failure-msg": "Nastao je problem s Vašim postavljanjem sa [$2]:\n\n$1",
-       "upload-warning-subj": "Upozorenje pri slanju",
-       "upload-warning-msg": "Nastao je problem sa vašim postavljanjem sa [$2]. Morate se vratiti na [[Special:Upload/stash/$1|formu za postavljanje]] kako biste riješili ovaj problem.",
        "upload-proto-error": "Pogrešan protokol",
        "upload-proto-error-text": "Postavljanje sa vanjske lokacije zahtjeva URL-ove koji počinju sa <code>http://</code> ili <code>ftp://</code>.",
        "upload-file-error": "Unutrašnja greška",
        "wlheader-showupdated": "Stranice koje su izmijenjene otkad ste ih posljednji put posjetili prikazane su <strong>podebljanim slovima</strong>.",
        "wlnote": "Ispod {{PLURAL:$1|je najskorija izmjena|su <strong>$1</strong> najskorije izmjene|<strong>$1</strong> najskorijih izmjena}} načinjenih {{PLURAL:$2|posljednjeg sata|u posljednjih <strong>$2</strong> sata|u posljednjih <strong>$2</strong> sati}}, od $3, $4.",
        "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
-       "watchlistall2": "sve",
        "watchlist-hide": "Sakrij",
        "watchlist-submit": "Prikaži",
        "wlshowtime": "Prikaži posljednjih:",
index 38e90d3..c2d5f48 100644 (file)
        "laggedslavemode": "Avís: La pàgina podria mancar de modificacions recents.",
        "readonly": "La base de dades està bloquejada",
        "enterlockreason": "Escriviu una raó pel bloqueig, així com una estimació de quan tindrà lloc el desbloqueig",
-       "readonlytext": "La base de dades està temporalment bloquejada segurament per tasques de manteniment, després de les quals es tornarà a la normalitat.\n\nL'administrador que l'ha bloquejada ha donat aquesta explicació: $1",
+       "readonlytext": "La base de dades està temporalment bloquejada a noves entrades i altres tasques de manteniment, segurament per tasques rutinàries de manteniment, després de les quals es tornarà a la normalitat.\n\nL'administrador que l'ha bloquejada ha donat aquesta explicació: $1",
        "missing-article": "La base de dades no ha trobat el text d'una pàgina que hauria d'haver trobat, anomenada «$1» $2.\n\nNormalment això passa perquè s'ha seguit una diferència desactualitzada o un enllaç d'historial a una pàgina que s'ha suprimit.\n\nSi no fos el cas, podríeu haver trobat un error en el programari.\nAviseu-ho llavors a un [[Special:ListUsers/sysop|administrador]], deixant-li clar l'adreça URL causant del problema.",
        "missingarticle-rev": "(revisió#: $1)",
        "missingarticle-diff": "(dif: $1, $2)",
        "virus-scanfailed": "escaneig fallit (codi $1)",
        "virus-unknownscanner": "antivirus desconegut:",
        "logouttext": "'''Heu finalitzat la sessió.'''\n\nTingueu en compte que, fins que buideu la memòria cau del navegador, algunes pàgines poden continuar mostrant-se com si encara estiguéssiu en una sessió.",
+       "cannotlogoutnow-title": "Ara no es pot finalitzar la sessió",
+       "cannotlogoutnow-text": "No es pot finalitzar la sessió quan s'utilitza $1.",
        "welcomeuser": "Benvingut, $1!",
        "welcomecreation-msg": "El vostre compte ha estat creat.\nNo oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITENAME}}]].",
        "yourname": "Nom d'usuari",
        "remembermypassword": "Recorda la contrasenya entre sessions (per un màxim de $1 {{PLURAL:$1|dia|dies}})",
        "userlogin-remembermypassword": "Mantén-me connectat",
        "userlogin-signwithsecure": "Connexió segura",
+       "cannotloginnow-title": "Ara no es pot iniciar la sessió",
+       "cannotloginnow-text": "No es pot iniciar la sessió quan s'utilitza $1.",
        "yourdomainname": "El vostre domini",
        "password-change-forbidden": "No podeu canviar les contrasenyes en aquest wiki.",
        "externaldberror": "Hi ha hagut un error en la base de dades d'autenticació o bé no teniu permís per a actualitzar el vostre compte extern.",
        "grant-group-file-interaction": "Interacció amb fitxes multimèdia",
        "grant-group-watchlist-interaction": "Interacció amb la vostra llista de seguiment",
        "grant-group-email": "Enviament de correu",
+       "grant-createaccount": "Crea comptes",
+       "grant-createeditmovepage": "Crea, modifica i reanomena pàgines",
+       "grant-delete": "Suprimeix pàgines, revisions i entrades de registre",
        "newuserlogpage": "Registre de creació d'usuaris",
        "newuserlogpagetext": "Aquest és un registre de creació de nous usuaris.",
        "rightslog": "Registre dels permisos d'usuari",
        "uploaded-script-svg": "S’ha trobat l’element programable «$1» al fitxer SVG carregat.",
        "uploaded-hostile-svg": "S’ha trobat codi CSS no segur a l’element d’estil del fitxer SVG carregat.",
        "uploaded-event-handler-on-svg": "No es permet establir els atributs de gestió d’esdeveniments <code>$1=\"$2\"</code> en fitxers SVG.",
-       "uploaded-href-attribute-svg": "No es permeten els atributs d’«href» <code>&lt;$1 $2=\"$3\"&gt;</code> amb objectius no locals (p. ex., http:// i javascript:) als fitxers SVG.",
        "uploaded-href-unsafe-target-svg": "S’ha trobat un element «href» amb un objectiu no segur <code>&lt;$1 $2=\"$3\"&gt;</code> al fitxer SVG carregat.",
        "uploaded-animate-svg": "S'ha trobat l'etiqueta «animate» que pot estar canviant l'href mitjançant l'atribut <code>&lt;$1 $2=\"$3\"&gt;</code> en el fitxer SVG carregat.",
        "uploadscriptednamespace": "Aquest fitxer SVG conté un espai de noms \"$1\" no autoritzat",
index e35509e..2601677 100644 (file)
@@ -9,7 +9,8 @@
                        "Mywood",
                        "Impersonator 1",
                        "LNDDYL",
-                       "唐吉訶德的侍從"
+                       "唐吉訶德的侍從",
+                       "Ztl8702"
                ]
        },
        "tog-underline": "下劃綫鏈接",
        "qbpageoptions": "茲蜀頁",
        "qbmyoptions": "我其頁面",
        "faq": "經稠碰著其問題",
-       "faqpage": "Project:ç\93稠碰è\91\97其問題",
+       "faqpage": "Project:稠å\95\8f其問題",
        "actions": "動作",
        "namespaces": "命名空間",
        "variants": "變體",
        "createaccountreason": "原因:",
        "createacct-reason": "原因",
        "createacct-reason-ph": "汝奚勢復想開另外蜀隻賬戶?",
-       "createacct-captcha": "安全檢查",
-       "createacct-imgcaptcha-ph": "將汝敆懸頂看見其文字拍出來",
        "createacct-submit": "開賬戶",
        "createacct-another-submit": "新建另外蜀萆賬號",
        "createacct-benefit-heading": "{{SITENAME}}是共汝蜀様其儂做其。",
        "passwordreset-username": "用戶名:",
        "passwordreset-domain": "域名:",
        "passwordreset-email": "電批地址:",
-       "passwordreset-emailsent": "蜀萆密碼重新設置其電批已經寄出去了。",
+       "passwordreset-emailsentemail": "蜀萆密碼重新設置其電批已經寄出去了。",
        "passwordreset-emailsent-capture": "蜀萆密碼重新設置其電批已經寄出去了,內容就是生下底總款。",
        "changeemail": "修改電批其地址",
+       "changeemail-header": "修改賬戶電子郵件地址",
        "changeemail-oldemail": "現刻時其電批地址:",
        "changeemail-newemail": "新其電批地址:",
        "changeemail-none": "(無)",
        "sourcefilename": "源文件名:",
        "destfilename": "目標文件名:",
        "watchthisupload": "監視茲文件",
-       "upload-success-subj": "成功上傳",
        "license": "版權聲明:",
        "license-header": "版權說明",
        "imgfile": "文件",
        "linksearch-ok": "尋討",
        "linksearch-line": "$1是趁$2𡅏鏈接過其",
        "emailuser": "寄電批乞茲隻用戶",
-       "emailpage": "寄電子郵件乞用戶",
        "defemailsubject": "{{SITENAME}}其用戶「$1」寄來其批",
        "noemailtitle": "無電批地址",
        "emailfrom": "趁:",
        "move-page-legend": "移動頁面",
        "movepagetext": "使下底其表單重新乞茲蜀頁起蜀萆名字,移動伊共伊所有其歷史遘伊其新名字。\n舊其標題會變成新其標題其重定向頁。\n汝會使自動更新重定向許蜀點遘原底其標題。\n如果伊結果伓是總款其話,汝著檢查蜀下[[Special:DoubleRedirects|雙重重定向]]或者[[Special:BrokenRedirects|獃其重定向]]。\n汝有責任讓頁面鏈接遘正確其地方。\n\n注意儷是許塊已經有蜀隻頁面,噲就'''無能耐'''移動過了,除開噲儷是蜀萆重定向並且無舊底其修改歷史。\n嚽其意思就是講儷是汝名字起綻了,汝會使將茲蜀萆頁面重新起伊原底其名字,但是𣍐使覆蓋已經有其頁面。\n\n'''警告!'''\n嚽可能會對一般頁面造成盡大其並且無能耐想遘其改變;\n起動汝著敆做之前會意總款做其後果。",
        "movepagetalktext": "相關其討論頁會自動共伊移遘'''無挃''':\n* 汝其新其用戶名已經有蜀頁有內容其討論頁,或者\n* 汝取消下底其框框。\n\n若總款,汝會使自家移動或者是合併頁面。",
-       "movearticle": "移動頁面",
        "movenologintext": "著[[Special:UserLogin|躒入]]才有能耐移動頁面。",
        "newtitle": "遘新題目:",
        "move-watch": "監視茲頁",
        "movelogpage": "移動日誌",
        "movelogpagetext": "下底是乞移動過其頁其單單。",
        "movereason": "原因:",
-       "delete_and_move": "刪掉並且移動",
        "delete_and_move_confirm": "正式,刪掉茲蜀頁",
        "allmessages": "系統消息",
        "allmessagesname": "名",
index ed2dd59..d3b4ae5 100644 (file)
        "recentchangeslinked-page": "АгӀон цӀе:",
        "recentchangeslinked-to": "Кхечу агӀор, гайта хийцамаш агӀонашца, хӀоттийначу агӀонтӀе хьажорг йолуш",
        "recentchanges-page-added-to-category": "[[:$1]] категори чу тоьхна",
+       "recentchanges-page-removed-from-category": "[[:$1]] дӀаяьккхина категори чура",
        "upload": "Файл чуяккхар",
        "uploadbtn": "Файл чуяккхар",
        "reuploaddesc": "Юху гӀо файл чуйоккху агӀоне",
        "years": "{{PLURAL:$1|$1 шо|$1 шо}}",
        "ago": "$1 хьалха",
        "just-now": "хӀинца",
-       "hours-ago": "$1 {{PLURAL:$1|сахьт}}",
+       "hours-ago": "$1 {{PLURAL:$1|сахьт}} хьалха",
        "minutes-ago": "$1 {{PLURAL:$1|минот}} хьалха",
        "seconds-ago": "$1 {{PLURAL:$1|секунд}} хьалха",
        "monday-at": "оршотан дийнахь $1",
index 3ee81bd..e07376f 100644 (file)
        "laggedslavemode": "ئاگاداری: لەوانەیە لاپەڕەکە نوێکردنەکان لە بەر نەگرێت.",
        "readonly": "بنکەدراوە داخراوە",
        "enterlockreason": "هۆیەک بۆ قوفڵ‌کردنەکە بنووسە کە  تێیدا کاتی کردنەوەی قۆفڵەکە باس کرابێت",
-       "readonlytext": "بÙ\86Ú©Û\95دراÙ\88Û\95Ú©Û\95 Ù\84Û\95Ù\85 Ú©Ø§ØªÛ\95دا  Ù\84Û\95بÛ\95ر Ú\86اکسازÛ\8c Ø¦Ø§Ø³Ø§Û\8cÛ\8c Ø¨Û\86 Ù\86Ù\88سÛ\8cÙ\86Û\8c Ù\86Ù\88Û\8e Ù\88 Ø¯Û\95ستکارÛ\8c Ù\82Ù\88Ù\81Úµ Ú©Ø±Ø§Ù\88Ù\87. Ø¯Ù\88اÛ\8c Ø¦Û\95Ù\88Û\95 Ø¦Û\95گرÛ\8eتÛ\95Ù\88Û\95 Ø¨Û\86 Ø¦Ø§Ø³ØªÛ\8c Ø®Û\86Û\8c.\n\nئÛ\95Ù\88 Ø¨Û\95Ú\95Û\8eÙ\88بÛ\95رÛ\95Û\8c Ú©Û\95 Ù\82Ù\88Ù\81ÚµÛ\8c Ú©Ø±Ø¯Ù\88Ù\88Ù\87 Ø¦Û\95Ù\85 Ú\95Ù\88Ù\88Ù\86â\80\8cکردÙ\86Û\95Ù\88Û\95Û\8c Ù\86Ù\88Ù\88سÛ\8cÙ\88Û\95 : $1",
+       "readonlytext": "داتابÛ\8eس Ø¦Û\8eستا Ø¨Û\95 Ú¾Û\86Û\8c Ø¯Ø§Ù\86اÙ\86Û\8c Ø¨Ø§Ø¨Û\95تÛ\8c Ù\86Ù\88Û\8e Ù\88 Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\8c Ø¯Û\8cÚ©Û\95 Ø¯Ø§Ø®Ø±Ø§Ù\88Û\95Ø\8c Ù\84Û\95Ù\88اÙ\86Û\95Û\8cÛ\95 Ø¨Û\95 Ù\85Û\95بÛ\95ستÛ\8c Ú\86اکسازÛ\8cÛ\8c Ú\95Û\86تÛ\8cÙ\86 Ø¨Û\8eت Ù\88 Ø¯Û\95Ú¯Ú\95Û\8eتÛ\95Ù\88Û\95 Ø¨Û\86 Ø¯Û\86Ø®Û\8c Ø¦Ø§Ø³Ø§Û\8cÛ\8c.\n\nئÛ\95Ù\88 Ø¨Û\95Ú\95Û\8eÙ\88Û\95بÛ\95رÛ\8c Ø³Û\8cستÛ\95Ù\85Û\95 Ú©Û\95 Ø¯Ø§Û\8cخستÙ\88Ù\88Û\95 Ø¦Û\95Ù\85 Ú\95Ù\88Ù\88Ù\86کردÙ\86Û\95Ù\88Û\95Û\8cÛ\95Û\8c Ù¾Û\8eØ´Ú©Û\95Ø´ Ú©Ø±Ø¯Ù\88Ù\88Û\95: $1",
        "missing-article": "داتابەیسەکە نەیتوانی دەقی پەڕەیەک بەناوی «$1» $2  بدۆزێتەوە کە دەبوا بیدۆزیبایەتەوە.\n\nئەمە زیاتر لە بەدواچوونی بەستەری جیاوازی یان مێژووی کۆنی پەڕەیەکی سڕدراو ڕوودەدات.\n\nئەگەر وا نەبێت، ئەوا ڕەنگە گرفتێکت لەم نەرمامێرەدا دۆزیبێتەوە.\nتکایە ئەمە بە ئاماژەدان بە ناونیشانی URLـەکەیەوە بە [[Special:ListUsers/sysop|بەڕێوبەرێک]] ڕاپۆرت بدە.",
        "missingarticle-rev": "(پێداچوونەوە#: $1)",
        "missingarticle-diff": "(جیاوازی: $1، $2)",
        "emaildisabled": "ئەم ماڵپەڕە ناتوانێ ئیمەیل بنێرێ.",
        "accountcreated": "ھەژمار دروست کرا",
        "accountcreatedtext": "هەژماری بەکارهێنەری [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|لێدوان]]) دروست کراوە.",
-       "createaccount-title": "درووست‌کردنی هەژمارە بۆ {{SITENAME}}",
-       "createaccount-text": "کەسێک هەژمارەیەکی بۆ ئی‌مێڵ ئەدرەسەکی تۆ لەسەر {{SITENAME}} ($4) بەناوی \"$2\"، بە وشەی نهێنی \"$3\".\nئێستا دەبێ بڕۆیتە ژوورەوە و وشەی نهێنی بگۆڕیت.\n\nئەگەر ئەو هەژمارە بە هەڵە درووست‌کراوە، ئەم برووسکە لە بەرچاو مەگرە.",
+       "createaccount-title": "درووست کردنی ھەژمار بۆ {{SITENAME}}",
+       "createaccount-text": "کەسێک ھەژمارێکی بۆ ناونیشانی ئیمێلی تۆ لە {{SITENAME}}دا ($4) بە ناوی «$2»ـەوە و بە تێپەڕوشەی  «$3»ـەوە دروست کردووە.\nدەبێت ھەر ئێستا بچیتە چوورەوە و تێپەڕوشەیەکەت بگۆڕیت.\n\nئەگەر ئەم ھەژمارە بە ھەڵە دروست کراوە، دەکرێت گوێ بەم پەیامە نەدەیت.",
        "login-throttled": "زۆر زۆر ھەوڵت داوە بۆ چوونە ژوورەوە.\nتکایە $1 بوەستە پێش ھەوڵی دووبارە.",
        "loginlanguagelabel": "زمان: $1",
        "pt-login": "بچۆ ژوورەوە",
        "confirmedittext": "پێویستە پێش هەرجۆرە دەستکاریەکی لاپەڕەکان ئەدرەسی ئیمەیلت ڕاچاو کردبێت .<br />\nتکایە لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر]] ئی‌مەیلەکەت دانێ و بڕواپێکراوی بکە.",
        "nosuchsectiontitle": "بەش نەدۆزرایەوە",
        "nosuchsectiontext": "هەوڵی دەستکاریکردنی بەشێکت داوە کە بوونی نیە.\nلەوانەیە لەو کاتە خەریکی بینینی پەڕە بوویت گۆزرابێتەوە یان سڕابێتەوە.",
-       "loginreqtitle": "پێویستە بچییە ژوورەوە",
-       "loginreqlink": "بچییە ژوورەوە",
+       "loginreqtitle": "پێویستە بچیتە ژوورەوە",
+       "loginreqlink": "بچیتە ژوورەوە",
        "loginreqpagetext": "بۆ دیتنی لاپەڕەکانی دیکە دەبێ $1 .",
        "accmailtitle": "تێپەڕوشە نێررا",
        "accmailtext": "تێپەڕوشەیەک کە بە هەڕەمەکی بۆ [[User talk:$1|$1]] دروست کرا، نێررا بۆ $2. دەتوانیت لە پەڕەی <em>[[Special:ChangePassword|گۆڕینی تێپەڕوشەدا]]</em> لە کاتی چوونەژوورەوەدا بیگۆڕی.",
        "anontalkpagetext": "----''ئەمە لاپەڕەی وتووێژە بۆ بەکارهێنەرێکی نەناسراوە کە هێشتا هەژمارەی درووست‌نەکردووه یان کەڵکی‌ لێ وەرناگرێ .\nلەبەر ئەوە مەجبوورین ئای‌پی ئەدرەسەکی ژمارەیی بۆ ناساندنی بەکار بێنین.\nئای‌پی ئەدرەسی وا لەوانەیه لە لایەن چەندین بەکارهێنەروە بەکاربێت.\nئەگەر تۆ بەکارهێنەرێکی نەناسراوی و هەست ئەکەی ئەم لێدوانە پەیوەندی بە تۆوە نیە تکایە [[Special:UserLogin/signup|ھەژمارێکی نوێ دروست بکە]] یان [[Special:UserLogin|بچۆ ژوورەوە]] لەبەر ئەوەی لەداهاتوودا دەگەڵ بەکارهێنەرانی‌ نەناسراوی دی تێکەڵ نەکرێیت. ''",
        "noarticletext": "ھەنووکە ھیچ دەقێک لەم پەڕەیەدا نییە.\nدەتوانی بۆ ئەم ناوە لە [[Special:Search/{{PAGENAME}}|پەڕەکانی تردا بگەڕێی]]، <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگەکاندا بگەڕێی]، یان [{{fullurl:{{FULLPAGENAME}}|action=edit}} ئەم پەڕەیە دەستکاری بکەیت]</span>.",
        "noarticletext-nopermission": "ھەنووکە ھیچ دەقێک لەم پەڕەیەدا نییە.\nدەتوانی لە پەڕەکانی تردا [[Special:Search/{{PAGENAME}}|بۆ ئەم ناوە بگەڕێی]]، یان <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگە پەیوەندیدارەکاندا بگەڕێی]</span>، بەڵام ناتوانی ئەم پەڕەیە دروست بکەی.",
-       "userpage-userdoesnotexist": "هەژماری بەکارهێنەری \"<nowiki>$1</nowiki>\" تۆمار نەکراوە.<br />\nگەر دەتەوێ ئەم لاپەڕە درووست‌کەی یان دەستکاری بکەی تکایە تاقی‌بکەوە .",
+       "userpage-userdoesnotexist": "ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.\nتکایە دڵنیا ببەرەوە ئەگەر دەتھەوێت ئەم پەڕەیە دروست یان دەستکاری بکەیت.",
        "userpage-userdoesnotexist-view": "ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.",
        "blocked-notice-logextract": "ھەنووکە ئەم بەکارھێنەرە بەربەست کراوە.\nدوایین بابەتی لۆگی بەربەستن لە ژێرەوە ھاتووە:",
        "clearyourcache": "تێبینی:''' لە دوای پاشەکەوت کردن، لەوانەیە  بۆ بینینی گۆڕانکارییەکان پێویست بێ cacheی وێبگەڕەکەت پاکبکەیتەوە.\n* '''Firefox / Safari:''' دوگمەی ''Shift'' بگرە کاتێک لەسەر ''Reload''دا کرتە دەکەی، یان ھەرکام لە ''Ctrl-F5'' یان ''Ctrl-R'' لێبدە (''⌘-R'' لەسەر Mac دا)\n* '''Google Chrome:''' دوگمەکانی ''Ctrl-Shift-R'' لێبدە  (''⌘-Shift-R'' لەسەر Mac دا)\n* '''Internet Explorer:''' دوگمەی ''Ctrl'' بگرە کاتێک لەسەر  ''Refresh''دا کرتە دەکەی، یان ''Ctrl-F5'' لێبدە\n* '''Opera:''' لە ڕێگەی ''Tools → Preferences'' ەوە cacheەکە بسڕەوە.",
        "template-semiprotected": "(نیوەپارێزراو)",
        "hiddencategories": "ئەم پەڕە ئەندامێکی {{PLURAL:$1|١ پۆلی شاراوەیە|$1 پۆلی شاراوەیە}}:",
        "edittools": "<!-- دەقی ئێرە لە ژێری فۆرمی دەستکاری و بارکردندا نیشان دەدرێت. -->",
-       "nocreatetext": "{{SITENAME}} توانای درووست‌کردنی لاپەڕە نوێکانی داخستووە.<br />\nئەتوانی بگەڕێتەوە دواوە و یەکێک لەو لاپەڕانەی وا هەن دەستکاری بکەیت ، یان [[Special:UserLogin|بچۆ ژوورەوە یان هەژمارێک درووست‌بکە]]",
+       "nocreatetext": "{{SITENAME}} توانای دروست کردنی پەڕەی نوێی سنووردار کردووە.\nدەتوانیت بگەڕێیتەوە دواوە و پەڕەیەک دەستکاری بکەیت یان [[Special:UserLogin|بچیتە ژوورەوە یان ھەژمارێک دروست بکەیت]].",
        "nocreate-loggedin": "ئیجازەی دروست کردنی پەڕەی نوێت نیە.",
        "sectioneditnotsupported-title": "بەش دەستکاریکردنی پشتیوانی ناکرێ",
        "sectioneditnotsupported-text": "دەستکاریکردنی بەش لە پەڕەدا پشتیوانی ناکرێ.",
        "powersearch-legend": "گەڕانی پێشکەوتوو",
        "powersearch-ns": "گەڕان لە بۆشاییی ناوەکانی:",
        "powersearch-togglelabel": "تاوتوێ بکە:",
-       "powersearch-toggleall": "ھەموو",
+       "powersearch-toggleall": "ھەموویان",
        "powersearch-togglenone": "ھیچیان",
        "powersearch-remember": "ھەڵبژاردەکانت بۆ گەڕانەکانی تر لە بیر بێت",
        "search-external": "گەڕانی دەرەکی",
        "action-edit": "دەستکاریی ئەم پەڕەیە",
        "action-createpage": "دروستکردنی پەڕەکان",
        "action-createtalk": "دروستکردنی پەڕەکانی وتووێژ",
-       "action-createaccount": "درووست‌کردنی هەژمارەی ئەم بەکارهێنەرە",
+       "action-createaccount": "دروست کردنی ئەم ھەژماری بەکارھێنەرییە",
        "action-history": "مێژووی ئەم پەڕەیە ببینە",
        "action-minoredit": "نیشان‌کردنی ئەم دەستکاریە وەک بچووک",
        "action-move": "گواستنەوەی ئەم پەڕەیە",
        "imagelinks": "بەکارھێنانی پەڕگە",
        "linkstoimage": "لەم {{PLURAL:$1|پەڕەی خوارەوە بەستەر دراوە|$1 پەڕەی خوارەوە بەستەر دراوە}} بۆ ئەم پەڕگە:",
        "linkstoimage-more": "زیاتر لە $1 {{PLURAL:$1|بەستەری لاپەڕە|بەستەری لاپەڕە}} بۆ ئەم پەڕگه.\nئەم لیستە {{PLURAL:$1|یەکەم لاپەڕەی بەستەرە|یەکەم لاپەڕە $1 بەستەرە}} بۆ تەنها یەم پەڕگە.\nهەروا [[Special:WhatLinksHere/$2|لیستی تەواو]] ئامادەی کەڵک وەرگرتنە.",
-       "nolinkstoimage": "‌لاپەڕەیەک نەدۆزرایەوە کە بەستەری هەبێ بۆ ئەم پەڕگە.",
+       "nolinkstoimage": "ھیچ پەڕەیەک نییە کە بەستەری ھەبێت بۆ ئەم پەڕگەیە.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|بەستەری زیاتر]] ببینە بۆ ئەم پەڕگە.",
        "linkstoimage-redirect": "$1 (ڕەوانەکەری پەڕگە) $2",
        "duplicatesoffile": "ئەم {{PLURAL:$1|پەڕگە دووبارەکرنەوەیەکی|پەڕگانە دووبارەکردنەوەی}} ئەم پەڕگەن ([[Special:FileDuplicateSearch/$2|وردەکاری زیاتر]]):",
        "unusedtemplatestext": "ئەم پەڕە هەموو پەڕەکانی بۆشاییی ناوی {{ns:template}} بە لیست دەکات کە لە پەڕەی تردا بەکارنەھێنراون.\nلە بیری نەکەی پێش سڕینەوەیان پشکنینی بەستەرەکانی تر بۆ داڕێژەکان بکەی.",
        "unusedtemplateswlh": "بەستەرەکانی تر",
        "randompage": "پەڕەی ھەڕەمەکی",
-       "randompage-nopages": "هیچ لاپەڕەیەک لەم {{PLURAL:$2|ناوبۆشاییەدا|ناوبۆشاییانەدا}} نیە: $1.",
+       "randompage-nopages": "ھیچ پەڕەیەک لە {{PLURAL:$2|بۆشایی ناو|بۆشایی ناوەکان}}ی خوارەوەدا نییە: $1.",
        "randomincategory": "پەڕەیەک بە ھەڵکەوت لە پۆلدا",
        "randomincategory-submit": "بڕۆ",
        "randomredirect": "ڕەوانەکەری ھەڕەمەکی",
        "deletereason-dropdown": "* ھۆکارە باوەکانی سڕینەوە\n** سپام\n** خراپکاری\n** پێشێلکردنی مافی لەبەرگرتنەوە\n** داخوازی دانەر\n** ڕەوانەکەری شکاو",
        "delete-edit-reasonlist": "دەستکاری کردنی ھۆکارەکانی سڕینەوە",
        "delete-toobig": "ئەم لاپەڕە مێژوویەکی دەستکاری زۆر گەورەی هەیە، زیاتر لە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}.\nبۆ بەرگری لە خراپ‌بوونی چاوەڕوان نەکراوی {{SITENAME}}، سڕینەوەی لاپەڕەی وا بەربەست‌کراوە.",
-       "delete-warning-toobig": "ئÛ\95Ù\85 Ù\84اپÛ\95Ú\95Û\95 Ù\85Û\8eÚ\98Ù\88Ù\88Û\8cÛ\95Ú©Û\8c Ø¯Û\95ستکارÛ\8c Ø²Û\86ر Ú¯Û\95Ù\88رÛ\95Û\8c Ù\87Û\95Û\8cÛ\95Ø\8c Ø²Û\8cاتر Ù\84Û\95 $1 {{PLURAL:$1|Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95|Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95}}.\nسÚ\95Û\8cÙ\86Û\95Ù\88Û\8c Ø¦Û\95Ù\88Û\95 Ù\84Û\95 Ù\88اÙ\86Û\95Û\8cÛ\95 Ú©Ø§Ø±Û\95کاÙ\86Û\8c Ø¨Ù\86Ú©Û\95دراÙ\88Û\8c {{SITENAME}} ØªÙ\88Ù\88Ø´Û\8c Ú©Û\8eØ´Û\95 Ø¨Ú©Ø§ØªØ\9b\nدÙ\88Ù\88رÙ\86Ù\88اÚ\95اÙ\86Û\95 Ø¬Û\8eâ\80\8cبÛ\95جÛ\8eÛ\8c Ø¨Ú©ە.",
+       "delete-warning-toobig": "ئÛ\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 Ù\85Û\8eÚ\98Ù\88Ù\88Û\8cÛ\95Ú©Û\8c Ø¯Û\95ستکارÛ\8cÛ\8c Ø²Û\86ر Ú¯Û\95Ù\88رÛ\95Û\8c Ú¾Û\95Û\8cÛ\95Ø\8c Ø²Û\86رتر Ù\84Û\95 $1 {{PLURAL:$1|Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95}}.\nسÚ\95Û\8cÙ\86Û\95Ù\88Û\95Û\8c Ø¦Û\95Ù\88 Ù¾Û\95Ú\95Û\95Û\8cÛ\95 Ù\84Û\95Ù\88اÙ\86Û\95Û\8c Ú©Ø§Ø±Û\95کاÙ\86Û\8c Ø¨Ù\86Ú©Û\95دراÙ\88Û\95Û\8c {{SITENAME}} ØªÙ\88Ù\88Ø´Û\8c Ú©Û\8eØ´Û\95 Ø¨Ú©Ø§ØªØ\9b\nبÛ\95 Ø³Û\95رÙ\86جÛ\95Ù\88Û\95 Ø¨Ú\86Û\86 Ù¾Û\8eØ´Û\95Ù\88ە.",
        "deleting-backlinks-warning": "'''ھۆشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|پەڕەکانی تر]] بەم پەڕەیەی دەتەوێ بیسڕییەوە بەستەر دراوە.",
        "rollback": "گەڕاندنەوەی دەستکارییەکان",
        "rollbacklink": "گەڕاندنەوە",
        "cannotundelete": "ھێنانەوە سەرکەوتوو نەبوو:\n$1",
        "undeletedpage": "'''$1 هێنراوەتەوە'''\n\nبۆ دیتنی پێشینەی دوایین سڕینەوەکان و هێنانەوەکان سەرنجی [[Special:Log/delete|لۆگی سڕینەوە]] بدە.",
        "undelete-header": "بۆ دیتنی ئەو لاپەڕانەی لەم داییانەدا سڕاونەتەوە چاو لە [[Special:Log/delete|لۆگی سڕینەوە]] بکە.",
-       "undelete-search-title": "Ú¯Û\95Ú\95اÙ\86 Ø¨Û\86 Ù\84اپÛ\95Ú\95Û\95 Ø³Ú\95اوەکان",
-       "undelete-search-box": "Ú¯Û\95Ú\95اÙ\86 Ø¨Û\86 Ù\84اپÛ\95Ú\95Û\95 Ø³Ú\95اوەکان",
+       "undelete-search-title": "Ú¯Û\95Ú\95اÙ\86 Ø¨Û\86 Ù¾Û\95Ú\95Û\95 Ø³Ú\95راوەکان",
+       "undelete-search-box": "Ú¯Û\95Ú\95اÙ\86 Ø¨Û\86 Ù¾Û\95Ú\95Û\95 Ø³Ú\95راوەکان",
        "undelete-search-prefix": "نیشان‌دانی ئەو لاپەڕانەی دەستپێکیان ئەمەیە:",
        "undelete-search-submit": "گەڕان",
        "undelete-no-results": "لە ئەرشیڤی سڕاوەکانی لاپەڕەیەکی هاوتا نەدۆزرایەوە.",
        "whatlinkshere-title": "ئەو پەڕانەی بەستەریان ھەیە بۆ «$1»",
        "whatlinkshere-page": "پەڕە:",
        "linkshere": "پەڕەکانی ژێرەوە بەستەر دراون بۆ <strong>[[:$1]]</strong>:",
-       "nolinkshere": "هیچ لاپەڕەیەک بەستەری نەداوە بە '''[[:$1]]'''.",
-       "nolinkshere-ns": "هیچ لاپەڕەیەک بەستەری نەداوە بە '''[[:$1]]''' لە بۆشایی‌ناوی هەڵبژێردراو.",
+       "nolinkshere": "ھیچ پەڕەیەک بەستەری نییە بۆ <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "ھیچ پەڕەیەک بەستەری نییە بۆ <strong>[[:$1]]</strong> لە بۆشایی ناوی هەڵبژێرراودا.",
        "isredirect": "پەڕەی ڕەوانەکەر",
        "istemplate": "بەکارھێنراو",
        "isimage": "بەستەری پەڕگە",
        "movenotallowed": "ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکان.",
        "movenotallowedfile": "ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی پەڕگەکان.",
        "cant-move-user-page": "ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکانی بەکارهێنەر (جیاواز لە ژێرلاپەڕەکان).",
-       "cant-move-to-user-page": "ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەیەک بۆ لاپەڕەی بەکارهێنەر (غەیری بۆ ژێرلاپەڕەی بەکارهێنەر).",
+       "cant-move-to-user-page": "مافی ئەوەت نییە کە پەڕەیەک بگوێزیتەوە بۆ پەڕەیەکی بەکارھێنەری (بەڵام بۆ ژێرپەڕەیەکی بەکارھێنەری دەتوانیت).",
        "newtitle": "بۆ ناوی نوێی:",
        "move-watch": "پەڕەی سەرچاوە و مەبەست بخە ژێر چاودێری",
        "movepagebtn": "ئەم پەڕەیە بگوازەوە",
        "movepage-moved-redirect": "ڕەوانەکەرێک دروست کرا.",
        "movepage-moved-noredirect": "لە دانانی ڕەوانەکەر بەرگری کرا.",
        "articleexists": "پەڕەیەک بەم ناوە ھەیە یان ئەو ناوەی تۆ ھەڵتبژاردووە ڕێگەی پێنەدراوە.\nتکایە ناوێکی دیکە ھەڵبژێرە.",
-       "cantmove-titleprotected": "ناتوانی لاپەڕەیەک بگوێزیتەوە بۆ ئەم شوێنە، لەبەر ئەوەی سەردێڕی نوێ لە درووست‌کردن پارێزراوە.",
+       "cantmove-titleprotected": "ناتوانیت پەڕەیەک بگوێزیتەوە بۆ ئەم شوێنە، چونکە سەرناوە نوێیەکە پارێزراوە لە درووست کردن.",
        "movetalk": "پەڕەی لێدوانی پەیوەندیدار بگوازەوە",
        "move-subpages": "ژێرپەڕەکانی بگوازەوە (ھەتا $1 پەڕە)",
        "move-talk-subpages": "ژێرپەڕەکانی پەڕەی لێدوان بگوازەوە (ھەتا $1 پەڕە)",
        "delete_and_move_text": "== پێویستییەکانی سڕینەوە ==\nلاپەڕەی مەبەست \"[[:$1]]\" لە پێش‌دا هەیە.\nئایا دەتەوێ ئەوە بسڕیتەوە تا ڕێگە بۆ گواستنەوەی بکەیتەوە؟",
        "delete_and_move_confirm": "بەڵێ، پەڕەکە بسڕەوه",
        "delete_and_move_reason": "سڕایەوە بۆ کردنەوەی ڕیگە بۆ گواستنەوە لە «[[$1]]»ەوە",
-       "selfmove": "سەردێڕەکانی سەرچاوە و مەبەست یەکێکن؛\nناکرێ لاپەڕەیەک بۆ سەر خۆی‌ بگوازرێتەوە.",
+       "selfmove": "سەرناوی سەرچاوە و مەبەست یەکێکن؛\nناکرێت پەڕەیەک بۆ سەر خۆی‌ بگوازرێتەوە.",
        "immobile-source-namespace": "پەڕەکان لە بۆشاییی ناوی \"$1\"دا ناگوێزرێنەوە.",
        "immobile-target-namespace": "گواستنەوەی لاپەڕە بۆناو بۆشایی‌ناو \"$1\" ناکرێت.",
        "immobile-target-namespace-iw": "بەستەرێکی نێوان‌ویکی ئامانجێکی گونجاو نیە بۆ گواستنەوەی لاپەڕە.",
        "protectedpagemovewarning": "'''ھۆشیار بە: ئەم پەڕە پارێزراوە بۆ ئەوی تەنیا ئەو بەکارھێنەرانە کە مافەکانی بەڕێوەبەرایەتییان ھەیە بتوانن بیگوازنەوە.'''\nدوایین لۆگ بۆ ژێدەر لە خوارەوەدا ھاتووە:",
        "semiprotectedpagemovewarning": "'''ئاگاداری:''' ئەم پەڕە پارێزراوە بۆ ئەوی تەنھا بەکارھێنەرە تۆمارکراوەکان بتوانن بیگوازنەوە.\nدوایین لۆگ بۆ ژێدەر لە خوارەوەدا ھاتووە:",
        "export": "ھەناردنی پەڕەکان",
-       "exporttext": "دەتوانی دەق و مێژووی دەستکاری لاپەڕەیەکی تایبەت یان دەستە لاپەڕەیەک بۆ ناو پەڕگەیەکی XML هەناردن بکەیت.\nدواتر بە کەڵک‌وەرگرتن لە [[Special:Import|لاپەڕەی هێنانەناوە]] لە مێدیاویکی‌دا، دەتوانی بیهێنیتە ناو ویکی‌یەکانی دیکە.\n\nبۆ هەناردنی لاپەڕەکان، سەردێڕەکان لە چوارچێوەی دەقی خوارەوە بنووسە، هەر هێڵێک یەک سەردێڕ. هەروا هەڵبژێرە ئایا پێداچوونەوەی ئێستا و هەموو پێداچوونەوە کۆنەکانت دەوێ یان هەر پێداچوونەوەی ئێستا و زانیاریی سەبارەت بە دوایین دەستکاری.\n\nلە بابەتی دواتر هەروەها دەتوانی لە بەستەرێک کەڵک وەرگریت، بۆ نموونە [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] بۆ لەپەڕەی \"[[{{MediaWiki:Mainpage}}]]\".",
+       "exporttext": "دەتوانیت دەق و مێژووی دەستکاریی پەڕەیەکی دەستنیشان کراو یان کۆمەڵێک پەڕە کە ناو پەڕگەیەکی XML دا پێچراونەتەوە، هەناردە بکەیت.\nدەکرێت ئەمە لە ویکییەکی دیکەدا ھاوردە بکرێت بە کەڵک وەرگرتن لە  ئامرازی [[Special:Import|ھاوردە کردنی پەڕە]]ی MediaWiki.\n\nبۆ هەناردە کردنی پەڕەکان، سەرناوەکانیان لە چوارچێوەی خوارەوەدا بنووسە، هەر سەرناوێک لە هێڵێکدا. و هەڵبژێرە کە پێداچوونەوەی ئێستا و ھەموو پێداچوونەوە کۆنەکانت دەوێت یان تەنھا پێداچوونەوەی ئێستا و زانیاریی سەبارەت بە دوایین دەستکاری.\n\nئەگەر تەنھا پێداچوونەوەی ئێستات دەوێت، دەتوانیت بەستەرێکیش بە کار بھێنیت، بۆ نموونە [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] بۆ پەڕەی «[[{{MediaWiki:Mainpage}}]]».",
        "exportall": "ھەموو پەڕەکان ھەناردە بکە",
        "exportcuronly": "تەنها پێداچوونەوەی ئێستا لەخۆ بگرێت نەک هەموو مێژوو",
        "exportnohistory": "----\n'''ئاگاداربە: '''ھەناردنی ھەموو مێژووی پەڕەکان لەم فۆرمەوە لەبەر ھۆکاری ڕێخستن، داخراوە.",
        "tooltip-watch": "ئەم پەڕە بخە سەر لیستی چاودێریت",
        "tooltip-watchlistedit-normal-submit": "ناونیشانەکان لاببە",
        "tooltip-watchlistedit-raw-submit": "نوێکردنەوەی لیستی چاودێری",
-       "tooltip-recreate": "درووست‌کردنەوەی لاپەڕە ئەگەرچی سڕاوەتەوە",
+       "tooltip-recreate": "پەڕەکە دروست‌ بکەرەوە ئەگەرچی سڕراوەتەوە",
        "tooltip-upload": "دەستپێکردنی بارکردن",
        "tooltip-rollback": "«گەڕاندنەوە» بە یەک کرتە گۆڕانکاریی/گۆڕانکارییەکانی ئەم پەڕەیە دەگەڕێنێتەوە بۆ دوایین بەشداربوو",
        "tooltip-undo": "«پووچەڵکردنەوە» ئەم گۆڕانکارییە دەگەڕێنێتەوە و فۆرمی دەستکاریکردن لە شێوەی پێشبینیندا دەکاتەوە. بەم جۆرە دەکرێ ھۆکارێک لە کورتەی دەستکاریدا بنووسرێ.",
index 26205fc..eae4dfd 100644 (file)
        "changeemail-newemail": "Nová e-mailová adresa:",
        "changeemail-newemail-help": "Toto pole by mělo zůstat prázdné, pokud chcete odstranit svou e-mailovou adresu. Pokud bude e-mailová adresa odstraněná, nebudete si moct obnovit zapomenuté heslo a přijímat e-maily z této wiki.",
        "changeemail-none": "(žádná)",
-       "changeemail-password": "Vaše heslo do {{gender:2sg|{{SITENAME}}}}:",
+       "changeemail-password": "{{GENDER:|Vaše heslo}} do {{GRAMMAR:2sg|{{SITENAME}}}}:",
        "changeemail-submit": "Změnit e-mail",
        "changeemail-throttled": "Provedli jste příliš mnoho pokusů o přihlášení.\nČekejte prosím $1 a zkuste to znovu.",
        "changeemail-nochange": "Zadejte prosím odlišnou e-mailovou adresu.",
        "uploaded-script-svg": "V načteném SVG souboru byl nalezen skriptovatelný element „$1“.",
        "uploaded-hostile-svg": "V načteném SVG souboru bylo v elementu se styly nalezeno nebezpečné CSS.",
        "uploaded-event-handler-on-svg": "Nastavování atributů pro obsluhu událostí <code>$1=\"$2\"</code> není v SVG souborech dovoleno.",
-       "uploaded-href-attribute-svg": "Atributy href <code>&lt;$1 $2=\"$3\"&gt;</code> s nelokálním cílem (např. http://, javascript: apod.) nejsou v SVG souborech dovoleny.",
        "uploaded-href-unsafe-target-svg": "V načteném SVG souboru byl nalezen href s nebezpečným cílem <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "V načteném SVG souboru byla nalezena značka „animate“, která by mohla měnit href, s atributem „from“ <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Nastavování atributů pro obsluhu událostí je zablokováno, v načteném SVG souboru bylo nalezeno <code>&lt;$1 $2=\"$3\"&gt;</code>.",
index 44b8704..145a9bc 100644 (file)
        "jumptonavigation": "плаваниѥ",
        "jumptosearch": "исканиѥ",
        "pool-errorunknown": "нєвѣдома блаꙁна",
-       "aboutsite": "О {{grammar:instrumental|{{SITENAME}}}}",
+       "aboutsite": "{{grammar:genitive|{{SITENAME}}}} опьсаниѥ",
        "aboutpage": "Project:О сѥмь опꙑтьствовании",
        "copyright": "подъ прощєниѥмь $1 пьсано ѥстъ · ащє ино нє каꙁано ѥстъ",
        "copyrightpage": "{{ns:project}}:Творьцъ права",
        "nlinks": "$1 {{PLURAL:$1|съвѧꙁь|съвѧꙁи|съвѧꙁии}}",
        "nmembers": "$1 {{PLURAL:$1|члѣнъ|члѣна|члѣни|члѣнъ}}",
        "shortpages": "кратъкꙑ страницѧ",
+       "protectedpages-reason": "какъ съмꙑслъ",
        "listusers": "польꙃєватєлъ каталогъ",
        "usereditcount": "$1 {{PLURAL:$1|мѣна|мѣнꙑ|мѣнъ}}",
        "usercreated": "{{GENDER:$3|сътворилъ|сътворила}} мѣсто $1 въ $2",
        "fileduplicatesearch-submit": "ищи",
        "specialpages": "нарочьнꙑ страницѧ",
        "tag-filter": "[[Special:Tags|мѣтъць]] сито :",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|мѣтъка|мѣтъцѣ|мѣтъци}}]]: $2)",
+       "tags-active-yes": "да",
+       "tags-active-no": "нѣтъ",
        "tags-edit": "исправи",
+       "tags-hitcount": "$1 {{PLURAL:$1|мѣна|мѣноу|мѣнъ}}",
+       "tags-create-reason": "какъ съмꙑслъ :",
+       "tags-create-submit": "сътворѥниѥ",
+       "tags-delete-reason": "какъ съмꙑслъ :",
+       "tags-activate-reason": "какъ съмꙑслъ :",
+       "tags-deactivate-reason": "какъ съмꙑслъ :",
        "htmlform-no": "нѣтъ",
        "htmlform-yes": "да",
        "logentry-delete-delete": "$1 {{GENDER:$2|поничьжилъ|поничьжила}} страницѫ ⁖ $3 ⁖",
index d3fe597..ade3f30 100644 (file)
@@ -63,6 +63,7 @@
        "tog-hideminor": "Skjul mindre ændringer i listen over seneste ændringer",
        "tog-hidepatrolled": "Skjul patruljerede redigeringer i seneste ændringer",
        "tog-newpageshidepatrolled": "Skjul patruljerede sider på listen over nye sider",
+       "tog-hidecategorization": "Skjul kategorisering af sider",
        "tog-extendwatchlist": "Udvid overvågningslisten til at vise alle ændringer og ikke kun den nyeste",
        "tog-usenewrc": "Gruppér ændringer per side i listen over seneste ændringer og i overvågningslisten",
        "tog-numberheadings": "Automatisk nummerering af overskrifter",
        "tog-watchlisthidebots": "Skjul ændringer fra botter i overvågningslisten",
        "tog-watchlisthideminor": "Skjul mindre ændringer i overvågningslisten",
        "tog-watchlisthideliu": "Skjul indloggede brugeres redigeringer i overvågningslisten",
+       "tog-watchlistreloadautomatically": "Opdater overvågningslisten automatisk, når et filter er ændret (JavaScript påkrævet)",
        "tog-watchlisthideanons": "Skjul anonyme brugeres redigeringer i overvågningslisten",
        "tog-watchlisthidepatrolled": "Skjul patruljerede ændringer fra overvågningslisten",
+       "tog-watchlisthidecategorization": "Skjul kategorisering af sider",
        "tog-ccmeonemails": "Send mig kopier af e-mails som jeg sender til andre brugere",
        "tog-diffonly": "Vis ikke sideindhold neden under versionssammenligninger",
        "tog-showhiddencats": "Vis skjulte kategorier",
        "morenotlisted": "Denne liste er ikke komplet.",
        "mypage": "Side",
        "mytalk": "Diskussion",
-       "anontalk": "Diskussionsside for denne IP-adresse",
+       "anontalk": "Diskussion",
        "navigation": "Navigation",
        "and": "&#32;og",
        "qbfind": "Søg",
        "viewcount": "Siden er vist {{PLURAL:$1|en gang|$1 gange}}.",
        "protectedpage": "Beskyttet side",
        "jumpto": "Skift til:",
-       "jumptonavigation": "Navigation",
-       "jumptosearch": "Søgning",
+       "jumptonavigation": "navigering",
+       "jumptosearch": "søgning",
        "view-pool-error": "Beklager, men serverne er i øjeblikket overbelastede.\nFor mange brugere prøver at se denne side.\nVent et øjeblik, før du prøver at besøge denne side igen.\n\n$1",
        "generic-pool-error": "Beklager, men serverne er i øjeblikket overbelastede.\nFor mange brugere prøver at se denne side.\nVent et øjeblik før du prøver at besøge denne side igen.",
        "pool-timeout": "Timeout mens man venter på låsningen",
        "virus-scanfailed": "virus-scan fejlede med fejlkode $1",
        "virus-unknownscanner": "ukendt virus-scanner:",
        "logouttext": "'''Du er nu logget af.'''\n\nBemærk, at nogle sider stadigvæk kan vises som om du var logget på, indtil du tømmer din browsers cache.",
+       "cannotlogoutnow-title": "Kan ikke logge af på nuværende tidspunkt",
+       "cannotlogoutnow-text": "Det er ikke muligt at logge af når du bruger $1.",
        "welcomeuser": "Velkommen, $1!",
        "welcomecreation-msg": "Din konto er blevet oprettet.\nGlem ikke at ændre dine [[Special:Preferences|{{SITENAME}} indstillinger]].",
        "yourname": "Dit brugernavn:",
        "userlogin-remembermypassword": "Husk mig",
        "userlogin-signwithsecure": "Brug sikker forbindelse",
        "cannotloginnow-title": "Kan ikke logge ind på nuværende tidspunkt",
+       "cannotloginnow-text": "Det er ikke muligt at logge på når du bruger $1.",
        "yourdomainname": "Dit domænenavn:",
        "password-change-forbidden": "Du kan ikke ændre adgangskoder på denne wiki.",
        "externaldberror": "Der er opstået en fejl i en ekstern adgangsdatabase, eller du har ikke rettigheder til at opdatere denne.",
        "wrongpasswordempty": "Du glemte at indtaste adgangskode. Prøv igen.",
        "passwordtooshort": "Adgangskoden skal mindst være på $1 {{PLURAL:$1|tegn|tegn}}.",
        "passwordtoolong": "Adgangskoden må ikke være længere end {{PLURAL:$1|et tegn|$1 tegn}}.",
+       "passwordtoopopular": "Almindeligt brugte adgangskoder, kan ikke bruges. Vælg venligst en mere unik adgangskode.",
        "password-name-match": "Adgangskoden må ikke være det samme som brugernavnet.",
        "password-login-forbidden": "Brugen af dette brugernavn og adgangskode er blevet forbudt.",
        "mailmypassword": "Nulstil adgangskode",
        "resetpass_submit": "Gem adgangskode og log på",
        "changepassword-success": "Din adgangskode er nu ændret!",
        "changepassword-throttled": "Du har forsøgt at logge på for mange gange for nylig.\nVent venligst $1, før du prøver igen.",
+       "botpasswords": "Bot adgangskoder",
+       "botpasswords-summary": "<em>Bot adgangskoder</em> giver adgang til en brugerkonto via API'en, uden at bruge kontoens normale login-legitimationsoplysninger. Brugerrettighederne kan være begrænset, når du er logget på med et bot password,.\n\nHvis du ikke ved, hvorfor du måske ønsker at gøre dette, bør du nok ikke gøre det. Ingen bør nogensinde bede dig om at generere et af disse, og give det til dem.",
+       "botpasswords-disabled": "Bot adgangskoder er deaktiveret.",
+       "botpasswords-no-central-id": "For at bruge bot adgangskoder, skal du være logget på en central konto.",
+       "botpasswords-existing": "Eksisterende bot adgangskoder",
+       "botpasswords-createnew": "Opret en ny bot adgangskode",
+       "botpasswords-editexisting": "Redigere en eksisterende bot adgangskode",
+       "botpasswords-label-appid": "Botnavn:",
+       "botpasswords-label-create": "Opret",
+       "botpasswords-label-update": "Opdatér",
+       "botpasswords-label-cancel": "Afbryd",
+       "botpasswords-label-delete": "Slet",
+       "botpasswords-label-resetpassword": "Nulstil adgangskode",
+       "botpasswords-label-grants": "Tilgængelige bevillinger:",
        "resetpass_forbidden": "Adgangskoder kan ikke ændres",
        "resetpass-no-info": "Du skal være logget på for at komme direkte til denne side.",
        "resetpass-submit-loggedin": "Skift adgangskode",
        "revision-info": "Version fra $1 af $2 {{GENDER:$6|$2}}$7",
        "previousrevision": "←Ældre version",
        "nextrevision": "Nyere version→",
-       "currentrevisionlink": "se nuværende version",
+       "currentrevisionlink": "Nuværende version",
        "cur": "nuværende",
        "next": "næste",
        "last": "forrige",
        "mergelog": "Sammenfletningslog",
        "revertmerge": "Gendan sammenfletning",
        "mergelogpagetext": "Nedenfor vises en liste med de nyeste sammenfletninger af en sides historik i en anden.",
-       "history-title": "$1: Versionshistorik",
+       "history-title": "Versionshistorik for \"$1\"",
        "difference-title": "Forskel mellem versioner af \"$1\"",
        "difference-title-multipage": "Forskel mellem siderne \"$1\" og \"$2\"",
        "difference-multipage": "(Forskel mellem sider)",
        "listfiles-summary": "Denne specialside viser alle oplagte filer.",
        "listfiles_search_for": "Søge efter fil:",
        "listfiles-userdoesnotexist": "Brugerkontoen \"$1\" er ikke registreret.",
-       "imgfile": "Fil",
+       "imgfile": "fil",
        "listfiles": "Filliste",
        "listfiles_thumb": "Thumbnail",
        "listfiles_date": "Dato",
        "deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] linker til eller inkluderer den side, du er ved at slette.",
        "rollback": "Fjern redigeringer",
        "rollbacklink": "rul tilbage",
-       "rollbacklinkcount": "tilbagefør $1 {{PLURAL:$1|redigering|redigeringer}}",
-       "rollbacklinkcount-morethan": "tilbagefør mere end $1 {{PLURAL:$1|redigering|redigeringer}}",
+       "rollbacklinkcount": "rul {{PLURAL:$1|en redigering|$1 redigeringer}} tilbage",
+       "rollbacklinkcount-morethan": "rul mere end {{PLURAL:$1|en redigering|$1 redigeringer}} tilbage",
        "rollbackfailed": "Kunne ikke fjerne redigeringen",
        "cantrollback": "Kan ikke fjerne redigering; den sidste bruger er den eneste forfatter.",
        "alreadyrolled": "Kan ikke fjerne den seneste redigering af [[:$1]] foretaget af [[User:$2|$2]] ([[User talk:$2|diskussion]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nen anden har allerede redigeret siden eller fjernet redigeringen.\n\nDen seneste redigering er foretaget af [[User:$3|$3]] ([[User talk:$3|diskussion]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "contributions-userdoesnotexist": "Brugerkontoen \"$1\" er ikke registreret.",
        "nocontribs": "Ingen ændringer er fundet som opfylder disse kriterier.",
        "uctop": "(seneste)",
-       "month": "Måned:",
-       "year": "År:",
+       "month": "Fra måned (og tidligere):",
+       "year": "Fra år (og tidligere):",
        "sp-contributions-newbies": "Vis kun bidrag fra nye brugere",
        "sp-contributions-newbies-sub": "Fra nye kontoer",
        "sp-contributions-newbies-title": "Brugerbidrag fra nye konti",
        "blocklist-nousertalk": "kan ikke redigere egen diskussionsside",
        "ipblocklist-empty": "Blokeringslisten er tom.",
        "ipblocklist-no-results": "Den angivene IP-addresse eller brugernavn er ikke blokeret.",
-       "blocklink": "bloker",
+       "blocklink": "blokér",
        "unblocklink": "ophæv blokering",
        "change-blocklink": "ændring af blokering",
        "contribslink": "bidrag",
        "javascripttest-pagetext-frameworks": "Vælg venligst en af de følgende testmiljøer: $1",
        "javascripttest-pagetext-skins": "Vælg et udseende, som testene skal køres med:",
        "javascripttest-qunit-intro": "Se [$1 testdokumentationen] på mediawiki.org.",
-       "tooltip-pt-userpage": "Din brugerside",
+       "tooltip-pt-userpage": "{{GENDER:|Din}} brugerside",
        "tooltip-pt-anonuserpage": "Brugersiden for den ip-adresse du redigerer som",
-       "tooltip-pt-mytalk": "Din diskussionsside",
+       "tooltip-pt-mytalk": "{{GENDER:|Din}} diskussionsside",
        "tooltip-pt-anontalk": "Diskussion om redigeringer fra denne ip-adresse",
-       "tooltip-pt-preferences": "Dine indstillinger",
+       "tooltip-pt-preferences": "{{GENDER:|Dine}} indstillinger",
        "tooltip-pt-watchlist": "Listen over sider du overvåger for ændringer.",
-       "tooltip-pt-mycontris": "Liste over dine bidrag",
+       "tooltip-pt-mycontris": "Liste over {{GENDER:|dine}} bidrag",
        "tooltip-pt-login": "Du opfordres til at logge på, men det er ikke obligatorisk.",
        "tooltip-pt-logout": "Log af",
        "tooltip-pt-createaccount": "Du opfordres til at oprette en konto og logge på, men det er ikke obligatorisk",
        "tooltip-n-randompage": "Gå til en tilfældig side",
        "tooltip-n-help": "Stedet hvor du finder hjælp",
        "tooltip-t-whatlinkshere": "Liste med alle sider som henviser hertil",
-       "tooltip-t-recentchangeslinked": "Seneste ændringer i sider som denne side henviser til",
+       "tooltip-t-recentchangeslinked": "Seneste ændringer af sider som denne side henviser til",
        "tooltip-feed-rss": "RSS-feed for denne side",
        "tooltip-feed-atom": "Atom-feed for denne side",
-       "tooltip-t-contributions": "Se denne brugers bidrag",
+       "tooltip-t-contributions": "En liste over bidrag fra {{GENDER:$1|denne bruger}}",
        "tooltip-t-emailuser": "Send en e-mail til denne bruger",
        "tooltip-t-info": "Yderligere oplysninger om denne side",
        "tooltip-t-upload": "Upload et billede eller anden mediafil",
        "file-info-size": "$1 × $2 punkter, filstørrelse: $3, MIME-Type: $4",
        "file-info-size-pages": "$1 × $2 punkter, filstørrelse: $3, MIME-type: $4, $5 {{PLURAL:$5|side|sider}}",
        "file-nohires": "Ingen højere opløsning fundet.",
-       "svg-long-desc": "SVG fil, basisstørrelse $1 × $2 punkters, størrelse: $3",
+       "svg-long-desc": "SVG fil, basisstørrelse $1 × $2 pixels, filstørrelse: $3",
        "svg-long-desc-animated": "Animeret SVG-fil, basisstørrelse $1 × $2 punkter, filstørrelse: $3",
        "svg-long-error": "Ugyldig SVG-fil: $1",
        "show-big-image": "Oprindelige fil",
        "special-characters-title-endash": "tankestreg",
        "special-characters-title-emdash": "lang tankestreg",
        "special-characters-title-minus": "minustegn",
+       "mw-widgets-dateinput-no-date": "Ingen dato valgt",
        "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
+       "mw-widgets-titleinput-description-new-page": "side eksisterer ikke endnu",
+       "mw-widgets-titleinput-description-redirect": "omdiriger til $1",
        "api-error-blacklisted": "Vælg venligst en anden, beskrivende titel.",
        "randomrootpage": "Tilfældig stamside"
 }
index 36e8ab8..aaa9eed 100644 (file)
@@ -85,7 +85,8 @@
                        "R4c0r",
                        "MGChecker",
                        "FriedhelmW",
-                       "Schniggendiller"
+                       "Schniggendiller",
+                       "Predatorix"
                ]
        },
        "tog-underline": "Links unterstreichen:",
        "search": "Suche",
        "searchbutton": "Suchen",
        "go": "Ausführen",
-       "searcharticle": "Seite",
+       "searcharticle": "Suchen",
        "history": "Versionen",
        "history_short": "Versionsgeschichte",
        "updatedmarker": "Änderung seit deinem letzten Besuch",
        "copyrightpage": "{{ns:project}}:Urheberrechte",
        "currentevents": "Aktuelle Ereignisse",
        "currentevents-url": "Project:Aktuelle Ereignisse",
-       "disclaimers": "Impressum",
+       "disclaimers": "Haftungsausschluss",
        "disclaimerpage": "Project:Impressum",
        "edithelp": "Bearbeitungshilfe",
        "helppage-top-gethelp": "Hilfe",
        "versionrequiredtext": "Version $1 von MediaWiki ist erforderlich, um diese Seite zu nutzen.\nSiehe die [[Special:Version|Versionsseite]]",
        "ok": "Okay",
        "pagetitle": "$1 – {{SITENAME}}",
-       "retrievedfrom": "Von „$1“",
+       "retrievedfrom": "Abgerufen von „$1“",
        "youhavenewmessages": "Du hast $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Du hast}} $1 von {{PLURAL:$3|einem anderen Benutzer|$3 Benutzern}} ($2).",
        "youhavenewmessagesmanyusers": "Du hast $1 von vielen Benutzern ($2).",
        "uploaded-script-svg": "Skriptelement „$1“ in der hochgeladenen SVG-Datei gefunden.",
        "uploaded-hostile-svg": "Unsicheres CSS im Styleelement der hochgeladenen SVG-Datei gefunden.",
        "uploaded-event-handler-on-svg": "Das Festlegen von Ereignis-Handler-Attributen <code>$1=\"$2\"</code> ist in SVG-Dateien nicht erlaubt.",
-       "uploaded-href-attribute-svg": "href-Attribute <code>&lt;$1 $2=\"$3\"&gt;</code> mit nicht-lokalem Ziel (z.&nbsp;B. http://, javascript: etc.) sind in SVG-Dateien nicht erlaubt.",
-       "uploaded-href-unsafe-target-svg": "href zu unsicherem Ziel <code>&lt;$1 $2=\"$3\"&gt;</code> in der hochgeladenen SVG-Datei gefunden.",
+       "uploaded-href-attribute-svg": "href-Attribute in SVG-Dateien sind nur als Verlinkung zu http://- oder https://-Zielen erlaubt. <code>&lt;$1 $2=\"$3\"&gt;</code> gefunden.",
+       "uploaded-href-unsafe-target-svg": "href zu unsicheren Daten gefunden: URI-Ziel <code>&lt;$1 $2=\"$3\"&gt;</code> in der hochgeladenen SVG-Datei.",
        "uploaded-animate-svg": "Tag „animate“ gefunden, das href mithilfe des Attributs „from“ <code>&lt;$1 $2=\"$3\"&gt;</code> in der hochgeladenen SVG-Datei ändern könnte.",
        "uploaded-setting-event-handler-svg": "Das Festlegen von Ereignis-Handler-Attributen ist gesperrt. <code>&lt;$1 $2=\"$3\"&gt;</code> in der hochgeladenen SVG-Datei gefunden.",
        "uploaded-setting-href-svg": "Die Verwendung des Tags „set“ zum Hinzufügen des Attributs „href“ zum übergeordneten Element ist gesperrt.",
        "tooltip-ca-watch": "Diese Seite zur persönlichen Beobachtungsliste hinzufügen",
        "tooltip-ca-unwatch": "Diese Seite von der persönlichen Beobachtungsliste entfernen",
        "tooltip-search": "{{SITENAME}} durchsuchen",
-       "tooltip-search-go": "Gehe direkt zu der Seite, die exakt dem eingegebenen Namen entspricht.",
+       "tooltip-search-go": "Gehe direkt zu der Seite mit genau diesem Namen, falls sie vorhanden ist.",
        "tooltip-search-fulltext": "Suche nach Seiten, die diesen Text enthalten",
        "tooltip-p-logo": "Hauptseite",
        "tooltip-n-mainpage": "Hauptseite anzeigen",
        "version-hook-subscribedby": "Aufruf von",
        "version-version": "($1)",
        "version-no-ext-name": "[kein Name]",
-       "version-svn-revision": "(Version $2)",
        "version-license": "MediaWiki-Lizenz",
        "version-ext-license": "Lizenz",
        "version-ext-colheader-name": "Bezeichnung",
index b46381d..8c09ed9 100644 (file)
        "october-date": "Tışrino Verên $1",
        "november-date": "Tışrino Peyên $1",
        "december-date": "Kanun $1",
+       "period-am": "AM",
+       "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Kategoriye|Kategoriyi}}",
        "category_header": "Pelê ke kategoriya \"$1\" derê",
        "subcategories": "Kategoriyê bınêni",
        "searchprofile-advanced": "Raverşiyaye",
        "searchprofile-articles-tooltip": "$1 de cı geyré",
        "searchprofile-images-tooltip": "Dosya cı geyr",
-       "searchprofile-everything-tooltip": "Tedeestey hemine cı geyre (pelanê mınaqeşey zi tey)",
+       "searchprofile-everything-tooltip": "Tedeesteyan hemine cı geyre (pelanê mınaqeşeyi zi tey)",
        "searchprofile-advanced-tooltip": "qe cayê nimeyî bigêre",
        "search-result-size": "$1 ({{PLURAL:$2|1 çekuyo|$2 çekuyê}})",
        "search-result-category-size": "{{PLURAL:$1|1 eza|$1 ezayan}} ({{PLURAL:$2|1 kategoriyê bini|$2 kategirayanê binan}}, {{PLURAL:$3|1 dosya|$3 dosyayan}})",
        "restriction-upload": "Bar ke",
        "restriction-level-sysop": "tam pawiyayo",
        "restriction-level-autoconfirmed": "nêm pawiyayo",
-       "restriction-level-all": "heme yew sewiya",
+       "restriction-level-all": "kamci be sewiya",
        "undelete": "Peleyê ke besterneyayê enê bımocnê",
        "undeletepage": "bıewn revizyonê peli yê hewn a şiyayeyan u tepiya biyar",
        "undeletepagetitle": "'''pelo [[:$1|$1]] cêrın, wayirê revizyonê hewn a şiyayeyan o'''.",
        "version-hook-name": "Nameyê çengelî",
        "version-hook-subscribedby": "Eza biyayoğ",
        "version-version": "($1)",
-       "version-svn-revision": "(r$2)",
        "version-license": "Lisansê MediaWiki",
        "version-ext-license": "Lisans",
        "version-ext-colheader-name": "Dergiye",
index 8dec4b2..5564b18 100644 (file)
        "uploaded-script-svg": "Βρέθηκε στοιχείο με δυνατότητα δημιουργίας δέσμης ενεργειών «$1» στο ανεβασμένο αρχείο SVG.",
        "uploaded-hostile-svg": "Βρέθηκε μη ασφαλές CSS στο στοιχείο στυλ του ανεβασμένου αρχείου SVG.",
        "uploaded-event-handler-on-svg": "Δεν επιτρέπεται ο ορισμός ιδιοτήτων χειρισμού συμβάντων <code>$1=\"$2\"</code> σε αρχεία SVG.",
-       "uploaded-href-attribute-svg": "Δεν επιτρέπονται οι ιδιότητες href <code>&lt;$1 $2=\"$3\"&gt;</code> με μη τοπικό προορισμό (π.χ. http://, javascript:, κ.τ.λ.) σε αρχεία SVG.",
        "uploaded-href-unsafe-target-svg": "Βρέθηκε href προς έναν μη ασφαλή προορισμό <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
        "uploaded-animate-svg": "Βρέθηκε μία ετικέτα <code>&lt;animate&gt;</code> που ίσως να αλλάζει το href, με την ιδιότητα \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
        "uploaded-setting-event-handler-svg": "Η ρύθμιση ιδιοτήτων χειρισμού σφαλμάτων είναι αποκλεισμένη, βρέθηκε <code>&lt;$1 $2=\"$3\"&gt;</code> στο ανεβασμένο αρχείο SVG.",
        "javascripttest-pagetext-frameworks": "Παρακαλώ επιλέξτε ένα από τα ακόλουθα πλαίσια δοκιμών: $1",
        "javascripttest-pagetext-skins": "Επιλέξτε ένα skin για να εκτελέσετε δοκιμές με αυτό:",
        "javascripttest-qunit-intro": "Ανατρέξτε στην ενότητα [ $1 τεκμηρίωση δοκιμών] στο mediawiki.org.",
-       "tooltip-pt-userpage": "Η σελίδα χρήστη σας",
+       "tooltip-pt-userpage": "Η σελίδα {{GENDER:|χρήστη σας|χρήστριας σας}}",
        "tooltip-pt-anonuserpage": "Η σελίδα χρήστη στον οποίο αντιστοιχεί η διεύθυνση IP που έχετε",
-       "tooltip-pt-mytalk": "Η σελίδα συζήτησής σας",
+       "tooltip-pt-mytalk": "Η σελίδα συζήτησής {{GENDER:|σας}}",
        "tooltip-pt-anontalk": "Συζήτηση σχετικά με τις αλλαγές που έγιναν από αυτή τη διεύθυνση IP",
-       "tooltip-pt-preferences": "Οι προτιμήσεις σας",
+       "tooltip-pt-preferences": "Οι προτιμήσεις {{GENDER:|σας}}",
        "tooltip-pt-watchlist": "Η λίστα με τις σελίδες που παρακολουθείτε για αλλαγές",
-       "tooltip-pt-mycontris": "Κατάλογος των συνεισφορών σας",
+       "tooltip-pt-mycontris": "Κατάλογος των συνεισφορών {{GENDER:|σας}}",
        "tooltip-pt-anoncontribs": "Μια λίστα με τις επεξεργασίες που έγιναν από αυτή τη διεύθυνση IP",
        "tooltip-pt-login": "Σας ενθαρρύνουμε να συνδεθείτε· ωστόσο, δεν είναι υποχρεωτικό",
        "tooltip-pt-logout": "Έξοδος",
        "htmlform-user-not-valid": "Το <strong>$1</strong> δεν είναι έγκυρο όνομα χρήστη.",
        "sqlite-has-fts": "$1 με υποστήριξη αναζήτησης πλήρους κειμένου",
        "sqlite-no-fts": "$1 χωρίς την υποστήριξη αναζήτησης πλήρους κειμένου",
-       "logentry-delete-delete": "{{GENDER:$1|Ο|Η}} $1 διέγραψε τη σελίδα $3",
+       "logentry-delete-delete": "{{GENDER:$2|Ο|Η}} $1 διέγραψε τη σελίδα $3",
        "logentry-delete-restore": "Ο/Η $1 αποκατέστησε τη σελίδα $3",
        "logentry-delete-event": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|ενός καταγραφόμενου συμβάντος|$5 καταγραφόμενων συμβάντων}} στο $3: $4",
        "logentry-delete-revision": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ορατότητα {{PLURAL:$5|μίας αναθεώρησης|$5 αναθεωρήσεων}} στη σελίδα $3: $4",
index 639af0f..cb9f7c4 100644 (file)
        "virus-scanfailed": "scan failed (code $1)",
        "virus-unknownscanner": "unknown antivirus:",
        "logouttext": "<strong>You are now logged out.</strong>\n\nNote that some pages may continue to be displayed as if you were still logged in, until you clear your browser cache.",
-       "cannotlogoutnow-title": "Cannot log out now",
-       "cannotlogoutnow-text": "Logging out is not possible when using $1.",
        "welcomeuser": "Welcome, $1!",
        "welcomecreation-msg": "Your account has been created.\nYou can change your {{SITENAME}} [[Special:Preferences|preferences]] if you wish.",
        "yourname": "Username:",
        "remembermypassword": "Remember my login on this browser (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "userlogin-remembermypassword": "Keep me logged in",
        "userlogin-signwithsecure": "Use secure connection",
-       "cannotloginnow-title": "Cannot log in now",
-       "cannotloginnow-text": "Logging in is not possible when using $1.",
        "yourdomainname": "Your domain:",
        "password-change-forbidden": "You cannot change passwords on this wiki.",
        "externaldberror": "There was either an authentication database error or you are not allowed to update your external account.",
        "resetpass_submit": "Set password and log in",
        "changepassword-success": "Your password has been changed successfully!",
        "changepassword-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
-       "botpasswords": "Bot passwords",
-       "botpasswords-summary": "<em>Bot passwords</em> allow access to a user account via the API without using the account's main login credentials. The user rights available when logged in with a bot password may be restricted.\n\nIf you don't know why you might want to do this, you should probably not do it. No one should ever ask you to generate one of these and give it to them.",
-       "botpasswords-disabled": "Bot passwords are disabled.",
-       "botpasswords-no-central-id": "To use bot passwords, you must be logged in to a centralized account.",
-       "botpasswords-existing": "Existing bot passwords",
-       "botpasswords-createnew": "Create a new bot password",
-       "botpasswords-editexisting": "Edit an existing bot password",
-       "botpasswords-label-appid": "Bot name:",
-       "botpasswords-label-create": "Create",
-       "botpasswords-label-update": "Update",
-       "botpasswords-label-cancel": "Cancel",
-       "botpasswords-label-delete": "Delete",
-       "botpasswords-label-resetpassword": "Reset the password",
-       "botpasswords-label-grants": "Applicable grants:",
-       "botpasswords-help-grants": "Each grant gives access to listed user rights that a user account already has. See the [[Special:ListGrants|table of grants]] for more information.",
-       "botpasswords-label-restrictions": "Usage restrictions:",
-       "botpasswords-label-grants-column": "Granted",
-       "botpasswords-bad-appid": "The bot name \"$1\" is not valid.",
-       "botpasswords-insert-failed": "Failed to add bot name \"$1\". Was it already added?",
-       "botpasswords-update-failed": "Failed to update bot name \"$1\". Was it deleted?",
-       "botpasswords-created-title": "Bot password created",
-       "botpasswords-created-body": "The bot password \"$1\" was created successfully.",
-       "botpasswords-updated-title": "Bot password updated",
-       "botpasswords-updated-body": "The bot password \"$1\" was updated successfully.",
-       "botpasswords-deleted-title": "Bot password deleted",
-       "botpasswords-deleted-body": "The bot password \"$1\" was deleted.",
-       "botpasswords-newpassword": "The new password to log in with <strong>$1</strong> is <strong>$2</strong>. <em>Please record this for future reference.</em>",
-       "botpasswords-no-provider": "BotPasswordsSessionProvider is not available.",
-       "botpasswords-restriction-failed": "Bot password restrictions prevent this login.",
-       "botpasswords-invalid-name": "The username specified does not contain the bot password separator (\"$1\").",
-       "botpasswords-not-exist": "User \"$1\" does not have a bot password named \"$2\".",
        "resetpass_forbidden": "Passwords cannot be changed",
        "resetpass-no-info": "You must be logged in to access this page directly.",
        "resetpass-submit-loggedin": "Change password",
        "right-createpage": "Create pages (which are not discussion pages)",
        "right-createtalk": "Create discussion pages",
        "right-createaccount": "Create new user accounts",
-       "right-autocreateaccount": "Automatically log in with an external user account",
        "right-minoredit": "Mark edits as minor",
        "right-move": "Move pages",
        "right-move-subpages": "Move pages with their subpages",
        "action-createpage": "create pages",
        "action-createtalk": "create discussion pages",
        "action-createaccount": "create this user account",
-       "action-autocreateaccount": "automatically create this external user account",
        "action-history": "view the history of this page",
        "action-minoredit": "mark this edit as minor",
        "action-move": "move this page",
        "uploaded-script-svg": "Found scriptable element \"$1\" in the uploaded SVG file.",
        "uploaded-hostile-svg": "Found unsafe CSS in the style element of uploaded SVG file.",
        "uploaded-event-handler-on-svg": "Setting event-handler attributes <code>$1=\"$2\"</code> is not allowed in SVG files.",
-       "uploaded-href-attribute-svg": "href attributes <code>&lt;$1 $2=\"$3\"&gt;</code> with non-local target (e.g. http://, javascript:, etc) are not allowed in SVG files.",
-       "uploaded-href-unsafe-target-svg": "Found href to unsafe target <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
+       "uploaded-href-attribute-svg": "href attributes in SVG files are only allowed to link to http:// or https:// targets, found <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Found href to unsafe data: URI target <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploaded-animate-svg": "Found \"animate\" tag that might be changing href, using the \"from\" attribute <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploaded-setting-event-handler-svg": "Setting event-handler attributes is blocked, found <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploaded-setting-href-svg": "Using the \"set\" tag to add \"href\" attribute to parent element is blocked.",
        "version-hook-subscribedby": "Subscribed by",
        "version-version": "($1)",
        "version-no-ext-name": "[no name]",
-       "version-svn-revision": "r$1",
        "version-license": "MediaWiki License",
        "version-ext-license": "License",
        "version-ext-colheader-name": "Extension",
        "mw-widgets-titleinput-description-new-page": "page does not exist yet",
        "mw-widgets-titleinput-description-redirect": "redirect to $1",
        "api-error-blacklisted": "Please choose a different, descriptive title.",
-       "sessionmanager-tie": "Cannot combine multiple request authentication types: $1.",
-       "sessionprovider-generic": "$1 sessions",
-       "sessionprovider-mediawiki-session-cookiesessionprovider": "cookie-based sessions",
-       "sessionprovider-nocookies": "Cookies may be disabled. Ensure you have cookies enabled and start again.",
        "randomrootpage": "Random root page"
 }
index 9abcabe..5dc6ea6 100644 (file)
        "expensive-parserfunction-warning": "Averto: Ĉi tiu paĝo enhavas tro da multekostaj sintaksaj funkcio-vokoj.\n\nĜi havu malpli ol $2 {{PLURAL:$2|vokon|vokojn}}, sed nun estas $1 {{PLURAL:$1|voko|vokoj}}.",
        "expensive-parserfunction-category": "Paĝoj kun tro da multekostaj sintaksaj funkcio-vokoj",
        "post-expand-template-inclusion-warning": "Averto: Inkluziva pezo de ŝablonoj estas tro granda.\nIuj ŝablonoj ne estos inkluzivitaj.",
-       "post-expand-template-inclusion-category": "Paĝoj kie inkluziva pezo de ŝablonoj estas tro granda.",
+       "post-expand-template-inclusion-category": "Paĝoj kie inkluziva pezo de ŝablonoj estas tro granda",
        "post-expand-template-argument-warning": "Averto: Ĉi tiu paĝo enhavas almenaŭ unu ŝablonan argumenton, kiu havas tro grandan etendan pezon.\nĈi tiuj argumentoj estis forlasitaj.",
        "post-expand-template-argument-category": "Paĝoj enhavantaj forlasitajn argumentojn de ŝablonoj",
        "parser-template-loop-warning": "Rekursiva ŝablono estis trovita: [[$1]]",
        "javascripttest-pagetext-frameworks": "Bonvolu elekti unu el la jenaj test-framoj: $1",
        "javascripttest-pagetext-skins": "Elektu kun kio etoso irigi la testojn:",
        "javascripttest-qunit-intro": "Vidu [$1 testa dokumentaro] en mediawiki.org.",
-       "tooltip-pt-userpage": "Via uzantopaĝo",
+       "tooltip-pt-userpage": "Via uzantpaĝo",
        "tooltip-pt-anonuserpage": "La uzantopaĝo por la IP adreso sub kiu vi estas redaktanta",
        "tooltip-pt-mytalk": "Via diskutpaĝo",
        "tooltip-pt-anontalk": "Diskuto pri redaktoj sub tiu ĉi IP adreso",
-       "tooltip-pt-preferences": "Miaj preferoj",
+       "tooltip-pt-preferences": "{{GENDER:|Viaj}} preferoj",
        "tooltip-pt-watchlist": "Listo de paĝoj kies ŝanĝojn vi priatentas.",
        "tooltip-pt-mycontris": "Listo de viaj kontribuoj",
        "tooltip-pt-login": "Vi estas invitita ensaluti, tamen ne estas devige.",
        "tooltip-ca-move": "Alinomigi tiun ĉi paĝon",
        "tooltip-ca-watch": "Aldoni tiun ĉi paĝon al via atentaro",
        "tooltip-ca-unwatch": "Forigi tiun ĉi paĝon el via atentaro",
-       "tooltip-search": "Traserĉi {{SITENAME}}n",
+       "tooltip-search": "Serĉi tra {{SITENAME}}",
        "tooltip-search-go": "Iru al paĝo kun ĉi preciza nomo se ĝi ekzistas",
        "tooltip-search-fulltext": "Serĉi la paĝojn por ĉi tiu teksto",
        "tooltip-p-logo": "Ĉefpaĝo",
        "tooltip-t-recentchangeslinked": "Lastaj ŝanĝoj en paĝoj kiuj ligas al tiu ĉi paĝo",
        "tooltip-feed-rss": "RSS-fonto por tiu ĉi paĝo",
        "tooltip-feed-atom": "Atom-fonto por ĉi tiu paĝo",
-       "tooltip-t-contributions": "Rigardi la liston de kontribuoj de tiu ĉi uzanto",
+       "tooltip-t-contributions": "Listo de kontribuoj de {{GENDER:$1|ĉi tiu uzanto}}",
        "tooltip-t-emailuser": "Sendi retmesaĝon al tiu ĉi uzanto",
        "tooltip-t-info": "Pli da informo pri ĉi tiu paĝo",
        "tooltip-t-upload": "Alŝuti bildojn aŭ dosierojn",
index 681dd67..3487702 100644 (file)
        "uploaded-script-svg": "Se encontró el elemento habilitado para secuencias de órdenes «$1» en el archivo SVG cargado.",
        "uploaded-hostile-svg": "Se encontró código CSS no seguro en el elemento de estilo del archivo SVG cargado.",
        "uploaded-event-handler-on-svg": "No está permitido configurar atributos controladores de eventos <code>$1=\"$2\"</code> en los archivos SVG.",
-       "uploaded-href-attribute-svg": "No se permite que los archivos SVG contengan los atributos de «href» <code>&lt;$1 $2=\"$3\"&gt;</code> apuntando a recursos no locales (p. ej., http:// o javascript:).",
        "uploaded-href-unsafe-target-svg": "Se encontró un \"href\" hacia un destino inseguro <code><$1 $2=\"$3\"></code> en el archivo SVG cargado.",
        "uploaded-animate-svg": "Se encontró un etiqueta \"animate\" que puede estar cambiando \"href\", mediante el atributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> en el archivo SVG cargado.",
        "uploaded-setting-event-handler-svg": "Está bloqueada la configuración de atributos controladores de eventos. Se encontró <code>&lt;$1 $2=\"$3\"&gt;</code> en el archivo SVG cargado.",
index c4057a3..720c350 100644 (file)
        "uploaded-script-svg": "Üleslaaditud SVG-failist leiti skriptitav element \"$1\".",
        "uploaded-hostile-svg": "Üleslaaditud SVG-faili laadielemendist leiti ebaturvaline CSS.",
        "uploaded-event-handler-on-svg": "Sündmuse halduse atribuutide <code>$1=\"$2\"</code> seadmine pole SVG-failis lubatud.",
-       "uploaded-href-attribute-svg": "Mittekohaliku sihtkohaga (nt http://, javascript:) href-atribuudid <code>&lt;$1 $2=\"$3\"&gt;</code> pole SVG-failides lubatud.",
        "uploaded-href-unsafe-target-svg": "Üleslaaditud SVG-failist leiti href, mille sihtkoht <code>&lt;$1 $2=\"$3\"&gt;</code> on ebaturvaline.",
        "uploaded-animate-svg": "Üleslaaditud SVG-failist leiti silt \"animate\", mis võib href-i muuta, kasutades from-atribuuti <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Sündmuse halduse atribuutide seadmine on keelatud, üleslaaditud SVG-failist leiti <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "filename-thumb-name": "Tundub, et tegu on pisipildi pealkirjaga. Palun ära laadi pisipilti samas vikis uuesti üles. Või siis paranda palun failinimi, nii et see oleks sisukam ja ei sisaldaks pisipildi eesliidet.",
        "filename-bad-prefix": "Üleslaaditava faili nimi algab eesliitega '''\"$1\"''', mis on omane digikaamera antud ebamäärastele nimedele.\nPalun vali oma failile kirjeldavam nimi.",
        "filename-prefix-blacklist": " #<!-- jäta see rida muutmata --> <pre>\n# Süntaks on järgmine:\n#   * Kõik alates märgist \"#\" kuni rea lõpuni on kommentaar.\n#   * Iga mittetühi rida on tüüpiline eesliide, mille digikaamerad automaatselt failinimele lisavad.\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # mõned mobiiltelefonid\nIMG # üldine\nJD # Jenoptik\nMGP # Pentax\nPICT # erinevad\n #</pre> <!-- jäta see rida muutmata -->",
-       "upload-success-subj": "Üleslaadimine õnnestus",
-       "upload-success-msg": "Üleslaadimine allikast [$2] läks edukalt. See on leitav siit: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Üleslaadimisprobleem",
-       "upload-failure-msg": "Üleslaadimisel allikast [$2] ilmnes probleem:\n\n$1",
-       "upload-warning-subj": "Üleslaadimishoiatus",
-       "upload-warning-msg": "Üleslaadimisel allikast [$2] tekkis probleem. Probleemi eemaldamiseks võid naasta [[Special:Upload/stash/$1|üleslaadimisvormi]] juurde.",
        "upload-proto-error": "Vigane protokoll",
        "upload-proto-error-text": "Teiselt saidilt üleslaadimiseks peab URL algama <code>http://</code> või <code>ftp://</code>.",
        "upload-file-error": "Sisemine viga",
        "wlheader-showupdated": "Leheküljed, mida on muudetud peale sinu viimast külastust, on '''rasvases kirjas'''.",
        "wlnote": "Allpool on {{PLURAL:$1|viimane muudatus|viimased <strong>$1</strong> muudatust}} viimase {{PLURAL:$2|tunni|<strong>$2</strong> tunni}} jooksul seisuga $3, kell $4.",
        "wlshowlast": "Näita viimast $1 tundi $2 päeva.",
-       "watchlistall2": "kõike",
        "watchlist-hide": "Peida",
        "watchlist-submit": "Näita",
        "wlshowtime": "Näita viimast:",
index 645dca9..cc7dcf8 100644 (file)
        "uploaded-script-svg": "عنصر قابل برنامه‌ریزی «$1» در پرونده بارگذاری اس‌وی‌جی یافت شد.",
        "uploaded-hostile-svg": "سی‌اس‌اس نا امن در عنصر سبک پروندهٔ بارگذاری شدهٔ اس‌وی‌جی یافت شد.",
        "uploaded-event-handler-on-svg": "قرار دادن ویژگی‌های مدیریت رویداد <code>$1=\"$2\"</code> در پرونده‌های اس‌وی‌جی مجاز نیست.",
-       "uploaded-href-attribute-svg": "ویژگی‌های href <code>&lt;$1 $2=\"$3\"&gt;</code> با هدف غیر محلی (برای نمونه، http://, javascript:, etc) در پرونده‌های اس‌وی‌جی مجاز نیست.",
        "uploaded-href-unsafe-target-svg": "در پرونده SVG بارگذاری‌شده برای هدف نادرست <code>&lt;$1 $2=\"$3\"&gt;</code> برچسب href یافت شد.",
        "uploaded-animate-svg": "برچسب  \"animate\" یافت شده ممکن است herf را تغییر دهد. از مشخصه \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> در پرونده SVG بارگذاری‌شده استفاده کنید.",
        "uploaded-setting-event-handler-svg": "تنظیمات مشخصه گرداننده رویداد بسته شده‌است. کد <code>&lt;$1 $2=\"$3\"&gt;</code>  در پرونده بارگذاری‌شده یافت شد.",
        "version-hook-subscribedby": "وارد شده توسط",
        "version-version": "($1)",
        "version-no-ext-name": "[بدون نام]",
-       "version-svn-revision": "(&رلم;r$2)",
        "version-license": "اجازه‌نامهٔ مدیاویکی",
        "version-ext-license": "مجوزها",
        "version-ext-colheader-name": "گستره‌ها",
index 9795daf..8fc2a21 100644 (file)
        "grant-uploadeditmovefile": "Tallentaa, korvata ja siirtää tiedostoja",
        "grant-uploadfile": "Tallentaa uusia tiedostoja",
        "grant-basic": "Perustason oikeudet",
-       "grant-viewdeleted": "Näe poistetut tiedostot ja sivut",
-       "grant-viewmywatchlist": "Näe oma tarkkailulistasi",
+       "grant-viewdeleted": "Nähdä poistettuja sivuja ja tiedostoja",
+       "grant-viewmywatchlist": "Nähdä oma tarkkailulista",
        "newuserlogpage": "Uudet käyttäjät",
        "newuserlogpagetext": "Tämä on loki luoduista käyttäjätunnuksista.",
        "rightslog": "Käyttöoikeusloki",
        "uploaded-script-svg": "Found scriptable element \"$1\" in the uploaded SVG file.",
        "uploaded-hostile-svg": "Tallennetun SVG-tiedoston tyylielementissä löytyi turvaton CSS.",
        "uploaded-event-handler-on-svg": "Setting event-handler attributes <code>$1=\"$2\"</code> is not allowed in SVG files.",
-       "uploaded-href-attribute-svg": "href attributes <code>&lt;$1 $2=\"$3\"&gt;</code> with non-local target (e.g. http://, javascript:, etc) are not allowed in SVG files.",
        "uploaded-href-unsafe-target-svg": "Found href to unsafe target <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploaded-animate-svg": "Found \"animate\" tag that might be changing href, using the \"from\" attribute <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "uploaded-setting-event-handler-svg": "Setting event-handler attributes is blocked, found <code>&lt;$1 $2=\"$3\"&gt;</code> in the uploaded SVG file.",
        "listgrouprights-namespaceprotection-header": "Nimiavaruuksien rajoitukset",
        "listgrouprights-namespaceprotection-namespace": "Nimiavaruus",
        "listgrouprights-namespaceprotection-restrictedto": "Käyttäjän muokkausoikeudet",
+       "listgrants": "Toimintaoikeudet",
+       "listgrants-grant": "Toimintaoikeus",
+       "listgrants-rights": "Oikeudet",
        "trackingcategories": "Tarkkailuluokat",
        "trackingcategories-summary": "Tällä sivulla on luettelo sellaisista ongelmia havaitsevista luokista (tarkkailuluokat), joiden sisällön koostaa automaattisesti MediaWiki-ohjelmisto. Luokkien nimiä voi vaihtaa muuttamalla asianomaista järjestelmäviestiä nimiavaruudessa {{ns:8}}.",
        "trackingcategories-msg": "Tarkkailuluokka",
index 2c9dec0..7bd7fb7 100644 (file)
        "uploaded-script-svg": "Élément scriptable « $1 » trouvé dans le fichier SVG téléchargé.",
        "uploaded-hostile-svg": "CSS non sûr trouvé dans l’élément style d’un fichier SVG téléchargé.",
        "uploaded-event-handler-on-svg": "Fixer des attributs de gestionnaire d’événement <code>$1=\"$2\"</code> n’est pas autorisé dans les fichiers SVG.",
-       "uploaded-href-attribute-svg": "Les attributs href <code>&lt;$1 $2=\"$3\"&gt;</code> avec une cible non locale (par ex. http://, javascript:, etc.) ne sont pas autorisés dans les fichiers SVG.",
-       "uploaded-href-unsafe-target-svg": "href vers une cible non sûre <code>&lt;$1 $2=\"$3\"&gt;</code> trouvé dans le fichier SVG téléchargé.",
+       "uploaded-href-attribute-svg": "les attributs href dans les fichiers SVG ne sont autorisés que pour faire référence à des cibles http:// ou https://, <code>&lt;$1 $2=\"$3\"&gt;</code> trouvé.",
+       "uploaded-href-unsafe-target-svg": "href vers des données non sûres trouvé dans le fichier SVG téléchargé : URI cible <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "Balise « animate » trouvée, qui pourrait modifier le href en utilisant l’attribut « from » <code>&lt;$1 $2=\"$3\"&gt;</code> dans le fichier SVG téléchargé.",
        "uploaded-setting-event-handler-svg": "Positionner des attributs de gestionnaire d’événement est bloqué, <code>&lt;$1 $2=\"$3\"&gt;</code> trouvé dans le fichier SVG téléchargé.",
        "uploaded-setting-href-svg": "L’utilisation de la balise « set » pour ajouter un attribut « href » à l’élément parent est interdite.",
index 8059ce4..551586e 100644 (file)
@@ -9,13 +9,15 @@
                        "Tocaibon",
                        "Urhixidur",
                        "לערי ריינהארט",
-                       "아라"
+                       "아라",
+                       "Marsitown"
                ]
        },
        "tog-underline": "Sotlinee leams",
        "tog-hideminor": "Plate lis piçulis modifichis tai ultins cambiaments",
        "tog-hidepatrolled": "Plate lis modifichis controladis intai ultins cambiaments",
        "tog-newpageshidepatrolled": "Plate lis pagjinis verificadis de liste des pagjinis gnovis",
+       "tog-hidecategorization": "Plate la categorizazion des pagjinis",
        "tog-extendwatchlist": "Slargje la liste des controladis specialis, no dome aes ultimis",
        "tog-usenewrc": "Ragrupe lis modifichis par pagjine intes ultimis modifichis e inati oservâts speciai",
        "tog-numberheadings": "Numerazion automatiche dai titui",
@@ -26,6 +28,7 @@
        "tog-watchdefault": "Zonte in automatic lis pagjinis che o cambii inte liste di chês tignudis di voli",
        "tog-watchmoves": "Zonte in automatic lis pagjinis che o cambii inte liste di chês tignudis di voli",
        "tog-watchdeletion": "Zonte in automatic lis pagjinis che o cambii inte liste di chês tignudis di voli",
+       "tog-watchrollback": "Zonte ai osservâts speciâi lis pagjinis dulà che tu âs fat il rollback",
        "tog-minordefault": "Imposte come opzion predeterminade ducj i cambiaments come piçui",
        "tog-previewontop": "Mostre anteprime parsore dal spazi pe modifiche",
        "tog-previewonfirst": "Mostre anteprime te prime modifiche",
        "tog-shownumberswatching": "Mostre il numar di utents che a stan tignint di voli",
        "tog-oldsig": "Firme esistente",
        "tog-fancysig": "Interprete lis firmis come test wiki (cence un leam automatic)",
-       "tog-uselivepreview": "Dopre la anteprime direte (sperimentâl)",
+       "tog-uselivepreview": "Dopre la anteprime direte",
        "tog-forceeditsummary": "Domande conferme se il cjamp ogjet al è vueit",
        "tog-watchlisthideown": "Plate i miei cambiaments inte liste des pagjinis tignudis di voli",
        "tog-watchlisthidebots": "Plate i bot de liste dai oservâts speciai",
        "tog-watchlisthideminor": "Plate i piçui cambiaments de liste dai oservâts speciai",
        "tog-watchlisthideliu": "Plate lis modifichis dai utents regjstrâts de liste dai oservâts speciai",
+       "tog-watchlistreloadautomatically": "Ricjarie la liste dai osservâts speciâi dutis lis voltis che tu modifichis un filtri (al covente Javascript)",
        "tog-watchlisthideanons": "Palte lis modifichis dai utents anonims dai oservâts speciai",
        "tog-watchlisthidepatrolled": "Plate lis modifichis verificadis de liste dai oservâts speciai",
+       "tog-watchlisthidecategorization": "Plate la categorizazion des pagjinis",
        "tog-ccmeonemails": "Mandimi une copie dai messaçs che o mandi ai altris utents",
        "tog-diffonly": "No mostrâ la pagjine dopo il control des versions",
        "tog-showhiddencats": "Mostre categoriis platadis",
        "october-date": "$1 di Otubar",
        "november-date": "$1 di Novembar",
        "december-date": "$1 di Dicembar",
+       "period-am": "AM",
+       "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Categorie|Categoriis}}",
        "category_header": "Vôs inte categorie \"$1\"",
        "subcategories": "Sot categoriis",
        "morenotlisted": "La liste no je complete",
        "mypage": "Pagjine",
        "mytalk": "Discussions",
-       "anontalk": "Discussion par chest IP",
+       "anontalk": "Discussions",
        "navigation": "somari",
        "and": "&#32;e",
        "qbfind": "Cjate",
        "view": "Viodi",
        "view-foreign": "Vjôt su $1",
        "edit": "Cambie",
+       "edit-local": "Zonte une descrizion locâl",
        "create": "Cree",
+       "create-local": "Zonte une descrizion locâl",
        "editthispage": "Cambie cheste pagjine",
        "create-this-page": "Cree cheste pagjine",
        "delete": "Elimine",
        "otherlanguages": "Altris lenghis",
        "redirectedfrom": "(Inviât ca di $1)",
        "redirectpagesub": "Pagjine di redirezion",
+       "redirectto": "Reindriçât a:",
        "lastmodifiedat": "Cambiât par l'ultime volte ai $2, $1",
        "viewcount": "Cheste pagjine e je stade lete {{PLURAL:$1|une volte|$1 voltis}}.",
        "protectedpage": "Pagjine protezude",
        "jumptonavigation": "navigazion",
        "jumptosearch": "ricercje",
        "view-pool-error": "Scusinus ma i server a son sovrecjariats in chest moment. Masse utents a stan cjalant cheste pagjnie. Torne a provâ fra cualchi minût.\n\n$1",
+       "generic-pool-error": "Scusinus ma i server a son sovrecjariats in chest moment. Masse utents a stan cjalant cheste pagjnie. Torne a provâ fra cualchi minût.",
        "pool-timeout": "Timeout durant la spiete dal sbolc.",
        "pool-queuefull": "La code dal pool e je plene",
        "pool-errorunknown": "Erôr no cognossût",
+       "pool-servererror": "Il servizi contatôr dai pool nol è disponibil $1",
+       "poolcounter-usage-error": "Erôr di ûs: $1",
        "aboutsite": "Informazions su {{SITENAME}}",
        "aboutpage": "Project:Informazions",
        "copyright": "Il contignût al è disponibil sot de licence $1 se nol è specificât in altre maniere",
        "disclaimers": "Avîs legâi",
        "disclaimerpage": "Project:Avîs gjenerâi",
        "edithelp": "Jutori pai cambiaments",
+       "helppage-top-gethelp": "Jutori",
        "mainpage": "Pagjine principâl",
        "mainpage-description": "Pagjine principâl",
        "policy-url": "Project:Politiche",
        "hidetoc": "plate",
        "collapsible-collapse": "Strenç",
        "collapsible-expand": "Slargje",
+       "confirmable-confirm": "Sestu {{GENDER:$1|sugûr|sigure}}?",
+       "confirmable-yes": "Sì",
+       "confirmable-no": "No",
        "thisisdeleted": "Vuelistu cjalâ o ripristinâ $1?",
        "viewdeleted": "Vuelistu viodi $1?",
        "restorelink": "{{PLURAL:$1|une modifiche eliminade|$1 modifichis eliminadis}}",
        "databaseerror-query": "Interogazion: $1",
        "databaseerror-function": "Funzion $1",
        "databaseerror-error": "Erôr: $1",
+       "transaction-duration-limit-exceeded": "Par evitâ masse ritart te rispueste, cheste operazion è je stade fermade par vie che la durade dal timp di scriture ($1) al à passât il limit di $2 {{PLURAL:$2|secont|seconts}}.\nSe si stan modificant tancj elements in un colp al sarès di provâ a fâ la stesse operazion cun mancul elements a la volte.",
        "laggedslavemode": "Atenzion: La pagjine podarès no segnalâ inzornaments recents.",
        "readonly": "Base di dâts blocade",
        "enterlockreason": "Scrivi il motîf dal bloc e indicâ cuant che al varès di jessi gjavât.",
-       "readonlytext": "La base di dâts pal moment e je blocade e no si puedin zontâ vôs e fâ modifichis, probabilmentri pe normâl manutenzion de base di dâts, daspò de cuâl dut al tornarà normâl.\n\nL'aministradôr ch'al à metût il bloc al à scrit cheste motivazion: $1",
+       "readonlytext": "La base di dâts pal moment e je blocade e no si puedin zontâ vôs e fâ modifichis, probabilmentri pe normâl manutenzion de base di dâts, une volte finide dut al tornarà normâl.\n\nL'aministradôr che al à metût il bloc al à scrit cheste motivazion: $1",
        "missing-article": "La base di dâts no à cjatât il test di une pagjine che e varès di vê vût cjatât, di non \"$1\" $2.\n\nChest in gjenar al è causât dal jessi lâts daûr dal leam a une pagjine che e je stade eliminade, partint dal confront di dôs versions o di un leam tal storic.\n\nSe la cause no samee jessi cheste, tu podaressis vê cjatât un problem tal software.\nSegnalilu par plasê a un [[Special:ListUsers/sysop|administrator]], notant la URL.",
        "missingarticle-rev": "(numar de revision: $1)",
        "missingarticle-diff": "(Dif.: $1, $2)",
        "readonly_lag": "Par cumò il database al è stât blocât pe sincronizazion cul server",
+       "nonwrite-api-promise-error": "E je stade mandade la intestazion HTTP 'Promise-Non-Write-API-Action', ma la domande e jere di un modul API in scriture.",
        "internalerror": "Erôr interni",
        "internalerror_info": "Erôr interni: $1",
+       "internalerror-fatal-exception": "Erôr ireversibil di tipo \"$1\"",
        "filecopyerror": "No si pues copiâ il file \"$1\" in \"$2\"",
        "filerenameerror": "No si pues rinominâ \"$1\" in \"$2\"",
        "filedeleteerror": "No si pues eliminâ il file \"$1\".",
        "directorycreateerror": "No si pues creâ la cartele \"$1\"",
+       "directoryreadonlyerror": "La directory \"$1\" e je dome di leture.",
+       "directorynotreadableerror": "La directory \"$1\" non si rive a lei.",
        "filenotfound": "No si pues cjatâ il file \"$1\".",
        "unexpected": "Valor no proviodût: \"$1\" = \"$2\"",
        "formerror": "Erôr: no si rive a mandâ il form",
        "no-null-revision": "No si pues creâ une version vuedie de pagjine \"$1\"",
        "badtitle": "Titul sbaliât",
        "badtitletext": "Il titul de pagjine che tu âs inserît nol è valit, al è vuelit, o al veve un erôr tal colegament tra wiki diviersis o tra versions in altris lenghis.\nAl podarès vê dentri caratars che no podin jessi doprâts tai titui.",
+       "title-invalid-empty": "Il titul de pagjine domandade al è vueit o al à dome il non dal namespace",
+       "title-invalid-utf8": "Il titul de pagjine domandade al à une secuence UTF-8 no valide.",
+       "title-invalid-interwiki": "Il titul de pagjine domandade al à un leam interwiki che no si pues doprâ tai titui.",
+       "title-invalid-talk-namespace": "Il titul de pagjine domandade al clame une pagjine di discussion che no esist",
+       "title-invalid-characters": "Il titul de pagjine domandade al à caratars no valits: \"$1\".",
+       "title-invalid-relative": "Il titul al à un percors (./, ../). al è di cambiâ parcè che nol è dite che il browser dal utent al rivedi a cjatâlu.",
+       "title-invalid-magic-tilde": "Il titul de pagjine domandade nol + valit par vie che al à une sucession speciâl di tildis (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "Il titul de pagjine domandade al è masse lunc. Nol à di jessi plui lunc di {{PLURAL:$1|byte}} in codifiche UTF-8.",
+       "title-invalid-leading-colon": "Il titul de pagjine domandade nol è valit par vie che al à i doi pont al inizi dal titul",
        "perfcached": "I dats seguints a vegnin di une copie de \"cache\" dal database e a podaressin no jessi inzornâts. La cache e rive a tignî al massim  {{PLURAL:$1|un risultâ disponibil|$1 risultats disponibii}}",
        "perfcachedts": "I dats seguints a vegnin di une copie de \"cache\" dal database dal $1 e a podaressin no jessi inzornâts. La cache e rive a tignî al massim  {{PLURAL:$1|un risultâ disponibil|$1 risultats disponibii}}",
        "querypage-no-updates": "Inzornaments de pagjine a son al moment sospindûts. I dats metûts no saràn salvâts.",
        "viewsource": "Cjale risultive",
        "viewsource-title": "Cjale il codiç di $1",
        "actionthrottled": "Azion ritardade",
-       "actionthrottledtext": "Come misure anti-spam tu âs des limitazion tal fâ cheste azion masse voltis in toc di timp curt. Il limit al è stât superât. Tu puedis tornâ a provâ fra cualchi minût.",
+       "actionthrottledtext": "Come misure anti-spam tu âs des limitazion tal fâ cheste azion masse voltis in pôc timp. Il limit al è stât superât. Tu puedis tornâ a provâ fra cualchi minût.",
        "protectedpagetext": "Pagjine protete par evitâ modifichis o altris azions.",
        "viewsourcetext": "Tu puedis viodi e copiâ la risultive di cheste pagjine:",
        "viewyourtext": "Tu puedis viodi o copiâ il codiç des \"tôs modifichis\" in cheste pagjine.",
+       "mycustomcssprotected": "Non hai i permessi per modificare questa pagina CSS",
+       "mycustomjsprotected": "Non hai i permessi per modificare questa pagina JavaScript",
+       "myprivateinfoprotected": "Non si dispone dei permessi necessari per modificare i propri dati personali.",
+       "mypreferencesprotected": "Non si dispone dei permessi necessari per modificare le proprie preferenze.",
        "ns-specialprotected": "Lis pagjinis specialis no si puedin modificâ",
        "exception-nologin": "No tu sês jentrât",
        "virus-unknownscanner": "antivirus no cognossût:",
        "logouttext": "'''Tu sës cumò lât fûr.'''\n\nConsidere che cualchi pagjine e pues mostrâti ancjemò come jentrât tal sît fin cuant che no tu netis la memorie cache dal sgarfadôr.",
        "yourname": "Non utent",
+       "userlogin-yourname": "Non utent",
+       "userlogin-yourname-ph": "Scrîf il to non",
        "yourpassword": "Peraule clâf",
+       "userlogin-yourpassword": "Password",
+       "userlogin-yourpassword-ph": "Scrîf la tô password",
+       "createacct-yourpassword-ph": "Scrîf la tô password",
        "yourpasswordagain": "Torne a scrivile",
+       "createacct-yourpasswordagain": "Conferme la password",
+       "createacct-yourpasswordagain-ph": "Torne a scrivi la tô password",
        "remembermypassword": "Visiti di me di une session a chê altre (fin a $1 {{PLURAL:$1|zornade|zornadis}})",
+       "userlogin-remembermypassword": "Tegnimi colegât",
        "yourdomainname": "Il to domini",
        "login": "Jentre",
        "nav-login-createaccount": "Regjistriti o jentre",
        "logout": "Jes",
        "userlogout": "Jes",
        "notloggedin": "No tu sês jentrât",
+       "userlogin-noaccount": "No âstu ancjemò une identitât?",
+       "userlogin-joinproject": "Regjstriti du {{SITENAME}}",
        "nologin": "No âstu ancjemò une identitât par jentrâ? '''$1'''.",
        "nologinlink": "Creile cumò",
        "createaccount": "Cree une gnove identitât",
        "gotaccount": "Âstu za une identitât? '''$1'''.",
        "gotaccountlink": "Jentre",
        "userlogin-resetlink": "Dismenteât i detais par jentrâ?",
+       "userlogin-resetpassword-link": "Password dismenteade?",
+       "userlogin-helplink2": "Judimi a jentrâ",
+       "createacct-emailoptional": "Direzion email (opzionâl)",
+       "createacct-email-ph": "Scrîl la tô direzion email",
        "createaccountmail": "par pueste eletroniche",
        "createaccountreason": "Reson:",
+       "createacct-submit": "Cree il to profîl utent",
+       "createacct-benefit-heading": "{{SITENAME}} al è fat di int come te",
+       "createacct-benefit-body1": "$1 {{PLURAL:$1|contribût|contribûts}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|pagjine|pagjinis}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|ultin contributôr|ultins contributôrs}}",
        "badretype": "Lis peraulis clâfs inseridis no son compagnis.",
-       "userexists": "Il non utent inserît al è za doprât. Sielç par plasê un non diferent.",
+       "userexists": "Il nome utente inserito è già utilizzato.\nScegli un nome utente diverso.",
        "loginerror": "Erôr te jentrade",
        "createaccounterror": "No si à podût creâ l'identitât: $1",
        "nocookiesnew": "L'identitât utent e je stade creade, ma no tu sês jentrât. {{SITENAME}} al dopre i cookies par visâsi dai utents, e tu tu ju âs disabilitâts. Par plasê abilitiju, dopo jentre cul to gnûf non utent e password.",
        "noname": "No tu âs inserît un non utent valit.",
        "loginsuccesstitle": "Jentrât cun sucès",
        "loginsuccess": "Cumò tu sês jentrât te {{SITENAME}} sicu \"$1\".",
-       "nosuchuser": "Nissun utent regjistrât cul non \"$1\". Controle il non inserît o [[Special:UserLogin/signup|cree tu une gnove identitât]].",
+       "nosuchuser": "Non è registrato alcun utente di nome \"$1\".\nI nomi utente sono sensibili alle maiuscole.\nVerificare il nome inserito o [[Special:UserLogin/signup|creare una nuova utenza]].",
        "nosuchusershort": "Nol esist nissun utent cul non \"$1\". Controle di no vê sbaliât di scrivi.",
        "nouserspecified": "Tu scugnis specificâ un non utent.",
        "wrongpassword": "La peraule clâf zontade no je juste. Torne par plasê a provâ.",
        "createaccount-title": "Creazion di une identitât par {{SITENAME}}",
        "loginlanguagelabel": "Lenghe: $1",
        "pt-login": "Coleghiti",
+       "pt-login-button": "Coleghiti",
        "pt-createaccount": "Regjistris",
+       "pt-userlogout": "Va fûr",
        "changepassword": "Gambie peraule clâf",
        "resetpass_header": "Cambie peraule clâf de identitât",
        "oldpassword": "Vecje peraule clâf",
        "newpassword": "Gnove peraule clâf",
        "retypenew": "Torne a scrivi chê gnove",
        "resetpass-submit-cancel": "Scancele",
+       "passwordreset": "Azere la password",
        "passwordreset-username": "Non utent:",
        "bold_sample": "Test in gruessut",
        "bold_tip": "Test in gruessut",
        "preview": "Anteprime",
        "showpreview": "Mostre anteprime",
        "showdiff": "Mostre cambiaments",
-       "anoneditwarning": "No tu sês jentrât cuntun non utent. La to direzion IP e vignarà regjistrade tal storic di cheste pagjine.",
+       "anoneditwarning": "<strong>Atenzion:</strong>No tu sês jentrât cuntun non utent. La to direzion IP e vignarà regjistrade tal storic di cheste pagjine. -se tu <strong>[$1 jentris]</strong> o <strong>[$2 tu ti regjistris]</strong>, lis tôs modifichis a saran atribuidis al to non utent, adun ad altris beneficis.",
        "missingsummary": "'''Atenzion:''' no tu âs specificât un ogjet par chest cambiament. Se tu tornis a fracâ su \"Salve la pagjine\", il cambiament al vignarà salvât cuntun ogjet vueit.",
        "missingcommenttext": "Inserìs un coment ca sot.",
        "missingcommentheader": "'''Atenzion:''' no tu âs specificât un ogjet/intestazion par chest coment. Se tu tornis a fracâ su \"Salve la pagjine\", il to cambiament al vignarà salvât cuntune intestazion vueide.",
        "note": "'''Note:'''",
        "previewnote": "'''Visiti che cheste e je dome une anteprime.'''\nI tiei cambiaments no son stâts ancjemò salvâts!",
        "editing": "Cambiament di $1",
+       "creating": "Tu creis $1",
        "editingsection": "Cambiament di $1 (sezion)",
        "editingcomment": "Cambiament di $1 (gnove sezion)",
        "editconflict": "Conflit inte modifiche: $1",
        "currentrev": "Version atuâl",
        "currentrev-asof": "Revision atuâl dai $1",
        "revisionasof": "Version dai $1",
-       "revision-info": "Version dal $1, autôr: $2",
+       "revision-info": "Version dal $1 di {{GENDER:$6|$2}}$7",
        "previousrevision": "← Version plui vecje",
        "nextrevision": "Version plui gnove →",
        "currentrevisionlink": "Version atuâl",
        "revdelete-reasonotherlist": "Altri motîf",
        "revertmerge": "Anule unions",
        "history-title": "Storic dai cambiaments di \"$1\"",
+       "difference-title": "$1: diferencis tra lis versions",
        "lineno": "Rie $1:",
        "compareselectedversions": "Confronte versions selezionadis",
        "editundo": "anule",
+       "diff-multi-sameuser": "({{PLURAL:$1|Une version  intermedie|$1 versions intermedis}} di un stess utent no {{PLURAL:$1|je mostrade|son mostradis}})",
        "searchresults": "Risultâts de ricercje",
        "searchresults-title": "Risultâts de ricercje di \"$1\"",
        "titlematches": "Corispondencis tai titui des pagjinis",
        "shown-title": "Mostre $1 {{PLURAL:$1|risultât|risultâts}} par pagjine",
        "viewprevnext": "Cjale ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''E je une pagjine di non \"[[:$1]]\" su cheste wiki'''",
-       "searchmenu-new": "'''Cree la pagjine \"[[:$1]]\" su cheste wiki!'''",
+       "searchmenu-new": "'''Cree la pagjine \"[[:$1]]\" su cheste wiki!'''</strong> {{PLURAL:$2|0=|Viôt ancje lis pagjinis cjatadis cu la tô ricercje .|Viôt ancje i risultâts de ricercje.}}",
        "searchprofile-articles": "Pagjinis di contignûts",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Dut",
        "searchrelated": "leâts",
        "searchall": "ducj",
        "showingresults": "Ca sot {{PLURAL:$1|al è fin a '''1''' risultât|a son fin a '''$1''' risultâts}} scomençant dal numar '''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Risultât <strong>$1</strong> di <strong>$3</strong>|Resultâts <strong>$1 - $2</strong> di <strong>$3</strong>}}",
        "search-nonefound": "Nissun risultât par cheste ricercje.",
        "powersearch-legend": "Ricercje avanzade",
        "powersearch-ns": "Cîr tai spazis dai nons:",
        "rcnotefrom": "Ca sot i cambiaments dal '''$2''' (fintremai al '''$1''').",
        "rclistfrom": "Mostre i ultins cambiaments dal $3 $2",
        "rcshowhideminor": "$1 i piçui cambiaments",
+       "rcshowhideminor-show": "Mostre",
        "rcshowhideminor-hide": "Plate",
        "rcshowhidebots": "$1 i bots",
        "rcshowhidebots-show": "Mostre",
+       "rcshowhidebots-hide": "Plate",
        "rcshowhideliu": "$1 utents regjstrâts",
        "rcshowhideliu-hide": "Plate",
        "rcshowhideanons": "$1 utents anonims",
+       "rcshowhideanons-show": "Mostre",
        "rcshowhideanons-hide": "Plate",
        "rcshowhidepatr": "$1 cambiaments verificâts",
        "rcshowhidemine": "$1 miei cambiaments",
+       "rcshowhidemine-show": "Mostre",
        "rcshowhidemine-hide": "plate",
        "rclinks": "Mostre i ultins $1 cambiaments tes ultimis $2 zornadis<br />$3",
        "diff": "difarencis",
        "pager-older-n": "{{PLURAL:$1|1 plui vieri|$1 plui vieris}}",
        "booksources": "Fonts librariis",
        "booksources-search-legend": "Ricercje di fonts libraris",
+       "booksources-search": "Cîr",
        "specialloguserlabel": "Utent:",
        "speciallogtitlelabel": "Titul:",
        "log": "Regjistris",
        "deleteotherreason": "Altri motîf o motîf in plui:",
        "deletereasonotherlist": "Altri motîf",
        "rollbacklink": "revoche",
+       "rollbacklinkcount": "torne indaûr di $1 {{PLURAL:$1|modifiche|modifichis}}",
        "protectlogpage": "Regjistri des protezions",
        "protectedarticle": "$1 protezût",
        "modifiedarticleprotection": "cambiât il nivel di protezion par \"[[$1]]\"",
        "contributions": "Contribûts {{GENDER:$1|dal utent|de utente}}",
        "contributions-title": "Contribûts di $1",
        "mycontris": "Contribûts",
+       "anoncontribs": "Contribûts",
        "contribsub2": "Par {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Nissun cambiament che al rispiete chescj criteris cjatât.",
        "uctop": "atuâl",
        "importlogpage": "Regjistris des impuartazions",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision|revisions}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision|revisions}} di $2",
-       "tooltip-pt-userpage": "La  pagjine utent",
+       "tooltip-pt-userpage": "La {{GENDER:|tô}} pagjine utent",
        "tooltip-pt-anonuserpage": "La pagjine utent di cheste direzion IP",
-       "tooltip-pt-mytalk": "La  pagjine di discussion",
+       "tooltip-pt-mytalk": "La {{GENDER:|tô}} pagjine di discussion",
        "tooltip-pt-anontalk": "Discussions dai cambiaments fats di cheste direzion IP",
-       "tooltip-pt-preferences": "Lis mês preferencis",
+       "tooltip-pt-preferences": "Lis {{GENDER:|mês}} preferencis",
        "tooltip-pt-watchlist": "La liste des pagjinis che tu stâs tignint di voli",
-       "tooltip-pt-mycontris": "Liste dai tiei contribûts",
+       "tooltip-pt-mycontris": "Liste dai {{GENDER:|tiei}} contribûts",
        "tooltip-pt-login": "La regjistrazion e je conseade, ancje se no obligatorie.",
        "tooltip-pt-logout": "Jes (logout)",
        "tooltip-pt-createaccount": "Al sarès preferibil se tu ti regjistrassis par jentrâ. Dut câs nol è obligatori.",
        "tooltip-t-recentchangeslinked": "Liste dai ultins cambiaments intes pagjinis leadis a cheste",
        "tooltip-feed-rss": "Cjanâl RSS par cheste pagjine",
        "tooltip-feed-atom": "Cjanâl Atom par cheste pagjine",
-       "tooltip-t-contributions": "Liste dai contribûts di chest utent",
+       "tooltip-t-contributions": "Liste dai contribûts di {{GENDER:$1|chest utent|cheste utente}}",
        "tooltip-t-emailuser": "Mande un messaç di pueste eletroniche a chest utent",
        "tooltip-t-upload": "Cjame sù files multimediâi",
        "tooltip-t-specialpages": "Liste di dutis lis pagjinis speciâls",
        "exif-model": "Model di machine fotografiche",
        "exif-software": "Software doprât",
        "exif-artist": "Autôr",
+       "exif-exifversion": "Version del formât Exif",
+       "exif-colorspace": "Spazi dai colôrs",
        "exif-datetimeoriginal": "Date e ore di creazion dai dâts",
+       "exif-datetimedigitized": "Date e ore di digitalizazion",
        "exif-exposuretime": "Timp di esposizion",
        "exif-flash": "Flash",
        "exif-focallength": "Lungjece focâl obietîf",
        "watchlisttools-view": "Cjale i cambiaments rilevants",
        "watchlisttools-edit": "Cjale e cambie la liste des pagjinis tignudis di voli",
        "watchlisttools-raw": "Modifiche la liste des pagjinis tignudis di voli in formât testuâl",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussion]])",
        "duplicate-defaultsort": "'''Avîs:''' La clâf predeterminade par l'ordenament \"$2\" invalide la clâf predeterminade precedente \"$1\".",
        "version": "Version",
        "version-variables": "Variabilis",
        "dberr-info": "(No si pues contatâ il servidor de base di dâts: $1)",
        "htmlform-submit": "Invie",
        "htmlform-selectorother-other": "Altris",
+       "logentry-delete-delete": "$1 {{GENDER:$2|al à cancelât|e à cancelât}} la pagjine $3",
+       "logentry-move-move": "$1 {{GENDER:$2|al à spostât}} la pagjine $3 a $4",
        "logentry-newusers-create": "L'utent $1 al è stât {{GENDER:$2|creât}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|al à tirât su}} $3",
        "searchsuggest-search": "Ricercje",
        "searchsuggest-containing": "che al à dentri...",
        "api-error-unclassified": "Al è capitât un erôr no cognossût",
index 3f52803..b45bfc6 100644 (file)
        "uploaded-script-svg": "Atopado elemento de comandos \"$1\" no ficheiro SVG subido.",
        "uploaded-hostile-svg": "Atopado CSS non seguro no elemento de estilo do ficheiro SVG subido.",
        "uploaded-event-handler-on-svg": "Fixar atributos de xestión de eventos <code>$1=\"$2\"</code> no está permitido en ficheiros SVG.",
-       "uploaded-href-attribute-svg": "Atributos href <code>&lt;$1 $2=\"$3\"&gt;</code> con obxectivos non locais (p. ex. http://, javascript:, etc) non están permitidos en ficheiros SVG.",
        "uploaded-href-unsafe-target-svg": "Atopado href a obxectivo non seguro <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
        "uploaded-animate-svg": "Atopada etiqueta \"animate\" que podería estar cambiando a href, usando o atributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
        "uploaded-setting-event-handler-svg": "Fichar os atributos de xestión de eventos non está permitido, atopado <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
        "lastmodifiedatby": "A última modificación desta páxina foi o $1 ás $2 por $3.",
        "othercontribs": "Baseado no traballo feito por $1.",
        "others": "outros",
-       "siteusers": "{{PLURAL:$2|$1}} de {{SITENAME}}",
+       "siteusers": "{{PLURAL:$2|{{GENDER:$1|o usuario|a usuaria}}|os usuarios}} $1 de {{SITENAME}}",
        "anonusers": "{{PLURAL:$2|o usuario anónimo|os usuarios anónimos}} $1 de {{SITENAME}}",
        "creditspage": "Páxina de créditos",
        "nocredits": "Esta páxina non ten dispoñible información de créditos.",
        "expand_templates_preview_fail_html": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e produciuse unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, inténteo de novo.</strong>\nSe segue sen funcionar, probe a [[Special:UserLogout|saír]] e volver a entrar coa súa conta.",
        "expand_templates_preview_fail_html_anon": "<em>Dado que o código HTML puro está activado en {{SITENAME}} e produciuse unha perda dos datos da sesión, a vista previa está oculta como precaución contra ataques mediante código JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de acceso á vista previa, probe a [[Special:UserLogout|saír]] e volver a entrar coa súa conta.</strong>",
        "expand_templates_input_missing": "Necesita proporcionar polo menos algún texto de entrada.",
-       "pagelanguage": "Selector de lingua da páxina",
+       "pagelanguage": "Cambiar a lingua da páxina",
        "pagelang-name": "Páxina",
        "pagelang-language": "Lingua",
        "pagelang-use-default": "Utilizar a lingua por defecto",
        "pagelang-submit": "Enviar",
        "right-pagelang": "Cambiar a lingua da páxina",
        "action-pagelang": "cambiar a lingua da páxina",
-       "log-name-pagelang": "Rexistro de cambios de lingua",
+       "log-name-pagelang": "Rexistro de cambios de linguas",
        "log-description-pagelang": "Este é un rexistro dos cambios na lingua das páxinas.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiou}} a lingua da páxina \"$3\" do $4 ao $5.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiou}} a lingua de \"$3\" do $4 ao $5.",
        "default-skin-not-found": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nA súa instalación parece incluír {{PLURAL:$4|o seguinte aspecto|os seguintes aspectos}}. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración dos aspectos] para obter información sobre como {{PLURAL:$4|activalo|activalos}} e escoller o predeterminado.\n\n$2\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Usando Git para descargar aspectos].\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki.\n\n; Se acaba de anovar MediaWiki:\n: MediaWiki 1.24 e versións posteriores xa non activan aspectos de maneira automática (lea o [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual de descubrimento automático de aspectos]). Pode pegar {{PLURAL:$5|a seguinte liña|as seguintes liñas}} no seu ficheiro <code>LocalSettings.php</code> para activar {{PLURAL:$5|o|todos os}} {{PLURAL:$5|aspecto instalado|aspectos instalados}} actualmente:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Se acaba de modificar <code>LocalSettings.php</code>:\n: Asegúrese de que os nomes dos aspectos están escritos correctamente.",
        "default-skin-not-found-no-skins": "Ups! O aspecto predeterminado do wiki, definido en <code dir=\"ltr\">$wgDefaultSkin</code> como <code>$1</code>, non está dispoñíbel.\n\nNon ten aspectos instalados.\n\n; Se acaba de instalar MediaWiki:\n: Probablemente instalou MediaWiki a partir de Git, ou directamente a partir do código fonte mediante algún outro método. En tal caso, este problema é normal. Probe a instalar algúns aspectos do [https://www.mediawiki.org/wiki/Category:All_skins cartafol de aspectos de mediawiki.org]. Para instalar aspectos, siga calquera destes pasos:\n:* Descargue o [https://www.mediawiki.org/wiki/Download arquivo do instalador], que inclúe varios aspectos e complementos. Pode copiar e pegar o cartafol <code>skins/</code> que atopará no arquivo.\n:* Descargue arquivos de aspectos individuais de [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Use Git para descargar aspectos individuais].\n: Isto non debería interferir co seu repositorio Git se é vostede un desenvolvedor de MediaWiki. Lea o [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual de configuración de aspectos] para obter información sobre como activar aspectos e escoller o aspecto predeterminado.",
        "default-skin-not-found-row-enabled": "* <code>$1</code>/$2 (activada)",
index 04b85f1..2081f83 100644 (file)
        "uploaded-script-svg": "Ir ufegladnigen SVG-Datei het’s ds Skript-Elemänt «$1».",
        "uploaded-hostile-svg": "Im Style-Elemänt vor ufegladnigen SVG-Datei het’s unsichers CSS.",
        "uploaded-event-handler-on-svg": "I SVG-Dateien isch ds Event-Handler-Attribut <code>$1=\"$2\"</code> nid erloubt.",
-       "uploaded-href-attribute-svg": "I SVG-Dateien isch ds href-Attribut <code>&lt;$1 $2=\"$3\"&gt;</code> mit emne nid-lokale Zil (byspilswys http://, javascript: etc.) nid erloubt.",
        "uploaded-href-unsafe-target-svg": "Ir ufegladnige SVG-Datei het’s es href uf ds unsichere Zil <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "Ir ufegladnigen SVG-Datei het’s en «animate»-Tag, wo über ds «from»-Attribut <code>&lt;$1 $2=\"$3\"&gt;</code> chönnt href ändere.",
        "uploaded-setting-event-handler-svg": "Ir ufegladnigen SVG-Datei het’s ds Event-Handler-Attribut <code>&lt;$1 $2=\"$3\"&gt;</code>. Event-Handler-Attribut sy nid erloubt.",
index 5f43e1e..9c70672 100644 (file)
        "wlheader-showupdated": "તમારી છેલ્લી મુલાકાત પછી બદલાયેલાં પાના  '''ઘાટા''' અક્ષરો વડે દર્શાવ્યાં છે.",
        "wlnote": "નીચે $3, $4 વાગ્યા સુધીના છેલ્લા {{PLURAL:$2|એક કલાક|'''$2''' કલાક}}માં થયેલા {{PLURAL:$1|ફેરફાર|'''$1''' ફેરફારો }} દર્શાવ્યા છે.",
        "wlshowlast": "છેલ્લા $1 કલાકો $2 દિવસો બતાવો",
-       "watchlistall2": "બધા",
        "watchlist-options": "ધ્યાનસૂચિના વિકલ્પો",
        "watching": "નજર રાખી રહ્યાં છો...",
        "unwatching": "નજર રાખવાની બંધ કરી છે...",
        "enotif_lastvisited": "તમારી પાછલી મુલાકાત પછી થયેલા બધા ફેરફારો માટે $1 જુઓ",
        "enotif_lastdiff": "આ ફેરફાર જોવા $1 જુઓ",
        "enotif_anon_editor": "અનામિ સભ્ય $1",
-       "enotif_body": "પ્રિય $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nફેરફારોનો સારાંશ: $PAGESUMMARY $PAGEMINOREDIT\n\nસંપાદકનો સંપર્ક:\nઇમેલ: $PAGEEDITOR_EMAIL\nવિકિ: $PAGEEDITOR_WIKI\n\nજ્યાં સુધી તમે પ્રવેશ કરીને આ પાનાની મુલાકાત નહી લો ત્યાં સુધી તેમાં ભવિષ્યમાં થનાર કોઇ પણ ફેરફારની સૂચના તમને મળશે નહિ. તમે તમારી ધ્યાન સૂચિમાં તમે જોયેલા પાના સંબંધી સૂચનાને લાગતા વિકલ્પોમાં ફેરફાર કરી શકો છો.\n\n\nઆપની વિશ્વાસુ {{SITENAME}} સૂચના પ્રણાલી   \n\n--\nઇમેલ સૂચના પ્રણાલી બદલવા માટે, મુલાકાત લો\n{{canonicalurl:{{#special:Preferences}}}}\n\nતમારી ધ્યાનસૂચિની વિક્લ્પ ગોઠવણી માટે, મુલાકાત લો\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nધ્યાનસૂચિમાંથી પાનું હટાવવા માટે, મુલાકાત લો\n$UNWATCHURL\n\nમંતવ્યો અને વધુ મદદ માટે:\n$HELPPAGE",
+       "enotif_body": "પ્રિય $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nફેરફારોનો સારાંશ: $PAGESUMMARY $PAGEMINOREDIT\n\nસંપાદકનો સંપર્ક:\nઇમેલ: $PAGEEDITOR_EMAIL\nવિકિ: $PAGEEDITOR_WIKI\n\nજ્યાં સુધી તમે પ્રવેશ કરીને આ પાનાની મુલાકાત નહી લો ત્યાં સુધી તેમાં ભવિષ્યમાં થનાર કોઇ પણ ફેરફારની સૂચના તમને મળશે નહિ. તમે તમારી ધ્યાન સૂચિમાં તમે જોયેલા પાના સંબંધી સૂચનાને લાગતા વિકલ્પોમાં ફેરફાર કરી શકો છો.\n\nઆપની વિશ્વાસુ {{SITENAME}} સૂચના પ્રણાલી   \n\n--\nઇમેલ સૂચના પ્રણાલી બદલવા માટે, મુલાકાત લો\n{{canonicalurl:{{#special:Preferences}}}}\n\nતમારી ધ્યાનસૂચિની વિક્લ્પ ગોઠવણી માટે, મુલાકાત લો\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nધ્યાનસૂચિમાંથી પાનું હટાવવા માટે, મુલાકાત લો\n$UNWATCHURL\n\nમંતવ્યો અને વધુ મદદ માટે:\n$HELPPAGE",
        "created": "બનાવ્યું",
        "changed": "બદલ્યું",
        "deletepage": "પાનું હટાવો",
index 36ec2d7..ca39584 100644 (file)
        "createaccountreason": "原因:",
        "createacct-reason": "原因",
        "createacct-reason-ph": "汝做麽嘅愛創建另一隻帳號",
-       "createacct-captcha": "安全檢查",
-       "createacct-imgcaptcha-ph": "輸入汝在上背看到嘅字符",
        "createacct-submit": "建立帳號",
        "createacct-benefit-heading": "{{SITENAME}}是由撈您共樣嘅人建立。",
        "createacct-benefit-body1": "$1次編寫",
        "resetpass-temp-password": "臨時密碼:",
        "resetpass-abort-generic": "擴充插件已中止矣更改密碼操作。",
        "passwordreset": "重設密碼",
-       "passwordreset-legend": "重置密码",
        "passwordreset-disabled": "邇隻維基上已禁止矣重設密碼。",
        "passwordreset-emaildisabled": "電子郵件功能在此 wiki 上已禁用。",
        "passwordreset-username": "用戶名:",
        "passwordreset-capture-help": "係講汝選中邇隻框,電子郵件(包括臨時密碼)將顯示,並發送分用戶。",
        "passwordreset-email": "電郵地址:",
        "passwordreset-emailtitle": "在{{SITENAME}}上嘅詳細信息",
-       "passwordreset-emailsent": "密碼重置電子郵件已發送。",
+       "passwordreset-emailsentemail": "密碼重置電子郵件已發送。",
        "changeemail": "更改電子郵件地址",
+       "changeemail-header": "更改電子郵件帳戶",
        "changeemail-no-info": "汝必須登入後直接進入邇隻頁面。",
        "changeemail-oldemail": "當前電郵地址:",
        "changeemail-newemail": "新嘅電郵地址:",
        "default": "默認",
        "prefs-files": "文件",
        "youremail": "電子郵件:",
-       "username": "Yung-fu miàng-chhṳ̂n:",
+       "username": "{{GENDER:$1|用戶名稱}}:",
        "yourrealname": "真名:",
        "yourlanguage": "語言:",
        "yourvariant": "Sṳ-thí pien-von:",
-       "yournick": "Kién-chhṳ̂n:",
+       "yournick": "新个簽名:",
        "badsig": "錯誤嘅原始簽名。請檢查HTML標籤。",
        "badsiglength": "Tshiâm-miàng ko-liong.\nTshòng-tón pit-sî chhai $1-ke sṳ-ngièn yî-ha.",
        "email": "電子郵件",
        "destfilename": "目標文件名",
        "watchthisupload": "監視本文件",
        "filewasdeleted": "早先已經有一隻同名文件分上傳後又分刪除矣。在上傳邇文件之前汝愛檢查$1。",
-       "upload-success-subj": "上傳成功",
        "upload-proto-error": "協議毋著",
        "upload-proto-error-text": "遠程上傳要求URL以<code>http://</code>或 <code>ftp://</code>開頭。",
        "upload-file-error": "內部差錯",
        "nlinks": "$1隻鏈接",
        "nmembers": "$1隻成員",
        "nrevisions": "$1隻修訂版本",
-       "nviews": "$1次瀏覽",
        "specialpage-empty": "本報告無結果。",
        "lonelypages": "孤立頁面",
        "lonelypagestext": "Yî-ha vùn-chông mò-yû lièn-kiet liá-ke wiki chûng ke khì-thâ vùn-chông.",
        "mailnologin": "無電郵地址",
        "mailnologintext": "汝必須先[[Special:UserLogin|登入]]\n並在[[Special:Preferences|偏好設定]]\n肚有一隻有效嘅電郵地址正做得發郵件分其他用戶。",
        "emailuser": "電郵聯繫邇隻用戶",
-       "emailpage": "電郵聯繫用戶",
        "emailpagetext": "Kó-yèn ke-yung-fu yí-kîn chhai chhâm-su sat-chṳ chông chûng sû-ngi̍p yû-háu ke e-mail thi-tiám, yî-ha ke péu-kak chiông-ki yit-ke sêu-sit pûn ke-yung-fu. Ngì chhai chhâm-su sat-chṳ chûng só sû-ngi̍p ke e-mail thi-tiám chiông chhut-hien chhai email \"fat-khien-ngìn\" yit-làn-chûng, liá-yong ke-yung-fu chhiu khó-yî fì-fu̍k.",
        "defemailsubject": "{{SITENAME}} Email",
        "noemailtitle": "電郵地址:",
        "deleteotherreason": "其它/附加理由:",
        "deletereasonotherlist": "其它理由",
        "rollback": "編寫倒轉頭",
-       "rollback_short": "倒轉頭",
        "rollbacklink": "打轉頭",
        "rollbackfailed": "無法倒轉頭",
        "cantrollback": "編寫無法打轉頭;最後嘅貢獻者人本文嘅唯一作者。",
        "protect-cascadeon": "下背嘅$1嘅頁面包含緊本頁面嘅同時,還啟動矣連鎖保護,故所本頁面目前也分保護,還㬟做得編寫。汝做得設定本頁面嘅保護級別,毋過邇影響毋到連鎖保護。",
        "protect-default": "容許所有用戶",
        "protect-fallback": "Sî-yeu \"$1\" ke hí-khó",
-       "protect-level-autoconfirmed": "Kim-chṳ́  sîn-ke lâu hàn-mò chu-chhak ke yung-fu",
+       "protect-level-autoconfirmed": "只有已經自動確定个用戶",
        "protect-level-sysop": "Kón-lî-yèn chôn-cho",
        "protect-summary-cascade": "連鎖",
        "protect-expiring": "終止於$1(UTC)",
        "sp-contributions-uploads": "上傳",
        "sp-contributions-logs": "日誌",
        "sp-contributions-talk": "交流",
-       "sp-contributions-userrights": "Yung-fu khièn-han kón-lî",
+       "sp-contributions-userrights": "用戶權限管理",
        "sp-contributions-search": "搜尋貢獻記錄",
        "sp-contributions-username": "IP地址或用戶名:",
        "sp-contributions-toponly": "單淨展示最新修訂版本嘅編寫",
        "move-page-legend": "Yì-thung vùn-chông",
        "movepagetext": "Yung ha-mien ke péu-tân lòi chhùng-sîn min-miàng yit-ke vùn-chông, pin chiông siû-thin li̍t-sṳ́ thùng-sṳ̀ yì-thung to sîn vùn-chông.\nLó-ke vùn-chông chiông sṳ̀n-vì sîn vùn-chông ke chhûng-thin hong-mien.\nLièn-kiet to ló vùn-chông ke lièn-kiet pin-mò chhṳ-thung kiên-kói;\nchhiáng kiám-chhà sûng-chhûng fe̍t-he sún-fái chhûng-thin-hiong lièn-kiet.\nYin-tông fu-chit khok-thin só-yû lièn-kiet chiông-voi lièn-to chṳ́-thin ke vùn-chông.\n\nChu-yi kó-yèn sîn vùn-chông yí-kîn yû nui-yùng, vùn-chông chiông '''put-voi''' pûn yì-thung, chhù-fî sîn vùn-chông mò nui-yùng fe̍t-he chhûng-thin-hiong, yì-yèn mò-yû siû-thin li̍t-sṳ́.\nNgì chai pit-yeu sṳ̀ khó-yî chhai yì-thung to sîn vùn-chông heu chai yì-fì ló-ke vùn-chông, thùng-sṳ̀ ya-he vù-fap koi-hien yû hong-mien.\n\n'''Kín-ko!'''\nTui yit-ke kîn-sòng pûn fóng-mun ke vùn-chông lòi ngièn, liá khó-nèn he yit-ke chṳ̂n-thai khi̍p thòng-thu̍t ke kiên-kói;\nchhiáng chhai hàng-thung chṳ̂-chhièn siên liáu-kié khì-thâ khó-nèn tai-lòi ke heu-kó.",
        "movepagetalktext": "Yû-kôan ke tui-fa-hiong chiông-voi pûn chhṳ-thung lâu ke-vùn-chông yit-hí yì-thung, '''chhù-fî''':\n*Ngì chiông vùn-chông yì-thung to siông-thùng ke miàng-sṳ, fe̍t-chá\n*Sîn vùn-chông yí-kîn yû yit-ke pâu-hàm nui-yùng ke tui-fa-hiong, fe̍t-he\n*Ngì put kiêu-sién ha-mien ke fu̍k-sién khiông. Chhai liá-chúng chhìn-khóng hâ, pit-sî sú-kûng yì-thung fe̍t-he ha̍p-phîn vùn-chông.",
-       "movearticle": "Yì-thung vùn-chông",
        "movenologintext": "Ngì pit-sî he yit-miàng tên-ki yung-fu pin-chhiâ [[Special:UserLogin|tên-ngi̍p]] heu chhòi-nèn Yì-thung yit-ke vùn-chông.",
        "newtitle": "新標題:",
        "move-watch": "Kam-sṳ chhṳ́-chông",
        "movelogpagetext": "Yî-ha he yí-kîn yì-thung ke vùn-chông chhîn-tân.",
        "movereason": "原因:",
        "revertmove": "恢復",
-       "delete_and_move": "刪除並移動",
        "delete_and_move_text": "==愛刪除==\n\n目標頁面\"[[:$1]]\"已經存在。汝確認愛刪除原頁面並進行移動係無?",
        "delete_and_move_confirm": "著,刪除邇頁",
        "delete_and_move_reason": "Chhù-thet yî-phien yì-thung",
        "import-interwiki-text": "選擇一隻wiki撈頁面標題進行導入。\n修訂日期與編寫人嘅名會分保存。\n所有嘅跨wiki導入操作分記錄在[[Special:Log/import|導入日誌]]肚。",
        "import-interwiki-history": "Fuk-chṳ chhṳ́-chông ke só-yû li̍t-sṳ́ pán-pún",
        "import-interwiki-submit": "導入",
-       "import-interwiki-namespace": "Chiông vùn-chông chón-yì to miàng-sṳ khûng-kiên:",
        "importtext": "Chhiáng sṳ́-yung Special:Export kûng-nèn chhiùng-ngièn wiki thô-chhuttóng-on, tú-chhùn to ngì ke-phién pin song-chhòn to liá-piên.",
        "importstart": "頁面導入中……",
        "import-revision-count": "$1-ke siû-thin",
        "importnofile": "無上傳導入文件。",
        "importlogpage": "導入日誌",
        "importlogpagetext": "管理性導入在其他Wiki上有編寫歷史嘅頁面",
-       "import-logentry-upload": "Theu-ko tóng-on sông-chhòn thô-ngi̍p ke $1",
        "import-logentry-upload-detail": "$1-ke siû-thin",
-       "import-logentry-interwiki": "Khiam-wiki $1",
        "import-logentry-interwiki-detail": "Lòi-chhṳ $2-ke $1-ke siû-thin",
        "tooltip-pt-userpage": "汝嘅用戶頁面",
        "tooltip-pt-anonuserpage": "Ngì-ke phiên-siá pún-chham só yung IP ke tui-yin yung-fu-chông",
        "markedaspatrollederror": "Put-nèn phêu-ki sṳ̀n-vì yí-kîn kiám-chhà",
        "markedaspatrollederrortext": "Ngì sî-yeu chṳ́-thin mêu-ke pán-pún chhòi-nèn phêu-ki sṳ̀n-vì yí-kîn kiám-chhà.",
        "markedaspatrollederror-noautopatrol": "Ngì mò-fap chiông ngì chhṳ-kí só-chok ke kiên-kói phêu-ki sṳ̀n-vì yí-kîn kiám-chhà.",
-       "patrol-log-page": "Sùn-chhà ki-liu̍k",
+       "patrol-log-page": "巡邏檢查日誌",
        "deletedrevision": "已刪除舊版本$1",
        "previousdiff": "←上隻版本",
        "nextdiff": "下隻版本→",
index 23edb04..d247970 100644 (file)
        "uploaded-script-svg": "נמצא אלמנט שאפשר לכתוב בו תסריט \"$1\" בקובץ ה־SVG שהועלה.",
        "uploaded-hostile-svg": "נמצא CSS בלתי־מאובטח באלמנט style בקובץ ה־SVG שהועלה.",
        "uploaded-event-handler-on-svg": "אסור להגדיר מאפייני טיפול באירועים <code dir=\"ltr\">$1=\"$2\"</code> בקובצי SVG.",
-       "uploaded-href-attribute-svg": "×\9e×\90פ×\99×\99× ×\99 href ×\91צ×\95רת <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code> ×¢×\9d ×\99×¢×\93 ×\91×\9cת×\99Ö¾×\9eק×\95×\9e×\99 (×\9c×\9eש×\9c http://â\80\8eâ\80\8f, javascript:â\80\8e, ×\95×\9b×\95') ×\90ס×\95ר×\99×\9d ×\91ק×\95×\91צ×\99 SVG.",
-       "uploaded-href-unsafe-target-svg": "× ×\9eצ×\90 href ×\9c×\99×¢×\93 ×\91×\9cת×\99Ö¾×\9e×\90×\95×\91×\98×\97 <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code> בקובץ ה־SVG שהועלה.",
+       "uploaded-href-attribute-svg": "×\9c×\9e×\90פ×\99×\99× ×\99 href ×\91ק×\95×\91צ×\99 SVG ×\9e×\95תר ×\9cקשר ×¨×§ ×\9c×\99×¢×\93×\99 http ×\90×\95 https, ×\95× ×\9eצ×\90 <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "× ×\9eצ×\90 href ×\9cנת×\95× ×\99×\9d ×\9c×\90 ×\9e×\90×\95×\91×\98×\97×\99×\9d <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code> בקובץ ה־SVG שהועלה.",
        "uploaded-animate-svg": "נמצא תג \"animate\" שיכול לשנות href באמצעות מאפיין \"from\"  בצורת <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code> בקובץ ה־SVG שהועלה.",
        "uploaded-setting-event-handler-svg": "הגדרת מאפייני טיפול באירועים חסומה, נמצא <code dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code> בקובץ ה־SVG שהועלה.",
        "uploaded-setting-href-svg": "השימוש בתג set כדי להוסיף מאפיין href לאלמנט הורה חסום.",
index 8fc539e..ea03c06 100644 (file)
        "uploaded-script-svg": "अपलोड की गयी एसवीजी फ़ाइल में स्क्रीप्ट अवयव \"$1\" पाया गया।",
        "uploaded-hostile-svg": "अपलोड की गयी एसवीजी फाइल के शैली अवयव में असुरक्षित सीएसएस पायी गयी।",
        "uploaded-event-handler-on-svg": "सेटिंग ईवेंट हैंडलर (आयोजन प्रबन्धनकर्ता वरियता) <code>$1=\"$2\"</code> एसवीजी फ़ाइल में अनुमत नहीं है।",
-       "uploaded-href-attribute-svg": "गैर-स्थानीय लक्ष्य के साथ एचआरईऍफ श्रेय (href attributes) <code>&lt;$1 $2=\"$3\"&gt;</code> (उदाहरण के लिए http://, जावास्क्रीप्ट:, इत्यादि) एसवीजी फाइल में अनुमत नहीं हैं।",
        "uploaded-href-unsafe-target-svg": "अपलोड की गयी फ़ाइल में असुरक्षित लक्ष्य <code>&lt;$1 $2=\"$3\"&gt;</code> पाये गए।",
        "uploaded-animate-svg": "चिप्पि \"animate\" पायी गई जिससे href परिवर्तित हो सकता है, अपलोड की गयी फ़ाइल में \"from\" विशेषता <code>&lt;$1 $2=\"$3\"&gt;</code> काम में ली जा रही है।",
        "uploaded-setting-event-handler-svg": "विकल्प आयोजन-संभालने वाला अवरोधित है, एसवीजी फ़ाइल में मिला <code>&lt;$1 $2=\"$3\"&gt;</code> है।",
        "confirmemail_text": "{{SITENAME}} पर उपलब्ध इ-मेल सुविधाओंका लाभ उठाने के लिये प्रमाणित एड्रेस होना जरूरी हैं।\nआपके एड्रेस पर एक कन्फर्मेशन कोड भेजने के लिये नीचे दिये बटन पर क्लिक करें।\nउस मेल में एक कोड से लदी एक कड़ी होगी;\nआपके इ-मेल के प्रमाणिकरण के लिये इसे अपने ब्राउज़रमें खोलें।",
        "confirmemail_pending": "आपको पहलेसे ही एक कन्फर्मेशन कोड भेजा गया हैं;\nअगर आपने हालमें खाता खोला हैं, तो नये कोड की माँग करने से पहले कुछ पल उसका इंतज़ार करें।",
        "confirmemail_send": "एक कन्फर्मेशन कोड भेजें",
-       "confirmemail_sent": "à¤\95नà¥\8dफरà¥\8dमà¥\87शन à¤\87-मà¥\87ल à¤­à¥\87à¤\9c à¤¦à¤¿या।",
+       "confirmemail_sent": "सतà¥\8dयापन à¤¹à¥\87तà¥\81 à¤\88मà¥\87ल à¤­à¥\87à¤\9cा à¤\97या।",
        "confirmemail_oncreate": "आपके इ-मेल पते पर एक कन्फर्मेशन कोड भेजा गया हैं।\nलॉग इन करने के लिये इसकी आवश्यकता नहीं हैं, पर इस विकिपर उपलब्ध इ-मेल आधारित सुविधाओंका इस्तेमाल करने के लिये यह देना जरूरी हैं।",
        "confirmemail_sendfailed": "{{SITENAME}} आपको पुष्टि डाक नहीं भेज पाई।\nकृपया अपना डाक पता जाँच लें, कहीं उसमें अवैध  अक्षर तो नहीं हैं?\n\nडाक प्रेषक ने कहा: $1",
        "confirmemail_invalid": "गलत कन्फर्मेशन कोड।\nकोड रद्द हो गया होने की संभावना हैं।",
index 59cc6fb..cdb3a9c 100644 (file)
        "rcshowhidemine": "$1 moje promjene",
        "rcshowhidemine-show": "prikaži",
        "rcshowhidemine-hide": "sakrij",
+       "rcshowhidecategorization": "$1 kategorizaciju stranica",
        "rcshowhidecategorization-show": "Prikaži",
        "rcshowhidecategorization-hide": "Sakrij",
        "rclinks": "Prikaži posljednjih $1 promjena {{PLURAL:$2|prethodni dan|u posljednja $2 dana|u posljednjih $2 dana}}<br />$3",
index fd73fca..cd1d1dc 100644 (file)
@@ -77,6 +77,7 @@
        "tog-watchlisthidebots": "Robotok szerkesztéseinek elrejtése",
        "tog-watchlisthideminor": "Apró változtatások elrejtése",
        "tog-watchlisthideliu": "Bejelentkezett szerkesztők módosításainak elrejtése a figyelőlistáról",
+       "tog-watchlistreloadautomatically": "A figyelőlista automatikus újratöltése bármelyik szűrő megváltoztatása esetén (JavaScript szükséges)",
        "tog-watchlisthideanons": "Névtelen szerkesztések elrejtése",
        "tog-watchlisthidepatrolled": "Az ellenőrzött szerkesztések elrejtése",
        "tog-watchlisthidecategorization": "Lapok kategorizálásának elrejtése",
        "october-date": "Október $1",
        "november-date": "November $1",
        "december-date": "December $1",
+       "period-am": "de.",
+       "period-pm": "du.",
        "pagecategories": "{{PLURAL:$1|Kategória|Kategóriák}}",
        "category_header": "A(z) „$1” kategóriába tartozó lapok",
        "subcategories": "Alkategóriák",
        "viewsource": "Lapforrás",
        "viewsource-title": "$1 forrásának megtekintése",
        "actionthrottled": "Művelet megszakítva",
-       "actionthrottledtext": "A spamek elleni védekezés miatt nem végezheted el a műveletet túl sokszor egy adott időn belül, és te átlépted a megengedett határt. Próbálkozz újra néhány perc múlva.",
+       "actionthrottledtext": "A visszaélések elleni védekezés miatt nem végezheted el a műveletet túl sokszor egy adott időn belül, és te átlépted a megengedett határt. Próbálkozz újra néhány perc múlva.",
        "protectedpagetext": "Ez egy védett lap, így nem végezhető rajta szerkesztés és más tevékenység.",
        "viewsourcetext": "Megtekintheted és másolhatod a lap forrását.",
        "viewyourtext": "Megtekintheted és kimásolhatod a <strong>saját szerkesztéseidet</strong> az alábbi lapra.",
        "virus-scanfailed": "az ellenőrzés nem sikerült (hibakód: $1)",
        "virus-unknownscanner": "ismeretlen antivírus:",
        "logouttext": "'''Sikeresen kijelentkeztél.'''\n\nLehetséges, hogy néhány oldalon továbbra is azt látod, be vagy jelentkezve, mindaddig, amíg nem üríted a böngésződ gyorsítótárát.",
+       "cannotlogoutnow-title": "Nem lehet most kijelentkezni",
        "welcomeuser": "Üdvözlünk, $1!",
        "welcomecreation-msg": "A felhasználói fiókod elkészült.\nNe felejtsd el módosítani a [[Special:Preferences|{{SITENAME}} beállításaidat]].",
        "yourname": "Szerkesztőneved:",
        "remembermypassword": "Emlékezzen rám ezen a számítógépen (legfeljebb $1 napig)",
        "userlogin-remembermypassword": "Maradjak bejelentkezve",
        "userlogin-signwithsecure": "Biztonságos kapcsolat használata",
+       "cannotloginnow-title": "Nem lehet most bejelentkezni",
        "yourdomainname": "A domainneved:",
        "password-change-forbidden": "Nem módosíthatod a jelszót ezen a wikin.",
        "externaldberror": "Hiba történt a külső adatbázis hitelesítése közben, vagy nem vagy jogosult a külső fiókod frissítésére.",
        "createacct-benefit-body2": "{{PLURAL:$1|lap|lap}}",
        "createacct-benefit-body3": "aktív {{PLURAL:$1|szerkesztő|szerkesztő}}",
        "badretype": "A megadott jelszavak nem egyeznek.",
+       "usernameinprogress": "Egy fiók létrehozása ezzel a névvel már folyamatban van.\nKérlek, várj.",
        "userexists": "A megadott felhasználónév már foglalt.\nKérlek, válassz másikat!",
        "loginerror": "Hiba történt a bejelentkezés során",
        "createacct-error": "Fióklétrehozási hiba",
        "wrongpasswordempty": "Nem adtál meg jelszót. Próbáld meg újra.",
        "passwordtooshort": "A jelszónak legalább $1 karakterből kell állnia.",
        "passwordtoolong": "A jelszó nem lehet hosszabb $1 karakternél.",
+       "passwordtoopopular": "A gyakori jelszavak nem használhatók. Válassz egy egyedibb jelszót.",
        "password-name-match": "A jelszavadnak különböznie kell a szerkesztőnevedtől.",
        "password-login-forbidden": "Ezen felhasználónév és jelszó használata tiltott.",
        "mailmypassword": "Jelszó alaphelyzetbe állítása",
        "resetpass_submit": "Add meg a jelszót és jelentkezz be",
        "changepassword-success": "A jelszavad megváltoztatása sikeresen befejeződött!",
        "changepassword-throttled": "Túl sok hibás bejelentkezés.\nVárj $1, mielőtt újra próbálkozol.",
-       "botpasswords-label-appid": "A Bot neve:",
+       "botpasswords": "Botjelszavak",
+       "botpasswords-summary": "A <em>botjelszavak</em> lehetővé teszik egy felhasználói fiókhoz való hozzáférést az API-n keresztül a fiók fő bejelentkezési adatainak megadása nélkül. A botjelszóval történő bejelentkezéskor a felhasználói jogok korlátozottak lehetnek.\n\nHa nem tudod, hogy miért szeretnél ilyet, valószínűleg nem kell csinálnod. Soha senkinek nem szabadna megkérnie téged, hogy generálj neki egyet, hogy odaadhasd neki.",
+       "botpasswords-disabled": "A botjelszavak le vannak tiltva.",
+       "botpasswords-no-central-id": "A botjelszavak használatához egy globális fiókba kell bejelentkezned.",
+       "botpasswords-existing": "Létező botjelszavak",
+       "botpasswords-createnew": "Új botjelszó létrehozása",
+       "botpasswords-editexisting": "Létező botjelszó szerkesztése",
+       "botpasswords-label-appid": "A bot neve:",
        "botpasswords-label-create": "Létrehozás",
        "botpasswords-label-update": "Frissítés",
        "botpasswords-label-cancel": "Mégsem",
        "botpasswords-label-delete": "Törlés",
        "botpasswords-label-resetpassword": "Új jelszó kérése",
+       "botpasswords-label-grants": "Elérhető jogosultságok:",
        "botpasswords-label-restrictions": "Használati korlátozások:",
+       "botpasswords-label-grants-column": "Megadva",
+       "botpasswords-bad-appid": "A(z) „$1” botnév érvénytelen.",
+       "botpasswords-insert-failed": "A(z) „$1” botnév hozzáadása sikertelen. Nem lehet, hogy már hozzá lett adva?",
        "botpasswords-created-title": "Bot jelszó létrehozva",
        "botpasswords-updated-title": "Bot jelszó frissítve",
        "botpasswords-deleted-title": "Bot jelszó törölve",
        "uploaded-script-svg": "A feltöltött SVG fájlodban szkriptelemet találtunk: \"$1\".",
        "uploaded-hostile-svg": "Nem biztonságos CSS kódot találtunk a feltöltött SVG fájlod stíluselemei között.",
        "uploaded-event-handler-on-svg": "Az alábbi eseménykezelő-attribútum beállítása nem megengedett az SVG fájlokban: <code>$1=$2</code>.",
-       "uploaded-href-attribute-svg": "Az alábbi nem lokális célra (pl. http://, javascript, stb.) mutató href attribútum nem megengedett az SVG fájlokban: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "Nem biztonságos célra mutató href-et találtam a feltöltött SVG fájlban: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "A feltöltött SVG fájlban \"animate\" taget találtam, ami az alábbi \"from\" attribútumával megváltoztathat egy href-et: <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-handler-svg": "Az SVG kódok, amelyek a \"handler\" attribútumot távolra/adatra/szkriptre állítják, le vannak tiltva. A feltöltött SVG fájlban a következőt találtam: <code>$1=\"$2\"</code>.",
index 2e93731..94b59e1 100644 (file)
        "right-blockemail": "Blocar un usator de inviar e-mail",
        "right-hideuser": "Blocar un nomine de usator, celante lo del publico",
        "right-ipblock-exempt": "Contornar le blocadas de adresses IP, blocadas automatic e blocadas de intervallos IP",
-       "right-proxyunbannable": "Contornar le blocadas automatic de proxy",
        "right-unblockself": "Disblocar se mesme",
        "right-protect": "Cambiar nivellos de protection e modificar paginas protegite in cascada",
        "right-editprotected": "Modificar paginas protegite con \"{{int:protect-level-sysop}}\"",
        "right-managechangetags": "Crear e deler [[Special:Tags|etiquettas]] in le base de datos",
        "right-applychangetags": "Applicar [[Special:Tags|etiquettas]] al proprie modificationes",
        "right-changetags": "Adder e remover qualcunque [[Special:Tags|etiquettas]] sur individual versiones e entratas de registro",
+       "grant-generic": "gruppo de derectos \"$1\"",
+       "grant-group-administration": "Exequer actiones administrative",
+       "grant-blockusers": "Blocar e disblocar usatores",
+       "grant-createeditmovepage": "Crear, modificar e renominar paginas",
+       "grant-delete": "Deler paginas, versiones e entratas de registro",
+       "grant-editinterface": "Modificar le spatio de nomines MediaWiki e le CSS/JS de usatores",
+       "grant-editmycssjs": "Modificar le CSS/JS del proprie usator",
+       "grant-editmywatchlist": "Modificar le proprie observatorio",
+       "grant-editpage": "Modificar paginas existente",
+       "grant-editprotected": "Modificar paginas protegite",
+       "grant-highvolume": "Modification in massa",
+       "grant-oversight": "Celar usatores e supprimer versiones",
+       "grant-patrol": "Patruliar cambiamentos in paginas",
+       "grant-protect": "Proteger e disproteger paginas",
+       "grant-rollback": "Revocar cambiamentos in paginas",
+       "grant-sendemail": "Inviar e-mail a altere usatores",
+       "grant-uploadeditmovefile": "Actualisar, reimplaciar e renominar files",
+       "grant-uploadfile": "Incargar nove files",
+       "grant-viewdeleted": "Vider information delite",
+       "grant-viewmywatchlist": "Vider le proprie observatorio",
        "newuserlogpage": "Registro de creation de usatores",
        "newuserlogpagetext": "Isto es un registro de creation de usatores.",
        "rightslog": "Registro de derectos de usator",
        "uploaded-script-svg": "Un elemento de script \"$1\" se trova in le file SVG incargate.",
        "uploaded-hostile-svg": "Certe codice CSS insecur se trova in le elemento de stilo del file SVG incargate.",
        "uploaded-event-handler-on-svg": "Fixar attributos de gestion de eventos <code>$1=\"$2\"</code> non es permittite in files SVG.",
-       "uploaded-href-attribute-svg": "Attributos href <code>&lt;$1 $2=\"$3\"&gt;</code> con objectivos non local (p.ex. http://, javascript:, etc) non es permittite in files SVG.",
        "uploaded-href-unsafe-target-svg": "Un href a un objectivo non secur <code>&lt;$1 $2=\"$3\"&gt;</code> se trova in le file SVG incargate.",
        "uploaded-animate-svg": "Un etiqueta \"animate\" que poterea cambiar le href, usante le attributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code>, se trova in le file SVG incargate.",
        "uploaded-setting-event-handler-svg": "Fixar le attributos de gestion de eventos non es permittite, ma le codice <code>&lt;$1 $2=\"$3\"&gt;</code> se trova in le file SVG incargate.",
        "filename-thumb-name": "Isto pare como un titulo de miniatura. Per favor non re-incarga miniaturas in le mesme wiki. Alteremente, per favor modifica le nomine del file de maniera que illo es plus significative e non ha le prefixo de miniatura.",
        "filename-bad-prefix": "Le nomine del file que tu es super le puncto de incargar comencia con '''\"$1\"''', le qual es un nomine non descriptive, typicamente assignate automaticamente per le cameras digital.\nPer favor selige un nomine plus descriptive pro tu file.",
        "filename-prefix-blacklist": " #<!-- non modificar de alcun modo iste linea --> <pre>\n# Le syntaxe es como seque:\n#   * Toto a partir de un character \"#\" usque al fin del linea es un commento\n#   * Cata linea non vacue es un prefixo pro tal nomines de file como automaticamente assignate per cameras digital\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # alcun telephonos mobile\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- non modificar de alcun modo iste linea -->",
-       "upload-success-subj": "Incargamento succedite",
-       "upload-success-msg": "Le incargamento de [$2] ha succedite. Illo es disponibile hic: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problema de incargamento",
-       "upload-failure-msg": "Il ha occurrite un problema con tu incargamento ab [$2]:\n\n$1",
-       "upload-warning-subj": "Advertimento de incargamento",
-       "upload-warning-msg": "Occurreva un problema con le incargamento de [$2]. Tu pote retornar al [[Special:Upload/stash/$1|formulario de incargamento]] pro corriger iste problema.",
        "upload-proto-error": "Protocollo incorrecte",
        "upload-proto-error-text": "Le incargamento remote require que le adresses URL comencia con <code>http://</code> o <code>ftp://</code>.",
        "upload-file-error": "Error interne",
        "wlheader-showupdated": "Le paginas que ha essite modificate post tu ultime visita se monstra in litteras '''grasse'''.",
        "wlnote": "Ecce le ultime {{PLURAL:$1|modification|<strong>$1</strong> modificationes}} durante le ultime {{PLURAL:$2|hora|<strong>$2</strong> horas}}, a partir del $3 a $4.",
        "wlshowlast": "Monstrar le ultime $1 horas $2 dies",
-       "watchlistall2": "toto",
        "watchlist-hide": "Celar",
        "wlshowtime": "Periodo de tempore a monstrar:",
        "wlshowhideminor": "modificationes minor",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "pagina non existe ancora",
        "mw-widgets-titleinput-description-redirect": "redirection a $1",
-       "api-error-blacklisted": "Per favor elige un altere titulo, plus descriptive."
+       "api-error-blacklisted": "Per favor elige un altere titulo, plus descriptive.",
+       "randomrootpage": "Pagina-radice aleatori"
 }
index 8ef32b7..6c13a83 100644 (file)
        "right-blockemail": "Agserra iti agar-aramat manipud iti panagipatulod ti esurat",
        "right-hideuser": "Agserra iti nagan ti agar-aramat, ken agilemmeng manipud iti publiko",
        "right-ipblock-exempt": "Labsanna dagiti serra ti IP, dagiti automatiko a serra ken dagiti sakop a serra.",
-       "right-proxyunbannable": "Labsanna dagiti automatiko a serra dagiti pannakbagi",
        "right-unblockself": "Bukod nga agikkat it pannakaserra",
        "right-protect": "Agsukat kadagiti agpang ti salaknib ken agurnos kadagiti nasalakniban ti sariap a panid",
        "right-editprotected": "Agurnos kadagiti panid a nasalakniban a kas \"{{int:protect-level-sysop}}\"",
        "uploaded-script-svg": "Nakabiruk ti maieskritu nga elemento ti \"$1\" iti naikarga a papeles ti SVG.",
        "uploaded-hostile-svg": "Nakabiruk ti saan a natalged a CSS iti elemento ti estilo ti naikarga a papeles ti SVG.",
        "uploaded-event-handler-on-svg": "Ti panangisaad kadagiti gupit ti panagtengngel ti pasamak ti <code>$1=\"$2\"</code> ket saan a maipalubos kadagiti papeles ti SVG.$1",
-       "uploaded-href-attribute-svg": "Dagiti gupit ti href ti <code>&lt;$1 $2=\"$3\"&gt;</code> nga addaan iti saan a lokal a puntaan (kas ti http://, javascript:, kdpy) ket saan a maipalubos kadagiti papeles ti SVG.",
        "uploaded-href-unsafe-target-svg": "Nakabiruk ti href iti saan a natalged a puntaan ti <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
        "uploaded-animate-svg": "Nakabiruk ti etiketa ti \"animado\" a mabalin a mangbalbaliw iti href, nga agus-usar iti gupit ti \"manipud\" ti <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
        "uploaded-setting-event-handler-svg": "Naserraan ti panangisaad ti kadagiti gupit ti panagtengngel ti pasamak, nakabiruk iti <code>&lt;$1 $2=\"$3\"&gt;</code> iti naikarga a papeles ti SVG.",
        "watchthisupload": "Bantayan daytoy a papeles",
        "filewasdeleted": "Ti papeles iti daytoy a nagan ket dati a naikarga ken kanungpalan a naikkat.\nNasken a kitaem ti $1 sakbay nga agtuloy a mangikarga manen.",
        "filename-bad-prefix": "Ti nagan ti papeles nga ikarkargam ket mangrugi iti <strong>\"$1\"</strong>,  ken saan a deskriptibo a nagan a kadawyan nga automatiko nga ited babaen dagiti digital a kamera.\nPangngaasi nga agpili ti nasaysayaat a deskriptibo a nagan ti papelesmo.",
-       "upload-success-subj": "Balligi ti panagikarga",
-       "upload-success-msg": "Ti panagikargam manipud ti [$2] ket nagballigi. Daytoy ket magun-od ditoy [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Parikut ti panagikarga",
-       "upload-failure-msg": "Adda parikut ti panagikargam manipud iti [$2]:\n\n$1",
-       "upload-warning-subj": "Ballaag ti panagikarga",
-       "upload-warning-msg": "Adda parikut iti panagikargam manipud iti [$2]. Mabalinmo ti agsubli iti [[Special:Upload/stash/$1|porma ti panagikarga]] tapno masimpa daytoy a parikut.",
        "upload-proto-error": "Saan a husto a protokol",
        "upload-proto-error-text": "Ti adayo a panagikarga ket makasapul kadagiti URL a mangrugi iti <code>http://</code> wenno <code>ftp://</code>.",
        "upload-file-error": "Akin-uneg a biddut",
        "wlheader-showupdated": "Dagiti panid a nasukatanen manipud ti kinaudi a panagsarungkarmo ket naipakita iti <strong>napuskol</strong>.",
        "wlnote": "Dita baba ket {{PLURAL:$1|naudi a sinukatan|dagiti naudi a <strong>$1</strong> a sinukatan}} iti napalabas {{PLURAL:$2|nga oras|a <strong>$2</strong> nga or-oras}}, manipud idi $3, $4.",
        "wlshowlast": "Ipakita dagiti naudi a $1 nga or-oras $2 nga al-aldaw",
-       "watchlistall2": "amin",
        "watchlist-hide": "Ilemmeng",
        "watchlist-submit": "Ipakita",
        "wlshowtime": "Ipakita a paset ti panawen:",
        "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
        "mw-widgets-titleinput-description-new-page": "awan pay ti panid",
        "mw-widgets-titleinput-description-redirect": "ibaw-ing iti $1",
-       "api-error-blacklisted": "Pangngaasi nga agpili iti sabali, a mangipalpalawag a titulo."
+       "api-error-blacklisted": "Pangngaasi nga agpili iti sabali, a mangipalpalawag a titulo.",
+       "randomrootpage": "Pugto a ramut a panid"
 }
index 08170be..020b6bd 100644 (file)
        "prefs-rc": "Ultime modifiche",
        "prefs-watchlist": "Osservati speciali",
        "prefs-editwatchlist": "Modifica osservati speciali",
-       "prefs-editwatchlist-label": "Modifica le pagine della tua watchlist:",
-       "prefs-editwatchlist-edit": "Visualizza e rimuovi titoli sulla tua watchlist",
+       "prefs-editwatchlist-label": "Modifica i tuoi osservati speciali:",
+       "prefs-editwatchlist-edit": "Visualizza e rimuovi titoli nei tuoi osservati speciali",
        "prefs-editwatchlist-raw": "Modifica la lista in formato testo",
-       "prefs-editwatchlist-clear": "Cancella la tua watchlist",
+       "prefs-editwatchlist-clear": "Svuota i tuoi osservati speciali",
        "prefs-watchlist-days": "Numero di giorni da mostrare negli osservati speciali:",
        "prefs-watchlist-days-max": "Massimo $1 {{PLURAL:$1|giorno|giorni}}",
        "prefs-watchlist-edits": "Numero di modifiche da mostrare con le funzioni avanzate:",
        "uploaded-script-svg": "Trovato elemento di script \"$1\" nel file caricato in formato SVG.",
        "uploaded-hostile-svg": "Trovato CSS non sicuro nell'elemento di stile del file in formato SVG caricato.",
        "uploaded-event-handler-on-svg": "Impostazione gestione eventi ed attributi <code>$1=\"$2\"</code> non è consentito in file SGV",
-       "uploaded-href-attribute-svg": "Attributi href <code>&lt;$1 $2=\"$3\"&gt;</code> com un bersaglio non locale (e.g. http://, javascript:, etc) non sono permessi file SGV",
-       "uploaded-href-unsafe-target-svg": "Trovati href ad un bersaglio non sicuro <code>&lt;$1 $2=\"$3\"&gt;</code> caricato nel file SVG",
+       "uploaded-href-attribute-svg": "attributi href in file SVG sono consentiti collegamenti solo verso destinazioni http:// o https://, trovato <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Trovati href a dati non sicuri: destinazione URI <code>&lt;$1 $2=\"$3\"&gt;</code> caricato nel file SVG",
        "uploaded-animate-svg": "Trovato il tag \"animate\" che potrebbe cambiare href, usando l'attributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> nel file SVG caricato.",
        "uploaded-setting-event-handler-svg": "La configurazione di attributi per il gestore di eventi è bloccata, trovato <code>&lt;$1 $2=\"$3\"&gt;</code> nel file SVG caricato.",
        "uploaded-setting-href-svg": "Utilizzare il tag \"set\" per aggiungere l'attributo \"href\" all'elemento parentale è bloccato.",
index 1e29e7b..b561bcd 100644 (file)
        "grant-sendemail": "他の利用者へのメールの送信",
        "grant-uploadeditmovefile": "ファイルをアップロード/置き換え/移動",
        "grant-uploadfile": "新しいファイルをアップロード",
+       "grant-basic": "基礎的な権限",
        "grant-viewdeleted": "削除されたファイルとページを閲覧",
        "grant-viewmywatchlist": "自身のウォッチリストを閲覧",
        "newuserlogpage": "アカウント作成記録",
        "rcshowhidemine": "自分の編集を$1",
        "rcshowhidemine-show": "表示",
        "rcshowhidemine-hide": "非表示",
-       "rcshowhidecategorization": "$1 ページ カテゴリ化",
+       "rcshowhidecategorization": "ページ カテゴリ化を$1",
        "rcshowhidecategorization-show": "表示",
        "rcshowhidecategorization-hide": "非表示",
        "rclinks": "最近 $2 日間の更新を最大 $1 件表示<br />$3",
        "uploaded-script-svg": "アップロードされたSVGファイルにスクリプト可能な要素「$1」が見つかりました。",
        "uploaded-hostile-svg": "アップロードされたSVGファイルのスタイル要素に安全ではないCSSが見つかりました。",
        "uploaded-event-handler-on-svg": "イベントハンドラをセットする属性 <code>$1=\"$2\"</code> は、SVGファイルを許可されていません。",
-       "uploaded-href-attribute-svg": "ローカル以外のターゲット(http://、javascript: など) と href 属性の <code>&lt;$1 $2=\"$3\"&gt;</code> は、SVGファイルで許可されません。",
-       "uploaded-href-unsafe-target-svg": "アップロードされたSVGファイルに、安全ではないターゲット <code>&lt;$1 $2=\"$3\"&gt;</code> の href が見つかりました。",
+       "uploaded-href-attribute-svg": "SVG ファイルの href 属性が http:// または https:// のターゲットのみにリンクする <code>&lt;$1 $2=\"$3\"&gt;</code> が見つかりました。",
+       "uploaded-href-unsafe-target-svg": "アップロードされた SVG ファイルの、安全ではないデータ URI にターゲット <code>&lt;$1 $2=\"$3\"&gt;</code> の href が見つかりました。",
        "uploaded-animate-svg": "アップロードされたSVGファイルに、「from」属性 <code>&lt;$1 $2=\"$3\"&gt;</code> を使用した、href を変更させる可能性がある「animate」タグが見つかりました。",
        "uploaded-setting-event-handler-svg": "アップロードされたSVGファイルに、ブロックされているイベントハンドラ属性が設定された <code>&lt;$1 $2=\"$3\"&gt;</code> が見つかりました。",
        "uploaded-setting-href-svg": "親要素に「href」属性を追加する「set」タグの使用がブロックされています。",
index 905ea2f..7079b8a 100644 (file)
        "actions": "Akshan",
        "namespaces": "Niemspies",
        "variants": "Vieriant",
+       "navigation-heading": "Navigieshan menyuu",
        "errorpagetitle": "Era",
        "returnto": "Ritoern a $1",
        "tagline": "Frahn {{SITENAME}}",
        "disclaimers": "Diskliema",
        "disclaimerpage": "Project: Jinaral diskliema",
        "edithelp": "Editin elp",
-       "mainpage": "Mien piej",
+       "mainpage": "Mien Piej",
        "mainpage-description": "Mien piej",
        "policy-url": "Project:Palisi",
        "portal": "Komiuniti puotal",
        "nstab-template": "Templit",
        "nstab-help": "Elp piej",
        "nstab-category": "Kiatigari",
+       "mainpage-nstab": "Mien piej",
        "nosuchaction": "No soch akshan",
        "nosuchactiontext": "Di akshan spesifai bai di URL invalid.\nYu maita mistaip di URL, ar fala a inkarek lingk.\nDis maita indikiet alzwel wahn bog ina di saafwier yuuz bai {{SITENAME}}.",
        "nosuchspecialpage": "No soch peshal piej",
        "login-throttled": "Yu mek tomoch riisant lagiin atemp.\nBegyu wiet likl bifuo yu chrai agen.",
        "loginlanguagelabel": "Langwij: $1",
        "suspicious-userlogout": "Yu rikwes fi lag out dinai bikaa iluk laik se isen bai a brok brouza ar kiashin praxi.",
+       "pt-login": "Lagiin‎",
+       "pt-login-button": "Lagiin‎",
+       "pt-createaccount": "Kriet akount‎",
        "resetpass_announce": "Yu lag iin wid a tempareri e-miel kuod.\nFi finish lag iin, yu mos set a nyuu paaswod yaso:",
        "resetpass_header": "Chienj akount paaswod",
        "oldpassword": "Uol paaswod:",
        "notextmatches": "No piej tex mach",
        "prevn": "priivos {{PLURAL:$1|$1}}",
        "nextn": "nex {{PLURAL:$1|$1}}",
+       "shown-title": "Shuo $1 {{PLURAL:$1|result|results}} po piej",
        "viewprevnext": "Vyuu ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchprofile-articles": "Kantent piej",
+       "searchprofile-images": "Moltimidia",
+       "searchprofile-everything": "Ebriting",
+       "searchprofile-advanced": "Advans",
+       "searchprofile-articles-tooltip": "Saach ina $1",
+       "searchprofile-images-tooltip": "Saach fi fail",
+       "searchprofile-everything-tooltip": "Saach aal kantent (inkluudn taak piej)",
+       "searchprofile-advanced-tooltip": "Saach ina kostom niemspies",
        "search-result-size": "$1 ({{PLURAL:$2|1 wod|$2 wod}})",
        "search-redirect": "(riidirek $1)",
        "search-section": "(sekshan $1)",
        "recentchanges": "Riisant chienjdem",
        "recentchanges-legend": "Riisant chienj apshan",
        "recentchanges-feed-description": "Chrak di muos riisant chienjdem tu di wiki ina dis fiid.",
+       "recentchanges-label-newpage": "Dis edit kriet nyuu piej",
+       "recentchanges-label-minor": "Dis a maina edit",
+       "recentchanges-label-bot": "Dis edit pofaam bai bot",
        "rclistfrom": "Shuo nyuu chienjdem we taat frahn $3 $2",
        "rcshowhideminor": "$1 maina editdem",
+       "rcshowhideminor-show": "Shuo",
        "rcshowhidebots": "$1 batdem",
        "rcshowhideliu": "$1 lag-iin yuuzadem",
        "rcshowhideanons": "$1 ananimos yuuzadem",
+       "rcshowhideanons-show": "Shuo",
        "rcshowhidemine": "$1 mi editdem",
+       "rcshowhidemine-show": "Shuo",
        "rclinks": "Shuo laas $1 chienj ina laas $2 die<br />$3",
        "diff": "dif",
        "hist": "isch",
        "rc-enhanced-expand": "Shuo ditiel (rikwaya JavaScript)",
        "rc-enhanced-hide": "Aid ditiel",
        "recentchangeslinked": "Rilietid chienj",
+       "recentchangeslinked-toolbox": "Rilietid chienj‎",
        "recentchangeslinked-title": "Chienj riliet tu \"$1\"",
        "recentchangeslinked-summary": "Dis a lis a riisent chienj wa mek tu piej wa lingk frahn spesifai piej (ar tu memba a spesifai kiatigeri).\nPiej pahn [[Special:Watchlist|yu wachlis]] dem '''buol'''.",
        "recentchangeslinked-page": "Piej niem",
        "recentchangeslinked-to": "Shuo chienjdem tu piej wa lingk tu di gibn piej insted",
        "upload": "Opluod fail",
        "uploadlogpage": "Opluod lag",
+       "imgfile": "fail",
+       "file-anchor-link": "Fail",
        "filehist": "Fail ischri",
        "filehist-help": "Klik pan a diet/taim fi vyuu di fail az ou iapier a di taim.",
        "filehist-current": "korant",
        "filehist-user": "Yuuza",
        "filehist-dimensions": "Daimenshan",
        "filehist-comment": "Kament",
-       "imagelinks": "Fail lingk",
+       "imagelinks": "Fail Yuusij",
        "linkstoimage": "Di falarin {{PLURAL:$1|piej lingk|$1 piejdem lingk}}",
        "sharedupload": "Dis fail kom frahn $1 ahn kiahn yuuz bai ada prajek.",
        "uploadnewversion-linktext": "Opluod nyuu voerjan a dis fail",
+       "randompage": "Random piej",
        "statistics": "Tatistik",
        "nbytes": "$1 {{PLURAL:$1|bait|bait}}",
        "nmembers": "$1 {{PLURAL:$1|memba|membadem}}",
        "pager-older-n": "{{PLURAL:$1|uola 1|uola $1}}",
        "booksources": "Buk suos",
        "booksources-search-legend": "Saach fi buk suos",
+       "booksources-search": "Saach",
        "log": "Lagdem",
        "allpages": "Aal piej",
        "prevpage": "Priivos piej ($1)",
        "tooltip-pt-mycontris": "Lis a yu kanchribyuushan",
        "tooltip-pt-login": "Yu inkorij fi lag iin; ousomeba, ino mos ahn boun",
        "tooltip-pt-logout": "Lag out",
+       "tooltip-pt-createaccount": "Yu inkorij fi kriet wah akount ah lagiin; ousomeba, a no mos",
        "tooltip-ca-talk": "Diskoshan bout di kantent piej",
-       "tooltip-ca-edit": "Yu kiahn edit dis piej. Du yuuz di priivyuu botn bifuo yu sieb",
+       "tooltip-ca-edit": "Edit dis piej",
        "tooltip-ca-addsection": "Taat a nyuu sekshan",
        "tooltip-ca-viewsource": "Dis piej protek.\nYu kiahn vyuu isuos.",
        "tooltip-ca-history": "Paas rivijan a dis piej",
        "tooltip-search": "Saach {{SITENAME}}",
        "tooltip-search-go": "Go tu a piej wid disaya egzak niem ef iegzis",
        "tooltip-search-fulltext": "Saach di piejdem fi disaya tex",
+       "tooltip-p-logo": "Visit di mien piej",
        "tooltip-n-mainpage": "Vizit di mien piej",
        "tooltip-n-mainpage-description": "Vizit di mien piej",
        "tooltip-n-portal": "Bout di prajek, wa yu kiahn du, we fi fain tingz",
        "tooltip-watch": "Ad dis piej tu yu wachlis",
        "tooltip-rollback": "\"Ruolbak\" rivoert edit(dem) tu dis piej a di laas kanchribiuta ina wan klik",
        "tooltip-undo": "\"Andu\" rivoert dis edit ahn opin di edit faam ina priivyuu muod. Ilou yu fi ad riizn ina di somari.",
+       "pageinfo-toolboxlink": "Piej infamieshan",
        "previousdiff": "← Uola edit",
        "nextdiff": "Nyuwa edit",
        "file-info-size": "$1 × $2 pixl, fail saiz: $3, MIME taip: $4",
        "watchlisttools-view": "Vyuu rilivant chienjdem",
        "watchlisttools-edit": "Vyuu ahn edit wachlis",
        "watchlisttools-raw": "Edit raa wachlis",
-       "specialpages": "Peshal piej"
+       "specialpages": "Peshal piej",
+       "logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3",
+       "searchsuggest-search": "Saach‎"
 }
index 52c771e..b190c1d 100644 (file)
        "protectedinterface": "ეს გვერდი წარმოადგენს ტექსტურ ინტერფეისს პროგრამული უზრუნველყოფისათვის და დაცულია ვანდალიზმის აღკვეთის მიზნით.",
        "editinginterface": "'''ყურადღება:''' თქვენ არედაქტირებთ გვერდს, რომელიც პროგრამის ინტერფეისის ტექსტს შეიცავს. \nამ გვერდზე განხორციელებული რედაქტირება გამოიწვევს ამ ვიკის სხვა მომხმარებელთა სამუშაო ინტერფეისის შეცვლასაც. \nიმისათვის, რომ დაამატოთ ან შეცვალოთ თარგმანები ყველა ვიკიში, გთხოვთ, გამოიყენოთ მედიავიკის ლოკალიზაციის პროექტი [//translatewiki.net/ translatewiki.net].",
        "translateinterface": "თარგმანების ყველა ვიკიში დასამატებლად ან შესაცვლელად, გთხოვთ გამოიყენოთ მედიავიკებისლოკალიზაციის პროექტი [//translatewiki.net/ translatewiki.net].",
-       "cascadeprotected": "ეს გვერდი რედაქტირებისგან დაცულია, რადგან იგი ჩართულია შემდეგ {{PLURAL:$1|გვერდში, რომლის |გვერდებში, რომელთა}} დასაცავადაც ჩართულია პარამეტრი \"იერარქიული\":\n$2",
+       "cascadeprotected": "ეს გვერდი რედაქტირებისგან დაცულია, რადგან იგი ჩართულია შემდეგ {{PLURAL:$1|გვერდში, რომლის|გვერდებში, რომელთა}} დასაცავადაც ჩართულია პარამეტრი \"იერარქიული\":\n$2",
        "namespaceprotected": "თქვენ არ გაქვთ '''$1''' სახელთა სივრცეში გვერდების რედაქტირების უფლება.",
        "customcssprotected": "თქვენ არ გაქვთ ამ CSS გვერდის რედაქტირების უფლება, ვინაიდან ის სხვა მომხმარებლის პირად კონფიგურაციას შეიცავს.",
        "customjsprotected": "თქვენ არ გაქვთ ამ JavaScript გვერდის რედაქტირების უფლება, ვინაიდან ის სხვა მომხმარებლის პირად კონფიგურაციას შეიცავს.",
        "mypreferencesprotected": "თქვენ არ გაქვთ თქვენი კონფიგურაციის შეცვლის ნებართვა.",
        "ns-specialprotected": "გვერდების რედაქტირება სახელთა სივრცეში {{ns:special}} შეუძლებელია.",
        "titleprotected": "შემდეგი გვერდის შექმნა აკრძალულია მომხმარებელ [[User:$1|$1]]-ს მიერ.\nმოცემულია შემდეგი ახსნა: „''$2''“.",
-       "filereadonlyerror": "ფაილი \"$1\" შეცვლა ვერ ხერხდება, რადგანაც ფაილის საცავი \"$2\" მხოლოდ კითხვის რეჟიმშია.\n\nადმინისტრატორი რომელმაც ის დაბლოკა მიუთითა შემდეგი მიზეზი: \"$3\".",
+       "filereadonlyerror": "ფაილის \"$1\" შეცვლა ვერ ხერხდება, რადგანაც ფაილის საცავი \"$2\" მხოლოდ კითხვის რეჟიმშია.\n\nსისტემურმა ადმინისტრატორმა, რომელმაც ის დაბლოკა, მოიყვანა შემდეგი მიზეზი: \"$3\".",
        "invalidtitle-knownnamespace": "დაუშვებელი სათაური სახელთა სივრცე \"$2\" და ტექსტი \"$3\"-თან",
        "invalidtitle-unknownnamespace": "დაუშვებელი სათაური უცნობი სახელთა სივრცის ნომერი $1 და ტექსტი \"$2\"-ით",
        "exception-nologin": "შესვლა არ განხორციელდა",
        "subject": "თემა:",
        "minoredit": "მცირე რედაქტირება",
        "watchthis": "უთვალთვალე ამ გვერდს",
-       "savearticle": "შენახვა",
+       "savearticle": "á\83\92á\83\95á\83\94á\83 á\83\93á\83\98á\83¡ á\83¨á\83\94á\83\9cá\83\90á\83®á\83\95á\83\90",
        "preview": "წინასწარი გადახედვა",
-       "showpreview": "წინასწარი გადახედვა",
+       "showpreview": "á\83¬á\83\98á\83\9cá\83\90á\83¡á\83¬á\83\90á\83 á\83\98 á\83\92á\83\90á\83\93á\83\90á\83®á\83\94á\83\93á\83\95á\83\98á\83¡ á\83©á\83\95á\83\94á\83\9cá\83\94á\83\91á\83\90",
        "showdiff": "ცვლილებების ჩვენება",
        "blankarticle": "გაფრთხილება: გვერდი, რომელსაც ქმნით, ცარიელია. თუკი კვლავ დააჭერთ ღილაკს \"{{int:savearticle}}\", გვერდი შეიქმნება შემცვლელობის გარეშე.",
        "anoneditwarning": "<strong>გაფრთხილება:</strong> თქვენ არ ხართ ავტორიზირებული. თქვენი IP მისამართი საჯაროდ ხილული იქნება, თუკი განახორციელებთ რედაქტირებას. თუ თქვენ გაივლით <strong>[$1 ავტორიზაციას]</strong> ან <strong>[$2 შექმნით ანგარიშს]</strong>, სხვა უპირატესობებთან ერთად, თქვენი რედაქტირებები დაუკავშირდება თქვენს მომხმარებლის სახელს.",
        "subject-preview": "თემის გადახედვა:",
        "previewerrortext": "თქვენი ცვლილებების წინასწარი გადახედვის მცდელობის დროს მოხდა შეცდომა",
        "blockedtitle": "მომხმარებელი ბლოკირებულია",
-       "blockedtext": "'''თქვენი მომხმარებლის სახელი ან IP მისამართი დაბლოკილ იქნა.'''\n\nბლოკირება განახორციელა $1-მ.\nმიზეზად დასახელდა შემდეგი: ''$2''.\n\n* დაბლოკვის დასაწყისი: $8\n* ბლოკის ვადის გასვლის დრო: $6\n* დაბლოკილ იქნა: $7\n\nშეგიძლიათ დაუკავშირდეთ $1-ს ან რომელიმე სხვა [[{{MediaWiki:Grouppage-sysop}}|ადმინისტრატორს]] დაბლოკვის განსახილველად.\nგაითვალისწინეთ, რომ თქვენ ვერ შეძლებთ გამოიყენოთ ფუნქცია „მომხმარებლისთვის ელ. ფოსტის გაგზავნა“, თუ არ გაქვთ მითითებული მოქმედი ელ. ფოსტის მისამართი თქვენი [[Special:Preferences|ანგარიშის კონფიგურაციაში]] ან თუ დაბლოკვის შედეგად გაქვთ ამ ფუნქციის გამოყენების ნებართვა ჩამორთმეული.\nთქვენი ამჟამინდელი IP მისამართია $3, ხოლო ბლოკის იდენტიფიკატორი #$5.\nგთხოვთ, მიუთითოთ ყველა ზემოთხსენებული მონაცემი თქვენს კორესპონდენციაში.",
+       "blockedtext": "<strong>თქვენი მომხმარებლის სახელი ან IP მისამართი დაიბლოკა.</strong>\n\nბლოკირება განახორციელა $1-მ.\nმიზეზად დასახელდა შემდეგი: <em>$2</em>.\n\n* დაბლოკვის დასაწყისი: $8\n* ბლოკის ვადის გასვლის დრო: $6\n* დაბლოკილ იქნა: $7\n\nშეგიძლიათ დაუკავშირდეთ $1-ს ან რომელიმე სხვა [[{{MediaWiki:Grouppage-sysop}}|ადმინისტრატორს]] დაბლოკვის განსახილველად.\nგაითვალისწინეთ, რომ თქვენ ვერ შეძლებთ გამოიყენოთ ფუნქცია „მომხმარებლისთვის ელ. ფოსტის გაგზავნა“, თუ არ გაქვთ მითითებული მოქმედი ელ. ფოსტის მისამართი თქვენი [[Special:Preferences|ანგარიშის კონფიგურაციაში]] ან თუ დაბლოკვის შედეგად გაქვთ ამ ფუნქციის გამოყენების ნებართვა ჩამორთმეული.\nთქვენი ამჟამინდელი IP მისამართია $3, ხოლო ბლოკის იდენტიფიკატორი #$5.\nგთხოვთ, მიუთითოთ ყველა ზემოთხსენებული მონაცემი თქვენს კორესპონდენციაში.",
        "autoblockedtext": "თქვენი IP მისამართი ავტომატურად დაიბლოკა, ვინაიდან მას სხვა მომხმარებელი იყენებდა, რომელიც დაბლოკა $1-მა.\nსაბაბად მოყვანილი იყო შემდეგი:\n\n:''$2''\n\n* ბლოკის დაწყების თარიღი: $8\n* ბლოკის ვადის გასვლა: $6\n*დაიბლოკა $7\n\nშეგიძლიათ დაუკავშირდეთ $10ს ან რომელიმე სხვა\n[[{{MediaWiki:Grouppage-sysop}}|ადმინისტრატორს]] ამ ბლოკის განსახილველად.\n\nგაითვალისწინეთ, რომ თქვენ ვერ გამოიყენებთ „მისწერეთ ელ-წერილი ამ მომხმარებელს“ ფუნქციას თუ თქვენ შემოწმებული ელ-ფოსტის მისამართი\nარ გაქვთ მითითებული თქვენს [[Special:Preferences|კონფიგურაციაში]] და არ ხართ დაბლოკილი მისი გამოყენებისთვის.\n\nთქვენი IP — $3. თქვენი დაბლოკვის საიდენტიფიკაციო ნომერია $5. გთხოვთ მიუთითოთ ეს ნომერი, ნებისმიერ მიმოწერაში.",
        "blockednoreason": "მიზეზი არ არის მითითებული",
        "whitelistedittext": "გვერდების რედაქტირებისათვის თქვენ გესაჭიროებათ $1.",
        "log-fulllog": "ყველა ჟურნალის ხილვა",
        "edit-hook-aborted": "შესწორება გაუქმებულია გადამჭერით.\nდამატებითი ახსნა არ ჩაწერილა.",
        "edit-gone-missing": "გვერდის განახლეა შეუძლებელია.\nშესაძლოა, იგი წაიშალა.",
-       "edit-conflict": "á\83 á\83\94á\83\93á\83\90á\83¥á\83ªá\83\98ების კონფლიქტი.",
+       "edit-conflict": "á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\98á\83 ების კონფლიქტი.",
        "edit-no-change": "თქვენი შესწორება არ იქნა შენახული, რადგანაც ტექსტის ცვლილება არ მოხდა.",
        "postedit-confirmation-created": "გვერდი შეიქმნა.",
        "postedit-confirmation-restored": "გვერდი აღდგა.",
        "history-show-deleted": "მხოლოდ წაშლილი",
        "histfirst": "უძველესი",
        "histlast": "უახლესი",
-       "historysize": "($1 ბაიტი)",
+       "historysize": "({{PLURAL:$1|$1 ბაიტი|$1 ბაიტი}})",
        "historyempty": "(ცარიელი)",
        "history-feed-title": "რედაქტირების ისტორია",
        "history-feed-description": "ამ გვერდის შესწორებათა ისტორია ვიკიში",
-       "history-feed-item-nocomment": "$1  $2-ზე",
+       "history-feed-item-nocomment": "$1 $2-ზე",
        "history-feed-empty": "თქვენს მიერ მოძიებული გვერდი არ არსებობს.\nშესაძლოა იგი წაშლილ იქნა ვიკიდან, ან მისი სათაური შეიცვალა.\nსცადეთ [[Special:Search|searching on the wiki]] მსგავსი გვერდების სანახავად.",
        "history-edit-tags": "არჩეული ვერსიების ტეგების შეცვლა",
        "rev-deleted-comment": "(რეზიუმე წაიშალა)",
        "foreign-structured-upload-form-label-own-work": "ეს ჩემი პირადი ნამუშევარია",
        "foreign-structured-upload-form-label-infoform-categories": "კატეგორიები",
        "foreign-structured-upload-form-label-infoform-date": "თარიღი",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "თუ ვერ ტვირთავთ ამ ფაილს {{SITENAME}}-ის წესების დაცვით, გთხოვთ დახურეთ ეს ფანჯარა და სცადეთ სხვა მეთოდი.",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "შეგიძლიათ სცადოთ [[Special:Upload|მთავარი ატვირთვის გვერდი]].",
        "foreign-structured-upload-form-label-own-work-message-shared": "მე ვადასტურებ, რომ ამ ფაილზე საავტორო უფლებების მფლობელი ვარ და ვთანხმდები ამ ფაილის შეუქცევადად განთავსებაზე ვიკისაწყობში [https://creativecommons.org/licenses/by-sa/4.0/deed.ka Creative Commons Attribution-ShareAlike 4.0] ლიცენზიით, აგრეთვე ვეთანხმები [https://wikimediafoundation.org/wiki/Terms_of_Use გამოყენების წესებს].",
+       "foreign-structured-upload-form-2-label-noderiv": "<strong>არ უნდა შეიცავდეს</strong> სხვის ნამუშევარს, ასევე არ უნდა იგრძნობოდეს სხვისი ნამუშევრის გავლენა",
+       "foreign-structured-upload-form-2-label-useful": "უნდა იყოს სხვებისთვის <strong>საგანმანათლებლო და სასარგებლო</strong>",
        "foreign-structured-upload-form-3-label-yes": "დიახ",
        "foreign-structured-upload-form-3-label-no": "არა",
        "backend-fail-stream": "ფაილი $1 ტრანსლირება ვერ მოხერხდა.",
        "movenosubpage": "ამ გვერდს არა აქვს ქვეგვერდები",
        "movereason": "მიზეზი:",
        "revertmove": "გაუქმება",
-       "delete_and_move_text": "==საჭიროა წაშლა==\n\nსტატია დასახელებით „[[:$1]]“ უკვე არსებობს. გსურთ მისი წაშლა გადატანისთვის ადგილის დასათმობად?",
+       "delete_and_move_text": "სტატია დასახელებით „[[:$1]]“ უკვე არსებობს.\nგსურთ მისი წაშლა გადატანისთვის ადგილის დასათმობად?",
        "delete_and_move_confirm": "დიახ, წაშალეთ ეს გვერდი",
        "delete_and_move_reason": "წაშლილია „[[$1]]“-დან გადატანისთვის ადგილის დასათმობად",
        "selfmove": "წყარო და დანიშნულების სათაურები მსგავსია; შეუძლებელია გვერდის საკუთარ თავზე გადატანა.",
        "move-leave-redirect": "გადამისამართების დატოვება",
        "protectedpagemovewarning": "'''ყურადღება.''' ეს არის დაცული გვერდი. მისი გადატანა მხოლოდ ადმინისტრატორებს შეუძლია.\nიხილეთ დაცვის ჟურნალის ჩანაწერი ინფორმაციისთვის:",
        "semiprotectedpagemovewarning": "'''ყურადღება.''' ეს გვერდი დაცულია, მისი გადატანა მხოლოდ დარეგისტრირებულ მომხმარებლებს შეუძლიათ.\nიხილეთ დაცვის ჟურნალის ჩანაწერი ინფორმაციისთვის:",
-       "move-over-sharedrepo": "==ფაილი არსებობს==\n[[:$1]] არსებობს საზიარო საცავში. ფაილის ამ სათაურზე გადმოტანა საზიარო ფაილს გადაფარავს.",
+       "move-over-sharedrepo": "[[:$1]] არსებობს გაზიარებულ საცავში. ფაილის ამ სათაურზე გადატანა გაზიარებულ ფაილს გადაეწერება.",
        "file-exists-sharedrepo": "არჩეული ფაილის სახელი უკვე გამოყენებულია საზიარო საცავში.\nგთხოვთ სხვა სახელი აირჩიოთ.",
        "export": "გვერდების ექსპორტი",
        "exporttext": "თქვენ შეგიძლიათ ტექსტებისა, ცვლილებათა ჟურნალის და XML გვერდების ექსპორტირება, რომელიც შეიძლება შემდეგ [[Special:Import|გადატანილი]] იქნას სხვა ვიკიპროექტში, რომელიც მუშაობს MediaWiki-ზე.\n\nგვერდის ექსპორტირებისთვის შეიყვანეთ მათი სახელები თითო ხაზზე და აირჩიეთ, თუ გსურთ სტატიის ყველა ვერსიის გადატანა, თუ მხოლოდ ბოლო ვერსიისა.\n\nთქვენ შეგიძლიათ ასევე გამოიყენოთ სპეციალური მისამართი გვერდის მხოლოდ ბოლო ვერსიის საექსპორტოდ. მაგალითად [[{{MediaWiki:Mainpage}}]]  ეს არის მისამართი [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]].",
        "lastmodifiedatby": "ეს გვერდი ბოლოს შეიცვალა $2, $1  $3-ით.",
        "othercontribs": "$1-ს ნამუშევრის მიხედვით.",
        "others": "სხვები",
-       "siteusers": "{{SITENAME}}-ის {{PLURAL:$2|მომხმარებელი|მომხმარებლები|}} $1",
+       "siteusers": "{{SITENAME}}-ის {{PLURAL:$2|{{GENDER:$1|მომხმარებელი}}|მომხმარებლები}} $1",
        "anonusers": "{{SITENAME}} ანონიმური {{PLURAL:$2|მომხმარებელი|მომხმარებლები}} $1",
        "creditspage": "წვლილი",
        "nocredits": "აქ ამ გვერდისთვის ხელმისაწვდომი ინფორმაცია არ არსებობს.",
        "svg-long-error": "არასწორი SVG ფაილი: $1",
        "show-big-image": "თავდაპირველი ფაილი",
        "show-big-image-preview": "ზომა წინასწარი გადახედვისას: $1.",
+       "show-big-image-preview-differ": "ამ $2 ფაილის $3 წინასწარი გადახედვის ზომაა: $1.",
        "show-big-image-other": "სხვა {{PLURAL:$2|გაფართოება|გაფართოება}}: $1.",
        "show-big-image-size": "$1 × $2 პიქსელი",
        "file-info-gif-looped": "დარგოლილი",
        "scarytranscludefailed-httpstatus": "[ვერ მოხერხდა თარგის ჩატვირთვა $1-თვის: HTTP $2]",
        "scarytranscludetoolong": "[URL ძალიან გრძელია]",
        "deletedwhileediting": "'''ყურადღება''': ეს გვერდი წაიშალა მას შემდეგ, რაც თქვენ მისი რედაქტირება დაიწყეთ!",
-       "confirmrecreate": "მომხმარებელმა [[User:$1|$1]] ([[User talk:$1|განხილვა]]) წაშალა ეს გვერდი მას შემდეგ რაც თქვენ დაიწყეთ რედაქტირება შემდეგი მიზეზით:\n: ''$2''\nგთხოვთ დაადასტუროთ, რომ ნამდვილად გსურთ ამ გვერდის აღდგენა.",
-       "confirmrecreate-noreason": "მომხმარებელმა [[User:$1|$1]] ([[User talk:$1|განხილვა]]) წაშალა ეს გვერდი მას შემდეგ, რაც თქვენ დაიწყეთ მისი რედაქტირება. გთხოვთ, დარწმუნდით, რომ თქვენ ნამდვილად გსურთ ამ გვერდის ხელახლა შექმნა.",
+       "confirmrecreate": "მომხმარებელმა [[User:$1|$1]] ([[User talk:$1|განხილვა]]) წაშალა ეს გვერდი მას შემდეგ რაც თქვენ დაიწყეთ რედაქტირება შემდეგი მიზეზით:\n: <em>$2</em>\nგთხოვთ დაადასტუროთ, რომ ნამდვილად გსურთ ამ გვერდის ხელახლა შექმნა.",
+       "confirmrecreate-noreason": "მომხმარებელმა [[User:$1|$1]] ([[User talk:$1|განხილვა]]) {{GENDER:$1|წაშალა}} ეს გვერდი მას შემდეგ, რაც თქვენ დაიწყეთ მისი რედაქტირება. გთხოვთ, დარწმუნდით, რომ თქვენ ნამდვილად გსურთ ამ გვერდის ხელახლა შექმნა.",
        "recreate": "აღადგინე",
        "unit-pixel": "პქ",
        "confirm_purge_button": "კარგი",
        "version-hook-subscribedby": "ჩაწერილია",
        "version-version": "($1)",
        "version-no-ext-name": "[სახელის გარეშე]",
-       "version-svn-revision": "(r$2)",
        "version-license": "მედიავიკის ლიცენზია",
        "version-ext-license": "ლიცენზია",
        "version-ext-colheader-name": "გაფართოებები",
        "htmlform-cloner-delete": "წაშლა",
        "htmlform-cloner-required": "აუცილებელია სულ მცირე ერთი მნიშვნელობა.",
        "htmlform-title-badnamespace": "[[:$1]] არ მდებარეობს \"{{ns:$2}}\"-ის სახელთა სივრცეში.",
+       "htmlform-title-not-creatable": "$1\" არ არის მართებული გვერდის სათაური",
        "htmlform-title-not-exists": "$1 არ არსებობს.",
        "htmlform-user-not-exists": "<strong>$1</strong> არ არსებობს.",
        "htmlform-user-not-valid": "<strong>$1</strong> არ არის სწორი მომხმარებლის სახელი.",
        "logentry-suppress-block": "მომხმარებელმა $1 {{GENDER:$2|დაბლოკა}} {{GENDER:$4|$3}} ბლოკირების ვადაა $5 $6",
        "logentry-suppress-reblock": "მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} ბლოკირების პარამეტრები {{GENDER:$4|$3}}-თვის  ბლოკირების ვადაა $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|იმპორტირებული}} $3 ატვირთული ფაილი",
+       "logentry-import-upload-details": "$1-მ {{GENDER:$2|გადაიტანა}} $3 ფაილის ატვირთვით ($4 {{PLURAL:$4|ცვლილება|ცვლილება}})",
        "logentry-import-interwiki": "$1 {{GENDER:$2|იმპორტირებული}} $3 სხვა ვიკიდან",
+       "logentry-import-interwiki-details": "$1-მ {{GENDER:$2|გადაიტანა}} $3 $5-ზე ($4 {{PLURAL:$4|ცვლილება|ცვლილება}})",
        "logentry-merge-merge": "მომხმარებელმა $1 {{GENDER:$2|გააერთიანა}} $3 $4-ში ($5-მდე ვერსია)",
        "logentry-move-move": "მომხმარებელმა $1 გვერდი „$3“ {{GENDER:$2|გადაიტანა}} გვერდზე „$4“",
        "logentry-move-move-noredirect": "მომხმარებელმა $1 გვერდი „$3“ {{GENDER:$2|გადაიტანა}} გვერდზე „$4“ გადამისამართების დატოვების გარეშე",
        "logentry-newusers-create2": "მომხმარებლის ანგარიში $3 {{GENDER:$2|შექმნა}} მომხმარებელმა $1",
        "logentry-newusers-byemail": "მომხმარებლის ანგარიში $3 {{GENDER:$2|შექმნა}} მომხმარებელმა $1 და პაროლი გაგზავნა ელ. ფოსტით",
        "logentry-newusers-autocreate": "ავტომატურად {{GENDER:$2|შეიქმნა}} მომხმარებლის ანგარიში $1",
+       "logentry-protect-move_prot": "$1-მ {{GENDER:$2|გადაიტანა}} დაცვის კონფიგურაცია $4-დან $3-ზე",
+       "logentry-protect-unprotect": "$1-მა {{GENDER:$2|მოუხსნა}} დაცვა $3-ს",
+       "logentry-protect-protect": "$1-მ {{GENDER:$2|დაიცვა}} $3 $4",
+       "logentry-protect-protect-cascade": "$1-მ {{GENDER:$2|დაიცვა}} $3 $4 [კასკადური]",
+       "logentry-protect-modify": "$1-მ {{GENDER:$2|შეცვალა}} დაცვის დონე $3 $4-სთვის",
+       "logentry-protect-modify-cascade": "$1 {{GENDER:$2|შეცვალა}} დაცვის დონე $3 $4 [კასკადური]",
        "logentry-rights-rights": "მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} ჯგუფის წევრობა $3-თვის $4-დან $5-ზე",
        "logentry-rights-rights-legacy": "მომხმარებელმა $1 {{GENDER:$2|შეცვალა}} ჯგუფის წევრობა $3-თვის",
        "logentry-rights-autopromote": "მომხმარებელი $1 ავტომატურად იქნა {{GENDER:$2|გადაყვანილი}} $4–დან $5–ში",
index eab9811..4fe3fb6 100644 (file)
        "unwatch": "Şêr meke",
        "watchlist-details": "Pelunê hurênaişi ra qêri {{PLURAL:$1|$1 pele lista şêrkerdişi dera|$1 peli lista şêrkerdişi derê}}.",
        "wlshowlast": "$1 saetunê $2 rozunê peyênu bıasne",
-       "watchlistall2": "pêro",
        "watchlist-options": "Alternatifê lista şêrkerdene",
        "watching": "Şêr ke…",
        "unwatching": "Şêr meke…",
        "restriction-upload": "Bar ke",
        "restriction-level-sysop": "tam sevekiyo",
        "restriction-level-autoconfirmed": "nêm sevekiyo",
-       "restriction-level-all": "heme jü sewiya",
+       "restriction-level-all": "kamci be sewiya",
        "undelete": "Pelunê esteriyau basna",
        "undeletepage": "Pelunê esteriyau bıvine u peyser biya",
        "undeletepagetitle": "'''Ni, [[:$1|$1]] be çımraviarnaunê pele ra yenê pêra'''.",
index a82d4d1..15d9801 100644 (file)
        "throttled-mailpassword": "비밀번호 재설정 이메일을 이미 최근 {{PLURAL:$1|$1시간}} 안에 보냈습니다.\n악용을 방지하기 위해 비밀번호 재설정 메일은 {{PLURAL:$1|$1시간}}마다 오직 하나씩만 보낼 수 있습니다.",
        "mailerror": "메일을 보내는 중 오류: $1",
        "acct_creation_throttle_hit": "당신의 IP 주소를 이용한 방문자가 이전에 이미 {{PLURAL:$1|계정 $1개}}를 만들어, 계정 만들기 한도를 초과하였습니다.\n따라서 지금은 이 IP 주소로는 더 이상 계정을 만들 수 없습니다.",
-       "emailauthenticated": "이메일 주소는 $2 에 $3 에서 인증되었습니다.",
+       "emailauthenticated": "이메일 주소가 $2 $3에 인증되었습니다.",
        "emailnotauthenticated": "이메일 주소를 인증하지 않았습니다.\n이메일 확인 절차를 거치지 않으면 다음 이메일 기능을 사용할 수 없습니다.",
        "noemailprefs": "이 기능을 사용하기 위해서는 사용자 환경 설정에서 이메일 주소를 설정해야 합니다.",
        "emailconfirmlink": "이메일 주소 확인",
index 9f43b61..c1d1cff 100644 (file)
        "uploaded-script-svg": "Mer han e verbodde Skrepp_Elemänd en dä huhjelahde <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Scalable Vector Graphics\">SVG</i>_Dattei jefonge: „$1“",
        "uploaded-hostile-svg": "Mer han onseescher <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Cascading Style Sheet\">CSS</i>-Befähle en enem „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">style</code>“-Ellemänt vun dä huhjelahde <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Scalable Vector Graphics\">SVG</i>_Dattei jefonge.",
        "uploaded-event-handler-on-svg": "Projramme för Ä'eijschneße ze behanndelle „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">&lt;$1=\"$2\"&gt;</code>“ ennzesäze es en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Scalable Vector Graphics\">SVG</i>_Datteije verbodde.",
-       "uploaded-href-attribute-svg": "De Eijeschaff „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">href</code>“ „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code>“ met Zihl_Datteije ußerhallef vum Wikki, Beijschpelle „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">http://</code>“,  „<code $3lang=\"en\" xml:lang=\"en\" dir=\"ltr\">javascript:</code>“, un esu wigger, sin verbodde en dä <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Scalable Vector Graphics\">SVG</i>_Datteije.",
        "uploaded-href-unsafe-target-svg": "Mer han ene „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">href</code>“-Befähl obb e onseescher Zihl „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code>“ en dä huhjelahde <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Scalable Vector Graphics\">SVG</i>_Dattei jefonge.",
        "uploaded-animate-svg": "Mer han dä Befähl „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">animate</code>“ en dä huhjelahde \n<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Scalable Vector Graphics\">SVG</i>_Dattei jefonge, dä ene „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">href</code>“-Befähl verändere künnt övver de „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">from</code>“-Eijeschaff „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code>“.",
        "uploaded-setting-event-handler-svg": "Ed es verbodde, Projramme för Ä'eijschneße ze behanndelle ennzesäze, un de Datteije, di dat donn, wähde jeschpächt. Mer han „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">&lt;$1 $2=\"$3\"&gt;</code>“ en dä huhjelahde <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Scalable Vector Graphics\">SVG</i>_Dattei jefonge.",
index 6abfcc5..30252c6 100644 (file)
        "botpasswords-disabled": "Botpasswierder sinn desaktivéiert.",
        "botpasswords-no-central-id": "Fir Botpasswierder ze benotze musst Dir mat engem zentraliséierte Benotzerkont ageloggt sidd.",
        "botpasswords-existing": "Aktuell Botpasswierder.",
+       "botpasswords-createnew": "En neit Botpasswuert uleeën",
        "botpasswords-editexisting": "E Botpasswuert änneren",
        "botpasswords-label-appid": "Numm vum Bot:",
        "botpasswords-label-create": "Uleeën",
        "grant-group-customization": "Upassungen an Astellungen",
        "grant-group-administration": "Administrativ Aktioune maachen",
        "grant-group-other": "Verschidden Aktivitéiten",
-       "grant-blockusers": "Benotzer spären an hir Spär ophiewen",
+       "grant-blockusers": "Benotzer spären an d'Spären ophiewen",
        "grant-createaccount": "Benotzerkonten opmaachen",
        "grant-createeditmovepage": "Säiten uleeën, änneren a réckelen",
        "grant-delete": "Säiten, Versiounen a Rubriken a Logbicher läschen",
        "grant-uploadfile": "Nei Fichieren eroplueden",
        "grant-basic": "Basisrechter",
        "grant-viewdeleted": "Geläscht Fichieren a Säite weisen",
-       "grant-viewmywatchlist": "Kuckt Är Iwwerwaachungslëscht",
+       "grant-viewmywatchlist": "Är Iwwerwaachungslëscht weisen",
        "newuserlogpage": "Logbuch vun den neien Umeldungen",
        "newuserlogpagetext": "Dëst ass d'Lescht vun de Benotzernimm déi ugeluecht goufen.",
        "rightslog": "Logbuch vun de Benotzerrechter",
        "lastmodifiedatby": "Dës Säit gouf den $1 ëm $2 Auer vum $3 fir d'lescht geännert.",
        "othercontribs": "Op der Basis vun der Aarbecht vum $1",
        "others": "anerer",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|Benotzer|Benotzer}} $1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|Benotzer}} $1",
        "anonusers": "{{PLURAL:$2|Anonyme(n)|Anonym}} {{SITENAME}}-Benotzer $1",
        "creditspage": "Quellen",
        "nocredits": "Fir dës Säit si keng Informatiounen iwwer d'Mataarbechter vun der Säit disponibel.",
        "expand_templates_generate_rawhtml": "HTML-Format weisen",
        "expand_templates_preview": "Kucken ouni ofzespäicheren",
        "expand_templates_input_missing": "Dir musst mindestens een Text aginn.",
-       "pagelanguage": "Eraussiche vun der Sprooch vun der Säit",
+       "pagelanguage": "Sprooch vun der Säit änneren",
        "pagelang-name": "Säit",
        "pagelang-language": "Sprooch",
        "pagelang-use-default": "Standard-Sprooch benotzen",
index a765f3f..643c334 100644 (file)
        "uploaded-script-svg": "عنصر قابل برنامه‌ریزی «$1» در پرونده بارگذاری اس‌وی‌جی یافت شد.",
        "uploaded-hostile-svg": "سی‌اس‌اس نا امن در عنصر سبک پروندهٔ بارگذاری شدهٔ اس‌وی‌جی یافت شد.",
        "uploaded-event-handler-on-svg": "قرار دادن ویژگی‌های مدیریت رویداد <code>$1=\"$2\"</code> در پرونده‌های اس‌وی‌جی مجاز نیست.",
-       "uploaded-href-attribute-svg": "ویژگی‌های href <code>&lt;$1 $2=\"$3\"&gt;</code> با هدف غیر محلی (برای نمونه، http://, javascript:, etc) در پرونده‌های اس‌وی‌جی مجاز نیست.",
        "uploaded-href-unsafe-target-svg": "در پرونده SVG بارگذاری‌شده برای هدف نادرست <code>&lt;$1 $2=\"$3\"&gt;</code> برچسب href یافت شد.",
        "uploaded-animate-svg": "برچسب  \"animate\" یافت شده ممکن است herf را تغییر دهد. از مشخصه \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> در پرونده SVG بارگذاری‌شده استفاده کنید.",
        "uploaded-setting-event-handler-svg": "تنظیمات مشخصه گرداننده رویداد بسته شده‌است. کد <code>&lt;$1 $2=\"$3\"&gt;</code>  در پرونده بارگذاری‌شده یافت شد.",
index 1086375..db89208 100644 (file)
        "uploaded-script-svg": "Įkeltame SVG faile rastas programuojamas elementas \"$1\".",
        "uploaded-hostile-svg": "Įkelto SVG failo stiliaus elemente rastas nesaugus CSS.",
        "uploaded-event-handler-on-svg": "SVG failuose neleidžiamas event-handler atributų nustatymas <code>$1=\"$2\"</code>.",
-       "uploaded-href-attribute-svg": "SVG failuose neleidžiami nuorodos atributai <code>&lt;$1 $2=\"$3\"&gt;</code> su ne lokalia nukreiptimi (pvz. http://, javascript:, ir kt.).",
        "uploaded-href-unsafe-target-svg": "Įkeltame SVG faile rasta nesaugi nukreiptis <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "Įkeltame SVG faile rasta \"animate\" žymė, kuri gali keisti nuorodas, panaudodama \"from\" atributą <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "event-handler atributų nustatymas yra draudžiamas, įkeltame SVG faile rasta <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "upload-too-many-redirects": "URL yra per daug kartų peradresuotas",
        "upload-http-error": "Įvyko HTTP klaida: $1",
        "upload-copy-upload-invalid-domain": "Pakrovimų kopijos yra neleidžiamos iš šio domeno.",
+       "upload-foreign-cant-upload": "Šis vikis nėra sukonfigūruotas failų įkėlimui į nurodytą išorinę failų talpyklą.",
        "upload-dialog-title": "Įkelti failą",
        "upload-dialog-button-cancel": "Atšaukti",
        "upload-dialog-button-done": "Atlikta",
index 623ab53..8d79620 100644 (file)
@@ -17,7 +17,8 @@
                        "灰太狼Wolffy55",
                        "RalfX",
                        "Davidzdh",
-                       "Nemo bis"
+                       "Nemo bis",
+                       "飞舞回堂前"
                ]
        },
        "tog-underline": "鏈墊線:",
        "viewsourceold": "察源碼",
        "editlink": "纂",
        "viewsourcelink": "察源碼",
-       "editsectionhint": "纂 $1",
+       "editsectionhint": "纂段:$1",
        "toc": "章",
        "showtoc": "示",
        "hidetoc": "藏",
        "prefs-displayrc": "示項",
        "prefs-displaywatchlist": "示項",
        "prefs-diffs": "異",
-       "email-address-validity-valid": "電郵有效之",
-       "email-address-validity-invalid": "貢一效之電郵",
        "userrights": "秉治權任",
        "userrights-lookup-user": "司社",
        "userrights-user-editname": "簿名:",
        "right-blockemail": "鎖簿無電郵",
        "right-hideuser": "鎖簿名,予藏眾",
        "right-ipblock-exempt": "繞IP鎖、自鎖與圍鎖",
-       "right-proxyunbannable": "繞Proxy之自鎖",
        "right-unblockself": "自解鎖",
        "right-protect": "改錮級與纂錮頁",
        "right-editprotected": "纂錮頁(無連錮)",
        "upload-options": "貢項",
        "watchthisupload": "派哨",
        "filename-bad-prefix": "獻檔以'''「$1」'''首,常由相機瞎造,惠更述之。",
-       "upload-success-subj": "檔案安矣",
-       "upload-success-msg": "爾自[$2]之貢安矣,見於此:[[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "貢問",
-       "upload-failure-msg": "爾自[$2]之貢現問也:\n\n$1",
-       "upload-warning-subj": "貢警",
-       "upload-warning-msg": "爾自[$2]之貢出問。爾可回[[Special:Upload/stash/$1|貢表]]修此問。",
        "upload-proto-error": "協訂錯誤",
        "upload-too-many-redirects": "網址含多轉",
        "upload-http-error": "發一HTTP之錯:$1",
        "movelogpagetext": "頁遷如下:",
        "movereason": "因",
        "revertmove": "還",
-       "delete_and_move": "刪遷",
        "delete_and_move_text": "==准刪==\n\n往遷\"[[:$1]]\"存,刪之以替乎?",
        "delete_and_move_confirm": "刪之",
        "delete_and_move_reason": "為遷而刪之",
        "tooltip-pt-logout": "凡事盡,乘雲飄",
        "tooltip-pt-createaccount": "勸君增簿以登,然非必須之舉",
        "tooltip-ca-talk": "求異見、辯是非、妥紛擾",
-       "tooltip-ca-edit": "拓文意、校誤謬、潤辭藻",
+       "tooltip-ca-edit": "纂是頁",
        "tooltip-ca-addsection": "有言議,添新要",
        "tooltip-ca-viewsource": "文函緘,讀源老",
        "tooltip-ca-history": "誌流衍、備謄本、修惡盜",
        "tooltip-ca-move": "安居所,嚮正道",
        "tooltip-ca-watch": "哨此報",
        "tooltip-ca-unwatch": "撤此哨",
-       "tooltip-search": "索大典,籲自曉",
+       "tooltip-search": "尋於{{SITENAME}}",
        "tooltip-search-go": "確合契,躍步到",
        "tooltip-search-fulltext": "尋通篇,列倣傚",
        "tooltip-p-logo": "返卷首,訪露朝",
        "tooltip-t-contributions": "同肩戰,苦功高",
        "tooltip-t-emailuser": "言未猶,書信捎",
        "tooltip-t-upload": "貢彩件、獻樂謠",
-       "tooltip-t-specialpages": "å¥\87æ\80ªæ±\82ï¼\8cç\89¹æ\9f¥æ\89¾",
+       "tooltip-t-specialpages": "å±\95ç\9b¡å¥\87é \81",
        "tooltip-t-print": "備印墨,整版貌",
        "tooltip-t-permalink": "鏈緊焊,橋吊牢",
        "tooltip-ca-nstab-main": "閱文稿",
        "tooltip-ca-nstab-user": "返齋寮",
        "tooltip-ca-nstab-media": "聽媒紹",
-       "tooltip-ca-nstab-special": "特查報,謝纂校",
+       "tooltip-ca-nstab-special": "是爲奇頁,謝纂校",
        "tooltip-ca-nstab-project": "探爐灶",
        "tooltip-ca-nstab-image": "觀揮毫",
        "tooltip-ca-nstab-mediawiki": "聞官耗",
        "specialpages": "特查",
        "specialpages-note": "* 準特查。\n* <strong class=\"mw-specialpagerestricted\">限特查。</strong>",
        "specialpages-group-maintenance": "護報",
-       "specialpages-group-other": "它之奇頁",
+       "specialpages-group-other": "奇頁",
        "specialpages-group-login": "登/增",
        "specialpages-group-changes": "近易與誌",
        "specialpages-group-media": "媒報兼呈",
index 5c5c1db..9df1e70 100644 (file)
        "resetpass_submit": "Поставете лозинка и најавете се",
        "changepassword-success": "Вашата лозинка е успешно сменета!",
        "changepassword-throttled": "Имате премногу обиди за најава за кратко време.\nПочекајте $1 пред да се обидете повторно.",
+       "botpasswords-label-appid": "Име на ботот:",
+       "botpasswords-label-create": "Создај",
+       "botpasswords-label-update": "Поднови",
+       "botpasswords-label-cancel": "Откажи",
+       "botpasswords-label-delete": "Избриши",
+       "botpasswords-label-resetpassword": "Ставете нова лозинка",
+       "botpasswords-label-grants": "Применливи доделувања:",
        "resetpass_forbidden": "Лозинките не може да се менуваат",
        "resetpass-no-info": "Мора да сте најавени ако сакате да имате директен пристап до оваа страница.",
        "resetpass-submit-loggedin": "Смени лозинка",
        "uploaded-script-svg": "Пронајдов скриптен елемент „$1“ во подигнатата SVG-податотека.",
        "uploaded-hostile-svg": "Пронајдов небезбеден CSS во стилскиот елемент на подигнатата SVG-податотека.",
        "uploaded-event-handler-on-svg": "Задавањето на атрибути <code>$1=\"$2\"</code> за работа со настани не е дозволено за SVG-податотеки.",
-       "uploaded-href-attribute-svg": "href-атрибути <code>&lt;$1 $2=\"$3\"&gt;</code> со немесна цел (на пр. http://, javascript: и тн.) не се дозволени во SVG-податотеки.",
        "uploaded-href-unsafe-target-svg": "Пронајдов href кон небезбедна цел <code>&lt;$1 $2=\"$3\"&gt;</code> во подигнатата SVG-податотека.",
        "uploaded-animate-svg": "Пронајдов ознака „animate“ што може да го менува href, користејќи го атрибутот „from“ <code>&lt;$1 $2=\"$3\"&gt;</code> во подигнатата SVG-податотека.",
        "uploaded-setting-event-handler-svg": "Задавањето на атрибути за работа со настани е спречено. Пронајдов <code>&lt;$1 $2=\"$3\"&gt;</code> во подигнатата SVG-податотека.",
        "log-title-wildcard": "Пребарај наслови кои почнуваат со овој текст",
        "showhideselectedlogentries": "Прикажи/скриј одбрани записи",
        "log-edit-tags": "Измени ознаки на одредени дневнички записи",
+       "checkbox-select": "Одбери: $1",
+       "checkbox-all": "Сите",
+       "checkbox-none": "Ништо",
+       "checkbox-invert": "Избери обратно",
        "allpages": "Сите страници",
        "nextpage": "Следна страница ($1)",
        "prevpage": "Претходна страница ($1)",
        "lockedbyandtime": "(од $1 на $2 цо $3 ч.)",
        "move-page": "Премести $1",
        "move-page-legend": "Премести страница",
-       "movepagetext": "Со ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\9aеÑ\82о Ð½Ð° Ð¾Ð²Ð¾Ñ\98 Ð¾Ð±Ñ\80азеÑ\86 Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80еименÑ\83ваÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86а, Ð¿Ñ\80емеÑ\81Ñ\82Ñ\83ваÑ\98Ñ\9cи Ñ\98а Ñ\86елаÑ\82а Ð½ÐµÑ\98зина Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð¿Ð¾Ð´ Ð½Ð¾Ð²Ð¾ Ð¸Ð¼Ðµ.\nСÑ\82аÑ\80иоÑ\82 Ð½Ð°Ñ\81лов Ñ\9cе Ñ\81Ñ\82ане Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\87ка Ñ\81Ñ\82Ñ\80аниÑ\86а ÐºÐ¾Ð½ Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов.\nÐ\90вÑ\82омаÑ\82Ñ\81ки Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¸ Ð¿Ð¾Ð´Ð½Ð¾Ð²Ð¸Ñ\82е Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aаÑ\82а ÐºÐ¾Ð¸ Ð¿Ð¾ÐºÐ°Ð¶Ñ\83вааÑ\82 ÐºÐ¾Ð½ Ð¿Ñ\80вобиÑ\82ниоÑ\82 Ð½Ð°Ñ\81лов.\nÐ\90ко Ð½Ðµ Ð¸Ð·Ð±ÐµÑ\80еÑ\82е Ð°Ð²Ñ\82омаÑ\82Ñ\81ко Ð¿Ð¾Ð´Ð½Ð¾Ð²Ñ\83ваÑ\9aе, Ð¿Ñ\80овеÑ\80еÑ\82е Ð½Ð° [[Special:DoubleRedirects|двоÑ\98ни]] Ð¸Ð»Ð¸ [[Special:BrokenRedirects|пÑ\80екинаÑ\82и Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aа]].\nÐ\9dа Ð²Ð°Ñ\81 Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ\80ноÑ\81Ñ\82а Ð´Ð° Ñ\81е Ð¾Ñ\81игÑ\83Ñ\80аÑ\82е Ð´ÐµÐºÐ° Ð²Ñ\80Ñ\81киÑ\82е Ñ\9cе Ð¿Ñ\80одолжаÑ\82 Ð´Ð° Ð½Ð°Ñ\81оÑ\87Ñ\83вааÑ\82 Ñ\82амÑ\83 Ð·Ð° ÐºÐ°Ð´Ðµ Ñ\81е Ð¿Ñ\80едвидени.\n\nÐ\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а '''нема''' Ð´Ð° Ð±Ð¸Ð´Ðµ Ð¿Ñ\80емеÑ\81Ñ\82ена Ð°ÐºÐ¾ Ð²ÐµÑ\9cе Ð¿Ð¾Ñ\81Ñ\82ои Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81о Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов, Ð¾Ñ\81вен Ð°ÐºÐ¾ Ðµ Ð½Ðµ Ðµ Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aе Ð¸ Ð½ÐµÐ¼Ð° Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð½Ð° Ð¼Ð¸Ð½Ð°Ñ\82и Ñ\83Ñ\80едÑ\83ваÑ\9aа. Ð¢Ð¾Ð° Ð·Ð½Ð°Ñ\87и Ð´ÐµÐºÐ° Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\98а Ð¿Ñ\80еименÑ\83ваÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а ÐºÐ°ÐºÐ¾ Ñ\88Ñ\82о Ð±Ð¸Ð»Ð° Ð¿Ñ\80еÑ\82Ñ\85одно Ð´Ð¾ÐºÐ¾Ð»ÐºÑ\83 Ñ\81Ñ\82е Ð½Ð°Ð¿Ñ\80авиле Ð³Ñ\80еÑ\88ка Ð±ÐµÐ· Ð´Ð° Ñ\98а Ð¿Ñ\80екÑ\80иеÑ\82е Ð¿Ð¾Ñ\81Ñ\82оеÑ\87каÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а.\n\n'''Ð\9fÑ\80едÑ\83пÑ\80едÑ\83ваÑ\9aе!'''\nОва може да биде драстична и неочекувана промена за популарна страница;\nосигурајте се дека сте ги разбрале последиците од ова пред да продолжите.",
-       "movepagetext-noredirectfixer": "Со ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\9aеÑ\82о Ð½Ð° Ð¾Ð²Ð¾Ñ\98 Ð¾Ð±Ñ\80азеÑ\86 Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80еименÑ\83ваÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86а, Ð¿Ñ\80емеÑ\81Ñ\82Ñ\83ваÑ\98Ñ\9cи Ñ\98а Ñ\86елаÑ\82а Ð½ÐµÑ\98зина Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð¿Ð¾Ð´ Ð½Ð¾Ð²Ð¾ Ð¸Ð¼Ðµ.\nСÑ\82аÑ\80иоÑ\82 Ð½Ð°Ñ\81лов Ñ\9cе Ñ\81Ñ\82ане Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\87ка Ñ\81Ñ\82Ñ\80аниÑ\86а ÐºÐ¾Ð½ Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов.\nÐ\90вÑ\82омаÑ\82Ñ\81ки Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¸ Ð¿Ð¾Ð´Ð½Ð¾Ð²Ð¸Ñ\82е Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aаÑ\82а ÐºÐ¾Ð¸ Ð¿Ð¾ÐºÐ°Ð¶Ñ\83вааÑ\82 ÐºÐ¾Ð½ Ð¿Ñ\80вобиÑ\82ниоÑ\82 Ð½Ð°Ñ\81лов.\nÐ\9dе Ð·Ð°Ð±Ð¾Ñ\80аваÑ\98Ñ\82е Ð´Ð° Ð¿Ñ\80овеÑ\80иÑ\82е [[Special:DoubleRedirects|двоÑ\98ни]] Ð¸ [[Special:BrokenRedirects|пÑ\80екинаÑ\82и Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aа]].\nÐ\9dа Ð²Ð°Ñ\81 Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ\80ноÑ\81Ñ\82а Ð´Ð° Ñ\81е Ð¾Ñ\81игÑ\83Ñ\80аÑ\82е Ð´ÐµÐºÐ° Ð²Ñ\80Ñ\81киÑ\82е Ñ\9cе Ð¿Ñ\80одолжаÑ\82 Ð´Ð° Ð½Ð°Ñ\81оÑ\87Ñ\83вааÑ\82 Ñ\82амÑ\83 Ð·Ð° ÐºÐ°Ð´Ðµ Ñ\81е Ð¿Ñ\80едвидени.\n\nÐ\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а '''Ð\9dÐ\95Ð\9cÐ\90''' Ð´Ð° Ð±Ð¸Ð´Ðµ Ð¿Ñ\80емеÑ\81Ñ\82ена Ð°ÐºÐ¾ Ð²ÐµÑ\9cе Ð¿Ð¾Ñ\81Ñ\82ои Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81о Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов, Ð¾Ñ\81вен Ð°ÐºÐ¾ Ðµ Ð¿Ñ\80азна Ð¸Ð»Ð¸ Ð°ÐºÐ¾ Ðµ Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aе Ð¸ Ð½ÐµÐ¼Ð° Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð½Ð° Ð¼Ð¸Ð½Ð°Ñ\82и Ñ\83Ñ\80едÑ\83ваÑ\9aа. Ð¢Ð¾Ð° Ð·Ð½Ð°Ñ\87и Ð´ÐµÐºÐ° Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\98а Ð¿Ñ\80еименÑ\83ваÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а ÐºÐ°ÐºÐ¾ Ñ\88Ñ\82о Ð±Ð¸Ð»Ð° Ð¿Ñ\80еÑ\82Ñ\85одно Ð´Ð¾ÐºÐ¾Ð»ÐºÑ\83 Ñ\81Ñ\82е Ð½Ð°Ð¿Ñ\80авиле Ð³Ñ\80еÑ\88ка Ð±ÐµÐ· Ð´Ð° Ñ\98а Ð¿Ñ\80екÑ\80иеÑ\82е Ð¿Ð¾Ñ\81Ñ\82оеÑ\87каÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а.\n\n'''Ð\9fРÐ\95Ð\94УÐ\9fРÐ\95Ð\94УÐ\92Ð\90Ð\8aÐ\95!'''\nОва може да биде драстична и неочекувана промена за популарна страница;\nосигурајте се дека сте ги разбрале последиците од ова пред да продолжите.",
+       "movepagetext": "Со ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\9aеÑ\82о Ð½Ð° Ð¾Ð²Ð¾Ñ\98 Ð¾Ð±Ñ\80азеÑ\86 Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80еименÑ\83ваÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86а, Ð¿Ñ\80емеÑ\81Ñ\82Ñ\83ваÑ\98Ñ\9cи Ñ\98а Ñ\86елаÑ\82а Ð½ÐµÑ\98зина Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð¿Ð¾Ð´ Ð½Ð¾Ð²Ð¾ Ð¸Ð¼Ðµ.\nСÑ\82аÑ\80иоÑ\82 Ð½Ð°Ñ\81лов Ñ\9cе Ñ\81Ñ\82ане Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\87ка Ñ\81Ñ\82Ñ\80аниÑ\86а ÐºÐ¾Ð½ Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов.\nÐ\90вÑ\82омаÑ\82Ñ\81ки Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¸ Ð¿Ð¾Ð´Ð½Ð¾Ð²Ð¸Ñ\82е Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aаÑ\82а ÐºÐ¾Ð¸ Ð¿Ð¾ÐºÐ°Ð¶Ñ\83вааÑ\82 ÐºÐ¾Ð½ Ð¿Ñ\80вобиÑ\82ниоÑ\82 Ð½Ð°Ñ\81лов.\nÐ\90ко Ð½Ðµ Ð¸Ð·Ð±ÐµÑ\80еÑ\82е Ð°Ð²Ñ\82омаÑ\82Ñ\81ко Ð¿Ð¾Ð´Ð½Ð¾Ð²Ñ\83ваÑ\9aе, Ð¿Ñ\80овеÑ\80еÑ\82е Ð½Ð° [[Special:DoubleRedirects|двоÑ\98ни]] Ð¸Ð»Ð¸ [[Special:BrokenRedirects|пÑ\80екинаÑ\82и Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aа]].\nÐ\9dа Ð²Ð°Ñ\81 Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ\80ноÑ\81Ñ\82а Ð´Ð° Ñ\81е Ð¾Ñ\81игÑ\83Ñ\80аÑ\82е Ð´ÐµÐºÐ° Ð²Ñ\80Ñ\81киÑ\82е Ñ\9cе Ð¿Ñ\80одолжаÑ\82 Ð´Ð° Ð½Ð°Ñ\81оÑ\87Ñ\83вааÑ\82 Ñ\82амÑ\83 Ð·Ð° ÐºÐ°Ð´Ðµ Ñ\81е Ð¿Ñ\80едвидени.\n\nÐ\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а '''нема''' Ð´Ð° Ð±Ð¸Ð´Ðµ Ð¿Ñ\80емеÑ\81Ñ\82ена Ð°ÐºÐ¾ Ð²ÐµÑ\9cе Ð¿Ð¾Ñ\81Ñ\82ои Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81о Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов, Ð¾Ñ\81вен Ð°ÐºÐ¾ Ðµ Ð½Ðµ Ðµ Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aе Ð¸ Ð½ÐµÐ¼Ð° Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð½Ð° Ð¼Ð¸Ð½Ð°Ñ\82и Ñ\83Ñ\80едÑ\83ваÑ\9aа. Ð¢Ð¾Ð° Ð·Ð½Ð°Ñ\87и Ð´ÐµÐºÐ° Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\98а Ð¿Ñ\80еименÑ\83ваÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а ÐºÐ°ÐºÐ¾ Ñ\88Ñ\82о Ð±Ð¸Ð»Ð° Ð¿Ñ\80еÑ\82Ñ\85одно Ð´Ð¾ÐºÐ¾Ð»ÐºÑ\83 Ñ\81Ñ\82е Ð½Ð°Ð¿Ñ\80авиле Ð³Ñ\80еÑ\88ка Ð±ÐµÐ· Ð´Ð° Ñ\98а Ð¿Ñ\80екÑ\80иеÑ\82е Ð¿Ð¾Ñ\81Ñ\82оеÑ\87каÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а.\n\n'''Ð\9dапомена:'''\nОва може да биде драстична и неочекувана промена за популарна страница;\nосигурајте се дека сте ги разбрале последиците од ова пред да продолжите.",
+       "movepagetext-noredirectfixer": "Со ÐºÐ¾Ñ\80иÑ\81Ñ\82еÑ\9aеÑ\82о Ð½Ð° Ð¾Ð²Ð¾Ñ\98 Ð¾Ð±Ñ\80азеÑ\86 Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80еименÑ\83ваÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86а, Ð¿Ñ\80емеÑ\81Ñ\82Ñ\83ваÑ\98Ñ\9cи Ñ\98а Ñ\86елаÑ\82а Ð½ÐµÑ\98зина Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð¿Ð¾Ð´ Ð½Ð¾Ð²Ð¾ Ð¸Ð¼Ðµ.\nСÑ\82аÑ\80иоÑ\82 Ð½Ð°Ñ\81лов Ñ\9cе Ñ\81Ñ\82ане Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\87ка Ñ\81Ñ\82Ñ\80аниÑ\86а ÐºÐ¾Ð½ Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов.\nÐ\90вÑ\82омаÑ\82Ñ\81ки Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¸ Ð¿Ð¾Ð´Ð½Ð¾Ð²Ð¸Ñ\82е Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aаÑ\82а ÐºÐ¾Ð¸ Ð¿Ð¾ÐºÐ°Ð¶Ñ\83вааÑ\82 ÐºÐ¾Ð½ Ð¿Ñ\80вобиÑ\82ниоÑ\82 Ð½Ð°Ñ\81лов.\nÐ\9dе Ð·Ð°Ð±Ð¾Ñ\80аваÑ\98Ñ\82е Ð´Ð° Ð¿Ñ\80овеÑ\80иÑ\82е [[Special:DoubleRedirects|двоÑ\98ни]] Ð¸ [[Special:BrokenRedirects|пÑ\80екинаÑ\82и Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aа]].\nÐ\9dа Ð²Ð°Ñ\81 Ðµ Ð¾Ð´Ð³Ð¾Ð²Ð¾Ñ\80ноÑ\81Ñ\82а Ð´Ð° Ñ\81е Ð¾Ñ\81игÑ\83Ñ\80аÑ\82е Ð´ÐµÐºÐ° Ð²Ñ\80Ñ\81киÑ\82е Ñ\9cе Ð¿Ñ\80одолжаÑ\82 Ð´Ð° Ð½Ð°Ñ\81оÑ\87Ñ\83вааÑ\82 Ñ\82амÑ\83 Ð·Ð° ÐºÐ°Ð´Ðµ Ñ\81е Ð¿Ñ\80едвидени.\n\nÐ\98маÑ\98Ñ\82е Ð¿Ñ\80едвид Ð´ÐµÐºÐ° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а '''Ð\9dÐ\95Ð\9cÐ\90''' Ð´Ð° Ð±Ð¸Ð´Ðµ Ð¿Ñ\80емеÑ\81Ñ\82ена Ð°ÐºÐ¾ Ð²ÐµÑ\9cе Ð¿Ð¾Ñ\81Ñ\82ои Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81о Ð½Ð¾Ð²Ð¸Ð¾Ñ\82 Ð½Ð°Ñ\81лов, Ð¾Ñ\81вен Ð°ÐºÐ¾ Ðµ Ð¿Ñ\80азна Ð¸Ð»Ð¸ Ð°ÐºÐ¾ Ðµ Ð¿Ñ\80енаÑ\81оÑ\87Ñ\83ваÑ\9aе Ð¸ Ð½ÐµÐ¼Ð° Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð½Ð° Ð¼Ð¸Ð½Ð°Ñ\82и Ñ\83Ñ\80едÑ\83ваÑ\9aа. Ð¢Ð¾Ð° Ð·Ð½Ð°Ñ\87и Ð´ÐµÐºÐ° Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\98а Ð¿Ñ\80еименÑ\83ваÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а ÐºÐ°ÐºÐ¾ Ñ\88Ñ\82о Ð±Ð¸Ð»Ð° Ð¿Ñ\80еÑ\82Ñ\85одно Ð´Ð¾ÐºÐ¾Ð»ÐºÑ\83 Ñ\81Ñ\82е Ð½Ð°Ð¿Ñ\80авиле Ð³Ñ\80еÑ\88ка Ð±ÐµÐ· Ð´Ð° Ñ\98а Ð¿Ñ\80екÑ\80иеÑ\82е Ð¿Ð¾Ñ\81Ñ\82оеÑ\87каÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а.\n\n'''Ð\9dапомена:'''\nОва може да биде драстична и неочекувана промена за популарна страница;\nосигурајте се дека сте ги разбрале последиците од ова пред да продолжите.",
        "movepagetalktext": "Ако го штиклирате кутивчево, соодветната страница за разговор ќе биде автоматски преместена на нов наслов, освен ако таму веќе постои страница за разговор што не е празна.\n\nВо тој случај, ќе треба да ја преместите или споите страницата рачно, доколку сакате.",
        "moveuserpage-warning": "'''Предупредување:''' На пат сте да преместите корисничка страница. Имајте предвид дека само страницата ќе биде преместена, а самиот корисник ''нема'' да биде преименуван.",
        "movecategorypage-warning": "<strong>Предупредување:</strong> Преместувате категориска страница. Имајте предвид дека ќе се премести само страницата, а страниците во старата категорија <em>нема</em> да се прекатегоризираат во новата.",
        "movenosubpage": "Оваа страница нема потстраници.",
        "movereason": "Причина:",
        "revertmove": "врати",
-       "delete_and_move_text": "==Потребно бришење==\nЦелната статија „[[:$1]]“ веќе постои.\nДали сакате да ја избришете за да ослободите место за преместувањето?",
+       "delete_and_move_text": "Целната статија „[[:$1]]“ веќе постои.\nДали сакате да ја избришете за да ослободите место за преместувањето?",
        "delete_and_move_confirm": "Да, избриши ја страницата",
        "delete_and_move_reason": "Избришано за да се ослободи место за преместувањето од „[[$1]]“",
        "selfmove": "Појдовната и целната страница се истоветни;\nне можам да преместам.",
        "move-leave-redirect": "Направи пренасочување",
        "protectedpagemovewarning": "'''Предупредување:'''  Оваа страница е заштитена, така што само може да ја преместуваат само корисници со администраторски привилегии.\nЗа ваша информација, подолу е прикажана последната ставка во дневникот на измени:",
        "semiprotectedpagemovewarning": "'''Напомена:'''  Оваа страница е заштитена, така што може да ја преместуваат само регистрирани корисници.\nЗа ваша информација, подолу е прикажана последната ставка во дневникот на измени:",
-       "move-over-sharedrepo": "== Податотеката постои ==\n[[:$1]] постои на заедничко складиште. Ако податотеката ја преместите на овој наслов, тоа ќе ја потисне заедничката податотека.",
+       "move-over-sharedrepo": "[[:$1]] постои на заедничко складиште. Ако податотеката ја преместите на овој наслов, тоа ќе ја потисне заедничката податотека.",
        "file-exists-sharedrepo": "Одбраното име на податотеката веќе се користи на заедничко складиште.\nОдберете друго име.",
        "export": "Извоз на страници",
        "exporttext": "Можете да го извезете текстот и историјата на уредување на избрана страница или група на страници во XML формат.\nОвие податоци може да бидат вчитани на некое друго вики кое се користи со МедијаВики преку [[Special:Import|увезување на страница]].\n\nЗа извезување на страници, внесете ги насловите во полето прикажано подолу, еден наслов на статија во ред, потоа изберете дали сакате да ја извезете само последната преработка или и сите постари преработки.\n\nАко ја сакате само тековната верзија, би можеле да искористите врска од видот [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] за страницата „[[{{MediaWiki:Mainpage}}]]“.",
        "tooltip-feed-rss": "RSS емитување за оваа страница",
        "tooltip-feed-atom": "Атом-емитување за оваа страница",
        "tooltip-t-contributions": "Список на придонеси {{GENDER:$1|на овој корисник}}",
-       "tooltip-t-emailuser": "Испрати е-пошта на овој корисник",
+       "tooltip-t-emailuser": "Испрати е-пошта {{GENDER:$1|на овој корисник}}",
        "tooltip-t-info": "Повеќе информаици за страницава",
        "tooltip-t-upload": "Подигни податотеки",
        "tooltip-t-specialpages": "Список на сите службени страници",
        "lastmodifiedatby": "Последната промена на страницава е извршена на $1 г Сво $2 ч. Промената ја направи $3.",
        "othercontribs": "Засновано на работата на $1.",
        "others": "други",
-       "siteusers": "{{PLURAL:$2|корисникот|корисниците}} на {{SITENAME}} $1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|корисник}}|корисници}} $1",
        "anonusers": "{{PLURAL:$2|анонимен корисник|анонимни корисници}} на {{SITENAME}} $1",
        "creditspage": "Автори на страницата",
        "nocredits": "Не постојат податоци за авторите на оваа страница.",
        "version-hook-subscribedby": "Претплатено од",
        "version-version": "($1)",
        "version-no-ext-name": "[нема име]",
-       "version-svn-revision": "прер. $1",
        "version-license": "Лиценца на МедијаВики",
        "version-ext-license": "Лиценца",
        "version-ext-colheader-name": "Додаток",
        "redirect-page": "Назнака на страницата",
        "redirect-revision": "Преработка на страницата",
        "redirect-file": "Име на податотека",
+       "redirect-logid": "Назнака на дневникот",
        "redirect-not-exists": "Вредноста не е најдена",
        "fileduplicatesearch": "Барање на дуплирани податотеки",
        "fileduplicatesearch-summary": "Пребарување на дуплирани податотеки по тарабни вредности.",
        "expand_templates_preview_fail_html": "<em>Бидејќи {{SITENAME}} има овозможено сиров HTML и се јави губиток на седнички податоци, прегледот е скриен како мерка на претпазливост против напади со JavaScript.</em>\n\n<strong>Ако ова е е легитимен обид за преглед, тогаш обидете се повторно.</strong>\nАко не работи и тогаш, [[Special:UserLogout|одјавете се]] и повторно најавете се.",
        "expand_templates_preview_fail_html_anon": "<em>Бидејќи {{SITENAME}} има овозможено сиров HTML, а вие не сте најавени, прегледот е скриен како мерка на претпазливост против напади со JavaScript.</em>\n\n<strong>Ако ова е е легитимен обид за преглед, тогаш обидете се повторно.</strong>\nАко не работи и тогаш, [[Special:UserLogout|одјавете се]] и повторно најавете се.",
        "expand_templates_input_missing": "Треба да внесете некаков текст.",
-       "pagelanguage": "Ð\98збоÑ\80ник Ð·Ð° Ñ\98азик Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а",
+       "pagelanguage": "Ð\9cенÑ\83ваÑ\9aе Ñ\98азик Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а",
        "pagelang-name": "Страница",
        "pagelang-language": "Јазик",
        "pagelang-use-default": "Користи стандарден јазик",
        "mw-widgets-titleinput-description-new-page": "страницата сè уште не постои",
        "mw-widgets-titleinput-description-redirect": "пренасочување кон $1",
        "api-error-blacklisted": "Одберете поинаков, описен наслов.",
+       "sessionprovider-generic": "$1 седници",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "седници со колачиња",
        "randomrootpage": "Случајна основна страница"
 }
index 2b53d20..a2cd1cb 100644 (file)
        "uploaded-script-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ സ്ക്രിപ്റ്റ് ചെയ്യാവുന്ന ഭാഗമായ \"$1\" കണ്ടെത്തി.",
        "uploaded-hostile-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ സുരക്ഷിതമല്ലാത്ത സി.എസ്.എസ്. സ്റ്റൈൽ ഭാഗം കണ്ടെത്താനായി.",
        "uploaded-event-handler-on-svg": "എസ്.വി.ജി. പ്രമാണങ്ങളിൽ എവന്റ്-ഹാൻഡ്‌ലർ ആട്രിബ്യൂട്ടുകൾ <code>$1=\"$2\"</code>  എന്ന് സജ്ജീകരിച്ചിരിക്കുന്നവ അനുവദിച്ചിട്ടില്ല.",
-       "uploaded-href-attribute-svg": "എസ്.വി.ജി. പ്രമാണങ്ങളിൽ എച്ച്റെഫ് (href) ആട്രിബ്യൂട്ടുകൾ പ്രാദേശികമല്ലാത്ത ലക്ഷ്യങ്ങളിലേക്ക് <code>&lt;$1 $2=\"$3\"&gt;</code> എന്നുള്ളവ (ഉദാ: http://, javascript:, തുടങ്ങിയവ) അനുവദിച്ചിട്ടില്ല.",
        "uploaded-href-unsafe-target-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ സുരക്ഷിതമല്ലാത്ത ലക്ഷ്യമായ <code>&lt;$1 $2=\"$3\"&gt;</code> കണ്ടെത്തി.",
        "uploaded-animate-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ <code>&lt;$1 $2=\"$3\"&gt;</code> ആട്രിബ്യൂട്ട് ഉപയോഗിച്ച് href മാറ്റിയേക്കാവുന്ന \"animate\" റ്റാഗായ <code>&lt;$1 $2=\"$3\"&gt;</code> കണ്ടെത്തി.",
        "uploaded-setting-event-handler-svg": "അപ്‌ലോഡ് ചെയ്ത എസ്.വി.ജി. പ്രമാണത്തിൽ <code>&lt;$1 $2=\"$3\"&gt;</code> കണ്ടെത്തി, ഇവന്റ്-കൈകാര്യ സജ്ജീകരണ ആട്രിബ്യൂട്ടുകൾ തടഞ്ഞിരിക്കുന്നു.",
index 4628e81..27d49c6 100644 (file)
@@ -12,7 +12,8 @@
                        "Zorigt",
                        "לערי ריינהארט",
                        "아라",
-                       "Sembuk"
+                       "Sembuk",
+                       "Munkhzaya.E"
                ]
        },
        "tog-underline": "Линкүүдийн доогуур зураас зур:",
        "createaccountreason": "Шалтгаан:",
        "createacct-reason": "Шалтгаан",
        "createacct-reason-ph": "Өөр бүртгэл үүсгэх шалтгаан",
-       "createacct-captcha": "Аюулгүй байдлын хяналт",
-       "createacct-imgcaptcha-ph": "Дээр харагдаж буй бичвэрийг оруулна уу",
        "createacct-submit": "Бүртгүүлэх",
        "createacct-another-submit": "Өөр нэгэн хэрэглэгч бүртгэх",
        "createacct-benefit-heading": "{{SITENAME}}-г тан шиг хүмүүс хийж байна.",
        "passwordreset-emailtext-ip": "Хэн нэгэн ($1 гэсэн IP хаягаас) {{SITENAME}} ($4) дээр таны бүртгэлийн сануулга авахаар хүссэн байна. Дараах {{PLURAL:$3|бүртгэл|бүртгэл}}\nуг е-шуудантай холбоотой:\n\n$2\n\n{{PLURAL:$3|Уг түр хэрэглэх нууц үг|Уг түр хэрэглэх нууц үгүүд}} нь {{PLURAL:$5|нэг өдрийн|$5 өдрийн}} дотор устах болно.\nТа уг нууц үгээр нэвтэрч, түүнийг шинэчлэх хэрэгтэй. Хэрэв өөр нэгэн уг хүсэлтийг явуулсан бол \nэсвэл өөрийн ориг нууц үгээ санаж байгаад түүнийгээ өөрчлөхийг хүсэхгүй байгаа бол энэ захиаг үл ойшоож \nэнгийнээр нэвтэрч болно.",
        "passwordreset-emailtext-user": "{{SITENAME}} дээрх $1 хэрэглэгч {{SITENAME}} ($4) дээр өөрийн тань бүртгэл дээр сануулга хүссэн байна. \nДараах {{PLURAL:$3|бүртгэл|бүртгэлүүд}} уг е-шуудантай холбоотой байна:\n\n$2\n\nЭнэ {{PLURAL:$3|түр нууц үг|түр нууц үгс}} {{PLURAL:$5|нэг өдрийн дараа|$5 өдрийн дараа}} устах болно.\nТүүгээр нэвтэрч ороод нууц үгээ шинэчилнэ үү. Энэ сануулгыг өөр хэн нэгэн хийсэн, эсвэл та\nнууц үгээ санаж байгаа бол энэ захиаг анхааралгүйгээр хуучнаараа ороход болно.",
        "passwordreset-emailelement": "Хэрэглэгчийн нэр: \n$1\n\nТүр зуурын нууц үг: \n$2",
-       "passwordreset-emailsent": "Нууц үг солин емайл илгээсэн.",
+       "passwordreset-emailsentemail": "Нууц үг солин емайл илгээсэн.",
        "passwordreset-emailsent-capture": "Доор харагдаж байгаа нь танируу илгээсэн нууц үг ресет хийх емайл.",
        "passwordreset-emailerror-capture": "Доор харагдаж байгаа нууц үг ресет хийх емайл үүссэх боловч {{GENDER:$2|хэрэглэгчид}} илгээхэд алдаа гарлаа : $1",
        "changeemail": "Цахим шуудангийн хаяг солих",
-       "changeemail-text": "Энэ маягтийг бөглөж цахим шуудангийн хаягаа солино уу. Өөрчлөлт хийхийн тулд нууц үгээ оруулна уу.",
+       "changeemail-header": "Цахим шуудангийн бүртгэлийн хаяг солих",
        "changeemail-no-info": "Энэ хуудсыг үзэхэд хэрэглэгчийн нэрээр орсон байх шаардлагатай.",
        "changeemail-oldemail": "Одоогийн цахим шуудан:",
        "changeemail-newemail": "Шинэ цахим шуудангийн хаяг:",
        "prefs-diffs": "Ялгаанууд",
        "prefs-help-prefershttps": "Гараад орох уг тохиргоо идэвхижнэ.",
        "prefs-tabs-navigation-hint": "Зөвлөмж: Баруун зүүн сумаар таб хооронд шилжиж болно.",
-       "email-address-validity-valid": "Цахим шуудан хүчинтэй байна",
-       "email-address-validity-invalid": "и-майл хаягаа зөв оруулна уу.",
        "userrights": "Хэрэглэгчдийн эрхийн удирдлага",
        "userrights-lookup-user": "Хэрэглэгчдийн бүлгүүдийг удирдах",
        "userrights-user-editname": "Хэрэглэгчийн нэрээ оруулна уу:",
        "right-blockemail": "Хэрэглэгчийг мэйл явуулахаас түгжих",
        "right-hideuser": "Хэрэглэгчийн нэрийг түгжиж нийтээс нуух",
        "right-ipblock-exempt": "IP-н түгжээ, автомат түгжээ, бүсийн түгжээг тойрч гарах",
-       "right-proxyunbannable": "Проксинуудын автомат түгжээг тойрч гарах",
        "right-unblockself": "Өөрт хийсэн түгжээг тайлах",
        "right-protect": "Хамгаалалтын түвшингүүдийг өөрчилж хамгаалагдсан хуудсуудыг засварлах",
        "right-editprotected": "Хамгаалагдсан хуудсуудыг \"{{int:protect-level-sysop}}\" хэлбэрээр засварлах",
        "filewasdeleted": "Өмнө нь ийм нэртэй файл оруулагдсан бөгөөд дараа нь устгагдсан байна.\nТа үүнийг дахин оруулахын өмнө $1-г шалгаж үзнэ үү.",
        "filename-bad-prefix": "Таны оруулж байгаа файлын нэр '''\"$1\"'''-р эхэлж байна. Энэ нь файлыг тодорхойлойлоогүй, голдуу дижитал аппаратын автоматаар гаргадаг нэр болно.\nФайланд түүнийг илүү сайн тодорхойлсон нэр өгнө үү.",
        "filename-prefix-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# Syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment\n#   * Every non-blank line is a prefix for typical filenames assigned automatically by digital cameras\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # зарим гар утаснууд\nIMG # ерөнхий\nJD # Jenoptik\nMGP # Pentax\nPICT # бусад.\n #</pre> <!-- leave this line exactly as it is -->",
-       "upload-success-subj": "Файлыг амжилттай орууллаа",
-       "upload-success-msg": "[$2]-с амжилттай оруулав. Энд байна: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Оруулах үеийн асуудал",
-       "upload-failure-msg": "[$2]-с оруулахад асуудал үүсчээ:\n\n$1",
-       "upload-warning-subj": "Оруулах үеийн анхааруулга",
-       "upload-warning-msg": "[$2]-с хийсэн оруулалтад асуудал үүсэв. [[Special:Upload/stash/$1|Оруулах талбар]] руу буцаж энэ асуудлыг шийдвэрлэж болно.",
        "upload-proto-error": "Буруу протокол",
        "upload-proto-error-text": "Файл оруулахад хэрэгтэй URL-үүд нь <code>http://</code> эсвэл <code>ftp://</code>-р эхлэсэн байх шаардлагатай.",
        "upload-file-error": "Дотоод алдаа",
        "movenosubpage": "Энэ хуудас нь дэд хуудасгүй.",
        "movereason": "Шалтгаан:",
        "revertmove": "хуучин төлөвт шилжүүлэх",
-       "delete_and_move": "Устгаад зөөх",
        "delete_and_move_text": "==Устгалын шаардав==\nЗорьсон хуудас \"[[:$1]]\"-г нь урьд нь оруулсан байна.\nТа зөөхөд зай гаргахын тулд устгах уу?",
        "delete_and_move_confirm": "Тийм, хуудсыг устга",
        "delete_and_move_reason": "[[$1]] -с зөөхөд зай гаргахын тулд устгагдсан",
        "newimages-summary": "Энэ тусгай хуудсанд хамгийн сүүлд оруулагдсан файлуудыг үзүүлнэ.",
        "newimages-legend": "Шүүлтүүр",
        "newimages-label": "Файлын нэр (эсвэл түүний нэг хэсэг):",
+       "newimages-hidepatrolled": "Шалгасан файлуудыг нуух",
        "noimages": "Харах юмгүй.",
        "ilsubmit": "Хайлт",
        "bydate": "Огноогоор",
        "duration-millennia": "$1 {{PLURAL:$1|мянган|мянган}}",
        "expand_templates_input": "Оруулах бичиг:",
        "expand_templates_output": "Үр дүн",
-       "expand_templates_remove_comments": "Товч агуулгыг авч хаях"
+       "expand_templates_remove_comments": "Товч агуулгыг авч хаях",
+       "pagelanguage": "Хуудасны хэлийг өөрчлөх",
+       "log-name-pagelang": "Хэлний өөрчлөлтийн лог"
 }
index bdc2e67..0a57052 100644 (file)
        "right-blockemail": "Menyekat pengguna lain daripada mengirim e-mel",
        "right-hideuser": "Menyekat sesebuah nama pengguna, menyembunyikannya daripada orang ramai",
        "right-ipblock-exempt": "Melangkau sekatan IP, sekatan automatik dan sekatan julat",
-       "right-proxyunbannable": "Melangkau sekatan proksi automatik",
        "right-unblockself": "Menyahsekat diri sendiri",
        "right-protect": "Mengubah tahap perlindungan serta menyunting halaman yang dilindungi lata",
        "right-editprotected": "Menyunting halaman-halaman yang dilindungi sebagai \"{{int:protect-level-sysop}}\"",
        "uploaded-script-svg": "Terdapat elemen terskrip \"$1\" dalam fail SVG yang dimuat naik.",
        "uploaded-hostile-svg": "Terdapat CSS yang tidak selamat dalam elemen stail fail SVG yang dimuat naik.",
        "uploaded-event-handler-on-svg": "Penetapan atribut <i>event-handler</i> <code>$1=\"$2\"</code> tidak dibenarkan dalam fail SVG.",
-       "uploaded-href-attribute-svg": "Atribut href <code>&lt;$1 $2=\"$3\"&gt;</code> dengan sasaran bukan setempat (cth. http://, javascript:, dsb) tidak dibenarkan dalam fail SVG.",
        "uploaded-href-unsafe-target-svg": "Terdapat href ke sasaran tak selamat <code>&lt;$1 $2=\"$3\"&gt;</code> dalam fail SVG yang dimuat naik.",
        "uploaded-animate-svg": "Terdapat teg \"animate\" yang mungkin sedang mengubah href, menggunakan atribut \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> dalam fail SVG yang dimuat naik.",
        "uploaded-setting-event-handler-svg": "Dilarang menetapkan atribut <i>event-handler</i>, terdapat <code>&lt;$1 $2=\"$3\"&gt;</code> dalam fail SVG yang dimuat naik.",
        "filename-thumb-name": "Nampaknya macam tajuk gambar kenit (thumbnail). Tolong jangan muat naik gambar kenit balik ke dalam wiki yang sama. Selain itu, sila betulkan nama fail supaya ia nampak lebih bererti dan tiada awalan gambar kenit.",
        "filename-bad-prefix": "Nama bagi fail yang dimuat naik bermula dengan '''\"$1\"''', yang mana merupakan nama yang tidak deskriptif yang biasanya ditetapkan oleh kamera digital secara automatik. Sila berikan nama yang lebih deskriptif bagi fail tersebut.",
        "filename-prefix-blacklist": " #<!-- biarkan baris ini seperti sediakala --> <pre>\n# Sintaks adalah seperti berikut:\n#   * Segalanya mulai aksara \"#\" hingga akhir baris ialah komen\n#   * Setiap baris bukan kosong ialah awalan bagi nama-nama fail biasa yang ditetapkan secara automatik oleh kamera digital\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # sesetengah telefon bimbit\nIMG # generik\nJD # Jenoptik\nMGP # Pentax\nPICT # dll.\n #</pre> <!-- biarkan baris ini seperti sediakala -->",
-       "upload-success-subj": "Muat naik berjaya",
-       "upload-success-msg": "Muat naik anda dari [$2] berjaya. Ia ada di sini: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Masalah muat naik",
-       "upload-failure-msg": "Terdapat masalah dengan muat naik anda daripada [$2]:\n\n$1",
-       "upload-warning-subj": "Amaran muat naik",
-       "upload-warning-msg": "Terdapat masalah dengan muat naik anda daripada [$2]. Anda boleh kembali ke [[Special:Upload/stash/$1|borang muat naik]] untuk mengatasi masalah ini.",
        "upload-proto-error": "Protokol salah",
        "upload-proto-error-text": "Muat naik jauh memerlukan URL yang dimulakan dengan <code>http://</code> atau <code>ftp://</code>.",
        "upload-file-error": "Ralat dalaman",
        "wlheader-showupdated": "Laman-laman yang telah diubah sejak kunjungan terakhir anda dipaparkan dalam '''teks tebal'''.",
        "wlnote": "Yang berikut ialah <strong>$1</strong> perubahan terakhir sejak $2 jam yang lalu, sehingga $3, $4.",
        "wlshowlast": "Tunjukkan $2 hari $1 jam yang lalu",
-       "watchlistall2": "semua",
        "watchlist-hide": "Sorok",
        "wlshowtime": "Tempoh masa untuk dipaparkan:",
        "wlshowhideminor": "suntingan kecil",
        "mw-widgets-dateinput-no-date": "Tarik belum dipilih",
        "mw-widgets-titleinput-description-new-page": "laman belum wujud",
        "mw-widgets-titleinput-description-redirect": "melencong ke $1",
-       "api-error-blacklisted": "Sila pilih tajuk yang berbeza dan deskriptif."
+       "api-error-blacklisted": "Sila pilih tajuk yang berbeza dan deskriptif.",
+       "randomrootpage": "Laman akar rawak"
 }
index a38d0b3..d484e60 100644 (file)
        "uploaded-script-svg": "Truvato n'elemento pe script \"$1\" int' 'o file SVG carrecato.",
        "uploaded-hostile-svg": "Truvato nu CSS insecuro int'a l'elemente 'e stile d' 'o file SVG carrecate.",
        "uploaded-event-handler-on-svg": "Mpustà 'e parametre 'e gistore-evente <code>$1=\"$2\"</code> nun è premmesso dint' 'e file SVG.",
-       "uploaded-href-attribute-svg": "Ll'attribbute href <code>&lt;$1 $2=\"$3\"&gt;</code> cu target non-local (e.g. http://, javascript:, ecc) nun so' premmesse int' 'e file SVG.",
        "uploaded-href-unsafe-target-svg": "S'è truvato nu href a nu target ca nun era sicuro <code>&lt;$1 $2=\"$3\"&gt;</code> dint' 'o file SVG carrecato.",
        "uploaded-animate-svg": "Truvato 'o tag \"animate\" ca putesse stà a cagnà href, ausanno l'attribbuto \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> int' 'o file carrecato SVG.",
        "uploaded-setting-event-handler-svg": "Mpustà n'attributo event-handler è bluccato, truvato <code>&lt;$1 $2=\"$3\"&gt;</code> int' 'o fie carrecato SVG.",
index e0e6be6..87d1d9c 100644 (file)
@@ -72,7 +72,8 @@
                        "M!dgard",
                        "Matma Rex",
                        "Robin van der Vliet",
-                       "Catrope"
+                       "Catrope",
+                       "Edoderoo"
                ]
        },
        "tog-underline": "Koppelingen onderstrepen:",
        "tog-enotifrevealaddr": "Mijn e-mailadres weergeven in e-mailberichten",
        "tog-shownumberswatching": "Het aantal gebruikers weergeven dat deze pagina volgt",
        "tog-oldsig": "Bestaande ondertekening:",
-       "tog-fancysig": "Als wikitekst behandelen (zonder automatische koppeling)",
+       "tog-fancysig": "Handtekening als wikitekst behandelen (zonder automatische koppeling)",
        "tog-uselivepreview": "Livevoorvertoning gebruiken",
        "tog-forceeditsummary": "Een melding geven bij een lege bewerkingssamenvatting",
        "tog-watchlisthideown": "Eigen bewerkingen op mijn volglijst verbergen",
        "databaseerror-query": "Zoekopdracht: $1",
        "databaseerror-function": "Functie: $1",
        "databaseerror-error": "Fout: $1",
+       "transaction-duration-limit-exceeded": "Deze transactie ($1) is afgebroken omdat de limiet van $2 {{PLURAL:$2|seconde|seconden}} is bereikt. Hiermee worden grote achterstanden bij het repliceren voorkomen. \nWanneer u meerdere items tegelijk bewerkt, probeer het dan in meerdere kleinere opdrachten te doen.",
        "laggedslavemode": "<strong>Waarschuwing:</strong> in deze pagina zijn recente wijzigingen mogelijk nog niet verwerkt.",
        "readonly": "Database geblokkeerd",
        "enterlockreason": "Geef een reden op voor de blokkade en geef op wanneer die waarschijnlijk wordt opgeheven",
        "missingarticle-rev": "(versienummer: $1)",
        "missingarticle-diff": "(Wijziging: $1, $2)",
        "readonly_lag": "De database is automatisch vergrendeld terwijl de ondergeschikte databaseservers synchroniseren met de hoofdserver.",
+       "nonwrite-api-promise-error": "De HTTP-header 'Promise-Non-Write-API-Action' was meegestuurd, maar het verzoek behelsde een API-schrijfverzoek.",
        "internalerror": "Interne fout",
        "internalerror_info": "Interne fout: $1",
        "internalerror-fatal-exception": "Fatale fout van type \"$1\"",
        "virus-scanfailed": "scannen is mislukt (code $1)",
        "virus-unknownscanner": "onbekend antivirusprogramma:",
        "logouttext": "<strong>U bent nu afgemeld.</strong>\n\nSommige pagina's kunnen blijven weergegeven alsof u nog aangemeld bent, totdat u uw browsercache leegt.",
-       "cannotlogoutnow-title": "Niet mogelijk om nu uit te loggen",
-       "cannotlogoutnow-text": "Uitloggen is niet mogelijk bij het gebruik van $1.",
+       "cannotlogoutnow-title": "Niet mogelijk om nu af te melden",
+       "cannotlogoutnow-text": "Afmelden is niet mogelijk bij het gebruik van $1.",
        "welcomeuser": "Welkom, $1!",
        "welcomecreation-msg": "Uw account is aangemaakt.\nIndien gewenst kunt u uw [[Special:Preferences|voorkeuren]] voor {{SITENAME}} aanpassen.",
        "yourname": "Gebruikersnaam:",
        "remembermypassword": "Aanmeldgegevens onthouden (maximaal $1 {{PLURAL:$1|dag|dagen}})",
        "userlogin-remembermypassword": "Aangemeld blijven",
        "userlogin-signwithsecure": "Beveiligde verbinding gebruiken",
-       "cannotloginnow-title": "Niet mogelijk om nu in te loggen",
-       "cannotloginnow-text": "Inloggen is niet mogelijk bij het gebruik van $1.",
+       "cannotloginnow-title": "Niet mogelijk om aan te melden",
+       "cannotloginnow-text": "Aanmelden is niet mogelijk bij het gebruik van $1.",
        "yourdomainname": "Uw domein:",
        "password-change-forbidden": "U kunt uw wachtwoord niet wijzigen in deze wiki.",
        "externaldberror": "Er is een fout opgetreden bij het aanmelden bij de database of u hebt geen toestemming uw externe gebruiker bij te werken.",
        "changepassword-success": "Uw wachtwoord is gewijzigd.",
        "changepassword-throttled": "U heeft recentelijk te veel mislukte aanmeldpogingen gedaan.\nWacht alstublieft $1 voordat u het opnieuw probeert.",
        "botpasswords": "Botwachtwoorden",
+       "botpasswords-summary": "<em>Botwachtwoorden</em> zorgen voor toegang tot de API via een gebruikersaccount zonder gebruik te maken van de aanmeldgegevens van dat account. De gebruikersrechten die beschikbaar zijn kunnen afwijken indien er aangemeld is met een botwachtwoord.\n\nAls u niet weet wat de gevolgen hiervan zijn, is het handiger om dit ook dan niet te doen. Niemand hoort u te vragen om een botwachtwoord aan te maken en deze vervolgens aan hem of haar te geven.",
        "botpasswords-disabled": "Botwachtwoorden zijn uitgeschakeld.",
        "botpasswords-no-central-id": "Om botwachtwoorden te gebruiken, moet u ingelogd zijn met een gecentraliseerd account",
        "botpasswords-existing": "Bestaande botwachtwoorden",
        "botpasswords-label-cancel": "Annuleren",
        "botpasswords-label-delete": "Verwijderen",
        "botpasswords-label-resetpassword": "Het wachtwoord opnieuw instellen",
+       "botpasswords-label-grants": "Van toepassing zijnde rechten:",
+       "botpasswords-help-grants": "Iedere toestemming geeft toegang tot de opgegeven gebruikersrechten die de gebruiker al heeft. Zie [[Special:ListGrants|overzicht van rechten]] voor meer informatie.",
        "botpasswords-label-restrictions": "Gebruiksbeperkingen:",
        "botpasswords-label-grants-column": "Toegewezen",
        "botpasswords-bad-appid": "De botnaam \"$1\" is niet geldig.",
        "botpasswords-updated-body": "Het botwachtwoord \"$1\" is succesvol bijgewerkt.",
        "botpasswords-deleted-title": "Botwachtwoord verwijderd",
        "botpasswords-deleted-body": "Het botwachtwoord \"$1\" is verwijderd.",
+       "botpasswords-newpassword": "Het nieuwe wachtwoord om aan te melden met <strong>$1</strong> is nu <strong>$2</strong>. <em>Bewaar dit goed voor toekomstig gebruik.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider is niet beschikbaar.",
-       "botpasswords-restriction-failed": "Botwachtwoord-beperkingen maken het aanmelden onmogelijk.",
+       "botpasswords-restriction-failed": "Botwachtwoordbeperkingen maken het aanmelden onmogelijk.",
+       "botpasswords-invalid-name": "De gebruikersnaam mag niet het scheidingsteken van het botwachtwoord (\"$1\") bevatten.",
        "botpasswords-not-exist": "Gebruiker \"$1\" heeft geen botwachtwoord genaamd \"$2\"",
        "resetpass_forbidden": "Wachtwoorden kunnen niet gewijzigd worden",
        "resetpass-no-info": "U dient aangemeld zijn voordat u deze pagina kunt gebruiken.",
        "accmailtext": "Een willekeurig gegenereerd wachtwoord voor [[User talk:$1|$1]] is verzonden naar $2. Het kan worden gewijzigd op de pagina \"[[Special:ChangePassword|wachtwoord wijzigen]]\" na het aanmelden.",
        "newarticle": "(Nieuw)",
        "newarticletext": "Deze pagina bestaat niet.\nTyp in het onderstaande veld om de pagina aan te maken (meer informatie staat op de [$1 hulppagina]).\nGebruik de knop <strong>Terug</strong> in uw browser als u hier per ongeluk terecht bent gekomen.",
-       "anontalkpagetext": "----''Deze overlegpagina hoort bij een anonieme gebruiker die geen gebruikersnaam heeft of deze niet gebruikt.\nDaarom wordt het IP-adres ter identificatie gebruikt.\nHet is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.\nMogelijk ontvangt u hier berichten die niet voor u bedoeld zijn.\nAls u dat wilt voorkomen, [[Special:UserLogin/signup|registreer u]] of [[Special:UserLogin|meld u aan]] om verwarring met andere anonieme gebruikers te voorkomen.''",
+       "anontalkpagetext": "----\n<em>Deze overlegpagina hoort bij een anonieme gebruiker die geen gebruikersnaam heeft of deze niet gebruikt.</em>\nDaarom wordt het IP-adres ter identificatie gebruikt.\nHet is mogelijk dat meerdere personen hetzelfde IP-adres gebruiken.\nMogelijk ontvangt u hier berichten die niet voor u bedoeld zijn.\nAls u dat wilt voorkomen, [[Special:UserLogin/signup|registreer u]] of [[Special:UserLogin|meld u aan]] om verwarring met andere anonieme gebruikers te voorkomen.",
        "noarticletext": "Deze pagina bevat geen tekst.\nU kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken]</span>.",
        "noarticletext-nopermission": "Deze pagina bevat geen tekst.\nU kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina's of\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>, maar u mag de pagina niet aanmaken.",
        "missing-revision": "De versie #$1 van de pagina \"{{FULLPAGENAME}}\" bestaat niet.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling naar een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
        "prefs-info": "Basisinformatie",
        "prefs-i18n": "Taalinstellingen",
        "prefs-signature": "Ondertekening",
-       "prefs-dateformat": "Datumopmaak:",
+       "prefs-dateformat": "Datumopmaak",
        "prefs-timeoffset": "Tijdverschil",
        "prefs-advancedediting": "Algemene instellingen",
        "prefs-editor": "Tekstverwerker",
        "userrights": "Gebruikersrechtenbeheer",
        "userrights-lookup-user": "Gebruikersgroepen beheren",
        "userrights-user-editname": "Voer een gebruikersnaam in:",
-       "editusergroup": "{{GENDER:$1|Gebruiker}}sgroepen wijzigen",
+       "editusergroup": "{{GENDER:$1|Gebruikersgroepen}} wijzigen",
        "editinguser": "Bezig met wijzigen van de gebruikersrechten van gebruiker '''[[User:$1|$1]]''' $2",
        "userrights-editusergroup": "Gebruikersgroepen wijzigen",
-       "saveusergroups": "{{GENDER:$1|Gebruiker}}sgroepen opslaan",
+       "saveusergroups": "{{GENDER:$1|Gebruikersgroepen}} opslaan",
        "userrights-groupsmember": "Lid van:",
        "userrights-groupsmember-auto": "Impliciet lid van:",
        "userrights-groups-help": "U kunt de groepen wijzigen waar deze gebruiker lid van is.\n* Een aangekruist vakje betekent dat de gebruiker lid is van de groep.\n* Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep.\n* Een \"*\" betekent dat u een gebruiker niet uit een groep kunt verwijderen nadat u die hebt toegevoegd of vice versa.",
        "right-createpage": "Pagina's aanmaken",
        "right-createtalk": "Overlegpagina's aanmaken",
        "right-createaccount": "Nieuwe gebruikers aanmaken",
-       "right-autocreateaccount": "Automatisch inloggen met een extern gebruikersaccount",
+       "right-autocreateaccount": "Automatisch aanmelden met een extern gebruikersaccount",
        "right-minoredit": "Bewerkingen als klein markeren",
        "right-move": "Pagina's hernoemen",
        "right-move-subpages": "Pagina's inclusief subpagina's verplaatsen",
        "grant-group-administration": "Beheerdershandelingen uitvoeren",
        "grant-group-other": "Diverse handelingen",
        "grant-blockusers": "Gebruikers (de)blokkeren",
-       "grant-createaccount": "Gebruikers aanmaken",
+       "grant-createaccount": "Accounts aanmaken",
        "grant-createeditmovepage": "Pagina's aanmaken, bewerken en hernoemen",
-       "grant-delete": "Pagina's, wijzigingen en vermeldingen in het logboek verwijderen",
+       "grant-delete": "Pagina's, wijzigingen en logboekregels verwijderen",
        "grant-editinterface": "De naamruimte MediaWiki en CSS en JavaScript van gebruikers bewerken",
-       "grant-editmycssjs": "Uw eigen CSS/JavaScript bewerken",
+       "grant-editmycssjs": "Eigen CSS en JavaScript bewerken",
        "grant-editmyoptions": "Eigen voorkeuren instellen",
-       "grant-editmywatchlist": "Uw eigen volglijst bewerken",
+       "grant-editmywatchlist": "Eigen volglijst bewerken",
        "grant-editpage": "Bestaande pagina's bewerken",
        "grant-editprotected": "Beveiligde pagina's bewerken",
        "grant-highvolume": "Veel bewerkingen in korte tijd maken",
        "grant-uploadfile": "Nieuwe bestanden uploaden",
        "grant-basic": "Basisrechten",
        "grant-viewdeleted": "Verwijderde bestanden en pagina's bekijken",
-       "grant-viewmywatchlist": "Uw volglijst bekijken",
+       "grant-viewmywatchlist": "Eigen volglijst bekijken",
        "newuserlogpage": "Logboek nieuwe gebruikers",
        "newuserlogpagetext": "Hieronder staan de nieuw ingeschreven gebruikers",
        "rightslog": "Gebruikersrechtenlogboek",
        "uploaded-script-svg": "Scriptbaar element \"$1\" in het geüploade SVG-bestand gevonden.",
        "uploaded-hostile-svg": "Onveilige CSS in het \"style\"-element van het geüploade SVG-bestand gevonden.",
        "uploaded-event-handler-on-svg": "Het instellen van de event-handlereigenschappen <code>$1=\"$2\"</code> is niet toegestaan in SVG-bestanden.",
-       "uploaded-href-attribute-svg": "href-eigenschappen <code>&lt;$1 $2=\"$3\"&gt;</code> met niet-lokaal doel (bijvoorbeeld http://, javascript:, enz.) zijn niet toegestaan in SVG-bestanden.",
        "uploaded-href-unsafe-target-svg": "href met onveilig doel <code>&lt;$1 $2=\"$3\"&gt;</code> in het geüploade SVG-bestand gevonden.",
        "uploaded-animate-svg": "\"animate\"-label gevonden in het geüploade svg-bestand die href zou kunnen veranderen, met behulp van het \"from\"-attribuut <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Het instellen van de event-handlereigenschappen is geblokkeerd, <code>&lt;$1 $2=\"$3\"&gt;</code> gevonden in het geüploade SVG-bestand.",
        "upload-too-many-redirects": "De URL bevatte te veel doorverwijzingen",
        "upload-http-error": "Er is een HTTP-fout opgetreden: $1",
        "upload-copy-upload-invalid-domain": "Uploaden per kopie is niet beschikbaar vanuit dit domein.",
+       "upload-foreign-cant-upload": "Deze wiki is niet geconfigureerd om bestanden te uploaden naar de buiten deze wiki geplaatste file repository.",
        "upload-dialog-title": "Bestand uploaden",
        "upload-dialog-button-cancel": "Annuleren",
        "upload-dialog-button-done": "Afgerond",
        "upload-form-label-infoform-name": "Naam",
        "upload-form-label-infoform-name-tooltip": "Een korte beschrijvende naam voor het bestand, die als de bestandsnaam wordt gebruikt. U kunt platte tekst met spaties gebruiken. Neem de bestandsextensie niet op.",
        "upload-form-label-infoform-description": "Beschrijving",
+       "upload-form-label-infoform-description-tooltip": "Beschrijf kort alles wat voor het werk van belang is.\nBenoem voor een afbeelding de belangrijkste zaken die zijn afgebeeld, alsmede de plaats of de gelegenheid.",
        "upload-form-label-usage-title": "Gebruik",
        "upload-form-label-usage-filename": "Bestandsnaam",
        "foreign-structured-upload-form-label-own-work": "Dit is mijn eigen werk",
        "wlshowlast": "Laatste $1 uur, $2 dagen bekijken",
        "watchlist-hide": "Verbergen",
        "watchlist-submit": "Weergeven",
-       "wlshowtime": "Periode om te weergeven:",
+       "wlshowtime": "Weer te geven periode:",
        "wlshowhideminor": "kleine bewerkingen",
        "wlshowhidebots": "bots",
        "wlshowhideliu": "geregistreerde gebruikers",
        "lockedbyandtime": "(door $1 om $3 op $2)",
        "move-page": "\"$1\" hernoemen",
        "move-page-legend": "Pagina hernoemen",
-       "movepagetext": "Door middel van het onderstaande formulier kunt u een pagina hernoemen.\nDe geschiedenis gaat mee naar de nieuwe pagina.\n* De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\n* Koppelingen naar de oude pagina worden niet aangepast.\n* De pagina's die doorverwijzen naar de oorspronkelijke paginanaam worden automatisch bijgewerkt.\nAls u dit niet wenst, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\n\n'''Waarschuwing!'''\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.",
-       "movepagetext-noredirectfixer": "Door middel van het onderstaande formulier kunt u een pagina en alle bijbehorende oude versies hernoemen.\nDe oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\nControleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan '''alleen''' hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\nU kunt dus een pagina die per ongeluk is hernoemd terug hernoemen en u kunt een bestaande pagina niet overschrijven. \n\n'''Waarschuwing!'''\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.",
+       "movepagetext": "Door middel van het onderstaande formulier kunt u een pagina hernoemen.\nDe geschiedenis gaat mee naar de nieuwe pagina.\n* De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\n* Koppelingen naar de oude pagina worden niet aangepast.\n* De pagina's die doorverwijzen naar de oorspronkelijke paginanaam worden automatisch bijgewerkt.\nAls u dit niet wenst, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan <strong>alleen</strong> hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\n\n<strong>Opmerking:</strong>\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.",
+       "movepagetext-noredirectfixer": "Door middel van het onderstaande formulier kunt u een pagina en alle bijbehorende oude versies hernoemen.\nDe oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\nControleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan <strong>alleen</strong> hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\nU kunt dus een pagina die per ongeluk is hernoemd terug hernoemen en u kunt een bestaande pagina niet overschrijven. \n\n<strong>Opmerking:</strong>\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.",
        "movepagetalktext": "Als u het onderstaande vinkje selecteert, krijgt de bijbehorende overlegpagina automatisch een andere naam, tenzij de overlegpagina onder de nieuwe naam al bestaat.\n\nIn dit geval moet u de pagina handmatig hernoemen of samenvoegen.",
        "moveuserpage-warning": "'''Waarschuwing:''' u gaat een gebruikerspagina hernoemen. Houd er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
        "movecategorypage-warning": "<strong>Waarschuwing:</strong> U staat op het punt een categoriepagina te hernoemen. Houdt u er rekening mee dat alleen de categoriepagina zelf hernoemd wordt; pagina's in de oude categorie worden <em>niet</em> automatisch naar de nieuwe verplaatst.",
        "version-libraries-license": "Licentie",
        "version-libraries-description": "Beschrijving",
        "version-libraries-authors": "Auteurs",
-       "redirect": "Doorverwijzen op bestandsnaam, gebruikersnummer, paginanummer, of versienummer",
+       "redirect": "Doorverwijzen op bestandsnaam, gebruikers-, pagina-, versie- of logboekregelnummer",
        "redirect-legend": "Doorverwijzen naar een bestand of pagina",
-       "redirect-summary": "Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een paginanummer of versienummer wordt opgegeven) of een gebruikerspagina (als een gebruikersnummer wordt opgegeven). Gebruik: [[{{#Special:Redirect}}/file/Voorbeeld.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] of [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "Deze speciale pagina verwijst door naar een bestand (als een bestandsnaam wordt opgegeven), een pagina (als een paginanummer of versienummer wordt opgegeven), een gebruikerspagina (als een gebruikersnummer wordt opgegeven) of een logboekregel (als een logboekregel-ID wordt opgegeven). Gebruik: [[{{#Special:Redirect}}/file/Voorbeeld.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]] of [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "OK",
        "redirect-lookup": "Opzoeken:",
        "redirect-value": "Waarde:",
        "redirect-page": "Pagina-ID",
        "redirect-revision": "Paginaversie",
        "redirect-file": "Bestandsnaam",
+       "redirect-logid": "Logboekregel-ID",
        "redirect-not-exists": "Waarde niet gevonden",
        "fileduplicatesearch": "Duplicaatbestanden zoeken",
        "fileduplicatesearch-summary": "Duplicaatbestanden zoeken op basis van de hashwaarde.",
        "logentry-suppress-block": "$1 {{GENDER:$2|heeft}} {{GENDER:$4|$3}} geblokkeerd voor de duur van $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|heeft}} de blokkade voor {{GENDER:$4|$3}} aangepast. Deze vervalt nu op $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|heeft}} $3 geïmporteerd via een bestandsupload",
+       "logentry-import-upload-details": "$1 {{GENDER:$2|heeft}} $3 door middel van een bestandsupload geïmporteerd ($4 {{PLURAL:$4|versie|versies}})",
        "logentry-import-interwiki": "$1 {{GENDER:$2|heeft}} $3 geïmporteerd vanuit een andere wiki",
+       "logentry-import-interwiki-details": "$1 {{GENDER:$2|heeft}} $3 uit $5 geïmporteerd ($4 {{PLURAL:$4|versie|versies}})",
        "logentry-merge-merge": "$1 {{GENDER:$2|heeft}} $3 samengevoegd naar $4 (versies tot en met $5)",
        "logentry-move-move": "$1 {{GENDER:$2|heeft}} pagina $3 hernoemd naar $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|heeft}} de pagina $3 hernoemd naar $4 zonder een doorverwijzing achter te laten",
        "expand_templates_preview_fail_html": "<em>Omdat voor {{SITENAME}} ruwe HTML is ingeschakeld, en er sessiegegevens verloren zijn gegaan, is de voorvertoning verborgen als voorzorgmaatregel tegen JavaScriptaanvallen.</em>\n\n<strong>Als dit een legitieme poging is voor het weergeven van een voorvertoning, probeer het dan opnieuw.</strong>\nAls het dan nog steeds niet werkt, probeer dan [[Special:UserLogout|af te melden]] en opnieuw aan te melden.",
        "expand_templates_preview_fail_html_anon": "<em>Omdat in {{SITENAME}} ruwe HTML is ingeschakeld en u niet bent aangemeld, is de voorvertoning verborgen als voorzorgsmaatregel tegen de JavaScriptaanvallen.</em>\n\n<strong>Als dit een legitieme poging is voor het maken van een voorvertoning, [[Special:UserLogin|meld u dan aan]] en probeer het opnieuw.</strong>",
        "expand_templates_input_missing": "U moet wel iets invullen.",
-       "pagelanguage": "Paginataal kiezen",
+       "pagelanguage": "Paginataal wijzigen",
        "pagelang-name": "Pagina",
        "pagelang-language": "Taal",
        "pagelang-use-default": "Standaard taal gebruiken",
        "pagelang-select-lang": "Taal selecteren",
-       "pagelang-submit": "Verzenden",
+       "pagelang-submit": "Opslaan",
        "right-pagelang": "Paginataal wijzigen",
        "action-pagelang": "paginataal te wijzigen",
        "log-name-pagelang": "Logboek taalwijzigingen",
        "log-description-pagelang": "Dit is een logboek van wijzigingen van de taal van pagina's.",
-       "logentry-pagelang-pagelang": "$1 heeft de taal van de pagina \"$3\" gewijzigd van $4 naar $5.",
+       "logentry-pagelang-pagelang": "$1 heeft de paginataal van $3 {{GENDER:$2|gewijzigd}} van $4 naar $5",
        "default-skin-not-found": "Het standaard uiterlijk voor de wiki, dat is ingesteld in <code dir=\"ltr\">$wgDefaultSkin</code> as <code>$1</code>, is niet beschikbaar.\n\nUw installatie heeft {{PLURAL:$4|het volgende uiterlijk|de volgende uiterlijken}}. Zie [https://www.mediawiki.org/wiki/Manual:Skin_configuration Handboek: uiterlijk instellen] voor meer informatie over hoe u het uiterlijk instelt en een standaard uiterlijk aangeeft.\n\n$2\n\n; Als u MediaWiki zojuist hebt geïnstalleerd:\n: U hebt waarschijnlijk geïnstalleerd via git, or direct vanuit de broncode via een andere methode. Deze melding is verwacht. Installeer één of meer van de [https://www.mediawiki.org/wiki/Category:All_skins beschikbare uiterlijken op mediawiki.org], door:\n:* De [https://www.mediawiki.org/wiki/Download tarball te downloaden], die meerdere uiterlijken en uitbreidingen bevat. U kunt de map <code>skins/</code> daar uit kopiëren;\n:* Het downloaden van tarballs voor uiterlijken van [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org];\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git gebruiken voor het downloaden van uiterlijken].\n: Als u dit doet en u bent MediaWikiontwikkelaar, heeft dit geen invloed op uw gitrepository.\n\n; Als u MediaWiki net hebt bijgewerkt:\n: In MediaWiki 1.24 en nieuwere versies worden geïnstalleerde uiterlijken niet langer automatisch ingeschakeld (zie [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Handboek: uiterlijken automatisch vinden]). U kunt de volgende {{PLURAL:$5|regel|regels}} kopieren naar <code>LocalSettings.php</code> om alle op dit moment geïnstalleerde uiterlijken in te schakelen:\n\n<pre dir=\"ltr\">$3</pre>\n\n; In het geval u zojuist <code>LocalSettings.php</code> hebt aangepast:\n: Controleer de namen van de uiterlijken op spelfouten.",
        "default-skin-not-found-no-skins": "Het standaard uiterlijk voor uw wiki, als aangegeven in <code>$wgDefaultSkin</code> als <code>$1</code>, is niet beschikbaar.\n\nU hebt geen geïnstalleerde uiterlijken.\n\n; Als u MediaWiki zojuist hebt geïnstalleerd:\n: U hebt waarschijnlijk geïnstalleerd via git, or direct vanuit de broncode via een andere methode. Deze melding is verwacht. Sinds MediaWiki 1.24 staan er geen skins meer in de hoofdrepository. Installeer één of meer van de [https://www.mediawiki.org/wiki/Category:All_skins beschikbare uiterlijken op mediawiki.org], door:\n:* De [https://www.mediawiki.org/wiki/Download tarball te downloaden], die meerdere uiterlijken en uitbreidingen bevat. U kunt de map <code>skins/</code> daar uit kopiëren;\n:* Het downloaden van tarballs voor uiterlijken van [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org];\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git gebruiken voor het downloaden van uiterlijken].\n: Als u dit doet en u bent MediaWikiontwikkelaar, heeft dit geen invloed op uw gitrepository. Zie [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skinconfiguratie] voor meer informatie over hoe skins in te schakelen en een standaard te kiezen.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ingeschakeld)",
        "mw-widgets-titleinput-description-new-page": "pagina bestaat nog niet",
        "mw-widgets-titleinput-description-redirect": "doorverwijzing naar $1",
        "api-error-blacklisted": "Kies een andere, beschrijvende naam.",
+       "sessionmanager-tie": "Het is niet mogelijk om meerdere authenticatietypen voor verzoeken te combineren: $1.",
        "sessionprovider-generic": "$1 sessies",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "sessies gebaseerd op cookies",
        "sessionprovider-nocookies": "Cookies kunnen uitgeschakeld zijn. Zorg ervoor dat u cookies hebt ingeschakeld en probeer het opnieuw.",
index d214eec..26e87c0 100644 (file)
        "contributions": "{{GENDER:$1|Brukarbidrag}}",
        "contributions-title": "Bidrag av $1",
        "mycontris": "Bidrag",
+       "anoncontribs": "Bidrag",
        "contribsub2": "For {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Det vart ikkje funne nokon endringar gjorde av denne brukaren.",
        "uctop": "(gjeldande)",
        "javascripttest-pagetext-frameworks": "Vel eitt av dei fylgjande utrøyningsrammeverka: $1",
        "javascripttest-pagetext-skins": "Vel ei drakt som utrøyningane skal køyrast med:",
        "javascripttest-qunit-intro": "Sjå [$1 utrøyningsdokumentasjon] på mediawiki.org.",
-       "tooltip-pt-userpage": "Brukarsida di",
+       "tooltip-pt-userpage": "{{GENDER:|Brukarsida}} di",
        "tooltip-pt-anonuserpage": "Brukarsida for ip-adressa du endrar under",
-       "tooltip-pt-mytalk": "Diskusjonssida di",
+       "tooltip-pt-mytalk": "{{GENDER:|Diskusjonssida}} di",
        "tooltip-pt-anontalk": "Diskusjon om endringar gjorde av denne ip-adressa",
-       "tooltip-pt-preferences": "Innstillingane dine",
+       "tooltip-pt-preferences": "{{GENDER:|Innstillingane}} dine",
        "tooltip-pt-watchlist": "Liste over sidene du overvakar.",
-       "tooltip-pt-mycontris": "Liste over bidraga dine",
+       "tooltip-pt-mycontris": "{{GENDER:|Liste}} over bidraga dine",
        "tooltip-pt-login": "Det er ikkje obligatorisk å logga inn, men medfører mange fordelar.",
        "tooltip-pt-logout": "Logg ut",
        "tooltip-pt-createaccount": "Me oppfordrar til at du oppretter ein konto og loggar inn, men det er ikkje påkravd.",
        "logentry-newusers-create2": "Brukarkontoen $3 vart {{GENDER:$2|oppretta}} av $1",
        "logentry-newusers-byemail": "Brukarkontoen $3 vart {{GENDER:$2|oppretta}} av $1 og passord vart sendt med e-post",
        "logentry-newusers-autocreate": "Brukarkontoen $1 vart {{GENDER:$2|oppretta}} av seg sjølv",
+       "logentry-protect-protect": "$1 {{GENDER:$2|verna}} $3 $4",
        "logentry-rights-rights": "$1 {{GENDER:$2|endra}} gruppemedlemskap for $3 frå $4 til $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|endra}} gruppemedlemskap for $3",
        "logentry-rights-autopromote": "$1 vart automatisk {{GENDER:$2|forfremja}} frå $4 til $5",
index 114e694..cc18bde 100644 (file)
        "scarytranscludefailed-httpstatus": "[Pobranie szablonu dla $1 nie powiodło się: HTTP $2]",
        "scarytranscludetoolong": "[zbyt długi adres URL]",
        "deletedwhileediting": "'''Uwaga!''' Ta strona została usunięta po tym, jak rozpoczął{{GENDER:|eś|aś|eś(‐aś)}} jej edycję!",
-       "confirmrecreate": "{{GENDER:$1|Użytkownik|Użytkowniczka}} [[User:$1|$1]] ([[User talk:$1|dyskusja]]) {{GENDER:$1|usunął|usunęła}} tę stronę po tym, jak rozpocząłeś/rozpoczęłaś jego edycję, podając jako powód usunięcia:\n: <em>$2</em>\nPotwierdź, że na pewno chcesz odtworzyć tę stronę.",
-       "confirmrecreate-noreason": "{{GENDER:$1|Użytkownik|Użytkowniczka}} [[User:$1|$1]] ([[User talk:$1|dyskusja]]) {{GENDER:$1|usunął|usunęła}} tę stronę po tym, jak rozpocząłeś/rozpoczęłaś jego edycję. Potwierdź, że naprawdę chcesz odtworzyć tę stronę.",
+       "confirmrecreate": "{{GENDER:$1|Użytkownik|Użytkowniczka}} [[User:$1|$1]] ([[User talk:$1|dyskusja]]) {{GENDER:$1|usunął|usunęła}} tę stronę po tym, jak rozpocząłeś/rozpoczęłaś jej edycję, podając jako powód usunięcia:\n: <em>$2</em>\nPotwierdź, że na pewno chcesz odtworzyć tę stronę.",
+       "confirmrecreate-noreason": "{{GENDER:$1|Użytkownik|Użytkowniczka}} [[User:$1|$1]] ([[User talk:$1|dyskusja]]) {{GENDER:$1|usunął|usunęła}} tę stronę po tym, jak rozpocząłeś/rozpoczęłaś jej edycję. Potwierdź, że naprawdę chcesz odtworzyć tę stronę.",
        "recreate": "Utwórz powtórnie",
        "confirm_purge_button": "Wyczyść",
        "confirm-purge-top": "Wyczyścić pamięć podręczną dla tej strony?",
index 207f175..0ffcec6 100644 (file)
        "createaccountreason": "Rason:",
        "createacct-reason": "Rason",
        "createacct-reason-ph": "Përchè a crea n'àutr cont",
-       "createacct-captcha": "Contròl ëd sigurëssa",
-       "createacct-imgcaptcha-ph": "Ch'a anserissa ël test ch'a s-ciàira sì-dzora",
        "createacct-submit": "Ch'a crea sò cont",
        "createacct-another-submit": "Creé n'àutr cont",
        "createacct-benefit-heading": "{{SITENAME}} a l'é fàit da 'd gent coma chiel.",
        "passwordreset-emailtext-ip": "Quaidun (a l'é bel fé ch'a sia chiel, da l'adrëssa IP $1) a l'ha ciamà na riampostassion ëd soa ciav për {{SITENAME}} ($4). {{PLURAL:$3|Ël cont utent sì-sota a l'é|Ij cont utent sì-sota a son}} \nassocià a st'adrëssa ëd pòsta eletrònica:\n\n$2\n\n{{PLURAL:$3|Costa ciav provisòria|Coste ciav provisòrie}} a scadran da-sì {{PLURAL:$5|un di|$5 di}}.\nA dovrìa intré ant ël sistema e serne na ciav neuva adess. Se quaidun d'àutr a l'ha fàit costa arcesta, o s'a l'é arcordasse soa ciav original, e a veul pa pi cangela, a peule ignoré ës mëssagi e continué a dovré soa veja ciav.",
        "passwordreset-emailtext-user": "L'utent $1 ansima a {{SITENAME}} a l'ha ciamà na riampostassion ëd soa ciav për {{SITENAME}} ($4). {{PLURAL:$3|Ël cont utent sì-sota a l'é|Ij cont utent sì-sota a son}} associà a st'adrëssa ëd pòsta eletrònica:\n\n$2\n\n{{PLURAL:$3|Costa ciav provisòria|Coste ciav provisòrie}} a scadran da-sì {{PLURAL:$5|un di|$5 di}}.\nA dovrìa intré ant ël sistema e serne na ciav neuva adess. Se quaidun d'àutr a l'ha fàit costa arcesta, o s'a l'é arcordasse soa ciav original, e a veul pa pi cangela, a peul ignoré ës mëssagi e continué a dovré soa veja ciav.",
        "passwordreset-emailelement": "Stranòm: \n$1\n\nCiav provisòria: \n$2",
-       "passwordreset-emailsent": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit spedì.",
+       "passwordreset-emailsentemail": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit spedì.",
        "passwordreset-emailsent-capture": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit mandà, e a l'é mostrà sì-sota.",
        "passwordreset-emailerror-capture": "Un mëssagi ëd riampostassion ëd la ciav a l'é stàit generà, e a l'é smonù sì-sota, ma la spedission a {{GENDER:$2|l'utent}} a l'é falìa: $1",
        "changeemail": "Cangé l'adrëssa ëd pòsta eletrònica",
        "prefs-help-prefershttps": "Costa preferensa a ancaminrà a marcé a soa pròssima conession.",
        "prefswarning-warning": "A l'ha fàit dle modìfiche ai sò gust ch'a son ancor nen ëstàire argistrà.\nS'a chita sa pàgina sensa sgnaché «$1» ij sò gust a saran pa agiorné.",
        "prefs-tabs-navigation-hint": "Astussia: A peul dovré le flece a snistra e a drita për navighé antra le schede ant la lista dle schede.",
-       "email-address-validity-valid": "A smija bon",
-       "email-address-validity-invalid": "A-i é da manca ëd n'adrëssa bon-a!",
        "userrights": "Gestion dij drit dj'utent",
        "userrights-lookup-user": "Gestion dle partìe d'utent",
        "userrights-user-editname": "Che a buta në stranòm:",
        "right-blockemail": "Bloché n'utent da mandé 'd mëssagi an pòsta eletrònica",
        "right-hideuser": "Bloché un nòm utent, stërmandlo al pùblich",
        "right-ipblock-exempt": "Dëscavalché ij blocagi ëd j'IP, ij blocagi automàtich e ij blocagi ëd partìe d'IP",
-       "right-proxyunbannable": "Dëscavalché ij blòch automatich dij servent d'anonimà",
        "right-unblockself": "Dësblochesse da soj",
        "right-protect": "Cambié ij livej ëd protession e modifiché le pàgine protegiùe an cascada",
        "right-editprotected": "Modifiché le pàgine protegiùe con «{{int:protect-level-sysop}}»",
        "uploaded-script-svg": "Element ëscrivìbil «$1» trovà ant l'archivi SVG carià.",
        "uploaded-hostile-svg": "CSS nen sigur trovà ant l'element dë stil ëd n'archivi SVG carià.",
        "uploaded-event-handler-on-svg": "Fissé dj'atribù ëd gestion d'eveniment <code>$1=\"$2\"</code> a l'é nen përmëttù ant j'archivi SVG.",
-       "uploaded-href-attribute-svg": "J'atribù <code>&lt;$1 $2=\"$3\"&gt;</code> con un bërsaj nen local (për esempi http://, javascript:, e via fòrt) a son nen përmëttù ant j'archivi SVG.",
        "uploaded-href-unsafe-target-svg": "href ver un bërsaj nen sigur <code>&lt;$1 $2=\"$3\"&gt;</code> trovà ant l'archivi SVG carià.",
        "uploaded-animate-svg": "Trovà na tichëtta «animate», ch'a podrìa modifiché ël href an dovrand l'atribù «from» <code>&lt;$1 $2=\"$3\"&gt;</code> ant l'archivi SVG carià.",
        "uploaded-setting-event-handler-svg": "Ël posissionament dj'atribù ëd mansé a l'é blocà, <code>&lt;$1 $2=\"$3\"&gt;</code> trovà ant l'archivi SVG carià.",
        "filewasdeleted": "N'archivi con ës nòm-sì a l'é già stàit carià e peui scancelà. Për piasì, che a verìfica $1 anans che carielo n'àutra vira.",
        "filename-bad-prefix": "Ël nòm dl'archivi ch'a l'é dapress a carié as anandia për '''\"$1\"''', ch'a l'é un nòm sensa sust, për sòlit butà-lì n'aotomàtich da le màchine fotogràfiche digitaj, basta ch'a-i në sia un. Për piasì, ch'a-j daga a sò archivi un nòm ch'a disa lòn ch'a l'é.",
        "filename-prefix-blacklist": " #<!-- ch'a lassa sta riga-sì tanme ch'a l'é --> <pre>\n# La sintassi a l'é:\n#   * Tut lòn ch'a-i ven dapress al segn \"#\" fin a la fin dla riga a resta mach un coment\n#   * Na riga nen veujda a la resta un prefiss ëd nòm d'archivi për sòlit dovrà da na chèich màchina fotogràfica digitala\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # chèich sacociàbil\nIMG # genérich\nJD # Jenoptik\nMGP # Pentax\nPICT # vàire marche diferente\n #</pre> <!-- ch'a lassa sta riga-sì tanme ch'a l'é -->",
-       "upload-success-subj": "Carià con sucess",
-       "upload-success-msg": "A l'ha carià da [$2] për da bin. Lòn ch'a l'ha carià a l'é disponìbil ambelessì: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problema a carié",
-       "upload-failure-msg": "A-i é staje un problema con lòn ch'a l'ha carià da [$2]:\n\n$1",
-       "upload-warning-subj": "Avis antramentre ch'as caria",
-       "upload-warning-msg": "A-i era un problema con lòn ch'a l'ha carià da [$2]. A peul artorné al [[Special:Upload/stash/$1|formolari për carié]] për corege ël problema.",
        "upload-proto-error": "Protocòl cioch",
        "upload-proto-error-text": "Për carié da dij servent lontan a venta buté dj'anliure ch'as anandio për <code>http://</code> ò pura <code>ftp://</code>.",
        "upload-file-error": "Eror antern",
        "movenosubpage": "Sta pàgina-sì a l'ha gnun-e sot-pàgine.",
        "movereason": "Rason:",
        "revertmove": "buté torna coma a l'era",
-       "delete_and_move": "Scancelé e tramudé",
        "delete_and_move_text": "==A fa da manca dë scancelé==\n\nL'artìcol ëd destinassion «[[:$1]]» a-i é già. Veul-lo scancelelo për avèj ëd pòst për tramudé l'àutr?",
        "delete_and_move_confirm": "É, scancelé la pàgina",
        "delete_and_move_reason": "Scancelà për liberé ël pòst për tramudé «[[$1]]»",
        "special-characters-title-minus": "segn meno",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
-       "api-error-blacklisted": "Për piasì sern un tìtol diferent, descritiv."
+       "api-error-blacklisted": "Për piasì sern un tìtol diferent, descritiv.",
+       "randomrootpage": "Pàgina root a cas"
 }
index 8a153dd..72b7b3e 100644 (file)
        "october-date": "$1 de outubro",
        "november-date": "$1 de novembro",
        "december-date": "$1 de dezembro",
+       "period-am": "AM",
+       "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Categoria|Categorias}}",
        "category_header": "Páginas na categoria \"$1\"",
        "subcategories": "Subcategorias",
        "laggedslavemode": "'''Aviso:''' A página pode não conter as atualizações mais recentes.",
        "readonly": "Base de dados bloqueada (limitada a leituras)",
        "enterlockreason": "Introduza um motivo para bloquear, incluindo uma estimativa de quando será desbloqueada",
-       "readonlytext": "A base de dados está bloqueada para impedir a inserção e modificação de dados, provavelmente para uma manutenção de rotina, após a qual a situação será normalizada.\n\nO administrador que a bloqueou deu a seguinte explicação: $1",
+       "readonlytext": "A base de dados está atualmente bloqueada para novas entradas e outras modificações, provavelmente para uma manutenção de rotina, após a qual voltará à sua normalidade.\n\nO administrador que a bloqueou deu a seguinte explicação: $1",
        "missing-article": "A base de dados não encontrou o texto de uma página que deveria ter encontrado, com o nome \"$1\" $2.\n\nGeralmente, esta situação ocorre ao clicar numa ligação para diferenças desatualizada ou para o histórico de uma página que tenha sido removida.\n\nSe nenhuma destas situações se verifica, pode ter encontrado um defeito no programa.\nAnote a URL e reporte este incidente a um [[Special:ListUsers/sysop|administrador]], por favor.",
        "missingarticle-rev": "(revisão#: $1)",
        "missingarticle-diff": "(Dif.: $1, $2)",
        "mypreferencesprotected": "Não tem permissão para editar as suas preferências.",
        "ns-specialprotected": "Não é possível editar páginas especiais.",
        "titleprotected": "Este título foi protegido contra criação por [[User:$1|$1]].\nA justificação dada foi \"''$2''\".",
-       "filereadonlyerror": "Não é possível modificar o ficheiro \"$1\" porque o repositório de ficheiros \"$2\" está em modo de leitura.\n\nO administrador que efetuou o bloqueio deu a seguinte explicação: \"$3\".",
+       "filereadonlyerror": "Não é possível modificar o ficheiro \"$1\" porque o repositório de ficheiros \"$2\" está em modo de leitura.\n\nO administrador do sistema que efetuou o bloqueio deu a seguinte explicação: \"$3\".",
        "invalidtitle-knownnamespace": "Título inválido com o domínio \"$2\" e texto \"$3\"",
        "invalidtitle-unknownnamespace": "Título inválido com número de domínio $1 desconhecido e texto \"$2\"",
        "exception-nologin": "Não está autenticado",
        "virus-unknownscanner": "antivírus desconhecido:",
        "logouttext": "<strong>Já não está autenticado.</strong>\n\nTenha em atenção que algumas páginas poderão continuar a ser apresentadas como se ainda estivesse autenticado até limpar a ''cache'' do seu navegador.",
        "cannotlogoutnow-title": "Não é possível encerrar a sessão agora",
+       "cannotlogoutnow-text": "Não pode encerrar a sessão quando utilizar $1.",
        "welcomeuser": "Bem-vindo, $1!",
        "welcomecreation-msg": "A sua conta foi criada.\nNão se esqueça de personalizar as suas [[Special:Preferences|preferências]].",
        "yourname": "Nome de utilizador(a):",
        "userlogin-remembermypassword": "Manter-me autenticado",
        "userlogin-signwithsecure": "Usar uma ligação segura",
        "cannotloginnow-title": "Não é possível iniciar sessão agora",
+       "cannotloginnow-text": "Não pode iniciar a sessão quando utilizar $1.",
        "yourdomainname": "O seu domínio:",
        "password-change-forbidden": "Não pode alterar palavras-passe nesta wiki.",
        "externaldberror": "Ocorreu um erro externo à base de dados durante a autenticação ou não lhe é permitido atualizar a sua conta externa.",
        "changepassword-success": "A sua palavra-passe foi alterada!",
        "changepassword-throttled": "Realizou demasiadas tentativas de início de sessão com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
        "botpasswords": "Palavras-passe de robô",
+       "botpasswords-summary": "As <em>palavras-passe de robô</em> permitem o acesso a uma conta de utilizador através da API sem utilizar as principais credenciais de login da conta. Os direitos de um utilizador, ao iniciar sessão com uma palavra-passe de robô, podem estar limitados.\n\nSe não sabe o que o leva a fazer isso, provavelmente não deveria fazê-lo. Ninguém deve solicitar que gere uma destas palavras-passe e a entregue.",
+       "botpasswords-disabled": "As palavras-passe de robô estão desactivadas.",
+       "botpasswords-no-central-id": "Para utilizar palavras-passe de robô, deve iniciar sessão com uma conta centralizada.",
+       "botpasswords-existing": "Palavras-passe de robô existentes",
        "botpasswords-createnew": "Criar uma nova palavra-passe para robô",
+       "botpasswords-editexisting": "Editar uma palavra-passe de robô existente",
        "botpasswords-label-appid": "Nome do robô:",
        "botpasswords-label-create": "Criar",
        "botpasswords-label-update": "Atualizar",
        "botpasswords-label-cancel": "Cancelar",
        "botpasswords-label-delete": "Eliminar",
        "botpasswords-label-resetpassword": "Redefinir palavra-passe",
+       "botpasswords-label-grants": "Permissões aplicáveis:",
        "botpasswords-label-restrictions": "Restrições de uso:",
+       "botpasswords-label-grants-column": "Concedido",
+       "botpasswords-bad-appid": "O nome do robô \"$1\" não é válido.",
+       "botpasswords-insert-failed": "Falhou ao adicionar o nome do robô \"$1\". Já foi adicionado?",
        "botpasswords-update-failed": "Falha ao atualizar o nome do robô \"$1\". Será que foi eliminado?",
        "botpasswords-created-title": "Criada palavra-passe para o robô",
        "botpasswords-created-body": "A palavra-passe para o robô \"$1\" foi criada com sucesso.",
+       "botpasswords-updated-title": "A palavra-passe de robô foi actualizada.",
+       "botpasswords-updated-body": "A palavra-passe de robô \"$1\" foi actualizada com sucesso.",
+       "botpasswords-deleted-title": "Palavra-passe de robô eliminada",
+       "botpasswords-deleted-body": "A palavra-passe de robô \"$1\" foi eliminada.",
        "botpasswords-newpassword": "A nova palavra-passe para iniciar sessão com <strong>$1</strong> é <strong>$2</strong>. Por favor, recorde-se dela para futura referência.</em>",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider não está disponível.",
        "resetpass_forbidden": "Não é possível alterar palavras-passe",
        "resetpass-no-info": "Precisa de iniciar sessão para aceder diretamente a esta página.",
        "resetpass-submit-loggedin": "Alterar palavra-passe",
        "right-changetags": "Adicionar ou remover [[Special:Tags|etiquetas]] arbitrárias em revisões e entradas de registo individuais",
        "grant-generic": "Pacote de direitos \"$1\"",
        "grant-group-page-interaction": "Interagir com páginas",
-       "grant-group-file-interaction": "Interagir com multimédia",
+       "grant-group-file-interaction": "Interagir com conteúdo multimédia",
        "grant-group-watchlist-interaction": "Interagir com a sua lista de vigiados",
        "grant-group-email": "Enviar correio electrónico",
        "grant-group-high-volume": "Realizar actividades em grande quantidade",
        "action-createpage": "criar páginas",
        "action-createtalk": "criar páginas de discussão",
        "action-createaccount": "criar esta conta de utilizador",
+       "action-autocreateaccount": "criar automaticamente esta conta de utilizador externa",
        "action-history": "ver histórico desta página",
        "action-minoredit": "marcar esta edição como uma edição menor",
        "action-move": "mover esta página",
        "uploaded-script-svg": "Encontrou um elemento scriptable no ficheiro \"$1\" SVG carregado.",
        "uploaded-hostile-svg": "Encontrou-se um código CSS não seguro no elemento de estilo do arquivo SVG carregado.",
        "uploaded-event-handler-on-svg": "Não está permitido configurar atributos controladores de eventos <code>$1=\"$2\"</code> nos arquivos SVG.",
-       "uploaded-href-attribute-svg": "Não se permite que os arquivos SVG contenham os atributos de <code>&lt;$1 $2=\"$3\"&gt;</code> apontando a recursos não locais (p.ex. http://, javascript:,etc)",
        "uploadscriptednamespace": "Este ficheiro SVG contém um domínio que não é permitido \"$1\".",
        "uploadinvalidxml": "Erro detectado na análise do XML do ficheiro carregado.",
        "uploadvirus": "O ficheiro contém um vírus! \nDetalhes: $1",
        "upload-form-label-infoform-description": "Descrição",
        "upload-form-label-usage-title": "Uso",
        "upload-form-label-usage-filename": "Nome do ficheiro",
+       "foreign-structured-upload-form-label-own-work": "Este é minha obra própria",
        "foreign-structured-upload-form-label-infoform-categories": "Categorias",
        "foreign-structured-upload-form-label-infoform-date": "Data",
        "foreign-structured-upload-form-label-own-work-message-local": "Confirmo que estou a carregar este ficheiro segundo as condições de serviço e política de licenças de {{SITENAME}}.",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "Se não é capaz de carregar este ficheiro sob as políticas de {{SITENAME}}, por favor feche esta janela e tente outro método.",
        "foreign-structured-upload-form-label-not-own-work-local-local": "Poderá querer experimentar [[Special:Upload|a página padrão de carregamento]].",
+       "foreign-structured-upload-form-label-own-work-message-default": "Entendo que estou a carregar este ficheiro em um repositório partilhado. Confirmo que estou a fazê-lo cumprindo com os termos de serviço e com as políticas de licenciamento dali.",
+       "foreign-structured-upload-form-label-not-own-work-message-default": "Se não é capaz de carregar este ficheiro sob as políticas do repositório partilhado, por favor feche esta janela e tente outro método.",
+       "foreign-structured-upload-form-label-not-own-work-local-default": "Pode querer tentar utilizar [[Special:Upload|a página de carregamento em {{SITENAME}}]], se este ficheiro puder ser carregado de acordo com suas políticas.",
+       "foreign-structured-upload-form-label-own-work-message-shared": "Confirmo que sou o proprietário dos direitos autorais deste ficheiro, e aceito liberar irrevogavelmente este ficheiro para o Wikimedia Commons nos termos da licença [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Atribuição-CompartilhaIgual 4.0], e concordo com os [https://wikimediafoundation.org/wiki/Terms_of_Use Termos de Utilização].",
+       "foreign-structured-upload-form-label-not-own-work-message-shared": "Se não é o proprietário dos direitos autorais deste ficheiro, ou caso deseje liberá-lo sob uma licença diferente, considere utilizar o [https://commons.wikimedia.org/wiki/Special:UploadWizard Assistente de Envio de Ficheiros do Commons].",
+       "foreign-structured-upload-form-label-not-own-work-local-shared": "Pode querer tentar utilizar [[Special:Upload|a página de carregamento em {{SITENAME}}]], se o sítio aceitar o carregamento deste ficheiro de acordo com suas políticas.",
        "foreign-structured-upload-form-2-label-intro": "Obrigado por doar uma imagem para utilização em {{SITENAME}}. Deverá continuar apenas se cumprir algumas condições:",
+       "foreign-structured-upload-form-2-label-ownwork": "Deve ser inteiramente <strong>sua obra própria</strong>, não apenas retirada da Internet",
+       "foreign-structured-upload-form-2-label-noderiv": "Não pode conter <strong>nenhuma obra de qualquer outra pessoa</strong>, ou inspirado por elas",
+       "foreign-structured-upload-form-2-label-useful": "Deve ser <strong>educativo e útil</strong> para ensinar a outros",
+       "foreign-structured-upload-form-2-label-ccbysa": "Deve estar <strong>aceito para publicar para sempre</strong> na Internet nos termos da licença [https://creativecommons.org/licenses/by-sa/4.0/ Creative Commons Atribuição-CompartilhaIgual 4.0]",
+       "foreign-structured-upload-form-2-label-alternative": "Caso nenhum dos itens acima for o correcto, ainda pode ser capaz de carregar este ficheiro ao utilizar o [https://commons.wikimedia.org/wiki/Special:UploadWizard Assistente para Envio de Ficheiros do Commons], desde que esteja disponível sob uma licença livre.",
        "foreign-structured-upload-form-3-label-yes": "Sim",
        "foreign-structured-upload-form-3-label-no": "Não",
        "foreign-structured-upload-form-4-label-bad": "Não pode carregar imagens encontradas num motor de busca ou descarregadas de outros sítios.",
        "wlshowtime": "Período de tempo a mostrar:",
        "wlshowhideminor": "edições menores",
        "wlshowhidebots": "robôs",
-       "wlshowhideliu": "usuários registrados",
-       "wlshowhideanons": "usuários anônimos",
+       "wlshowhideliu": "utilizadores registados",
+       "wlshowhideanons": "utilizadores anónimos",
        "wlshowhidepatr": "edições patrulhadas",
        "wlshowhidemine": "minhas edições",
        "wlshowhidecategorization": "categorização de páginas",
index 61aaeaa..388ec67 100644 (file)
        "virus-scanfailed": "Used as error message. \"scan\" stands for \"virus scan\". Parameters:\n* $1 - exit code of virus scanner",
        "virus-unknownscanner": "Used as error message. This message is followed by the virus scanner name.",
        "logouttext": "Log out message. Parameters:\n* $1 - (Unused) an URL to [[Special:Userlogin]] containing <code>returnto</code> and <code>returntoquery</code> parameters",
-       "cannotlogoutnow-title": "Error page title shown when logging out is not possible.",
-       "cannotlogoutnow-text": "Error page text shown when logging out is not possible. Parameters:\n* $1 - Session type in use that makes it not possible to log out, from a message like {{msg-mw|sessionprovider-mediawiki-session-cookiesessionprovider}}.",
        "welcomeuser": "Text for a welcome heading that users see after registering a user account.\n\nParameters:\n* $1 - the username of the new user. See [[phab:T44215]]",
        "welcomecreation-msg": "A welcome message users see after registering a user account, following a welcomeuser heading.\n\nParameters:\n* $1 - (Unused) the username of the new user.\n\nReplaces [[MediaWiki:welcomecreation|welcomecreation]] in 1.21wmf5, see [[phab:T44215]]",
        "yourname": "Since 1.22 no longer used in core, but used by some extensions.\n{{Identical|Username}}",
        "remembermypassword": "Used as checkbox label on [[Special:ChangePassword]]. Parameters:\n* $1 - number of days\n{{Identical|Remember my login on this computer}}",
        "userlogin-remembermypassword": "The text for a check box in [[Special:UserLogin]].",
        "userlogin-signwithsecure": "Text of link to HTTPS login form.\n\nSee example: [[Special:UserLogin]]",
-       "cannotloginnow-title": "Error page title shown when logging in is not possible.",
-       "cannotloginnow-text": "Error page text shown when logging in is not possible. Parameters:\n* $1 - Session type in use that makes it not possible to log in, from a message like {{msg-mw|sessionprovider-mediawiki-session-cookiesessionprovider}}.",
        "yourdomainname": "Used as label for listbox.",
        "password-change-forbidden": "Error message shown when an external authentication source does not allow the password to be changed.",
        "externaldberror": "This message is thrown when a valid attempt to change the wiki password for a user fails because of a database error or an error from an external system.",
        "resetpass_submit": "Submit button on [[Special:ChangePassword]]",
        "changepassword-success": "Used in [[Special:ChangePassword]].",
        "changepassword-throttled": "Error message shown at [[Special:ChangePassword]] after the user has tried to login with incorrect password too many times.\n\nThe user has to wait a certain time before trying to log in again.\n\nParameters:\n* $1 - the time to wait before the next login attempt. Automatically formatted using the following duration messages:\n** {{msg-mw|Duration-millennia}}\n** {{msg-mw|Duration-centuries}}\n** {{msg-mw|Duration-decades}}\n** {{msg-mw|Duration-years}}\n** {{msg-mw|Duration-weeks}}\n** {{msg-mw|Duration-days}}\n** {{msg-mw|Duration-hours}}\n** {{msg-mw|Duration-minutes}}\n** {{msg-mw|Duration-seconds}}\n\nThis is a protection against robots trying to find the password by trying lots of them.\nThe number of attempts and waiting time are configured via [[mw:Manual:$wgPasswordAttemptThrottle|$wgPasswordAttemptThrottle]].\nThis message is used in html.\n\nSee also:\n* {{msg-mw|Changeemail-throttled}}",
-       "botpasswords": "The name of the special page [[Special:BotPasswords]].",
-       "botpasswords-summary": "Explanatory text shown at the top of [[Special:BotPasswords]].",
-       "botpasswords-disabled": "Error message displayed when bot passwords are not enabled (<code>$wgEnableBotPasswords = false</code>).",
-       "botpasswords-no-central-id": "Error message displayed when the current user does not have a central ID (e.g. they're not logged in or not attached in something like CentralAuth).",
-       "botpasswords-existing": "Form section label for the part of the form listing the user's existing bot passwords.",
-       "botpasswords-createnew": "Form section label for the part of the form related to creating a new bot password.",
-       "botpasswords-editexisting": "Form section label for the part of the form related to editing an existing bot password.",
-       "botpasswords-label-appid": "Form field label for the \"bot name\", internally known as the \"application ID\".",
-       "botpasswords-label-create": "Button label for the button to create a new bot password.\n{{Identical|Create}}",
-       "botpasswords-label-update": "Button label for the button to save changes to a bot password.\n{{Identical|Update}}",
-       "botpasswords-label-cancel": "Button label for a button to cancel the creation or edit of a bot password.\n{{Identical|Cancel}}",
-       "botpasswords-label-delete": "Button label for the button to delete a bot password.\n{{Identical|Delete}}",
-       "botpasswords-label-resetpassword": "Label for the checkbox to reset the actual password for the current bot password.",
-       "botpasswords-label-grants": "Label for the checkmatrix for selecting grants allowed when the bot password is used.",
-       "botpasswords-help-grants": "Help text for the grant selection checkmatrix.",
-       "botpasswords-label-restrictions": "Label for the textarea field in which JSON defining access restrictions (e.g. which IP address ranges are allowed) is entered.",
-       "botpasswords-label-grants-column": "Label for the checkbox column on the checkmatrix for selecting grants allowed when the bot password is used.",
-       "botpasswords-bad-appid": "Used as an error message when an invalid \"bot name\" is supplied on [[Special:BotPasswords]]. Parameters:\n* $1 - The rejected bot name.",
-       "botpasswords-insert-failed": "Error message when saving a new bot password failed. It's likely that the failure was because the user resubmitted the form after a previous successful save. Parameters:\n* $1 - Bot name",
-       "botpasswords-update-failed": "Error message when saving changes to an existing bot password failed. It's likely that the failure was because the user deleted the bot password in another browser window. Parameters:\n* $1 - Bot name",
-       "botpasswords-created-title": "Title of the success page when a new bot password is created.",
-       "botpasswords-created-body": "Success message when a new bot password is created. Parameters:\n* $1 - Bot name",
-       "botpasswords-updated-title": "Title of the success page when a bot password is updated.",
-       "botpasswords-updated-body": "Success message when a bot password is updated. Parameters:\n* $1 - Bot name",
-       "botpasswords-deleted-title": "Title of the success page when a bot password is deleted.",
-       "botpasswords-deleted-body": "Success message when a bot password is deleted. Parameters:\n* $1 - Bot name",
-       "botpasswords-newpassword": "Success message to display the new password when a bot password is created or updated. Parameters:\n* $1 - User name to be used for login.\n* $2 - Password to be used for login.",
-       "botpasswords-no-provider": "Error message when login is attempted but the BotPasswordsSessionProvider is not included in <code>$wgSessionProviders</code>.",
-       "botpasswords-restriction-failed": "Error message when login is rejected because the configured restrictions were not satisfied.",
-       "botpasswords-invalid-name": "Error message when a username lacking the separator character is passed to BotPassword. Parameters:\n* $1 - The separator character.",
-       "botpasswords-not-exist": "Error message when a username exists but does not a bot password for the given \"bot name\". Parameters:\n* $1 - username\n* $2 - bot name",
        "resetpass_forbidden": "Used as error message in changing password. Maybe the external auth plugin won't allow local password changes.",
        "resetpass-no-info": "Error message for [[Special:ChangePassword]].\n\nParameters:\n* $1 (unused) - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description",
        "resetpass-submit-loggedin": "Button on [[Special:ResetPass]] to submit new password.\n\n{{Identical|Change password}}",
        "right-createpage": "{{doc-right|createpage}}\nBasic right to create pages. The right to edit discussion/talk pages is {{msg-mw|right-createtalk}}.",
        "right-createtalk": "{{doc-right|createtalk}}\nBasic right to create discussion/talk pages. The right to edit other pages is {{msg-mw|right-createpage}}.",
        "right-createaccount": "{{doc-right|createaccount}}\nThe right to [[Special:CreateAccount|create a user account]].",
-       "right-autocreateaccount": "{{doc-right|autocreateaccount}}\nThe right to automatically create an account from an external source (e.g. CentralAuth).",
        "right-minoredit": "{{doc-right|minoredit}}\nThe right to use the \"This is a minor edit\" checkbox. See {{msg-mw|minoredit}} for the message used for that checkbox.",
        "right-move": "{{doc-right|move}}\nThe right to move any page that is not protected from moving.\n{{Identical|Move page}}",
        "right-move-subpages": "{{doc-right|move-subpages}}",
        "action-createpage": "{{Doc-action|createpage}}\n{{Identical|Create page}}",
        "action-createtalk": "{{Doc-action|createtalk}}",
        "action-createaccount": "{{Doc-action|createaccount}}",
-       "action-autocreateaccount": "{{Doc-action|autocreateaccount}}",
        "action-history": "{{Doc-action|history}}",
        "action-minoredit": "{{Doc-action|minoredit}}",
        "action-move": "{{Doc-action|move}}",
        "uploaded-script-svg": "Used as error message when uploading an SVG file that contains scriptable tags (script, handler, stylesheet, iframe).\n\nParameters:\n* $1 - The scriptable tag that blocked the SVG file from uploading.",
        "uploaded-hostile-svg": "Used as error message when uploading an SVG file that contains unsafe CSS.",
        "uploaded-event-handler-on-svg": "Used as error message when uploading an SVG file that contains event-handler attributes.\n\nParameters:\n* $1 - The event-handler attribute that is being modified in the SVG file.\n* $2 - The value that is given to the event-handler attribute.",
-       "uploaded-href-attribute-svg": "Used as error message when uploading an SVG file that contains href attribute with non-local target (like http://, javascript:, etc).\n\nParameters:\n* $1 - The name of the tag containing href attribute.\n* $2 - The attribute \"href\".\n* $3 - The value of the href attribute.",
+       "uploaded-href-attribute-svg": "Used as error message when uploading an SVG file that contains href attribute with disallowed target.\n\nParameters:\n* $1 - The name of the tag containing href attribute.\n* $2 - The attribute \"href\".\n* $3 - The value of the href attribute.",
        "uploaded-href-unsafe-target-svg": "Used as error message when uploading an SVG file that contains href to some unsafe target.\n\nParameters:\n* $1 - The name of the tag containing href attribute.\n* $2 - The attribute \"href\".\n* $3 - The value of the href attribute.",
        "uploaded-animate-svg": "Used as error message when uploading an SVG file that contains the element <animate> that might be changing href.\n\nParameters:\n* $1 - The name of the HTML tag.\n* $2 - The name of the attribute.\n* $3 - The value getting assigned to the attribute.",
        "uploaded-setting-event-handler-svg": "Used as error message when uploading an SVG file that sets the event-handler attribute, using <set> or <animate> tags.\n\nParameters:\n* $1 - The name of the HTML tag.\n* $2 - The name of the attribute.\n* $3 - The value getting assigned to the attribute.",
        "version-hook-subscribedby": "Shown in [[Special:Version]]",
        "version-version": "{{Optional}}\nUsed in [[Special:Version]]. Preceded by the MediaWiki extension name.\n\nParameters:\n* $1 - version number of the extension",
        "version-no-ext-name": "Used in [[Special:Version]], in the rows of the main table when a name for an extension is not provided.",
-       "version-svn-revision": "{{Identical|Revision}}{{optional}}\nUsed in [[Special:Version]], preceeding the Subversion revision numbers of the extensions loaded inside brackets, like this: \"({{int:version-revision}} r012345\"). Parameters:\n* $1 - (Unused) directory revision number or empty string\n* $2 - checkout revision number",
        "version-license": "Used specifically for the MediaWiki software.\n\nUsed as heading in [[Special:Version]].",
        "version-ext-license": "Used in [[Special:Version]].\n\nUsed as label for the link pointing to the extension's license page. e.g. [[Special:Version/License/Maps]]\n{{Identical|License}}",
        "version-ext-colheader-name": "Column header for the name of an extension.\n{{Identical|Extension}}",
        "version-libraries-license": "Column header for the library's license\n{{Identical|License}}",
        "version-libraries-description": "Column header for the library's description\n{{Identical|Description}}",
        "version-libraries-authors": "Column header for the library's authors\n{{Identical|Author}}",
-       "redirect": "{{doc-special|Redirect}}\nThis means \"Redirect by file'''name''', user '''ID''', page '''ID''', or revision ID\".",
+       "redirect": "{{doc-special|Redirect}}\nThis means \"Redirect by file '''name''', user '''ID''', page '''ID''', revision '''ID''', or log '''ID'''\".",
        "redirect-legend": "Legend of fieldset around input box in [[Special:Redirect]]",
        "redirect-text": "Inside fieldset for [[Special:Redirect]]",
        "redirect-summary": "Shown at top of [[Special:Redirect]]",
        "mw-widgets-titleinput-description-new-page": "Description label for a new page in the title input widget.",
        "mw-widgets-titleinput-description-redirect": "Description label for a redirect in the title input widget.",
        "api-error-blacklisted": "Used as error message.\n\nFollowed by the link {{msg-mw|Mwe-upwiz-feedback-blacklist-info-prompt}}.",
-       "sessionmanager-tie": "Used as an error message when multiple session sources are tied in priority.\n\nParameters:\n* $1 - List of dession type descriptions, from messages like {{msg-mw|sessionprovider-mediawiki-session-cookiesessionprovider}}.",
-       "sessionprovider-generic": "Used to create a generic session type description when one isn't provided via the proper message. Should be phrased to make sense when added to a message such as {{msg-mw|cannotloginnow-text}}.\n\nParameters:\n* $1 - PHP classname.",
-       "sessionprovider-mediawiki-session-cookiesessionprovider": "Description of the sessions provided by the CookieSessionProvider class, which use HTTP cookies. Should be phrased to make sense when added to a message such as {{msg-mw|cannotloginnow-text}}.",
-       "sessionprovider-nocookies": "Used to inform the user that sessions may be missing due to lack of cookies.",
        "randomrootpage": "{{doc-special|RandomRootPage}}"
 }
index 71979dd..fd35f68 100644 (file)
        "botpasswords": "Parole roboți",
        "botpasswords-summary": "<em>Parolele de roboți</em> permit accesul la un cont de utilizator prin intermediul API-ului fără utilizarea identificatorilor de conectare principali ai contului. Este posibil ca drepturile de utilizator disponibile după conectarea cu parole de roboți să fie restricționate.\n\nDacă nu știți exact de ce ați recurge la această metodă, probabil ar trebui să nu o faceți. Nimeni nu ar trebui să vă ceară vreodată să generați acest tip de parolă și să le-o furnizați.",
        "botpasswords-disabled": "Parolele de roboți sunt dezactivate.",
+       "botpasswords-existing": "Parole de robot existente",
+       "botpasswords-label-restrictions": "Restricții de utilizare:",
        "resetpass_forbidden": "Parolele nu pot fi schimbate.",
        "resetpass-no-info": "Trebuie să fiți autentificat pentru a accesa această pagină direct.",
        "resetpass-submit-loggedin": "Modifică parola",
        "userrights": "Administrare permisiuni de utilizator",
        "userrights-lookup-user": "Administrare grupuri de utilizatori",
        "userrights-user-editname": "Introduceți un nume de utilizator:",
-       "editusergroup": "Modificare grup de utilizatori",
+       "editusergroup": "Modificare grup de {{GENDER:$1|utilizatori}}",
        "editinguser": "Modificarea permisiunilor de {{GENDER:$1|utilizator}} pentru <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Modificare grup de utilizatori",
-       "saveusergroups": "Salvează grupul de utilizatori",
+       "saveusergroups": "Salvează grupul de {{GENDER:$1|utilizatori}}",
        "userrights-groupsmember": "Membru al:",
        "userrights-groupsmember-auto": "Membru, implicit, al:",
        "userrights-groups-help": "Puteți schimba grupul căruia îi aparține utilizatorul:\n*Căsuța bifată înseamnă că utilizatorul aparține grupului respectiv.\n*Căsuța nebifată înseamnă că utilizatorul nu aparține grupului respectiv.\n*Steluța (*) indică faptul că utilizatorul nu poate fi eliminat din grup odată adăugat, sau invers.",
        "right-managechangetags": "Creează și șterge [[Special:Tags|etichete]] din baza de date",
        "right-applychangetags": "Aplică [[Special:Tags|etichete]] asociate modificărilor unui utilizator",
        "right-changetags": "Adaugă și înlătură [[Special:Tags|etichete]] arbitrare din versiuni și intrări de jurnal individuale",
+       "grant-basic": "Drepturi de bază",
        "newuserlogpage": "Jurnal utilizatori noi",
        "newuserlogpagetext": "Acesta este jurnalul creărilor conturilor de utilizator.",
        "rightslog": "Jurnal permisiuni de utilizator",
        "uploaded-script-svg": "S-a găsit elementul „$1” scriptabil în fișierul SVG încărcat.",
        "uploaded-hostile-svg": "S-a descoperit CSS vulnerabil în elementul de stil al fișierului SVG încărcat.",
        "uploaded-event-handler-on-svg": "Setarea atributelor <code>$1=„$2”</code> de gestionare a evenimentului nu este permisă pentru fișierele SVG.",
-       "uploaded-href-attribute-svg": "Atributele href <code>&lt;$1 $2=„$3”&gt;</code> cu alte destinații decât cele locale (de ex. http://, javascript: etc.) nu sunt permise în fișierele SVG.",
        "uploaded-href-unsafe-target-svg": "S-a găsit href către o destinație nesigură <code>&lt;$1 $2=„$3”&gt;</code> în fișierul SVG încărcat.",
        "uploaded-animate-svg": "S-a găsit în fișierul SVG încărcat eticheta „animate” care ar putea modifica valoarea href folosind atributul „from” <code>&lt;$1 $2=„$3”&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Setarea atributelor de gestionare a evenimentului nu este permisă; s-a găsit <code>&lt;$1 $2=„$3”&gt;</code> în fișierul SVG încărcat.",
        "log-title-wildcard": "Caută titluri care încep cu acest text",
        "showhideselectedlogentries": "Arată/ascunde intrările selectate din jurnal",
        "log-edit-tags": "Modifică etichetele intrărilor de jurnal selectate",
+       "checkbox-select": "Selectare: $1",
+       "checkbox-all": "Toate",
+       "checkbox-none": "Niciuna",
+       "checkbox-invert": "Inversează",
        "allpages": "Toate paginile",
        "nextpage": "Pagina următoare ($1)",
        "prevpage": "Pagina anterioară ($1)",
        "listgrouprights-namespaceprotection-header": "Restricții de spațiu de nume",
        "listgrouprights-namespaceprotection-namespace": "Spațiu de nume",
        "listgrouprights-namespaceprotection-restrictedto": "Drept(uri) care permit(e) utilizatorului modificări",
+       "listgrants": "Permisiuni",
+       "listgrants-grant": "Permisiune",
+       "listgrants-rights": "Drepturi",
        "trackingcategories": "Categorii de urmărire",
        "trackingcategories-summary": "Această pagină conține categorii de urmărire care sunt populate în mod automat de către software-ul MediaWiki. Numele acestora se poate schimba modificând mesajele de sistem relevante din spațiul de nume {{ns:8}}.",
        "trackingcategories-msg": "Categorie de urmărire",
        "wlheader-showupdated": "Paginile care au fost modificate după ultima dumneavoastră vizită sunt afișate '''îngroșat'''.",
        "wlnote": "Mai jos se află {{PLURAL:$1|ultima schimbare|ultimele <strong>$1</strong> schimbări|ultimele <strong>$1</strong> de schimbări}} din {{PLURAL:$2|ultima oră|ultimele <strong>$2</strong> ore|ultimele <strong>$2</strong> de ore}}, așa cum era situația la $3, $4.",
        "wlshowlast": "Arată ultimele $1 ore $2 zile",
-       "watchlistall2": "toate",
        "watchlist-hide": "Ascunde",
        "watchlist-submit": "Afișează",
        "wlshowtime": "Perioada de timp de afișat:",
        "block-log-flags-hiddenname": "nume de utilizator ascuns",
        "range_block_disabled": "Abilitatea dezvoltatorilor de a bloca serii de adrese este dezactivată.",
        "ipb_expiry_invalid": "Dată de expirare invalidă.",
+       "ipb_expiry_old": "Timpul de expirare este din trecut.",
        "ipb_expiry_temp": "Blocarea numelor de utilizator ascunse trebuie să fie permanentă.",
        "ipb_hide_invalid": "Imposibil de suprimat acest cont; acesta are mai mult de {{PLURAL:$1|o modificare|$1 modificări|$1 de modificări}}.",
        "ipb_already_blocked": "„$1” este deja blocat",
        "movenosubpage": "Această pagină nu are subpagini.",
        "movereason": "Motiv:",
        "revertmove": "revenire",
-       "delete_and_move_text": "==Ștergere necesară==\n\nPagina destinație „[[:$1]]” există deja. Doriți să o ștergeți pentru a face loc redenumirii?",
+       "delete_and_move_text": "Pagina destinație „[[:$1]]” există deja. Doriți să o ștergeți pentru a face loc redenumirii?",
        "delete_and_move_confirm": "Da, șterge pagina.",
        "delete_and_move_reason": "Șters pentru a face loc redenumirii paginii „[[$1]]”",
        "selfmove": "Titlul sursei și al destinației este aceleași; nu puteți redenumi o pagină peste ea însăși.",
        "move-leave-redirect": "Lasă în urmă o redirecționare",
        "protectedpagemovewarning": "'''Atenție:''' această pagină a fost protejată astfel încât poate fi redenumită doar de către administratori.\nUltima intrare în jurnal este afișată mai jos pentru referință:",
        "semiprotectedpagemovewarning": "'''Observație: această pagină a fost protejată, putând fi redenumiră doar de către utilizatorii înregistrați.'''\nUltima intrare în jurnal este afișată mai jos pentru referință:",
-       "move-over-sharedrepo": "== Fișierul există ==\n[[:$1]] există deja într-un depozit partajat. Redenumirea fișierului la acest titlu va suprascrie fișierul partajat și îl va face inaccesibil.",
+       "move-over-sharedrepo": "[[:$1]] există deja într-un depozit partajat. Redenumirea fișierului la acest titlu va suprascrie fișierul partajat și îl va face inaccesibil.",
        "file-exists-sharedrepo": "Numele ales al fișierului este deja în utilizare într-un depozit împărțit.\nAlegeți un alt nume.",
        "export": "Exportare pagini",
        "exporttext": "Puteți exporta textul și istoricul unei pagini anume sau ale unui grup de pagini în XML.\nAcesta poate fi apoi importate în alt wiki care rulează software MediaWiki prin [[Special:Import|pagina de importare]].\n\nPentru a exporta, introduceți titlurile în căsuța de mai jos, unul pe linie, și alegeți dacă doriți să exportați doar această versiune sau și cele mai vechi, cu istoricul lor, sau versiunea curentă cu informații despre ultima modificare.\n\nÎn al doilea caz puteți folosi o legătură, de exemplu [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] pentru pagina „[[{{MediaWiki:Mainpage}}]]”.",
        "siteuser": "Utilizator {{SITENAME}} $1",
        "anonuser": "utlizator anonim $1 al {{SITENAME}}",
        "lastmodifiedatby": "Pagina a fost modificată pe $1, la $2 de către $3.",
-       "othercontribs": "Bazat pe munca lui $1.",
+       "othercontribs": "Bazat pe munca următorilor: $1.",
        "others": "alții",
-       "siteusers": "{{PLURAL:$2|Utilizator|Utilizatori}} {{SITENAME}} $1",
+       "siteusers": "{{PLURAL:$2|utilizator|utilizatori}} de la {{SITENAME}} $1",
        "anonusers": "{{PLURAL:$2|utilizator anonim|utilizatori anonimi}} $1 {{PLURAL:$2|al|ai}} {{SITENAME}}",
        "creditspage": "Credențiale",
        "nocredits": "Nu există credențiale disponibile pentru această pagină.",
        "pageinfo-category-files": "Număr de fișiere",
        "markaspatrolleddiff": "Marchează pagina ca verificată",
        "markaspatrolledtext": "Marchează această pagină ca verificată",
+       "markaspatrolledtext-file": "Marchează această versiune a fișierului ca verificată",
        "markedaspatrolled": "Pagină nouă verificată",
        "markedaspatrolledtext": "Versiunea selectată a paginii [[:$1]] a fost marcată ca verificată.",
        "rcpatroldisabled": "Opțiunea de verificare a modificărilor recente este dezactivată",
        "newimages-legend": "Filtru",
        "newimages-label": "Numele fișierului (sau parte din el):",
        "newimages-showbots": "Arată încărcările roboților",
+       "newimages-hidepatrolled": "Ascunde încărcările patrulate",
        "noimages": "Nimic de văzut.",
        "ilsubmit": "Caută",
        "bydate": "după dată",
        "scarytranscludefailed-httpstatus": "[Șiretlicul formatului a dat greș pentru $1: HTTP $2]",
        "scarytranscludetoolong": "[URL-ul este prea lung]",
        "deletedwhileediting": "'''Atenție''': Această pagină a fost ștearsă după ce ați început s-o modificați!",
-       "confirmrecreate": "Utilizatorul [[User:$1|$1]] ([[User talk:$1|discuție]]) a șters acest articol după ce ați început să contribuiți la el din motivul:\n: ''$2''\nVă rugăm să confirmați faptul că într-adevăr doriți să recreați acest articol.",
-       "confirmrecreate-noreason": "Utilizatorul [[User:$1|$1]] ([[User talk:$1|discuție]]) a șters această pagină după ce dumneavoastră ați început să o modificați. Vă rugăm să confirmați faptul că într-adevăr doriți să recreați această pagină.",
+       "confirmrecreate": "Utilizatorul [[User:$1|$1]] ([[User talk:$1|discuție]]) {{GENDER:$1|a șters}} acest articol după ce ați început să contribuiți la el din motivul:\n: <em>$2</em>\nVă rugăm să confirmați faptul că într-adevăr doriți să recreați acest articol.",
+       "confirmrecreate-noreason": "Utilizatorul [[User:$1|$1]] ([[User talk:$1|discuție]]) {{GENDER:$1|a șters}} această pagină după ce dumneavoastră ați început să o modificați. Vă rugăm să confirmați faptul că într-adevăr doriți să recreați această pagină.",
        "recreate": "Recreează",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Doriți să reîncărcați pagina?",
        "version-libraries-license": "Licență",
        "version-libraries-description": "Descriere",
        "version-libraries-authors": "Autori",
-       "redirect": "Redirecționare după fișier, utilizator, ID-ul paginii sau al versiunii",
+       "redirect": "Redirecționare după fișier, utilizator, ID-ul paginii, al versiunii sau al jurnalului",
        "redirect-legend": "Redirecționare către un fișier sau o pagină",
        "redirect-summary": "Această pagină specială vă redirecționează către un fișier (dat fiind un nume de fișier), o pagină (dat fiind ID-ul unei versiuni sau ID-ul unei pagini) sau o pagină de utilizator (dat fiind un ID numeric al utilizatorului). Utilizare: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] sau [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Du-te",
        "redirect-page": "ID pagină",
        "redirect-revision": "Versiune de pagină",
        "redirect-file": "Nume de fișier",
+       "redirect-logid": "ID jurnal",
        "redirect-not-exists": "Valoarea nu a fot găsită",
        "fileduplicatesearch": "Căutare fișiere duplicate",
        "fileduplicatesearch-summary": "Căutarea fișierelor duplicate bazată pe valorile hash.",
        "expand_templates_preview_fail_html": "<em>Întrucât la {{SITENAME}} este activat HTML brut și a avut loc o pierdere a sesiunii de date, previzualizarea a fost ascunsă ca măsură de precauție împotriva atacurilor prin JavaScript.</em>\n\n<strong>Dacă aceasta este o încercare legitimă de a previzualiza, încercați din nou.</strong>\nDacă nici astfel nu funcționează, încercați să [[Special:UserLogout|închideţi sesiunea]] şi să vă autentificaţi din nou.",
        "expand_templates_preview_fail_html_anon": "<em>Întrucât la {{SITENAME}} este activat HTML brut și nu v-ați autentificat, previzualizarea a fost ascunsă ca măsură de precauție împotriva atacurilor prin JavaScript.</em>\n\n<strong>Dacă aceasta este o încercare legitimă de a previzualiza, [[Special:UserLogin|autentificați-vă]] și încercați din nou.</strong>",
        "expand_templates_input_missing": "Trebuie să furnizați cel puțin un text ca date de intrare.",
-       "pagelanguage": "Selector limbă pagină",
+       "pagelanguage": "Modificare limbă pagină",
        "pagelang-name": "Pagină",
        "pagelang-language": "Limbă",
        "pagelang-use-default": "Folosește limba implicită",
        "action-pagelang": "modificați limba paginii",
        "log-name-pagelang": "Jurnal modificare limbă",
        "log-description-pagelang": "Acesta este un jurnal cu modificări ale limbii paginilor.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a modificat}} limba paginii pentru $3 din $4 în $5.",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a schimbat}} limba pentru $3 din $4 în $5.",
        "default-skin-not-found": "Ups! Aspectul standard pentru wiki, definit în <code dir=\"ltr\">$wgDefaultSkin</code> ca <code>$1</code>, nu este disponibil.\n\nInstalarea dumneavoastră pare să includă {{PLURAL:$4|următorul aspect|următoarele aspecte}}. Vedeți [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configurare aspecte] pentru informații despre cum {{PLURAL:$4|îl|le}} puteți activa și alege pe cel implicit.\n\n$2\n\n; Dacă tocmai ați instalat MediaWiki:\n: Probabil ați instalat folosind git sau direct din codul sursă print-o altă metodă. Acest lucru este normal. Încercați să instalați câteva aspecte din [https://www.mediawiki.org/wiki/Category:All_skins colecția de aspecte de la mediawiki.org]:\n:* Descărcând [https://www.mediawiki.org/wiki/Download instalatorul tarball], care este însoțit de câteva aspecte și extensii. Puteți copia directorul <code>skins/</code> din acesta.\n:* Descărcând arhive tar individuale cu aspecte de la [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Utilizând Git pentru a descărca aspecte].\n: Această operațiune nu ar trebui să interfereze cu depozitul dumnevoastră git dacă sunteți dezvoltator MediaWiki.\n\n; Dacă tocmai ați actualizat MediaWiki:\n: Începând cu MediaWiki 1.24, aspectele instalate nu mai sunt activate în mod automat (vedeți [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual:Autodescoperirea aspectelor]). Puteți copia {{PLURAL:$5|următoarea linie|următoarele linii}} în <code>LocalSettings.php</code> pentru a activa {{PLURAL:$5|aspectul instalat|toate aspectele instalate}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Dacă tocmai ați modificat <code>LocalSettings.php</code>:\n: Verificați numele aspectelor pentru eventuale greșeli.",
        "default-skin-not-found-no-skins": "Ups! Aspectul standard pentru wiki, definit în <code>$wgDefaultSkin</code> ca <code>$1</code>, nu este disponibil.\n\nNu există aspecte instalate\n\n; Dacă tocmai ați instalat sau actualizat MediaWiki:\n: Probabil ați instalat folosind git sau direct din codul sursă print-o altă metodă. Acest lucru este normal. Începând cu MediaWiki 1.24, aspectele nu mai sunt incluse în depozitul principal. Încercați să instalați câteva aspecte din [https://www.mediawiki.org/wiki/Category:All_skins colecția de aspecte de la mediawiki.org]:\n:* Descărcând [https://www.mediawiki.org/wiki/Download instalatorul tarball], care este însoțit de câteva aspecte și extensii. Puteți copia directorul <code>skins/</code> din acesta.\n:* Descărcând arhive tar individuale cu aspecte de la [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Utilizând Git pentru a descărca aspecte].\n: Această operațiune nu ar trebui să interfereze cu depozitul dumneavoastră git dacă sunteți dezvoltator MediaWiki. Vedeți [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual:Configurare aspecte] pentru informații despre cum puteți activa aspecte și alege pe cel implict.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activat)",
        "mw-widgets-titleinput-description-new-page": "pagina nu există încă",
        "mw-widgets-titleinput-description-redirect": "redirecționare către $1",
        "api-error-blacklisted": "Vă rugăm să alegeți un alt titlu, mai descriptiv.",
+       "sessionprovider-generic": "sesiuni $1",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "sesiuni pe bază de module cookie."
 }
index c607569..79fa244 100644 (file)
        "passwordreset-emailtext-ip": "Quacchedune (pò essere tu, da 'u 'ndirizze IP $1) ha richieste 'na mail pe arrecurdarse de le dettaglie d'u cunde sue pe {{SITENAME}} ($4). {{PLURAL:$3|'U cunde utende seguende jè|le cunde utinde seguende sonde}} associate cu st'indirizze e-mail:\n\n$2\n\n{{PLURAL:$3|Sta passuord temboranèe scade|Ste passuord temboranèe scadene}} 'mbrà {{PLURAL:$5|'nu sciurne|$5 sciurne}}.\nTu avissa trasè e scacchià 'na passuord nova. Ce quacchedun'otre ha fatte sta richieste, o ce tu t'è arrecurdate 'a passuord origgenale toje, e non g'a vuè ccu cange cchiù, tu puè ignorà stu messagge e condinuà ausanne 'a passuord vecchie.",
        "passwordreset-emailtext-user": "L'utende $1 sus a {{SITENAME}} ave richieste 'na mail pe arrecurdarse le dettaglie d'u cunde sue pe {{SITENAME}}\n($4). {{PLURAL:$3|'U cunde utende seguende jè|le cunde utinde seguende sonde}} associate cu st'indirizze e-mail:\n\n$2\n\n{{PLURAL:$3|Sta passuord temboranèe scade|Ste passuord temboranèe scadene}}  'mbrà {{PLURAL:$5|'nu sciurne|$5 sciurne}}.\nTu avissa trasè e scacchià 'na passuord nova. Ce quacchedun'otre ha fatte sta richieste, o ce tu t'è arrecurdate 'a passuord origgenale toje, e non g'a vuè ccu cange cchiù, tu puè ignorà stu messagge e condinuà ausanne 'a passuord vecchie.",
        "passwordreset-emailelement": "Nome utende: \n$1\n\nPassuord temboranèe: \n$2",
-       "passwordreset-emailsent": "Ce quiste jè 'n'e-mail pu cunde tune, allore 'na password azzerate ha state mannate addà.",
+       "passwordreset-emailsentemail": "Ce quiste jè 'n'e-mail pu cunde tune, allore 'na password azzerate ha state mannate addà.",
        "passwordreset-emailsent-capture": "'Na e-mail pe azzeramende d'a passuord ha state mannate, ca jè fatte vedè aqquà sotte.",
        "passwordreset-emailerror-capture": "'Na e-mail de azzeramende d'a passuord ha state generate, ca jè fatte vedè aqquà sotte, ma 'u 'nvie a {{GENDER:$2|l'utende}} ha fallite: $1",
        "changeemail": "Cange o live 'u 'ndirizze e-mail",
        "prefs-help-prefershttps": "Sta preferenze pigghie effette sulamende quanne tràse arrete.",
        "prefswarning-warning": "Tu è fatte cangiaminde sus a le preferenze tune ca non g'onne state angore reggistrate.\nCe tu lasse sta pàgene senze ca è cazzate \"$1\" le preferenze tune non g'avènene aggiornate.",
        "prefs-tabs-navigation-hint": "Conziglie: Tu puè ausà le freccie de destre e sinistre pe navigà 'mbrà le schede de l'elenghe.",
-       "email-address-validity-valid": "L'indirizze e-mail pare valide",
-       "email-address-validity-invalid": "Mitte 'n'indirizze e-mail valide",
        "userrights": "Gestione de le deritte utende",
        "userrights-lookup-user": "Gestisce le gruppe de l'utinde",
        "userrights-user-editname": "Mitte 'nu nome utende:",
        "right-blockemail": "Blocche l'utente a fà mannà le email",
        "right-hideuser": "Bluecche 'nu cunde utende, scunnènnele da 'u pubbliche",
        "right-ipblock-exempt": "Zumbe le blocche de l'IP, auto blocche e le blocche a indervalle",
-       "right-proxyunbannable": "Zumbe automaticamende le condrolle d'u proxy",
        "right-unblockself": "Sbluecche da sule",
        "right-protect": "Cange le levèlle de protezione e cange le pàggene prutette",
        "right-editprotected": "Cange le pàggene prutette (senza protezzione a cascata)",
        "uploaded-script-svg": "Acchiate elemende pe script \"$1\" jndr'à 'u file SVG carecate.",
        "uploaded-hostile-svg": "Acchiate 'nu CSS insecure ndr'à l'elemende de stile d'u file SVG carecate.",
        "uploaded-event-handler-on-svg": "'A 'mbostazione de le attribute de gestione de l'evende <code>$1=\"$2\"</code> non ge se pò ffà cu le file SVG.",
-       "uploaded-href-attribute-svg": "le attribbute href <code>&lt;$1 $2=\"$3\"&gt;</code> cu le destinaziune de fore (p.e. http://, javascript:, etc) non ge se ponne mettere jndr'à le file SVG.",
        "uploaded-href-unsafe-target-svg": "Acchiate 'na destinazione href non secure <code>&lt;$1 $2=\"$3\"&gt;</code> jndr'à 'u file SVG carecate.",
        "uploadscriptednamespace": "Stu file SVG tène 'nu namespace illegale '$1'",
        "uploadinvalidxml": "L'XML jndr'à 'u file carecate non ge pò essere analizzate.",
        "filewasdeleted": "'Nu file ca se chiamave cumme a quidde tue ha state apprime carecate e pò ha state scangellete.\nTu avissa condrollà 'u $1 apprime ca condinue cu 'u carecamende.",
        "filename-bad-prefix": "'U nome d'u file ca tu ste careche accumenze pe '''\"$1\"''', ca normalmende jè 'u nome ca assegne a machena fotografeche e non 'nu nome descrittive d'u file ca vuè ccu careche.\nPe piacere scacchie 'n'otre nome ca jè cchiù descrittive.",
        "filename-prefix-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# 'A sindasse jè 'a seguende:\n#   * Ogneccose da 'u carattere \"#\" 'mbonde 'a fine d'a linèe jè 'nu commende\n#   * Ogne linèe chiene jè 'nu prefisse pe nome de file tipece assignate automaticamende da le fotocamere\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # quacche telefone mobbile\nIMG # generiche\nJD # Jenoptik\nMGP # Pentax\nPICT # misckate\n #</pre> <!-- leave this line exactly as it is -->",
-       "upload-success-subj": "Carecamende sciute apposte",
-       "upload-success-msg": "'U carecamende tue da [$2] ha riuscite. Mò jè disponibbele aqquà: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Careche le probbleme",
-       "upload-failure-msg": "Stave 'nu probbleme cu 'u carecamende tune da [$2]:\n\n$1",
-       "upload-warning-subj": "Avvise de carecamende",
-       "upload-warning-msg": "Stave 'nu probbleme cu 'u carecamende tune da [$2]. Tu puè turnà rrete a 'u [[Special:Upload/stash/$1|module de carecamende]] pe aggiustà stu probbleme.",
        "upload-proto-error": "Protocolle scorrette",
        "upload-proto-error-text": "Le carecaminde remote onne abbesogne de le URL ca accumenzene cu 'a parole <code>http://</code> o <code>ftp://</code>.",
        "upload-file-error": "Errore inderne",
        "wlheader-showupdated": "* Le pàggene ca onne state cangiate da l'urtema visite avènene fatte vedè in '''grascette'''",
        "wlnote": "Aqquà sotte {{PLURAL:$1|ste l'urteme cangiamende|stonne l'urteme <strong>$1</strong> cangiaminde}} jndr'à {{PLURAL:$2|l'urtema ore|l'urteme <strong>$2</strong> ore}}, jndr'à $3, $4.",
        "wlshowlast": "Vide l'urteme $1 ore $2 sciurne",
-       "watchlistall2": "tutte",
        "watchlist-options": "Opzione d'a liste de le pàggene condrollete",
        "watching": "Fà vedè...",
        "unwatching": "No fà vedè...",
        "movenosubpage": "Sta pàgene non ge tène sottopàggene.",
        "movereason": "Raggione:",
        "revertmove": "a smerse",
-       "delete_and_move": "Scangille e spuèste",
        "delete_and_move_text": "== Scangellazzione richieste ==\n'A pàgene de destinazione \"[[:$1]]\" esiste già.\nTu à vuè ccu scangille o vuè ccù iacchie 'nu mode pe spustarle?",
        "delete_and_move_confirm": "Sine, scangille 'a pàggene",
        "delete_and_move_reason": "'U scangellamende avène fatte pe spustà da \"[[$1]]\"",
        "version-hook-subscribedby": "Sottoscritte da",
        "version-version": "($1)",
        "version-no-ext-name": "[nisciune nome]",
-       "version-svn-revision": "(r$2)",
        "version-license": "Licenze",
        "version-ext-license": "Licenze",
        "version-ext-colheader-name": "Estenzione",
        "mw-widgets-dateinput-no-date": "Nisciune date scacchiate",
        "mw-widgets-titleinput-description-new-page": "'a pàgene non g'esiste angore",
        "mw-widgets-titleinput-description-redirect": "redirezionate sus a $1",
-       "api-error-blacklisted": "Pe piacere scacchie 'nu titole diverse, descrittive."
+       "api-error-blacklisted": "Pe piacere scacchie 'nu titole diverse, descrittive.",
+       "randomrootpage": "Pàgene prengepàle a uecchije"
 }
index 87c383d..570efb3 100644 (file)
@@ -87,7 +87,8 @@
                        "INS Pirat",
                        "Краснорядцева Елена",
                        "Frhdkazan",
-                       "Ядерный Трамвай"
+                       "Ядерный Трамвай",
+                       "Исмаил Садуев"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "uploaded-script-svg": "Найден небезопасный элемент с поддержкой сценариев «$1» в загруженном SVG-файле.",
        "uploaded-hostile-svg": "Найден небезопасный CSS-код в элементе стиля загруженного SVG-файла.",
        "uploaded-event-handler-on-svg": "Установка атрибутов обработчика событий <code>$1=\"$2\"</code> не разрешено для SVG-файлов.",
-       "uploaded-href-attribute-svg": "В SVG-файлах не допускаются href-атрибуты <code>&lt;$1 $2=\"$3\"&gt;</code> с нелокальной целью (т.е. http://, javascript:, и пр.).",
        "uploaded-href-unsafe-target-svg": "В загруженном SVG-файле найдена ссылка на небезопасную цель <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "Найден тег «animate», который может изменять ссылку с помощью «from»-атрибута <code>&lt;$1 $2=\"$3\"&gt;</code> в загруженном SVG-файле.",
        "uploaded-setting-event-handler-svg": "Установка атрибутов обработчика событий заблокирована, в загруженном SVG-файле найден код <code>&lt;$1 $2=\"$3\"&gt;</code>.",
index 2a53b49..be77fd6 100644 (file)
@@ -48,6 +48,7 @@
        "tog-watchlisthidebots": "Кэтээн көрүү тиһигэр робот уларытыытын көрдөрүмэ",
        "tog-watchlisthideminor": "Кыра уларытыылары кэтээмэ",
        "tog-watchlisthideliu": "Бэлиэтэммит кыттааччылар уларытыыларын кэтиир тиһиккэ көрдөрүмэ",
+       "tog-watchlistreloadautomatically": "Сиидэ уларыйда да кэтээһин тиһилигин саҥардан ис(JavaScript баар буолуохтаах)",
        "tog-watchlisthideanons": "Ааттарын эппэтэх кыттааччылар уларытыыларын кэтээһин тиһигэр көрдөрүмэ",
        "tog-watchlisthidepatrolled": "Ботурууллааччы көрбүт көннөрүүтүн кэтээһин испииһэгэр көрдөрүмэ",
        "tog-watchlisthidecategorization": "Сирэй категорияларын көрдөрүмэ",
        "october-date": "Алтынньы $1",
        "november-date": "Сэтинньи $1",
        "december-date": "Ахсынньы $1",
+       "period-am": "ОИ",
+       "period-pm": "ОК",
        "pagecategories": "{{PLURAL:$1|Категория|Категориялар}}",
        "category_header": "\"$1\" категория ыстатыйалара",
        "subcategories": "Субкатегориялар",
        "viewsourceold": "исходнигын көрүү",
        "editlink": "көннөрөргө",
        "viewsourcelink": "исходнигын көрүү",
-       "editsectionhint": "$1 Ñ\81екÑ\86иÑ\8fнÑ\8b уларыт",
+       "editsectionhint": "$1 Ñ\81иÑ\8dкÑ\81ийÑ\8dни уларыт",
        "toc": "Ис хоһооно",
        "showtoc": "көрдөр",
        "hidetoc": "көрдөрүмэ",
        "resetpass_submit": "Киирии тылы уларыт уонна киир",
        "changepassword-success": "Киирии тылыҥ этэҥҥэ уларыйда!",
        "changepassword-throttled": "Ааккын аһара элбэхтик билиһиннэрэ сатаатыҥ.\nБука диэн $1 буолан баран өссө киирэн көрөөр.",
+       "botpasswords-createnew": "Оруобат саҥа аһарыгын оҥор",
+       "botpasswords-label-appid": "Оруобат аата:",
+       "botpasswords-label-create": "Оҥоруу",
+       "botpasswords-label-update": "Саҥарт",
+       "botpasswords-label-cancel": "Бигэргэтимэ",
+       "botpasswords-label-delete": "Сот",
+       "botpasswords-label-resetpassword": "Аһарыгы саҥаттан",
        "resetpass_forbidden": "Киирии тылы уларытар сатаммат",
        "resetpass-no-info": "Ааккын билиһиннэрдэххинэ эрэ бу сирэйгэ быһа тиийиэххин сөп.",
        "resetpass-submit-loggedin": "Киирии тылы уларытыы",
        "passwordreset-emailtext-ip": "Ким эрэ (баҕар эн буолуо, бу IP-ттан $1)  {{SITENAME}} ($4) бырайыакка киирии тылы уларытар туһунан ыйытык биэрбит.\nБу электрон аадырыһы кытта бу {{PLURAL:$3|аат ситимнээх|ааттар ситимнээхтэр}}:\n\n$2\n\nБу быстах кэмҥэ аналлаах {{PLURAL:$3|киирии тыл|кирии тыллар}} {{PLURAL:$5|биир күн үлэлиэҕэ|$5 күн үлэлиэхтэрэ}}.\nЭн тиһиликкэ ааккын этэн саҥа киирии тылы киллэриэхтээххин.\nӨскө бу ыйытыгы ыыппатах буоллаххына, эбэтэр урукку киирии тылгын өйдөөн кэлбит буоллаххына \nбу биллэриини ааххайыа суоххун сөп.\nОччоҕо урукку киирии тылыҥ оннунан хаалыа.",
        "passwordreset-emailtext-user": "$1 диэн кыттааччы  {{SITENAME}} ($4) бырайыакка киирии тылгын уларытар туһунан ыйытык ыыппыт.\nБу электрон аадырыһы кытта бу {{PLURAL:$3|аат ситимнээх|ааттар ситимнээхтэр}}\n\n$2\n\nБу быстах кэмҥэ аналлаах {{PLURAL:$3|киирии тыл|кирии тыллар}} {{PLURAL:$5|биир күн үлэлиэҕэ|$5 күн үлэлиэхтэрэ}}.\nЭн тиһиликкэ ааккын этэн саҥа киирии тылы киллэриэхтээххин.\nӨскө бу ыйытыгы ыыппатах буоллаххына, эбэтэр урукку киирии тылгын өйдөөн кэлбит буоллаххына \nбу биллэриини ааххайыа суоххун сөп.\nОччоҕо урукку киирии тылыҥ оннунан хаалыа.",
        "passwordreset-emailelement": "Кыттааччы: \n$1\n\nБыстах киирии тыл: \n$2",
-       "passwordreset-emailsent": "Өскө ааккар баайыллыбыт аадырыһы суруйбут буоллаххына, аһарык тылы уларытар туһунан сурук онно барыа.",
+       "passwordreset-emailsentemail": "Өскө ааккар баайыллыбыт аадырыһы суруйбут буоллаххына, аһарык тылы уларытар туһунан сурук онно барыа.",
        "passwordreset-emailsent-capture": "Киирии тылы уларытар туһунан сурук аллара эмиэ көрдөрүлүннэ.",
        "passwordreset-emailerror-capture": "Манна киирии тылы уларытар туһунан сурук көрдөрүлүннэ. Ол эрэн сурук бу төрүөттэн $2 кыттааччыга сатаан барбата: $1",
        "changeemail": "Аадырыһы уларытыы уонна сотуу",
        "prefs-help-prefershttps": "Аныгыскы киириигэр үлэлиир буолуо.",
        "prefswarning-warning": "Туруорууларгын уларыппыккын ол эрэн бигэргэппэтэххин.\nБу сирэйтэн «$1» баттамы баттаабакка таҕытаххына, барыта уруккутунан хаалыа.",
        "prefs-tabs-navigation-hint": "Сүбэ: Көмпүүтэриҥ клаватууратын стрелкаларын туһанан кыбытыктан кыбытыкка көһүөххүн сөп.",
-       "email-address-validity-valid": "Сөп курдук көстөр",
-       "email-address-validity-invalid": "Алҕаһа суох аадырыс ирдэнэр",
        "userrights": "Кыттааччылар бырааптарын салайыы",
        "userrights-lookup-user": "Кыттаачылар бөлөхтөрүн салайыы",
        "userrights-user-editname": "Кыттааччы аата:",
        "right-blockemail": "Эл. суругу ыытары бобуу",
        "right-hideuser": "Кыттааччы аатын бобуу уонна кистээһин",
        "right-ipblock-exempt": "IP хааччахтааһынын, аптамаатынан уонна диапазоннары хааччахтааһыны тумнуу",
-       "right-proxyunbannable": "Прокси аптааматынан хааччахтааһынын тумнуу",
        "right-unblockself": "Хааччаҕы бэйэ устуута",
        "right-protect": "Сирэйдэр көмүскэллэрин таһымын уонна каскаадынан көмүскэммит сирэйдэри уларытыы",
        "right-editprotected": "Уларытыллар сирэйдэр \"{{int:protect-level-sysop}}\" таһымынан көмүскэммиттэр",
        "uploaded-script-svg": "Хачайдаммыт SVG-билэҕэ сценарийы өйүүр куттааллаах «$1» элэмиэн көһүннэ.",
        "uploaded-hostile-svg": "Хачайдаммыт SVG-билэ истиилин элэмиэнигэр кутталлаах CSS-куод көһүннэ.",
        "uploaded-event-handler-on-svg": "SVG-билэлэргэ <code>$1=\"$2\"</code> сабыытыйаны таҥастааччы атрибууттарын туруоруу көҥүллэммэт.",
-       "uploaded-href-attribute-svg": "SVG-билэлэргэ олохтоох соруга суох href-атрибууттар <code>&lt;$1 $2=\"$3\"&gt;</code> бобуллаллар (а.э. http://, javascript:, уо.д.а.).",
        "uploaded-href-unsafe-target-svg": "Хачайдаммыт SVG-билэҕэ кутталлаах сигэ көһүннэ <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-animate-svg": "«Animate» тиэк көһүннэ, кини «from»-атрибут көмөтүнэн  <code>&lt;$1 $2=\"$3\"&gt;</code> хачайдаммыт SVG-билэҕэ сигэни уларытыан сөп.",
        "uploaded-setting-event-handler-svg": "Дьайыы таҥастыыр тэрил атрибуутун уларытар бобуллубут, киллэриллибит SVG-билэҕэ <code>&lt;$1 $2=\"$3\"&gt;</code> куод көстүбүт.",
        "filename-thumb-name": "Билэҥ аата кыра ойуу аатыгар маарыҥныыр. Бука диэн, манныгы угума. Өскө, бу билэни хайаан да угуоххун баҕарар буоллаххына, аатын уларыт, кыра ойуу префиксын сотон баран.",
        "filename-bad-prefix": "Киллэрээри гынар билэҥ аата '''\"$1\"''' фотоаппарат аптамаатынан ааттыыр аатыгар майгынныыр. Бука диэн атыннык, арыый сиһилии ааттаан киллэрэриҥ буоллар.",
        "filename-prefix-blacklist": " #<!-- Бу строканы оннунан хааллар --> <pre>\n# Синтаксииһа маннык:\n#   * Бу \"#\" бэлиэттэн саҕалаан строка бүтүөр дылы быһаарыы\n#   * Кураанах буолбатах строка - билэ фотоаппарат аптамаатынан ааттаабыт ааттарын префикса\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # сорох мобильнай төлөппүөннэр\nIMG # generic\nJD # Jenoptik\nMGP # Pentax\nPICT # misc.\n #</pre> <!-- Бу строканы оннунан хааллар -->",
-       "upload-success-subj": "Сатанна",
-       "upload-success-msg": "[$2]  хачайдааһын табылынна. Ол түмүгүн манна көрүөххүн сөп: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Хачайдааһын моһуога",
-       "upload-failure-msg": "Эн хачайдааһыныҥ (мантан [$2]) моһуогурда:\n\n$1",
-       "upload-warning-subj": "Хачайдыырга сэрэтии",
-       "upload-warning-msg": "[$2] хачайдыырга алҕас таҕыста. Ол алҕаһы көннөрөргө манна төнүн [[Special:Upload/stash/$1|upload form]].",
        "upload-proto-error": "Сыыһа боротокуол",
        "upload-proto-error-text": "Ыраахтан суруттарарга маннык аадырыстар наадалар: <code>http://</code> эбэтэр <code>ftp://</code>.",
        "upload-file-error": "Ис сыыһа",
        "wlheader-showupdated": "Бүтэһик киирииҥ кэннэ уларыйбыт сирэйдэр '''модьу''' бичигинэн бэлиэтэннилэр.",
        "wlnote": "Манна кэлиҥҥи {{PLURAL:$2|чаас|<strong>$2</strong> чаас}} иһигэр оҥоһуллубут бүтэһик <strong>$1</strong> уларытыы көрдөрүлүннэ, бу кэминээҕи туругунан $3, $4.",
        "wlshowlast": "Бүтэһик $2 күҥҥэ $1 чааска көрдөр",
-       "watchlistall2": "бары",
        "wlshowtime": "Тиһэҕи көрдөр:",
        "wlshowhideminor": "кыра суолталаах уларытыы",
        "wlshowhidebots": "оруобат",
        "contributions": "{{GENDER:$1|Кыттааччы}} суруйуута (кылаата)",
        "contributions-title": "$1 кыттааччы киллэрбит уларытыылара",
        "mycontris": "Суруйуу тиһигэ",
+       "anoncontribs": "Суруйуу тиһилигэ",
        "contribsub2": "$1 ($2) суруйуута",
        "contributions-userdoesnotexist": "Маннык \"$1\" кыттааччы аата бэлиэтэниллибэтэх.",
        "nocontribs": "Эппит критерийгэр эппиэттиир уларытыылар көстүбэтилэр.",
        "javascripttest-pagetext-frameworks": "Бука диэн, бу тургуутуу эйгэлэриттэн биирин тал: $1",
        "javascripttest-pagetext-skins": "Тургутууну ыытарга тас көрүҥүн бастаан тал:",
        "javascripttest-qunit-intro": "[$1 тургутуу документациятын] манна mediawiki.org көр.",
-       "tooltip-pt-userpage": "Кыттааччы быһыытынан тус сирэйиҥ",
+       "tooltip-pt-userpage": "{{GENDER:|Кыттааччы}} быһыытынан тус сириҥ",
        "tooltip-pt-anonuserpage": "Билигин киирбит IP-м сирэйэ",
-       "tooltip-pt-mytalk": "Кэпсэтэр-ырытар сириҥ",
+       "tooltip-pt-mytalk": "Кэпсэтэр-ырытар {{GENDER:|сириҥ}}",
        "tooltip-pt-anontalk": "Бу IP ырытыыта",
-       "tooltip-pt-preferences": "Бэйэм туруорууларым",
+       "tooltip-pt-preferences": "{{GENDER:|Бэйэҥ}} туруорууларыҥ",
        "tooltip-pt-watchlist": "Кэтээн көрөр сирэйдэрим тиһигэ",
-       "tooltip-pt-mycontris": "Суруйбут/уларыппыт Ñ\81иÑ\80Ñ\8dйдÑ\8dÑ\80иҥ Ñ\82иһикÑ\82Ñ\8dÑ\80Ñ\8d",
+       "tooltip-pt-mycontris": "Суруйбут/уларыппыт {{GENDER:|Ñ\81иÑ\80Ñ\8dйдÑ\8dÑ\80иҥ}} Ñ\82иһиликÑ\82Ñ\8dÑ\80Ñ\8d",
        "tooltip-pt-login": "Манна бэйэҕин билиһиннэриэххин сөп (булгуччута суох).",
        "tooltip-pt-logout": "Тахсыы",
        "tooltip-pt-createaccount": "Манна киирэргэ бэлиэтэнэр уонна куруук ол аатынан киирэр ордук; ол булгуччута суох",
        "tooltip-t-recentchangeslinked": "Бу сирэй сигэнэр сирэйдэригэр кэнники уларыйыылар",
        "tooltip-feed-rss": "RSS бу сирэйгэ",
        "tooltip-feed-atom": "Atom бу сирэйгэ",
-       "tooltip-t-contributions": "Бу кыттааччы уларыппыт сирэйдэрин испииһэгэ",
+       "tooltip-t-contributions": "{{GENDER:$1|Бу кыттааччы}} уларыппыт сирэйдэрин тиһилигэ",
        "tooltip-t-emailuser": "Бу киһиэхэ сурук ыытарга",
        "tooltip-t-info": "Бу сирэй туһунан сиһилии",
        "tooltip-t-upload": "Билэлэри суруттарыы",
index ed06150..79f99b3 100644 (file)
        "passwordreset-emailtext-ip": "Quarchidunu (prubbabbilmenti tu, dô nnirizzu IP $1) fici n'addumannata pi l'azziramentu dâ tò password pi {{SITENAME}} ($4). {{PLURAL:$3|Lu cuntu utenti siguenti è assuciatu|Li cunti utenti siguenti sù assuciati}} cu stu nnirizzu di posta elittrònica:\n\n$2\n\n{{PLURAL:$3|Sta password timpurània|Sti password timpurànii}} scàdinu tra {{PLURAL:$5|un jornu|$5 jorna}}.\nOra tu avissi a tràsiri e scègghiri na password nova. Si fu quarchidun'àutru a fari st'addumannata e nun tu, o si t'arricurdasti la tò password origginali e nun la voi canciari cchiù, poi gnurari stu missaggiu e cuntinuari a adupirari la tò password vecchia.",
        "passwordreset-emailtext-user": "L'utenti $1 supra a {{SITENAME}} fici n'addumannata pi l'azziramentu dâ tò password pi {{SITENAME}} ($4). {{PLURAL:$3|Lu cuntu utenti siguenti è assuciatu|Li cunti utenti siguenti sù assuciati}} cu stu nnirizzu di posta elittrònica:\n\n$2\n\n{{PLURAL:$3|Sta password timpurània|Sti password timpurànii}} scàdinu tra {{PLURAL:$5|un jornu|$5 jorna}}.\nOra tu avissi a tràsiri e scègghiri na password nova. Si fu quarchidun'àutru a fari st'addumannata e nun tu, o si t'arricurdasti la tò password origginali e nun la voi canciari cchiù, poi gnurari stu missaggiu e cuntinuari a adupirari la tò password vecchia.",
        "passwordreset-emailelement": "Nomu utenti: \n$1\n\nPassword timpurània: \n$2",
-       "passwordreset-emailsent": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu mannatu.",
+       "passwordreset-emailsentemail": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu mannatu.",
        "passwordreset-emailsent-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu mannatu, cû cuntinutu chi si pò taliari ccassutta.",
        "passwordreset-emailerror-capture": "Nu missaggiu di posta elittrònica d'azziramentu dâ password fu cumpilatu, cû cuntinutu chi si pò taliari ccassutta, pirò la sò spidizzioni a l'utenti {{GENDER:$2|user}} nun arriniscìu: $1",
        "changeemail": "Canciu dû nnirizzu di posta elittrònica",
        "prefs-help-prefershttps": "Sta prifirenza fa effettu â tò pròssima trasuta.",
        "prefswarning-warning": "Facisti canciamenti ê tò prifirenzi chi ancora nun foru sarvati.\nSi ti nni vai di sta pàggina senza carcari \"$1\" li tò prifirenzi nun sunnu sarvati.",
        "prefs-tabs-navigation-hint": "Cunzigghiu: Poi adupirari li buttuna fileccia a manu manca e a manu dritta pi navigari tra dî linguetti ntâ lista.",
-       "email-address-validity-valid": "Lu nnirizzu e-mail pari bonu",
-       "email-address-validity-invalid": "Nzirisci nu nnirizzu e-mail bonu",
        "userrights": "Gistioni dî dritti di l'utenti",
        "userrights-lookup-user": "Gistisci li gruppi di l'utenti",
        "userrights-user-editname": "Metti nu nomu utenti:",
        "right-blockemail": "Bluccari n'utenti pi nun fàricci mannari posta elittrònica",
        "right-hideuser": "Bluccari nu nomu utenti, ammucciànnulu ô pùbblicu",
        "right-ipblock-exempt": "Sautari li blocchi di IP, autumàtici e di ntirvalli di IP",
-       "right-proxyunbannable": "Sautari li blocchi autumàtici dî proxy",
        "right-unblockself": "Sbluccàrisi iddu stissu",
        "right-protect": "Canciari li liveddi di prutizzioni e canciari pàggini prutetti a cascata",
        "right-editprotected": "Canciari pàggini cu prutizzioni \"{{int:protect-level-sysop}}\"",
        "uploaded-script-svg": "Fu attruvatu n'elimentu prugrammàbbili \"$1\" ntô file SVG carricatu.",
        "uploaded-hostile-svg": "Fu attruvatu còdici CSS risicusu nta l'elimentu style dû file SVG carricatu.",
        "uploaded-event-handler-on-svg": "Nun è cunzintutu di mpustari l'attribbuti gistura d'eventi <code>$1=\"$2\"</code> ntê file SVG.",
-       "uploaded-href-attribute-svg": "Nun sunnu cunzintuti l'attribbuti href <code>&lt;$1 $2=\"$3\"&gt;</code> cu na distinazzioni ca nun è lucali (p'esempiu http://, javascript:, etc) ntê file SVG.",
        "uploaded-href-unsafe-target-svg": "Fu attruvatu n'href cu na distinazzioni risicusa <code>&lt;$1 $2=\"$3\"&gt;</code> ntô file SVG carricatu.",
        "uploaded-animate-svg": "Fu attruvata n'etichetta \"animate\" ca purrìa canciari href, adupirannu l'attribbutu \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code>, ntô file SVG carricatu.",
        "uploaded-setting-event-handler-svg": "Lu mpustari l'attribbuti dî gistura di l'eventi veni bluccatu; fu attruvatu <code>&lt;$1 $2=\"$3\"&gt;</code> ntô file SVG carricatu.",
        "filewasdeleted": "Nu file cu stu nomu hà statu già carricatu e cancillatu n passatu. Virificari $1 prima di carricàrilu di novu.",
        "filename-bad-prefix": "Lu nomu dô file chi stai carricannu ncigna cu '''\"$1\"''', chi è nu nomu non descrittivu assignatu, di solitu, automaticamenti dê màchini fotugràfici diggitali. Pi favuri scegghia nu nomu cchiù descrtittivu pi lu tò file.",
        "filename-prefix-blacklist": " #<!-- dassa sta lìnia comu è già --> <pre>\n# Chista di sèquitu è la sintassi:\n#   * Tutti li scritti a pàrtiri dô carattiri \"#\" sugnu commenti\n#   * Tutti li lìnii non vacanti sugnu prefissi pi tipici nomi di file assignati automaticamenti dê màchini fotugràfici diggitali\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # arcuni cellulari\nIMG # genericu\nJD # Jenoptik\nMGP # Pentax\nPICT # arcuni\n #</pre> <!-- dassa sta lìnia comu è già -->",
-       "upload-success-subj": "Carricamentu arrinisciutu",
-       "upload-success-msg": "Lu tò carricamentu di [$2] arriniscìu. Ccà c'è lu file carricatu: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Prubblema ntô carricamentu",
-       "upload-failure-msg": "Ammattìu un prubblema ntô tò carricamentu di [$2]:\n\n$1",
-       "upload-warning-subj": "Avvisu pû carricamentu",
-       "upload-warning-msg": "Ammattìu un prubblema ntô tò carricamentu di [$2]. Poi turnari ô [[Special:Upload/stash/$1|mòdulu di carricamentu]] pi currèggiri stu prubblema.",
        "upload-proto-error": "Protucollu erratu",
        "upload-proto-error-text": "Pi l'upload rimotu è nicissariu spicificari URL ca nìzzianu cu <code>http://</code> oppuru <code>ftp://</code>.",
        "upload-file-error": "Erruri nternu",
        "wlheader-showupdated": "Li pàggini ca foru canciati dâ tò ùrtima vìsita sunnu evidinziati n <strong>grassettu</strong>.",
        "wlnote": "Sutta attrovi l'ùrtim{{PLURAL:$1|u canciamentu|i <strong>$1</strong> canciamenti}} fatti nta l'ùrtim{{PLURAL:$1|a ura|i <strong>$2</strong> uri}}, aggiurnati ê $4 dû $3.",
        "wlshowlast": "Ammustra l'ùrtimi $1 uri $2 jorna",
-       "watchlistall2": "tutti",
        "watchlist-options": "Opzioni dâ lista taliata",
        "watching": "Agghiunciuta â lista taliata...",
        "unwatching": "Cancillata dâ lista taliata...",
        "movenosubpage": "Sta pàggina nun havi suttapàggini.",
        "movereason": "Mutivu:",
        "revertmove": "riprìstina",
-       "delete_and_move": "Cancella e sposta",
        "delete_and_move_text": "==Richiesta di cancillazzioni==\n\nLa pàggina di distinazzioni \"[[:$1]]\" asisti già. S'addisìa cancillàrila pi rènniri pussìbbili lu spustamentu?",
        "delete_and_move_confirm": "Sì, suvrascrivi la pàggina asistenti",
        "delete_and_move_reason": "Cancillata pi fari largu ô spustamentu di \"[[$1]]\"",
        "special-characters-title-minus": "signu menu",
        "mw-widgets-dateinput-no-date": "Nudda data scigghiuta",
        "mw-widgets-titleinput-description-new-page": "sta pàggina ancora nun esisti",
-       "mw-widgets-titleinput-description-redirect": "rimannu a $1"
+       "mw-widgets-titleinput-description-redirect": "rimannu a $1",
+       "randomrootpage": "Pàggina ràdica casuali"
 }
index 11dbca2..b9f8739 100644 (file)
        "uploaded-script-svg": "اسڪرپٽ جوڳو ايليمينٽ ”$1” مليو آهي، اپلوڊ ٿيل ايس وي جي فائيل ۾.",
        "uploaded-hostile-svg": "اپلوڊ ٿيل ايس وي جي فائيل جو غير محفوظ سي ايس ايس ۾ اسٽائيل ايلمينٽ مليو",
        "uploaded-event-handler-on-svg": "ايس وي جي فائيل ۾ ايوينٽ هينڊلر خصوصيتون <code>$1=\"$2\"</code> مقرر ڪرڻ جي اجازت نہ آهي.",
-       "uploaded-href-attribute-svg": "Href خاصيتون <code>&lt;$1 $2=\"$3\"&gt;</code> نان لوڪل ٽارگيٽ سان جهڙوڪ ( http://, javascript:, وغيره) ايس وي جي فائيل ۾ اجازت مليل نه آهن.",
        "uploaded-href-unsafe-target-svg": "href جو غير محفوظ نشانو مليو آهي <code>&lt;$1 $2=\"$3\"&gt;</code> اپلوڊ ٿيل ايس وي جي فائيل ۾",
        "uploaded-animate-svg": "”اينيميٽ“ ٽيگ ڳوليو  جيڪا ٿي سگهي ٿو href کي تبديل ڪري رهي هجي. \"form\" وصف استعمال ڪندي <code>&lt;$1 $2=\"$3\"&gt;</code> اپلوڊ ٿيل ايس وي جي فائيل ۾",
        "uploaded-setting-event-handler-svg": "واقعي کي هينڊل ڪندڙ جي سيٽنگ جون وصفون بلاڪ ٿيل آهن. \n<code>&lt;$1 $2=\"$3\"&gt;</code> اپلوڊ ٿيل ايس وي جي فائيل ۾ مليو",
        "upload-description": "فائيل جي تشريح",
        "upload-options": "چاڙھ جا چارا",
        "watchthisupload": "هيءُ فائيل ٽيٽيو",
-       "upload-success-subj": "چاڙهہ ڪامياب",
-       "upload-failure-subj": "چاڙھ جو مسئلو",
-       "upload-warning-subj": "چاڙھ جو چتاءُ",
        "upload-file-error": "اندروني چُڪَ",
        "upload-dialog-title": "فائيل چاڙهيو",
        "upload-dialog-button-cancel": "رد",
        "notanarticle": "غير موادي صفحو",
        "watchlist-details": "{{PLURAL:$1|$1 صفحو|$1 صفحا}} توهان جي ٽيٽ فهرست، ڳالھ ٻولھ جا صفحا الڳ شمار نٿا ٿين.",
        "wlshowlast": "گذريل $1 ڪلاڪ $2 ڏينهن ڏيکاريو",
-       "watchlistall2": "سڀ",
        "watchlist-hide": "لڪايو",
        "watchlist-submit": "ڏيکاريو",
        "wlshowtime": "ڪيترو عرصو ڏيکارجي:",
index a673d6e..31f5eac 100644 (file)
        "passwordreset-emailtext-ip": "Netko (vjerovatno Vi, s IP adrese $1) je zatražio resetiranje vaše lozinke/zaporke {{SITENAME}} ($4). Sljedeći {{PLURAL:$3|račun korisnika je|računi korisnika su}}\npovezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena lozinka|Ove privremene lozinke}} će isteći za {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu lozinku. Ako je neko drugi napravio ovaj\nzahtjev, ili ako ste se sjetili Vaše početne lozinke, a ne želite je promijeniti, \nmožete zanemariti ovu poruku i nastaviti koristiti staru lozinku.",
        "passwordreset-emailtext-user": "Korisnik $1 na {{SITENAME}} je zatražio resetiranje vaše lozinke/zaporke za {{SITENAME}}\n($4). Sljedeći {{PLURAL:$3|korisnički račun je|korisnički računi su}} povezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena lozinka|Ove privremene lozinke}} će isteći za {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu lozinku. Ako je neko drugi napravio ovaj\nzahtjev, ili ako ste se sjetili Vaše originalne lozinke, a ne želite je više promijeniti, \nmožete zanemariti ovu poruku i nastaviti koristiti staru lozinku.",
        "passwordreset-emailelement": "Korisničko ime: \n$1\n\nPrivremena šifra: \n$2",
-       "passwordreset-emailsent": "Ako je ovo adresa e-pošte s kojom ste registrirali ovaj račun, podsjetnik šifre/lozinke/zaporke će vam biti poslan na vašu adresu e-pošte.",
+       "passwordreset-emailsentemail": "Ako je ovo adresa e-pošte s kojom ste registrirali ovaj račun, podsjetnik šifre/lozinke/zaporke će vam biti poslan na vašu adresu e-pošte.",
        "passwordreset-emailsent-capture": "E-mail za resetiranje lozinke/zaporke je poslan (prikazan dolje).",
        "passwordreset-emailerror-capture": "E-mail za resetiranje lozinke/zaporke, prikazan dolje, je poslan, ali slanje {{GENDER:$2|korisniku|korisnici|korisniku}} nije uspjelo: $1",
        "changeemail": "Promeni ili ukloni e-adresu",
        "prefs-help-prefershttps": "Ova mogućnost će stupiti na snagu kod vaše sljedeće prijave.",
        "prefswarning-warning": "Napravili ste promjene u vašim postavkama koje još uvijek nisu sačuvane. Ako napustite ovu stranicu bez da pritisnete na \"$1\", postavke neće biti ažurirane.",
        "prefs-tabs-navigation-hint": "Savjet: Možete koristi lijevu i desnu navigacijsku tipku kako biste se kretali između tabova u popisu tabova.",
-       "email-address-validity-valid": "E-mail adresa izgleda valjano",
-       "email-address-validity-invalid": "Unesite valjanu e-mail adresu",
        "userrights": "Postavke korisničkih prava",
        "userrights-lookup-user": "Menadžment korisničkih prava",
        "userrights-user-editname": "Unesi korisničko ime:",
        "right-blockemail": "Blokiranje korisnika da šalje e-mail",
        "right-hideuser": "Blokiranje korisničkog imena, i njegovo sakrivanje od javnosti",
        "right-ipblock-exempt": "Zaobilaženje IP blokada, autoblokada i blokada IP grupe",
-       "right-proxyunbannable": "Zaobilaženje automatskih blokada proxy-ja",
        "right-unblockself": "Deblokiraj samog sebe",
        "right-protect": "Promjena nivoa zaštite i uređivanje kaskadno zaštićenih stranica",
        "right-editprotected": "Uređivanje stranice zaštićenih kao \"{{int:protect-level-sysop}}\"",
        "uploaded-script-svg": "Pronađen skriptni element \"$1\" u postavljenoj SVG datoteci.",
        "uploaded-hostile-svg": "Pronađen nesiguran CSS u stilskom elementu postavljene SVG datoteke.",
        "uploaded-event-handler-on-svg": "Nije dozvoljeno postavljanje atributa koji kontroliraju događaje <code>$1=\"$2\"</code> u SVG datotekama.",
-       "uploaded-href-attribute-svg": "href atributi <code>&lt;$1 $2=\"$3\"&gt;</code> sa nelokalnom metom (npr. http://, javascript:, etc) nisu dozvoljeni u SVG datotekama.",
        "uploaded-href-unsafe-target-svg": "Pronađen href sa nesigurnom metom <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
        "uploaded-animate-svg": "Pronađena \"animate\" oznaka koja možda mijenja href koristeći se \"from\" atributom <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
        "uploaded-setting-event-handler-svg": "Postavljanje kontrole događaja je blokirano, pronađeno <code>&lt;$1 $2=\"$3\"&gt;</code> u postavljenoj SVG datoteci.",
        "filewasdeleted": "Datoteka s ovim nazivom je ranije postavljana i nakon toga obrisana.\nPrije nego što nastavite da je ponovno postavite trebate provjeriti $1.",
        "filename-thumb-name": "Ovo izgleda kao thumbnail naslov. Molimo ne postavljate thumbnaile natrag na istu wiki. Ukoliko je riječ o nečemu drugome, molimo popravite ime datoteke tako da ima više značenja i nema thumbnail prefiks.",
        "filename-bad-prefix": "Naziv datoteke koju postavljate počinje sa '''\"$1\"''', što je naziv koji obično automatski dodjeljuju digitalni fotoaparati i kamere.\nMolimo Vas da odaberete naziv datoteke koji opisuje njen sadržaj.",
-       "upload-success-subj": "Uspješno slanje",
-       "upload-success-msg": "Vaša datoteka iz [$2] je uspješno postavljena. Dostupna je ovdje: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Problem pri postavljanju",
-       "upload-failure-msg": "Nastao je problem s Vašim postavljanjem iz [$2]:\n\n$1",
-       "upload-warning-subj": "Upozorenje pri slanju",
-       "upload-warning-msg": "Nastao je problem sa vašim postavljanjem sa [$2]. Morate se vratiti na [[Special:Upload/stash/$1|formular za postavljanje]] kako biste riješili ovaj problem.",
        "upload-proto-error": "Pogrešan protokol",
        "upload-proto-error-text": "Postavljanje sa vanjske lokacije zahtjeva URL-ove koji počinju sa <code>http://</code> ili <code>ftp://</code>.",
        "upload-file-error": "Interna pogreška",
        "wlheader-showupdated": "* Stranice koje su izmijenjene od kad ste ih posljednji put posjetili su prikazane '''podebljanim slovima'''",
        "wlnote": "Ispod {{PLURAL:$1|je najskorija izmjena|su <strong>$1</strong> najskorije izmjene|<strong>$1</strong> najskorijih izmjena}} načinjenih {{PLURAL:$2|posljednjeg sata|u posljednjih <strong>$2</strong> sata|u posljednjih <strong>$2</strong> sati}}, od $3, $4.",
        "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
-       "watchlistall2": "sve",
        "watchlist-options": "Opcije liste praćenja",
        "watching": "Pratim... / Додавање на списак надгледања...",
        "unwatching": "Ne pratim…",
index 3191510..881c7c2 100644 (file)
        "uploaded-script-svg": "V naloženi datoteki SVG smo našli skriptni element »$1«.",
        "uploaded-hostile-svg": "V slogovnem elementu naložene datoteke SVG smo našli nevaren CSS.",
        "uploaded-event-handler-on-svg": "Določevanje atributov za dogodke <code>$1=\"$2\"</code> v datotekah SVG ni dovoljeno.",
-       "uploaded-href-attribute-svg": "Atributi href <code>&lt;$1 $2=\"$3\"&gt;</code> z nelokalnimi cilji (npr. http://, javascript: idr.) v datotekah SVG niso dovoljeni.",
-       "uploaded-href-unsafe-target-svg": "V naloženi datoteki SVG smo našli href z nevarnim ciljem <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "Atributi href v datotekah SVG lahko ciljajo samo na http:// ali https://, našli smo <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Našli smo href na nevaren podatek: cilj URI <code>&lt;$1 $2=\"$3\"&gt;</code> v naloženi datoteki SVG.",
        "uploaded-animate-svg": "V naloženi datoteki SVG smo našli oznako »animate«, ki lahko spreminja href z uporabo atributa »from« <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Določevanje atributov za dogodke je blokirano; v naloženi datoteki SVG smo našli <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-href-svg": "Uporaba oznake »set« za določevanje atributa »href« starševskega elementa je blokirano.",
index 229fa0a..f49d715 100644 (file)
        "uploaded-script-svg": "Пронађен скриптни елеменат „$1“ у постављеној SVG датотеци.",
        "uploaded-hostile-svg": "Пронађен небезбедан CSS у стилском елементу постављене SVG датотеке.",
        "uploaded-event-handler-on-svg": "Није дозвољено постављање атрибута који контролишу догађаје <code>$1=\"$2\"</code> у SVG датотекама.",
-       "uploaded-href-attribute-svg": "href атрибути <code>&lt;$1 $2=\"$3\"&gt;</code> са нелокалном метом (нпр. http://, javascript:, итд) нису дозвољени у SVG датотекама.",
        "uploaded-href-unsafe-target-svg": "Пронађен href са несигурном метом <code>&lt;$1 $2=\"$3\"&gt;</code> у постављеној SVG датотеци.",
        "uploaded-animate-svg": "Пронађена „animate“ ознака која можда мења href користећи се „from“ атрибутом <code>&lt;$1 $2=\"$3\"&gt;</code> у постављеној SVG датотеци.",
        "uploadscriptednamespace": "Ова SVG датотека садржи погрешан именски простор „$1“",
        "lockmanager-notlocked": "Не могу да откључам „$1“ јер није закључан.",
        "lockmanager-fail-closelock": "Не могу да затворим катанац за „$1“.",
        "lockmanager-fail-deletelock": "Не могу да обришем катанац за „$1“.",
-       "lockmanager-fail-acquirelock": "Не могу да добијем катанац за „$1“.",
+       "lockmanager-fail-acquirelock": "Не могу да се закључам за „$1“.",
        "lockmanager-fail-openlock": "Не могу да отворим катанац за „$1“.",
        "lockmanager-fail-releaselock": "Не могу да ослободим катанац за „$1“.",
        "lockmanager-fail-db-bucket": "Не могу да контактирам с довољно катанаца у канти $1.",
        "version-hook-subscribedby": "Пријављено од",
        "version-version": "($1)",
        "version-no-ext-name": "[нема имена]",
-       "version-svn-revision": "(изм. $2)",
        "version-license": "Медијавики лиценца",
        "version-ext-license": "Лиценца",
        "version-ext-colheader-name": "Екстензија",
index d65ea82..3140260 100644 (file)
        "lockmanager-notlocked": "Ne mogu da otključam „$1“ jer nije zaključan.",
        "lockmanager-fail-closelock": "Ne mogu da zatvorim katanac za „$1“.",
        "lockmanager-fail-deletelock": "Ne mogu da obrišem katanac za „$1“.",
-       "lockmanager-fail-acquirelock": "Ne mogu da dobijem katanac za „$1“.",
+       "lockmanager-fail-acquirelock": "Ne mogu da se zaključam za „$1“.",
        "lockmanager-fail-openlock": "Ne mogu da otvorim katanac za „$1“.",
        "lockmanager-fail-releaselock": "Ne mogu da oslobodim katanac za „$1“.",
        "lockmanager-fail-db-bucket": "Ne mogu da kontaktiram s dovoljno katanaca u kanti $1.",
        "version-hook-subscribedby": "Prijavljeno od",
        "version-version": "($1)",
        "version-no-ext-name": "[nema imena]",
-       "version-svn-revision": "(izm. $2)",
        "version-license": "Medijaviki licenca",
        "version-ext-license": "Licenca",
        "version-ext-colheader-name": "Ekstenzija",
index e7b5d6b..161cc19 100644 (file)
        "grant-editpage": "Redigera befintliga sidor",
        "grant-editprotected": "Redigera skyddade sidor",
        "grant-highvolume": "Hög volymsredigering",
-       "grant-oversight": "Dölj användare och undertryck revideringar",
+       "grant-oversight": "Dölj användare och censurera versioner",
        "grant-patrol": "Patrullera ändringar på sidor",
        "grant-protect": "Skydda och ta bort skydd på sidor",
        "grant-rollback": "Rulla tillbaka ändringar på sidor",
        "uploaded-script-svg": "Hittade skriptelementet \"$1\" i den uppladdade SVG-filen.",
        "uploaded-hostile-svg": "Hittade osäker CSS i den uppladdade filens stilelement.",
        "uploaded-event-handler-on-svg": "Att ange event-handler-attribut <code>$1=\"$2\"</code> är inte tillåtet i SVG-filer.",
-       "uploaded-href-attribute-svg": "href-attribut <code>&lt;$1 $2=\"$3\"&gt;</code> med icke-lokala mål (t.ex. http://, javascript:, etc) tillåts inte i SVG filer.",
        "uploaded-href-unsafe-target-svg": "Hittade href till ett osäkert mål <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
        "uploaded-animate-svg": "Hittades taggen \"animate\" som kan ändra href med hjälp av attributen \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
        "uploaded-setting-event-handler-svg": "Att ange event-handler-attribut är blockerat. Hittade <code>&lt;$1 $2=\"$3\"&gt;</code> i den uppladdade SVG-filen.",
        "upload-too-many-redirects": "URL-en innehöll för många omdirigeringar",
        "upload-http-error": "Ett HTTP-fel uppstod: $1",
        "upload-copy-upload-invalid-domain": "Uppladdning av kopior är inte tillgängligt från denna domän.",
-       "upload-foreign-cant-upload": "Denna wiki är inte konfigurerad för att ladda upp filer till den begärda främmande filförvar.",
+       "upload-foreign-cant-upload": "Denna wiki är inte konfigurerad för att ladda upp filer till det begärda externa filförvaret.",
        "upload-dialog-title": "Ladda upp fil",
        "upload-dialog-button-cancel": "Avbryt",
        "upload-dialog-button-done": "Klar",
        "tags-deactivate-not-allowed": "Det är inte möjligt att inaktivera taggen \"$1\".",
        "tags-deactivate-submit": "Inaktivera",
        "tags-apply-no-permission": "Du har inte behörighet att tillämpa taggar på dina ändringar",
-       "tags-apply-blocked": "Du kan inte använda(?) ändringsmärken när du är blockerad.",
+       "tags-apply-blocked": "Du kan inte ange ändringsmärken med dina ändringar medans du är blockerad.",
        "tags-apply-not-allowed-one": "Märket \"$1\" kan inte läggas till manuellt.",
        "tags-apply-not-allowed-multi": "Följande {{PLURAL:$2|märke|märken}} kan inte läggas till manuellt: $1",
        "tags-update-no-permission": "Du har inte behörighet att lägga till eller ta bort taggar från individuella sidversioner eller loggposter.",
        "mw-widgets-titleinput-description-new-page": "sidan existerar inte ännu",
        "mw-widgets-titleinput-description-redirect": "omdirigerar till $1",
        "api-error-blacklisted": "Välj en annan beskrivande titel.",
+       "sessionmanager-tie": "Kan inte kombinera flera begäransautentiseringstyper: $1.",
        "sessionprovider-generic": "$1-sessioner",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "cookiebaserade sessioner",
        "sessionprovider-nocookies": "Cookies kan vara inaktiverade. Se till att du har cookies aktiverat och försök igen.",
index 861a294..4b170ce 100644 (file)
        "php-uploaddisabledtext": "Дар PHP боркунии парванда ғайрифаъол шудааст.\nЛутфан танзимоти file_uploads баррасӣ намоед.",
        "uploadscripted": "Ин парванда коди скриптӣ ё HTML дорад, ки метавонад дар мурургарӣ веб нодуруст намоён шавад.",
        "upload-scripted-pi-callback": "Имкони боргузории файл ки мундариҷаи услуби коркарди XML-дастур дорад, нест.",
-       "uploaded-href-attribute-svg": "Муайянкунанда <нишон>&lt;$1 $2=\"$3\"&gt;</нишон> дар ҳадафҳои ғайри маҳаллӣ (масалан: http://, JavaScript:, ва ғайра) дар SVG-файлҳо иҷозат дода намешавад.",
        "uploadvirus": "Ин парванда вирус дорад! Ҷузъиёт: $1",
        "upload-source": "Парвандаи манбаъ",
        "sourcefilename": "Номи парвандаи аслӣ:",
        "watchthisupload": "Пайгирии ин парванда",
        "filewasdeleted": "Парвандае бо ҳамин ном пештар боргузорӣ ва пас аз он пок шудааст. Пеш аз боргузорӣ ба $1 нигаред.",
        "filename-bad-prefix": "Номи парвандае, ки шумо боргузори карданиед бо '''\"$1\"''' оғоз мешавад, ки як пешванди махсуси аксҳои сабтшуда тавассути аксбардоракҳои рақамӣ аст. Лутфан номи беҳтари тавсифотӣ барои парванда интихоб кунед.",
-       "upload-success-subj": "Фиристодан бомуваффақият",
-       "upload-success-msg": "Боркуниатон аз [$2] муваффақ буд. Он дар инҷо дастрас аст: [[:{{ns:file}}:$1]]",
-       "upload-failure-subj": "Ишколи боркунӣ",
-       "upload-warning-subj": "Ҳушдори боркунӣ",
        "upload-proto-error": "Қарордоди нодуруст",
        "upload-proto-error-text": "Боргузори аз дурдаст бо нишонаҳое, ки бо <code>http://</code> ё <code>ftp://</code> оғоз мешаванд, ниёз дорад.",
        "upload-file-error": "Хатои дохилӣ",
        "wlheader-showupdated": "Саҳифаҳое, ки пас аз охирин сар заданатон ба онҳо тағйир кардаанд '''пурранг''' нишон дода шудаанд",
        "wlnote": "Дар зер {{PLURAL:$1|охирин тағйир|'''$1''' охирин тағйирот}} дар $2 соати охир {{PLURAL:омадааст|омадаанд}}.",
        "wlshowlast": "Намоиши охирин $1 соат $2 рӯзҳо",
-       "watchlistall2": "ҳама",
        "watchlist-options": "Ихтиёроти феҳристи пайгириҳо",
        "watching": "Пайгири...",
        "unwatching": "Тавқифи пайгири...",
        "expand_templates_ok": "Таъйид",
        "expand_templates_remove_comments": "Ҳазфи тавзеҳот",
        "expand_templates_generate_xml": "Намоиши дарахти таҷзеҳи XML",
-       "expand_templates_preview": "Пешнамоиш"
+       "expand_templates_preview": "Пешнамоиш",
+       "randomrootpage": "Саҳифаи решавии тасодуфӣ"
 }
index 3f92eb1..355e607 100644 (file)
        "log-title-wildcard": "ค้นหาชื่อเรื่องซึ่งขึ้นต้นด้วยข้อความนี้",
        "showhideselectedlogentries": "เปลี่ยนทัศนวิสัยของหน่วยปูมที่เลือก",
        "log-edit-tags": "ป้ายระบุการแก้ไขของรายการปูมที่เลือก",
+       "checkbox-select": "เลือก: $1",
+       "checkbox-all": "ทั้งหมด",
+       "checkbox-none": "ไม่เลือก",
+       "checkbox-invert": "กลับ",
        "allpages": "หน้าทั้งหมด",
        "nextpage": "หน้าถัดไป ($1)",
        "prevpage": "หน้าก่อนหน้า ($1)",
        "wlheader-showupdated": "หน้าที่มีการเปลี่ยนแปลงตั้งแต่คุณเยี่ยมครั้งสุดท้ายแสดงด้วย<strong>ตัวหนา</strong>",
        "wlnote": "ด้านล่างเป็น{{PLURAL:$1|การเปลี่ยนแปลงหลังสุด| <strong>$1</strong> การเปลี่ยนแปลงหลังสุด}} ใน{{PLURAL:$2|ชั่วโมง| <strong>$2</strong> ชั่วโมง}}ที่หลังสุด จนถึง $3, $4",
        "wlshowlast": "แสดง $1 ชั่วโมง $2 วันล่าสุด",
-       "watchlistall2": "ทั้งหมด",
        "watchlist-hide": "ซ่อน",
        "watchlist-submit": "แสดง",
        "wlshowtime": "ระยะเวลาที่แสดง:",
        "wlshowhideanons": "ผู้ใช้นิรนาม",
        "wlshowhidepatr": "การแก้ไขที่ตรวจสอบแล้ว",
        "wlshowhidemine": "การแก้ไขของฉัน",
+       "wlshowhidecategorization": "การจัดหมวดหมู่หน้า",
        "watchlist-options": "ตัวเลือกรายการเฝ้าดู",
        "watching": "กำลังเฝ้าดู...",
        "unwatching": "กำลังเลิกเฝ้าดู...",
        "tooltip-pt-preferences": "การตั้งค่าของคุณ",
        "tooltip-pt-watchlist": "รายการหน้าที่คุณกำลังเฝ้าดูการเปลี่ยนแปลง",
        "tooltip-pt-mycontris": "รายการหน้าที่คุณเขียน",
+       "tooltip-pt-anoncontribs": "รายการการแก้ไขจากเลขที่อยู่ไอพีนี้",
        "tooltip-pt-login": "สนับสนุนให้คุณล็อกอิน แต่ไม่บังคับ",
        "tooltip-pt-logout": "ล็อกเอาต์",
        "tooltip-pt-createaccount": "สนับสนุนให้คุณสร้างบัญชีและล็อกอิน แต่ไม่บังคับ",
        "pageinfo-category-files": "จำนวนไฟล์",
        "markaspatrolleddiff": "ทำเครื่องหมายว่าตรวจสอบแล้ว",
        "markaspatrolledtext": "ทำเครื่องหมายว่าหน้านี้ถูกตรวจสอบแล้ว",
+       "markaspatrolledtext-file": "ทำเครื่องหมายรุ่นไฟล์นี้ว่าตรวจสอบแล้ว",
        "markedaspatrolled": "ตรวจสอบแล้ว",
        "markedaspatrolledtext": "กำหนดรุ่นที่เลือกของ [[:$1]] ว่าตรวจสอบแล้ว",
        "rcpatroldisabled": "การตรวจสอบหน้าปรับปรุงล่าสุดถูกปิดใช้งาน",
        "newimages-legend": "ตัวกรอง",
        "newimages-label": "ชื่อไฟล์ (หรือส่วนหนึ่งของชื่อ):",
        "newimages-showbots": "แสดงไฟล์ที่บอตอัปโหลด",
+       "newimages-hidepatrolled": "ซ่อนการอัปโหลดที่ตรวจสอบแล้ว",
        "noimages": "ไม่มีให้ดู",
        "ilsubmit": "สืบค้น",
        "bydate": "ตามวันที่",
        "version-software-version": "รุ่น",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath เส้นทางบทความ]",
        "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath เส้นทางสคริปต์]",
-       "redirect": "การเปลี่ยนทางตามชื่อไฟล์ รหัสประจำผู้ใช้ หน้าหรือรุ่น",
+       "redirect": "การเปลี่ยนทางตามชื่อไฟล์ รหัสประจำผู้ใช้ หน้า รุ่นหรือปูม",
        "redirect-legend": "การเปลี่ยนทางไปยังไฟล์หรือหน้า",
        "redirect-summary": "หน้าพิเศษนี้เปลี่ยนทางไปยังไฟล์ (ระบุเป็นชื่อไฟล์) หน้า (ระบุเป็นรหัสรุ่นหรือรหัสหน้า) หรือหน้าผู้ใช้ (ระบุเป็นรหัสผู้ใช้ตัวเลข) การใช้งาน: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]] หรือ [[{{#Special:Redirect}}/user/101]]",
        "redirect-submit": "ไป",
        "expand_templates_ok": "ตกลง",
        "expand_templates_remove_comments": "นำส่วนความเห็นออก",
        "expand_templates_preview": "ตัวอย่างผลแสดง",
-       "pagelanguage": "ตัวเลือกภาษาหน้า",
+       "expand_templates_input_missing": "คุณต้องให้ข้อความป้อนเข้าบ้าง",
+       "pagelanguage": "เปลี่ยนภาษาของหน้า",
        "pagelang-name": "หน้า",
        "pagelang-language": "ภาษา",
        "pagelang-use-default": "ใช้ภาษาโดยปริยาย",
        "pagelang-select-lang": "เลือกภาษา",
+       "pagelang-submit": "ส่ง",
        "right-pagelang": "เปลี่ยนภาษาหน้า",
        "action-pagelang": "เปลี่ยนภาษาหน้า",
        "log-name-pagelang": "ปูมการเปลี่ยนภาษา",
index 5b781b2..0d673a5 100644 (file)
        "uploaded-script-svg": "Yüklenen SVG dosyasında komutlanabilir (scriptable) öğe bulundu: \"$1\"",
        "uploaded-hostile-svg": "Yüklenen SVG dosyasının \"style\" öğesinde güvensiz CSS bulundu.",
        "uploaded-event-handler-on-svg": "SVG dosyalarında event-handler özniteliğini <code>$1=\"$2\"</code> şeklinde ayarlanmasına izin verilmiyor.",
-       "uploaded-href-attribute-svg": "SVG dosyalarında yerel olmayan (örn. http://, javascript:, vb.) hedefleri olan <code>&lt;$1 $2=\"$3\"&gt;</code> href özniteliklerine izin verilmez.",
        "uploaded-href-unsafe-target-svg": "Yüklenen SVG dosyasında <code>&lt;$1 $2=\"$3\"&gt;</code> güvensiz hedefine href bulundu.",
        "uploaded-animate-svg": "\"animate\" etiketi bulundu, href'i değiştiriyor olabilir. Yüklenen SVG dosyasındaki \"from\" özniteliği kullanılıyor  <code>&lt;$1 $2=\"$3\"&gt;</code>",
        "uploadscriptednamespace": "Bu SVG dosyası geçersiz \"$1\" alan adını içermektedir.",
index 841dc31..a705263 100644 (file)
        "statistics-users": "Теркәлгән [[Special:ListUsers|кулланучылар]]",
        "statistics-users-active": "Актив кулланучылар",
        "statistics-users-active-desc": "{{PLURAL:$1|$1 көн }} өчендә нинди дә булса үзгәртүләр керткән кулланучылар",
+       "pageswithprop": "Үзенчәлекләре кабаттан билгеләнгән битләр",
+       "pageswithprop-legend": "Үзенчәлекләре кабаттан билгеләнгән битләр",
+       "pageswithprop-text": "Монда кайбер үзенчәлекләре кулдан яңартылган битләр күрсәтелгән.",
        "pageswithprop-prop": "Үзенчәлекнең атамасы:",
        "pageswithprop-submit": "Табу",
        "doubleredirects": "Икеләтә юнәлтүләр",
        "duration-days": "$1 {{PLURAL:$1|көн}}",
        "expandtemplates": "Үрнәкләрне ачу",
        "expand_templates_ok": "OK",
+       "mediastatistics": "Медиа хисабы",
        "special-characters-group-latin": "Латин",
        "special-characters-group-latinextended": "Латин (киңәйтелгән)",
        "special-characters-group-ipa": "ХФӘ (IPA)",
index 57ac62a..7e2096a 100644 (file)
        "oct": "октябрь",
        "nov": "ноябрь",
        "dec": "декабрь",
-       "pagecategories": "{{PLURAL:$1|Ð\9aаÑ\82егоÑ\80иÑ\8f\9aаÑ\82егоÑ\80иÑ\8fлар}}",
-       "category_header": "«$1» ÐºÐ°Ñ\82егоÑ\80иÑ\8fның арыннары",
+       "pagecategories": "{{PLURAL:$1|Ð\90ңгÑ\8bлал|Ð\90ңгÑ\8bлалдар}}",
+       "category_header": "«$1» Ð°Ò£Ð³Ñ\8bлалдың арыннары",
        "subcategories": "Адаккы бөлүктер",
        "category-media-header": "«$1» деп бөлүкте файлдар",
        "category-empty": "''Амгы бо бөлүкте медиа база арыннар чок.''",
-       "hidden-categories": "{{PLURAL:$1|1=Ð\9aөзүлбеÑ\81 ÐºÐ°Ñ\82егоÑ\80иÑ\8f\9aөзүлбеÑ\81 ÐºÐ°Ñ\82егоÑ\80иÑ\8fлар}}",
+       "hidden-categories": "{{PLURAL:$1|1=Ð\9aөзүлбеÑ\81 Ð°Ò£Ð³Ñ\8bлал|Ð\9aөзүлбеÑ\81 Ð°Ò£Ð³Ñ\8bлалдар}}",
        "hidden-category-category": "Чажыт бөлүктер",
-       "category-subcat-count": "{{PLURAL:$2|1=Ð\91о ÐºÐ°Ñ\82егоÑ\80иÑ\8f Ñ\87үгле Ð´Ð°Ñ\80аазÑ\8bнда Ð¸Ñ\88Ñ\82ики ÐºÐ°Ñ\82егоÑ\80иÑ\8fлÑ\8bг.|Ð\91о ÐºÐ°Ñ\82егоÑ\80иÑ\8fда Ð±Ð°Ñ\80-ла $2 Ð¸Ñ\88Ñ\82ики ÐºÐ°Ñ\82егоÑ\80иÑ\8fлаÑ\80нÑ\8bÒ£ $1 Ð´ÐµÐ¿ Ð¸Ñ\88Ñ\82ики ÐºÐ°Ñ\82егоÑ\80иÑ\8fзы көстүп турар.}}",
-       "category-subcat-count-limited": "Ð\91о Ð°Ò£Ð³Ñ\8bлал {{PLURAL:$1|1=биÑ\80|$1}} Ð°Ò£Ð³Ñ\8bламнÑ\8bг.",
-       "category-article-count": "{{PLURAL:$2|1=Ð\91о ÐºÐ°Ñ\82егоÑ\80иÑ\8fда Ñ\87үгле Ñ\87аңгÑ\8bÑ\81 Ð°Ñ\80Ñ\8bн Ð±Ð°Ñ\80.|Ук ÐºÐ°Ñ\82егоÑ\80иÑ\8fда бар $2 арыннарының аразындан}} |{{PLURAL:$1 арынны көргүскен| $1 арыннарны көргүскен.}}",
-       "category-file-count": "{{PLURAL:$2|1=Ð\91о ÐºÐ°Ñ\82егоÑ\80иÑ\8f Ñ\87үгле Ñ\87аңгÑ\8bÑ\81 Ñ\84айлдÑ\8bг.|Ð\91о ÐºÐ°Ñ\82егоÑ\80иÑ\8fнÑ\8bÒ£ Ñ\88Ñ\83пÑ\82Ñ\83 $2 Ñ\84айлÑ\8bнÑ\8bÒ£ $1 файлын көргүскен.}}",
+       "category-subcat-count": "{{PLURAL:$2|1=Ук Ð°Ò£Ð³Ñ\8bлал Ñ\87үгле Ð´Ð°Ñ\80аазÑ\8bнда Ð¸Ñ\88Ñ\82ики Ð°Ò£Ð³Ñ\8bлалдÑ\8bг.|Ук Ð°Ò£Ð³Ñ\8bлалда Ð±Ð°Ñ\80-ла $2 Ð¸Ñ\88Ñ\82ики Ð°Ò£Ð³Ñ\8bлалдаÑ\80нÑ\8bÒ£ $1 Ð¸Ñ\88Ñ\82ики Ð°Ò£Ð³Ñ\8bлалы көстүп турар.}}",
+       "category-subcat-count-limited": "Ук Ð°Ò£Ð³Ñ\8bлалда {{PLURAL:$1|1=биÑ\80|$1}} Ð¸Ñ\88Ñ\82ики Ð°Ò£Ð³Ñ\8bлал Ð±Ð°Ñ\80.",
+       "category-article-count": "{{PLURAL:$2|1=Ук Ð°Ò£Ð³Ñ\8bлалда Ñ\87үгле Ñ\87аңгÑ\8bÑ\81 Ð°Ñ\80Ñ\8bн Ð±Ð°Ñ\80.|Ук Ð°Ò£Ð³Ñ\8bлалда бар $2 арыннарының аразындан}} |{{PLURAL:$1 арынны көргүскен| $1 арыннарны көргүскен.}}",
+       "category-file-count": "{{PLURAL:$2|1=Ук Ð°Ò£Ð³Ñ\8bлал Ñ\87үгле Ñ\87аңгÑ\8bÑ\81 Ñ\84айлдÑ\8bг.|Ук Ð°Ò£Ð³Ñ\8bлалдÑ\8bÒ£ Ñ\88Ñ\83пÑ\82Ñ\83 $2 Ñ\84айлдаÑ\80Ñ\8bнÑ\8bÒ£ Ð°Ñ\80азÑ\8bндан $1 файлын көргүскен.}}",
        "listingcontinuesabbrev": "(уланчы)",
        "noindex-category": "Индекстелбес арынар",
        "broken-file-category": "Ажылдавайн турар файл-шөлүлгелиг арыннар",
        "nstab-mediawiki": "Чагаа",
        "nstab-template": "Майык",
        "nstab-help": "Дуза",
-       "nstab-category": "Ð\9aаÑ\82егоÑ\80иÑ\8f",
+       "nstab-category": "Ð\90ңгÑ\8bлал",
        "mainpage-nstab": "Кол арын",
        "nosuchaction": "Ындыг кылыг чок",
        "nosuchspecialpage": "Ындыг тускай арын чок",
        "templatesused": "Бо арында ажыглап турар{{PLURAL:$1|1=майык|майыктар}}:",
        "template-protected": "(камгалаан)",
        "template-semiprotected": "(чартык-чамдыызы камгалалдыг)",
-       "hiddencategories": "Бо арын{{PLURAL:$1|$1 көзүлбес категорияга|$1 көзүлбес категорияларга|1=бир көзүлбес категорияга}} хамааржыр:",
+       "hiddencategories": "Бо арын {{PLURAL:$1|$1 көзүлбес аңгылалга|$1 көзүлбес аңгылалдарга|1=чаңгыс көзүлбес аңгылалга}} хамааржыр:",
        "permissionserrorstext-withaction": "{{PLURAL:$1|1=дараазында чылдагаан-биле|дараазында чылдагааннар-биле}} $2-ни ажыглаар эрге силерде чок:",
        "recreate-moveddeleted-warn": "'''Кичээңейлиг. Ооң мурнунда казыттынган арынны катап тургузар деп тур Силер.'''\n\nОл арынны катап тургузары шынап-ла чугула бе, боданыңар.\nБо адаанда ол арынның казыышкыннар болгаш өскээр адалгалар журналдарын көргүскен.",
-       "moveddeleted-notice": "Ð\91о Ð°Ñ\80Ñ\8bн Ð°Ð¿ ÐºÐ°Ð°Ð²Ñ\8bÑ\82кан.\nÐ\90даанда Ð°Ð¿ ÐºÐ°Ð°Ð²Ñ\8bÑ\82кан Ð±Ð¸Ð»Ðµ өскээр адаан бижиктер шынзылгазын көргүскен.",
+       "moveddeleted-notice": "Ук Ð°Ñ\80Ñ\8bн ÐºÐ°Ð·Ñ\8bÑ\82Ñ\8bнган.\nÐ\90даанда ÐºÐ°Ð·Ñ\8bлда Ð±Ð¾Ð»Ð³Ð°Ñ\88 өскээр адаан бижиктер шынзылгазын көргүскен.",
        "post-expand-template-inclusion-warning": "Сагындырыг: Кошкан майыктарның ниити хемчээли дендии улуг.\nЧамдык майыктар коштунмаан боор.",
        "post-expand-template-inclusion-category": "Кожар майыктарга чөшпээрээн хемчээлин ашкан арыннар",
        "post-expand-template-argument-warning": "'''Кичээнгейлиг:''' бо арында тоң дора дээрге (по крайней мере) чаңгыс майыктыг, а ооң аргументизи эмин эрттир улуг калбаяр хемчээлдиг.\nЫндыг чергелиг аргументилерни эрттирип каан.",
        "filehist-filesize": "Файл хемчээли",
        "filehist-comment": "Тайылбыр",
        "imagelinks": "Файлдың ажыглаашкыны",
-       "linkstoimage": "Дараазында {{PLURAL:$1|1=арын|$1 арыннарның шөлүлгези файл}}:",
+       "linkstoimage": "Дараазында {{PLURAL:$1|1=арын|$1 ажыг арын ук файлче айтып турар}}:",
        "nolinkstoimage": "Бердинген файлче шөлүп турар арыннар чок.",
        "sharedupload-desc-here": "Моон $1 алган файл өске төлевилелдерге база ажыглаттынып болур.\nОоң [$2 тайылбыр арнындан] медээни адаанда киирген.",
        "upload-disallowed-here": "Бо файлды эде бижидип шыдавас силер.",
        "movelogpage": "Шимчээринге журнал",
        "movereason": "Чылдагаан:",
        "revertmove": "эгидип тургузары",
-       "delete_and_move": "Ырадыры болгаш шимчээри",
        "export": "Арынар үндүр дамчыдары",
        "allmessages": "Системниң дыңнадыглары",
        "allmessagesname": "Ат",
        "tooltip-ca-nstab-image": "Файлдың арны",
        "tooltip-ca-nstab-template": "Майыкты көөрү",
        "tooltip-ca-nstab-help": "Дуза арынын көөрү",
-       "tooltip-ca-nstab-category": "Ð\9aаÑ\82егоÑ\80иÑ\8f арны",
+       "tooltip-ca-nstab-category": "Ð\90ңгÑ\8bлал арны",
        "tooltip-minoredit": "Бо өскертилгени \"биче\" деп демдеглээр",
        "tooltip-save": "Эдилгелериңерни шыгжап арттырар",
        "tooltip-preview": "Арынның чижек көрүлдези: шыгжаар бетинде ону ажыглаар силер!",
index 473395f..54dfe40 100644 (file)
        "uploaded-script-svg": " \t\t\nЗнайдений небезпечний елемент з підтримкою сценаріїв «$1» в завантаженому файлі SVG.",
        "uploaded-hostile-svg": " \t\nЗнайдений небезпечний CSS-код в елементі стилю завантаженого файлу SVG.",
        "uploaded-event-handler-on-svg": " \t\nУстановка атрибутів обробника подій <code>$1=\"$2\"</code> не дозволено для SVG-файлів.",
-       "uploaded-href-attribute-svg": "У SVG-файлів не допускаються href-атрибути <code>&lt;$1 $2=\"$3\"&gt;</code> з не локальною ціллю (напр. http://, javascript:, тощо).",
        "uploaded-href-unsafe-target-svg": "У завантаженому SVG-файлі знайдено href до цілі <code>&lt;$1 $2=\"$3\"&gt;</code>, що не є безпечною.",
        "uploaded-animate-svg": "У завантаженому SVG-файлі знайдено теґ «animate», який може змінювати href, використовуючи атрибут «from» <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-setting-event-handler-svg": "Встановлення  атрибутів обробника подій заблоковане, у завантаженому файлі SVG знайдено <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "version-hook-subscribedby": "Підписаний на",
        "version-version": "($1)",
        "version-no-ext-name": "[без назви]",
-       "version-svn-revision": "(r$2)",
        "version-license": "Ліцензія MediaWiki",
        "version-ext-license": "Ліцензія",
        "version-ext-colheader-name": "Розширення",
index 17cfff1..56a55de 100644 (file)
        "rcshowhidemine": "ذاتی ترامیم $1",
        "rcshowhidemine-show": "دکھاؤ",
        "rcshowhidemine-hide": "چھپائیں",
+       "rcshowhidecategorization": "صفحاتی زمرہ بندی $1",
        "rcshowhidecategorization-show": "دکھائیں",
        "rcshowhidecategorization-hide": "چھپائیں",
        "rclinks": "آخری $2 روز میں ہونے والی $1 تبدیلیوں کا مشاہدہ کریں<br />$3",
        "recentchangeslinked-title": "\"$1\" سے متعلقہ تبدیلیاں",
        "recentchangeslinked-summary": "یہ ان تبدیلیوں کی فہرست ہے جو حال ہی میں کسی مخصوص صفحہ سے مربوط صفحات (یا مخصوص زمرہ کے اراکین) میں کی گئی ہیں\n\n[[Special:Watchlist|آپ کی زیر نظر فہرست]] میں یہ صفحات متجل (bold) نظر آئیں گےـ",
        "recentchangeslinked-page": "صفحۂ منصوبہ دیکھئے",
+       "recentchanges-page-added-to-category": "[[:$1]] کو زمرہ میں شامل کیا گیا",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] اور {{PLURAL:$2|ایک صفحہ|$2 صفحات}} زمرہ میں شامل {{PLURAL:$2|کیا گیا|$2 کیے گئے}}",
+       "recentchanges-page-removed-from-category": "[[:$1]] کو زمرہ سے ہٹایا",
        "autochange-username": "میڈیاویکی خودکار تبدیلیاں",
        "upload": "فائل اثقال/اپلوڈ فائل",
        "uploadbtn": "زبراثقال ملف (اپ لوڈ فائل)",
        "watchlist-details": "آپ کی زیرِنظرفہرست پر {{PLURAL:$1|$1 صفحہ ہے|$1 صفحات ہیں}}، اِس میں تبادلۂ خیال صفحات کی تعداد شامل نہیں.",
        "wlnote": "نیچےآخری $1 تبدیلیاں ہیں جو کے پیچھلے <b>$2</b> گھنٹوں میں کی گئیں۔",
        "wlshowlast": "دکھائیں آخری $1 گھنٹے $2 دن",
-       "watchlistall2": "تمام",
        "watchlist-hide": "چھپائیں",
        "watchlist-submit": "دکھائیں",
        "wlshowhideminor": "معمولی ترامیم",
index efe997e..fbcc83e 100644 (file)
        "uploaded-script-svg": "Tìm thấy phần tử “$1” có khả năng chạy kịch bản trong tập tin SVG được tải lên.",
        "uploaded-hostile-svg": "Tìm thấy CSS nguy hiểm trong phần tử style của tập tin SVG được tải lên.",
        "uploaded-event-handler-on-svg": "Không cho phép đặt thuộc tính xử lý sự kiện <code>$1=\"$2\"</code> trong tập tin SVG.",
-       "uploaded-href-attribute-svg": "Không cho phép thuộc tính href <code>&lt;$1 $2=\"$3\"&gt;</code> có đích ngoài máy (ví dụ http://, javascript:, v.v.) trong tập tin SVG.",
        "uploaded-href-unsafe-target-svg": "Tìm thấy href đến đích nguy hiểm <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
        "uploaded-animate-svg": "Tìm thấy thẻ “animate” có thể thay đổi href qua thuộc tính “from” <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
        "uploaded-setting-event-handler-svg": "Đã ngăn cản việc đặt thuộc tính xử lý sự kiện khi tìm thấy <code>&lt;$1 $2=\"$3\"&gt;</code> trong tập tin SVG được tải lên.",
index 3999604..0bbeced 100644 (file)
@@ -10,7 +10,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Rachmat.Wahidi",
-                       "Macofe"
+                       "Macofe",
+                       "Robin van der Vliet"
                ]
        },
        "tog-underline": "Dislienükön yümis:",
        "nstab-template": "Samafomot",
        "nstab-help": "Yufapad",
        "nstab-category": "Klad",
+       "mainpage-nstab": "Cifapad",
        "nosuchaction": "Atos no mögon",
        "nosuchactiontext": "Dun peflagöl fa el URL no sevädon vüke.\nBa epenol eli URL neverätiko, u ba esukol yümi dobik.\nMögos i, das atos sinifon, das dabinon säkädil pö program fa {{SITENAME}} pageböl.",
        "nosuchspecialpage": "Pad patik at no dabinon",
        "createaccountmail": "me pot leäktronik",
        "createaccountreason": "Kod:",
        "createacct-reason": "Kod",
-       "createacct-imgcaptcha-ph": "Penolöd vödemi, keli logol löpo",
        "createacct-submit": "Jafön kali olik",
        "createacct-benefit-body1": "{{PLURAL:$1|redakam|redakams}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pad|pads}}",
        "right-blockemail": "Blokön gitäti gebana ad sedön penedis leäktronik",
        "right-hideuser": "Blokön gebananemi, klänedölo oni de votikans",
        "right-ipblock-exempt": "Nedemön blokamis-IP, blokamis itjäfidik e grupiblokamis",
-       "right-proxyunbannable": "Nedemön blokamis itjäfidik pladulömas",
        "right-protect": "Votükön jelanivodis e redakön padis pejelöl",
        "right-editprotected": "Bevobön padis pejelöl äs \"{{int:protect-level-sysop}}\"",
        "right-editinterface": "Votükön gebanaloveikömi",
        "watchthisupload": "Galädolöd ragivi at",
        "filewasdeleted": "Ragiv labü nem at büo pelöpükon e poso pemoükon. Kontrololös eli $1 büä olöpükol oni dönu.",
        "filename-bad-prefix": "Nem ragiva fa ol palöpüköl primon me '''\"$1\"''': nem no bepenöl nomiko pagevöl itjäfidiko fa käms nulädik. Välolös, begö! nemi bepenöl pro ragiv olik.",
-       "upload-success-subj": "Löpükam eplöpon",
        "upload-proto-error": "Protok neverätik",
        "upload-proto-error-text": "Löpükam flagon elis URLs me <code>http://</code> u <code>ftp://</code> primölis.",
        "upload-file-error": "Pöl ninik",
        "contributions": "{{GENDER:$1|Gebanakeblünots}}",
        "contributions-title": "Gebanakeblünots pro $1",
        "mycontris": "Keblünots",
+       "anoncontribs": "Keblünots",
        "contribsub2": "{{GENDER:$3|Hiela|Jiela|Ela}} $1 ($2)",
        "nocontribs": "Votükams nonik petuvons me paramets at.",
        "uctop": "(anuik)",
        "movenosubpage": "Pad at no labon donapadis.",
        "movereason": "Kod:",
        "revertmove": "sädunön",
-       "delete_and_move": "Moükolöd e topätükolöd",
        "delete_and_move_text": "==Moükam peflagon==\n\nYeged nulik \"[[:$1]]\" ya dabinon. Vilol-li moükön oni ad jafön spadi pro topätükam?",
        "delete_and_move_confirm": "Si! moükolöd padi",
        "delete_and_move_reason": "Pemoükon ad jafön spadi pro topätükam se ''[[$1]]''",
index bd1b89d..39465f6 100644 (file)
        "nstab-image": "文件",
        "nstab-mediawiki": "信息",
        "nstab-template": "模板",
-       "nstab-help": "幫å¿\99é \81",
+       "nstab-help": "帮å¿\99页",
        "nstab-category": "分类",
        "mainpage-nstab": "封面",
        "nosuchaction": "嘸能操作",
        "changepassword-success": "密碼改好哉!\n能界登錄當中...",
        "changepassword-throttled": "侬试登录忒多次哉。等$1再试试看。",
        "resetpass_forbidden": "密码弗好更改",
-       "resetpass-no-info": "侬必须登录ä»\94å\86\8d好ç\9b´æ\8e¥è¿\9bå\85¥ç®\87å\8fªé¡µé\9d¢ã\80\82",
+       "resetpass-no-info": "侬必须登录è\91\97æ\89\8d好ç\9b´æ\8e¥è¿\9bå\85¥ç®\87å\8fªé¡µé\9d¢ã\80\82",
        "resetpass-submit-loggedin": "更改密码",
        "resetpass-submit-cancel": "取消",
        "resetpass-wrong-oldpass": "无效个临时或者现有密码。\n侬作兴已经成功拿密码改脱,或者已经请求一个新个临时密码。",
        "passwordreset-emailelement": "用户名:\n$1\n\n临时密码:\n$2",
        "changeemail": "更改或删脱电子邮箱地址",
        "changeemail-passwordrequired": "侬需要输入密码来确认本次更改。",
-       "changeemail-no-info": "侬必须登录著å\86\8d好ç\9b´æ\8e¥è¿\9bå\85¥ç®\87å\8fªé¡µé\9d¢ã\80\82",
+       "changeemail-no-info": "侬必须登录著æ\89\8d好ç\9b´æ\8e¥è¿\9bå\85¥ç®\87å\8fªé¡µé\9d¢ã\80\82",
        "changeemail-oldemail": "当前电子邮件地址:",
        "changeemail-newemail": "新个电子邮件地址:",
        "changeemail-password": "侬个{{SITENAME}}密码:",
        "nosuchsectiontext": "侬尝试编辑个章节弗存在。\n作兴是垃拉侬查看页面个辰光已经移动或者畀删除。",
        "loginreqtitle": "必须登录",
        "loginreqlink": "登录",
-       "loginreqpagetext": "侬必须$1再好查看其它页面。",
+       "loginreqpagetext": "请$1来望其他页面。",
        "accmailtitle": "密码已发送哉。",
        "accmailtext": "已经为[[User talk:$1|$1]]产生只随机密码,并且已经发送到$2。登录之后,侬可以垃拉<em>[[Special:ChangePassword|箇只页面]]</em>更改密码。",
        "newarticle": "(新)",
        "userpage-userdoesnotexist": "用户账户“<nowiki>$1</nowiki>”弗曾创建。请垃拉创建/编辑迭个页面前头先检查一记。",
        "userpage-userdoesnotexist-view": "用户账户“$1”弗曾创建。",
        "blocked-notice-logextract": "箇位用户箇歇畀封锁垃许。\n下头有最近个封锁纪录以供参考:",
-       "clearyourcache": "<strong>注意:</strong>垃拉保存之后,侬作兴要清除浏览器个缓存å\86\8d好ç\9c\8bè§\81æ\94¹å\8f\98ã\80\82\n* <strong>Firefoxæ\88\96Safariï¼\9a</strong>æ\8f¿ç\89¢â\80\9cShiftâ\80\9d个å\90\8cæ\97¶ç\82¹å\87»â\80\9cå\88·æ\96°â\80\9dï¼\8cæ\88\96æ\8f¿â\80\9cCtrl-F5â\80\9dæ\88\96â\80\9cCtrl-Râ\80\9dï¼\88Macä¸\8aæ\98¯â\80\9câ\8c\98-Râ\80\9dï¼\89\n* <strong>Google Chromeï¼\9a</strong>æ\8f¿â\80\9cCtrl-Shift-Râ\80\9dï¼\88Macä¸\8aæ\98¯â\80\9câ\8c\98-Shift-Râ\80\9dï¼\89\n* <strong>Internet Explorerï¼\9a</strong>æ\8f¿ç\89¢â\80\9cCtrlâ\80\9d个å\90\8cæ\97¶ç\82¹å\87»â\80\9cå\88·æ\96°â\80\9dï¼\8cæ\88\96æ\8f¿â\80\9cCtrl-F5â\80\9d\n* <strong>Operaï¼\9a</strong>å\9e\83æ\8b\89â\80\9cå·¥å\85·â\86\92é¦\96é\80\89项â\80\9dé\87\8cå\90\91æ¸\85é\99¤ç¼\93å­\98",
+       "clearyourcache": "<strong>注意:</strong>垃拉保存之后,侬作兴要清除浏览器个缓存æ\89\8d好ç\9c\8bè§\81æ\94¹å\8f\98ã\80\82\n* <strong>Firefoxæ\88\96Safariï¼\9a</strong>æ\8f¿ç\89¢â\80\9cShiftâ\80\9d个å\90\8cæ\97¶ç\82¹å\87»â\80\9cå\88·æ\96°â\80\9dï¼\8cæ\88\96æ\8f¿â\80\9cCtrl-F5â\80\9dæ\88\96â\80\9cCtrl-Râ\80\9dï¼\88Macä¸\8aæ\98¯â\80\9câ\8c\98-Râ\80\9dï¼\89\n* <strong>Google Chromeï¼\9a</strong>æ\8f¿â\80\9cCtrl-Shift-Râ\80\9dï¼\88Macä¸\8aæ\98¯â\80\9câ\8c\98-Shift-Râ\80\9dï¼\89\n* <strong>Internet Explorerï¼\9a</strong>æ\8f¿ç\89¢â\80\9cCtrlâ\80\9d个å\90\8cæ\97¶ç\82¹å\87»â\80\9cå\88·æ\96°â\80\9dï¼\8cæ\88\96æ\8f¿â\80\9cCtrl-F5â\80\9d\n* <strong>Operaï¼\9a</strong>å\9e\83æ\8b\89â\80\9cå·¥å\85·â\86\92é¦\96é\80\89项â\80\9dé\87\8cå\90\91æ¸\85é\99¤ç¼\93å­\98",
        "usercssyoucanpreview": "'''提示:''' 垃拉保存之前请用“{{int:showpreview}}”揿钮来测试新 CSS 。",
        "userjsyoucanpreview": "'''提示:''' 垃拉保存之前请用“{{int:showpreview}}”揿钮来测试新 JavaScript 。",
        "usercsspreview": "'''注意侬只是垃许预览侬个 CSS。'''\n'''还弗曾保存!'''",
        "copyrightwarning2": "请注意侬对{{SITENAME}}个所有贡献\n侪可能畀别个贡献者编辑,修改或删除。\n假使侬弗希望侬个文字畀任意修改搭仔再发布,请弗要提交。<br />\n侬同时也要向我伲保证侬提交个内容是侬自家所作,或得自一个弗受版权保护或相似自由个来源(参阅$1个细节)。\n''' 弗要垃拉弗曾获得授权个情况下头发表!'''",
        "longpageerror": "<strong>错误:侬提交个文本长度有$1KB,大于$2KB个顶大值。</strong>该文本弗能保存。",
        "readonlywarning": "<strong>警告:数据库锁定垃许维护,侬箇歇弗好保存侬个修改。</strong>侬作兴希望先拿侬个文字复制并保存到文本文件,等歇再修改。\n\n锁牢数据库个系统管理员有如下解释:$1",
-       "protectedpagewarning": "<strong>警告:此页已经畀保护,只有拥有管理员权限个用户å\86\8d好修æ\94¹ã\80\82</strong>æ\9c\80è¿\91个æ\97¥å¿\97å\9e\83æ\8b\89ä¸\8båº\95æ\8f\90ä¾\9b以便å\8f\82è\80\83ï¼\9a",
+       "protectedpagewarning": "<strong>警告:此页已经畀保护,只有拥有管理员权限个用户æ\89\8d好修æ\94¹ã\80\82</strong>æ\9c\80è¿\91个æ\97¥å¿\97å\9e\83æ\8b\89ä¸\8båº\95æ\8f\90ä¾\9b以便å\8f\82è\80\83ï¼\9a",
        "semiprotectedpagewarning": "'''注意:''' 本页面畀锁定,仅限注册用户编辑。\n最近个日志垃拉下底提供以便参考:",
-       "cascadeprotectedwarning": "<strong>警告:</strong>本页已经畀保护,只有拥有管理员权限个用户å\86\8d好修æ\94¹ï¼\8cå\9b ä¸ºæ\9c¬é¡µå·²ç\95\80ä¸\8båº\95ç\9c¼çº§è\81\94ä¿\9dæ\8a¤ä¸ª{{PLURAL:$1|ä¸\80å\8fª|å¤\9aå\8fª}}页é\9d¢æ\89\80åµ\8cå\85¥ï¼\9a",
+       "cascadeprotectedwarning": "<strong>警告:</strong>本页已经畀保护,只有拥有管理员权限个用户æ\89\8d好修æ\94¹ï¼\8cå\9b ä¸ºæ\9c¬é¡µå·²ç\95\80ä¸\8båº\95ç\9c¼çº§è\81\94ä¿\9dæ\8a¤ä¸ª{{PLURAL:$1|ä¸\80å\8fª|å¤\9aå\8fª}}页é\9d¢æ\89\80åµ\8cå\85¥ï¼\9a",
        "titleprotectedwarning": "'''警告:本页面已畀锁定,需要[[Special:ListGroupRights|指定权限]]方可创建。'''\n最近个日志垃拉下底提供以便参考:",
        "templatesused": "箇页有{{PLURAL:$1|个模板}}:",
        "templatesusedpreview": "{{PLURAL:$1|只模板}}垃拉箇趟预览里向拨使用:",
        "revdelete-selected-file": "已选择文件[[:$2]]个$1只版本:",
        "logdelete-selected": "选取$1个日志事件:",
        "revdelete-confirm": "假使侬想箇能介做个闲话,请确认侬已经清爽箇能介做个后果,外加箇个程序符合[[{{MediaWiki:Policy-url}}|政策]]。",
-       "revdelete-suppress-text": "<strong>只有</strong>出现下头眼情况å\86\8dåº\94é\98»æ­¢è®¿é\97®ï¼\9a\n* æ½\9cå\9c¨ä¸ªè¯½è°¤ä¿¡æ\81¯\n* å¼\97é\80\82å\90\88个个人信æ\81¯\n*: <em>家庭å\9c°å\9d\80ã\80\81ç\94µè¯\9då\8f·ç \81ã\80\81身份è¯\81å\8f·ç \81ç­\89ã\80\82</em>",
+       "revdelete-suppress-text": "<strong>只有</strong>出现下头眼情况æ\89\8dåº\94é\98»æ­¢è®¿é\97®ï¼\9a\n* æ½\9cå\9c¨ä¸ªè¯½è°¤ä¿¡æ\81¯\n* å¼\97é\80\82å\90\88个个人信æ\81¯\n*: <em>家庭å\9c°å\9d\80ã\80\81ç\94µè¯\9då\8f·ç \81ã\80\81身份è¯\81å\8f·ç \81ç­\89ã\80\82</em>",
        "revdelete-legend": "设置可见性之限制",
        "revdelete-hide-text": "修订文本",
        "revdelete-hide-image": "隐藏文件内容",
        "prefs-advancedwatchlist": "高级选项",
        "prefs-tabs-navigation-hint": "提示:侬可以用左、右箭头键来选项卡之间切换。",
        "userrights-user-editname": "输入用户名:",
-       "editusergroup": "编辑用户组",
+       "editusergroup": "编辑{{GENDER:$1|用户}}组",
+       "editinguser": "改动{{GENDER:$1|用户}}<strong>[[User:$1|$1]]</strong>个用户权限$2",
        "group-bot": "机器人",
        "group-sysop": "管理员",
        "group-bureaucrat": "行政员",
        "right-deleterevision": "删脱搭恢复页面个特定版本",
        "right-deletedhistory": "检视畀删脱个历史项目,弗包括相关文本",
        "right-browsearchive": "搜尋已刪頁",
+       "right-unblockself": "解封自家",
        "right-editusercss": "编辑其他用户个CSS文件",
        "right-edituserjs": "编辑其他用户个JavaScript文件",
        "right-editmyusercss": "编辑侬自家个用户CSS文件",
        "grant-group-page-interaction": "搭頁面互動",
        "grant-group-file-interaction": "搭媒體互動",
        "grant-group-watchlist-interaction": "搭侬个关注表互动",
-       "grant-group-email": "發電子信",
+       "grant-group-email": "发电子邮件",
+       "grant-createaccount": "建立账号",
+       "grant-createeditmovepage": "建立、编辑搭著捅荡页面",
        "grant-rollback": "畀修改擂轉到頁面",
        "grant-sendemail": "發電子信畀各許用戶",
        "newuserlogpage": "用户创建日志",
        "rcshowhideanons": "$1匿名用户",
        "rcshowhideanons-show": "显示",
        "rcshowhideanons-hide": "囥脱",
+       "rcshowhidepatr-hide": "囥脱",
        "rcshowhidemine": "$1我个编辑",
        "rcshowhidemine-show": "显示",
        "rcshowhidemine-hide": "囥脱",
        "uploadbtn": "上载文件",
        "reuploaddesc": "弗傳,轉到傳表單",
        "uploadnologin": "朆登录",
-       "uploadnologintext": "倷板定要$1再好上载文件。",
+       "uploadnologintext": "请$1来上载文件。",
        "uploaderror": "上载出错",
        "uploadtext": "拿下头只表格来上载文件。要查看或者搜寻之前上载个图片个说法,请到[[Special:FileList|已上载文件列表]],上载搭仔删脱也记录勒拉[[Special:Log/upload|上载日志]]里向。\n\n要勒拉页面里向摆进图片个说法,用下头该种形式个链接\n'''<nowiki>[[{{ns:file}}:文件.jpg]]</nowiki>''',\n'''<nowiki>[[{{ns:file}}:文件.png|替代文本]]</nowiki>''' 或者用\n'''<nowiki>[[{{ns:media}}:文件.ogg]]</nowiki>''' 直接链到文件。",
        "uploadlogpage": "文件上传日志",
        "categories": "页面分类",
        "categoriespagetext": "下底个{{PLURAL:$1|分类包括}}页面或者媒体文件。[[Special:UnusedCategories|未使用分类]]弗勒伊𡍲显示。另见[[Special:WantedCategories|需要个分类]]。",
        "deletedcontributions": "删脱个用户贡献",
+       "deletedcontributions-title": "删脱个用户贡献",
        "linksearch": "外部链接搜寻",
        "linksearch-ns": "名字空間:",
        "linksearch-ok": "搜尋",
        "wlheader-showupdated": "勒侬上趟查看之后畀修改个页面<strong>加粗</strong>显示。",
        "wlnote": "下底是{{PLURAL:$2|过去<strong>$2</strong>个钟头}}个{{PLURAL:$1|最后<strong>$1</strong>届更改}},截至$3 $4。",
        "wlshowlast": "显示上$1个钟头$2日天",
-       "watchlistall2": "全部",
+       "watchlist-hide": "囥脱",
+       "wlshowhidemine": "我个编辑",
        "watchlist-options": "监控列表选项",
        "watching": "监控……",
        "unwatching": "解除监控……",
        "undelete-search-submit": "搜尋",
        "namespace": "名字空间:",
        "invert": "反选择",
-       "tooltip-invert": "请选择该框来囥脱指定名字空间(搭有关名字空间,如果你选择)个页面更改",
+       "tooltip-invert": "打上扎钩头来囥脱选定名字空间个改动(如果勾选有关名字空间,箇么一道囥脱)",
        "namespace_association": "有关个名字空间",
-       "tooltip-namespace_association": "选中该复选框可包括搭选定名字空间有关个讨论页或子页面",
+       "tooltip-namespace_association": "打上扎钩头来加上搭选定名字空间搭界个讨论或主题名字空间",
        "blanknamespace": "(主)",
        "contributions": "{{GENDER:$1|用户}}贡献",
        "contributions-title": "$1个贡献",
        "year": "从箇年往前:",
        "sp-contributions-newbies": "只显示新用户个贡献",
        "sp-contributions-blocklog": "查封记录",
+       "sp-contributions-deleted": "删脱个用户贡献",
        "sp-contributions-talk": "讲张",
        "sp-contributions-search": "搜寻贡献记录",
        "sp-contributions-username": "IP地址要勿用户名:",
        "whatlinkshere-hidelinks": "$1链接",
        "whatlinkshere-filters": "过滤器",
        "blockip": "查封{{GENDER:$1|用户}}",
-       "blockiptext": "用下头个表单来禁止来自某一特定IP地址或用户名个修改权限。只有勒勒为仔防止破坏,及符合[[{{MediaWiki:Policy-url}}|政策]]个情况下底再好采取此行动。请勒勒下底输入一个具体个理由(譬如引述一只畀破坏个页面)。",
+       "blockiptext": "用下头个表单来禁止来自某一特定IP地址或用户名个修改权限。只有勒勒为仔防止破坏,及符合[[{{MediaWiki:Policy-url}}|政策]]个情况下底才好采取此行动。请勒勒下底输入一个具体个理由(譬如引述一只畀破坏个页面)。侬好用[https://zh.wikipedia.org/wiki/无类别域间路由 CIDR]语法查封IP地址段;允许个最大段是/$1(针对IPv4)搭/$2(针对IPv6)。",
        "ipaddressorusername": "IP地址或用户名:",
        "ipbreason": "理由:",
        "ipbsubmit": "封杀该个用户",
        "move-page-legend": "页面捅荡",
        "movepagetext": "用下底个表会重命名一只页面,全部历史侪移到新名字里。老个名字会变成戳到新名字个重定向页。注意检查[[Special:DoubleRedirects|双重重定向]]或者[[Special:BrokenRedirects|坏脱个重定向]]。倷有实概个责任,让链接仍旧链到俚笃应该链到个场化去。\n\n注意,如果新名字归面搭已经有页面个说话,老名字个页面'''弗'''会畀移动,除非归个是只空页面或者是只重定向并且呒不编辑历史。箇也就是讲,假使倷犯错误个说话,倷好拿一只重命名过个页面还原到原来个名字,但倷弗好覆盖一只已经来上个页面。\n\n<strong>警告!</strong>箇呒数会引起对一只热门页面剧烈个、想弗着个改变。来操作前头请倷确定倷已经充分了解行为个后果。",
        "movepagetalktext": "如果侬勾选此框,相关讨论页会自动移动到新标题,除非箇𡍲已经有著一只非空个讨论页。\n\n来箇种情况下底,如果有需要,侬必须手工移动或合并页面。",
-       "movenologintext": "倷板定要是å·²ç\99»è®°ç\94¨æ\88·ä¸\94å\8b\92æ\8b\89[[Special:UserLogin|ç\99»å½\95]]ç\8a¶æ\80\81ä¸\8b头å\86\8d好æ\8b¿é¡µé\9d¢æ\8d\85è\8d¡ã\80\82",
+       "movenologintext": "倷板定要是注å\86\8cç\94¨æ\88·å¹¶ä¸\94[[Special:UserLogin|ç\99»å½\95]]è\91\97æ\89\8d好æ\8b¿é¡µé\9d¢æ\8d\85è\8d¡ã\80\82",
        "newtitle": "新标题:",
        "move-watch": "监控来源以及目标页",
        "movepagebtn": "页面移动",
        "tooltip-feed-rss": "订阅本页",
        "tooltip-feed-atom": "此页个Atom 订阅",
        "tooltip-t-contributions": "{{GENDER:$1|箇位用户}}个贡献列表",
-       "tooltip-t-emailuser": "发电子信畀箇个用户",
+       "tooltip-t-emailuser": "发电子信畀{{GENDER:$1|箇位用户}}",
        "tooltip-t-upload": "上传文件",
        "tooltip-t-specialpages": "全部特殊页列表",
        "tooltip-t-print": "箇页个打印版",
        "tooltip-ca-nstab-main": "望内容页",
        "tooltip-ca-nstab-user": "查看用户页",
        "tooltip-ca-nstab-media": "查看媒体页",
-       "tooltip-ca-nstab-special": "箇是特æ®\8a页é\9d¢ï¼\8cå¼\97è\83½ç¼\96è¾\91",
+       "tooltip-ca-nstab-special": "箇是特å\88«é¡µé\9d¢ï¼\8cå¼\97好ç¼\96è¾\91",
        "tooltip-ca-nstab-project": "望项目页",
        "tooltip-ca-nstab-image": "望文件页",
        "tooltip-ca-nstab-mediawiki": "查看系统讯息",
        "confirmemail_body_changed": "用IP地址$1嗰人,(呒数是你侬)徕{{SITENAME}}里一个账号“$2”建起,用你侬个电子信箱地址。\n\n确认记箇账号是弗是你侬嘅,激活{{SITENAME}}里嗰电子信功能。用浏览器打开下向嗰链接:\n\n$3\n\n假使你侬*朆*注册过箇账号,揿下向嗰链接取消电子信确认:\n\n$5\n\n确认码会到$4过期。",
        "scarytranscludetoolong": "[URL忒长]",
        "deletedwhileediting": "<strong>警告:</strong>此页拉侬开始编辑之后已经畀删脱!",
-       "confirmrecreate": "用户[[User:$1|$1]] ([[User talk:$1|讲张]])勒拉倷开始编辑该页面之后拿俚删脱,理由是: : ''$2'' 请拿定章程,倷阿是真个要重建该页面。",
+       "confirmrecreate": "用户[[User:$1|$1]]([[User talk:$1|讲张]])勒拉倷开始编辑该页面之后拿俚{{GENDER:$1|删脱}},理由是:\n: <em>$2</em>\n请拿定章程,倷啊是真个要重建该页面。",
        "confirm_purge_button": "确定",
        "comma-separator": "、",
        "parentheses": "($1)",
        "revdelete-unrestricted": "已移除对管理员个限制",
        "logentry-block-block": "$1{{GENDER:$2|查封}}{{GENDER:$4|$3}},终止辰光为$5$6",
        "logentry-move-move": "$1{{GENDER:$2|捅荡}}页面$3到$4",
+       "logentry-move-move-noredirect": "$1{{GENDER:$2|捅荡}}页面$3到$4,弗留重定向",
        "logentry-newusers-create": "用户账号$1畀{{GENDER:$2|创建}}",
        "logentry-newusers-create2": "用户账号$3畀$1{{GENDER:$2|创建}}",
        "logentry-newusers-autocreate": "用户账号$1畀自动{{GENDER:$2|创建}}",
index 700d739..8c38430 100644 (file)
@@ -87,7 +87,8 @@
                        "Cdz",
                        "凡人丶",
                        "Nbdd0121",
-                       "Apflu"
+                       "Apflu",
+                       "飞舞回堂前"
                ]
        },
        "tog-underline": "链接下划线:",
        "uploaded-script-svg": "在上传的SVG文件中找到可编写脚本的元素“$1”。",
        "uploaded-hostile-svg": "在上传的SVG文件中的样式元素中找到不安全CSS。",
        "uploaded-event-handler-on-svg": "在SVG文件中不允许设置event-handler属性<code>$1=\"$2\"</code>。",
-       "uploaded-href-attribute-svg": "在SVG文件中不允许href属性<code>&lt;$1 $2=\"$3\"&gt;</code>带非本地目标(例如http://、javascript:等)。",
-       "uploaded-href-unsafe-target-svg": "在上传的SVG文件中找到href至不安全目标<code>&lt;$1 $2=\"$3\"&gt;</code>。",
+       "uploaded-href-attribute-svg": "SVG文件中的href属性只允许链接至http://或https://目标,已找到<code>&lt;$1 $2=\"$3\"&gt;</code>。",
+       "uploaded-href-unsafe-target-svg": "在上传的SVG文件中找到了至不安全数据的href:URI目标<code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploaded-animate-svg": "在上传的SVG文件找到“animate”标签,它可能会更改href,使用“from”属性<code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploaded-setting-event-handler-svg": "设置event-handler属性时受阻,在上传的SVG文件中找到<code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploaded-setting-href-svg": "使用“set”标签加入“href”属性至父元素时受阻。",
        "tooltip-invert": "请选择该框以隐藏指定名字空间(及相关名字空间,若被选择)的页面更改",
        "tooltip-whatlinkshere-invert": "勾选此框以隐藏来自选定名字空间内页面的链接。",
        "namespace_association": "关联的名字空间",
-       "tooltip-namespace_association": "选中此复选框可包括与选定名字空间相关的讨论页或子页面",
+       "tooltip-namespace_association": "选中此复选框可包括与选定名字空间相关的讨论或主题名字空间",
        "blanknamespace": "(主)",
        "contributions": "{{GENDER:$1|用户}}贡献",
        "contributions-title": "$1的用户贡献",
        "pageinfo-robot-index": "允许",
        "pageinfo-robot-noindex": "不允许",
        "pageinfo-watchers": "页面监视者数",
-       "pageinfo-visiting-watchers": "访问最近编辑的页面浏览者数量",
+       "pageinfo-visiting-watchers": "已访问最近编辑的页面监视者数",
        "pageinfo-few-watchers": "少于$1个监视者",
        "pageinfo-few-visiting-watchers": "这里可能有或可能没有观察用户正在访问最近编辑",
        "pageinfo-redirects-name": "至该页面的重定向数",
        "version-libraries-license": "许可协议",
        "version-libraries-description": "描述",
        "version-libraries-authors": "作者",
-       "redirect": "重定向(按文件、用户、页面、修订版本ID或日志ID)",
+       "redirect": "重定向(按文件、用户、页面、修订版本或日志ID)",
        "redirect-legend": "重定向至文件或页面",
        "redirect-summary": "本特殊页面可以跳转至一个文件(提供文件名)、页面(提供修订版本ID或页面ID)、用户页(提供数字用户ID)或日志记录(提供日志ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]]、[[{{#Special:Redirect}}/user/101]]或[[{{#Special:Redirect}}/logid/186]]。",
        "redirect-submit": "提交",
        "logentry-newusers-byemail": "$1创建用户$3,并且密码已通过电子邮件发送",
        "logentry-newusers-autocreate": "用户账户$1被自动{{GENDER:$2|创建}}",
        "logentry-protect-move_prot": "$1将保护设置从$4{{GENDER:$2|移动}}到了$3",
-       "logentry-protect-unprotect": "$1{{GENDER:$2|移除了}}来自$3的保护",
+       "logentry-protect-unprotect": "$1{{GENDER:$2|移除了}}$3的保护",
        "logentry-protect-protect": "$1{{GENDER:$2|保护了}}$3 $4",
        "logentry-protect-protect-cascade": "$1{{GENDER:$2|保护了}}$3 $4[级联]",
        "logentry-protect-modify": "$1{{GENDER:$2|更改了}}$3的保护等级$4",
index 2ac3e67..6d680e7 100644 (file)
        "missingarticle-rev": "(修訂#:$1)",
        "missingarticle-diff": "(差異:$1, $2)",
        "readonly_lag": "資料庫已自動鎖定,正在等候次要資料庫同步資料到主要資料庫",
+       "nonwrite-api-promise-error": "非寫入 API 動作 'Promise-Non-Write-API-Action' HTTP 標頭已送出但請求被送至 API 寫入模組。",
        "internalerror": "內部錯誤",
        "internalerror_info": "內部錯誤:$1",
        "internalerror-fatal-exception": "嚴重例外類型 \"$1\"",
        "botpasswords-label-delete": "刪除",
        "botpasswords-label-resetpassword": "重設密碼",
        "botpasswords-label-grants": "適用的權限:",
+       "botpasswords-help-grants": "每個授權會給予擁有該授權的使用者帳號列於該授權清單的使用者權限。 請參考 [[Special:ListGrants|授權表]] 取得更多資訊。",
        "botpasswords-label-restrictions": "使用限制:",
        "botpasswords-label-grants-column": "已授權",
        "botpasswords-bad-appid": "機器人名稱 \"$1\" 無效。",
        "botpasswords-updated-body": "機器人密碼 \"$1\" 已修改成功。",
        "botpasswords-deleted-title": "已刪除機器人密碼",
        "botpasswords-deleted-body": "機器人密碼 \"$1\" 已刪除。",
+       "botpasswords-newpassword": "用來登入 <strong>$1</strong> 的新密碼為 <strong>$2</strong>。 <em>請記錄此密碼以供未來參考使用。</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider 無法使用。",
        "botpasswords-restriction-failed": "機器人密碼限制已拒絕此次登入。",
        "botpasswords-invalid-name": "指定的使用者名稱未包含機器人密碼分隔字元 (\"$1\")。",
        "undo-summary": "取消由 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 所作出的修訂 $1",
        "undo-summary-username-hidden": "還原隱藏使用者的修訂 $1",
        "cantcreateaccounttitle": "無法建立帳號",
-       "cantcreateaccount-text": "自這個 IP 位址(<strong>$1</strong>)建立帳號已經被 [[User:$3|$3]] 封鎖。\n\n$3 封鎖的原因是 <em>$2</em>",
+       "cantcreateaccount-text": "自這個 IP 位址 (<strong>$1</strong>) 建立帳號已經被 [[User:$3|$3]] 封鎖。\n\n$3 封鎖的原因是 <em>$2</em>",
        "cantcreateaccount-range-text": "來自 IP 位址範圍 '''$1''',包含您的 IP 位址 ('''$4''') 所建立的帳號已經被 [[User:$3|$3]] 封鎖。\n\n$3 封鎖的原因是 ''$2''",
        "viewpagelogs": "檢視此頁面的日誌",
        "nohistory": "此頁沒有任何的修訂記錄。",
        "uploaded-script-svg": "於已上傳的 SVG 檔案中找到可程式的腳本標籤 \"$1\"。",
        "uploaded-hostile-svg": "於已上傳的 SVG 檔案的樣式標籤中找到不安全的 CSS。",
        "uploaded-event-handler-on-svg": "不允許在 SVG 檔案設定 event-handler 屬性 <code>$1=\"$2\"</code>。",
-       "uploaded-href-attribute-svg": "不允許在 SVG 檔案中的 href 屬性 <code>&lt;$1 $2=\"$3\"&gt;</code> 使用非本地的目標  (例如 http://, javascript:, 等)。",
-       "uploaded-href-unsafe-target-svg": "於已上傳的 SVG 檔案中找到 href 連結至不安全的目標 <code>&lt;$1 $2=\"$3\"&gt;</code>。",
+       "uploaded-href-attribute-svg": "發現 SVG 檔案中的 href 屬性為 <code>&lt;$1 $2=\"$3\"&gt;</code>,僅允許連結至 http:// 或 https:// 的目標。",
+       "uploaded-href-unsafe-target-svg": "於已上傳的 SVG 檔案中找到 href 連結至不安全的資料:URI 目標為 <code>&lt;$1 $2=\"$3\"&gt;</code>。",
        "uploaded-animate-svg": "於已上傳的 SVG 檔案中找到 \"animate\" 標籤可能會使用 \"from\" 屬性 <code>&lt;$1 $2=\"$3\"&gt;</code> 更改 href。",
        "uploaded-setting-event-handler-svg": "於已上傳的 SVG 檔案中找到 <code>&lt;$1 $2=\"$3\"&gt;</code>,已禁止設定 event-handler 屬性。",
        "uploaded-setting-href-svg": "已禁止使用 \"set\" 標籤來加入 \"href\" 屬性至父元素。",
        "upload-too-many-redirects": "該 URL 重新導向至太多其他位址",
        "upload-http-error": "發生 HTTP 錯誤:$1",
        "upload-copy-upload-invalid-domain": "此網域不允許複製上傳的檔案。",
+       "upload-foreign-cant-upload": "此 wiki 未設定可上傳來自遠端檔案庫的請求的檔案。",
        "upload-dialog-title": "上傳檔案",
        "upload-dialog-button-cancel": "取消",
        "upload-dialog-button-done": "完成",
        "upload-form-label-select-file": "選擇檔案",
        "upload-form-label-infoform-title": "詳細資料",
        "upload-form-label-infoform-name": "名稱",
+       "upload-form-label-infoform-name-tooltip": "具獨特描述性的檔案標題,將會用來做為檔名。 您可以使用您的語系及空白做為檔名,請勿包含檔案副檔名。",
        "upload-form-label-infoform-description": "描述",
+       "upload-form-label-infoform-description-tooltip": "簡短描述該作品任何值得說明的事項。\n以照片為例,可提及照片中的事物、情境及地點。",
        "upload-form-label-usage-title": "用法",
        "upload-form-label-usage-filename": "檔案名稱",
        "foreign-structured-upload-form-label-own-work": "這是我的作品",
        "movenosubpage": "此頁面沒有任何子頁面。",
        "movereason": "原因",
        "revertmove": "還原",
-       "delete_and_move_text": "== 需要刪除 ==\n目標頁面 \"[[:$1]]\" 已存在。\n您是否要刪除該頁面以完成移動?",
+       "delete_and_move_text": "目標頁面 \"[[:$1]]\" 已存在。\n您是否要刪除該頁面以完成移動?",
        "delete_and_move_confirm": "是的,刪除該頁面",
        "delete_and_move_reason": "已刪除讓來自 [[$1]] 頁面可移動",
        "selfmove": "原始標題與目標標題相同,無法移動至自身頁面。",
        "move-leave-redirect": "留下重新導向頁面",
        "protectedpagemovewarning": "<strong>警告:</strong>本頁已經被保護,只有擁有管理員權限的使用者才可移動。\n以下提供最近的日誌以便參考:",
        "semiprotectedpagemovewarning": "<strong>注意:</strong>本頁已經被保護,只有已註冊的使用者才可移動。\n以下提供最近的日誌以便參考:",
-       "move-over-sharedrepo": "== 檔案已存在 ==\n[[:$1]] 已存在於共用檔案庫,將檔案移動到此標題會覆蓋該共用檔案。",
+       "move-over-sharedrepo": "[[:$1]] 已存在於共用檔案庫,將檔案移動到此標題會覆蓋該共用檔案。",
        "file-exists-sharedrepo": "選擇的檔案名稱於共用檔案庫已有其他檔案使用。\n請改選擇其他名稱。",
        "export": "匯出頁面",
        "exporttext": "您可以匯出指定頁面或多頁的文字與編輯歷史,使用 XML 格式包裝。\n這些檔案可以匯入至其他使用 MediaWiki 的 Wiki,透過 [[Special:Import|匯入頁面]]。\n\n要匯出頁面,請在下方文字方塊中輸入頁面標題,一個標題使用一行,並選擇是否要匯出目前的修訂含所有的歷史修訂記錄,或者只匯出目前的修訂與最後編輯的資訊。\n\n在文字方塊中您也可使用連結,如:[[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] 代表匯出頁面 \"[[{{MediaWiki:Mainpage}}]]\"。",
        "pageinfo-robot-index": "允許",
        "pageinfo-robot-noindex": "不允許",
        "pageinfo-watchers": "頁面監視者數",
-       "pageinfo-visiting-watchers": "最後一次編輯後參觀人數",
+       "pageinfo-visiting-watchers": "已訪問最近編輯的頁面監視者數",
        "pageinfo-few-watchers": "少於 $1 名監視者",
        "pageinfo-few-visiting-watchers": "參觀近期編輯的使用者可能為監視使用者",
        "pageinfo-redirects-name": "指向此頁面的重新導向頁面數量",
        "version-libraries-license": "授權條款",
        "version-libraries-description": "描述",
        "version-libraries-authors": "作者",
-       "redirect": "重新導向至檔案、使用者、頁面或修訂 ID",
+       "redirect": "依檔案、使用者、頁面、修訂或日誌 ID 來重新導向",
        "redirect-legend": "重新導向至檔案或頁面",
-       "redirect-summary": "此特殊頁面可用來重新導向至檔案 (指定檔案名稱)、頁面 (指定修訂 ID 或頁面 ID) 或使用者頁面 (指定使用者 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]] 或 [[{{#Special:Redirect}}/user/101]]。",
+       "redirect-summary": "此特殊頁面可用來重新導向至檔案 (指定檔案名稱)、頁面 (指定修訂 ID 或頁面 ID)、使用者頁面 (指定使用者 ID)、或者日誌項目 (指定日誌 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]]、[[{{#Special:Redirect}}/user/101]] 或 [[{{#Special:Redirect}}/logid/186]]。",
        "redirect-submit": "執行",
        "redirect-lookup": "查詢:",
        "redirect-value": "值:",
        "redirect-page": "頁面 ID",
        "redirect-revision": "頁面修訂 ID",
        "redirect-file": "檔案名稱",
+       "redirect-logid": "日誌 ID",
        "redirect-not-exists": "查無值",
        "fileduplicatesearch": "搜尋重複檔案",
        "fileduplicatesearch-summary": "依據雜湊值 (Hash) 來搜尋重複的檔案。",
        "expand_templates_preview": "預覽",
        "expand_templates_preview_fail_html": "<em>因連線階段的資料遺失且 {{SITENAME}} 已開啟顯示原始 HTML 功能,為預防 JavaScript 攻擊已隱藏預覽內容。</em>\n\n<strong>若您目前的預覽動作並無非法,請再試一次。</strong>\n若仍然無效,請嘗試[[Special:UserLogout|登出]]並再登入一次。",
        "expand_templates_preview_fail_html_anon": "<em>因您尚未登入且 {{SITENAME}} 已開啟顯示原始 HTML 功能,為預防 JavaScript 攻擊已隱藏預覽內容。</em>\n\n<strong>若您目前的預覽動作並無非法,請[[Special:UserLogin|登入]]後再試一次。</strong>",
-       "pagelanguage": "頁面語言選擇器",
+       "pagelanguage": "變更頁面語言",
        "pagelang-name": "頁面",
        "pagelang-language": "語言",
        "pagelang-use-default": "使用預設語言",
        "pagelang-submit": "送出",
        "right-pagelang": "變更頁面語言",
        "action-pagelang": "變更頁面語言",
-       "log-name-pagelang": "è®\8aæ\9b´èª\9eè¨\80日誌",
+       "log-name-pagelang": "èª\9eè¨\80è®\8aæ\9b´日誌",
        "log-description-pagelang": "此頁為頁面語言的變更日誌。",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|已更改}}頁面 $3 的語言從 $4 到 $5",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|已更改}}頁面 $3 的語言從 $4 到 $5",
        "default-skin-not-found": "哎呀!您於 <code dir=\"ltr\">$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您的安裝程序應包含以下{{PLURAL:$4|外觀}}。請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何{{PLURAL:$4|開啟外觀並設為預設值}}的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins 使用 Git 下載外觀]。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的外觀 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 操作手冊:外觀自動搜尋])。您可以將下列{{PLURAL:$5|行}}貼上至 <code>LocalSettings.php</code> 來開啟{{PLURAL:$5|所有}}目前已經安裝的{{PLURAL:$5|外觀}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
        "default-skin-not-found-no-skins": "哎呀!您於 <code>$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您未安裝任何的外觀。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的外觀。 請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins 使用 Git 下載外觀]。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (已開啟)",
index 2a1f85b..8fa13c6 100644 (file)
@@ -395,7 +395,6 @@ $specialPageAliases = array(
        'Blankpage'                 => array( 'BlankPage' ),
        'Block'                     => array( 'Block', 'BlockIP', 'BlockUser' ),
        'Booksources'               => array( 'BookSources' ),
-       'BotPasswords'              => array( 'BotPasswords' ),
        'BrokenRedirects'           => array( 'BrokenRedirects' ),
        'Categories'                => array( 'Categories' ),
        'ChangeContentModel'        => array( 'ChangeContentModel' ),
index 291920b..5a7f769 100644 (file)
@@ -84,7 +84,7 @@ abstract class Maintenance {
        protected $mQuiet = false;
        protected $mDbUser, $mDbPass;
 
-       // A description of the script, children should change this
+       // A description of the script, children should change this via addDescription()
        protected $mDescription = '';
 
        // Have we already loaded our user input?
diff --git a/maintenance/archives/patch-bot_passwords.sql b/maintenance/archives/patch-bot_passwords.sql
deleted file mode 100644 (file)
index bd60ff7..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---
--- This table contains a user's bot passwords: passwords that allow access to
--- the account via the API with limited rights.
---
-CREATE TABLE /*_*/bot_passwords (
-  -- Foreign key to user.user_id
-  bp_user int NOT NULL,
-
-  -- Application identifier
-  bp_app_id varbinary(32) NOT NULL,
-
-  -- Password hashes, like user.user_password
-  bp_password tinyblob NOT NULL,
-
-  -- Like user.user_token
-  bp_token binary(32) NOT NULL default '',
-
-  -- JSON blob for MWRestrictions
-  bp_restrictions blob NOT NULL,
-
-  -- Grants allowed to the account when authenticated with this bot-password
-  bp_grants blob NOT NULL,
-
-  PRIMARY KEY ( bp_user, bp_app_id )
-) /*$wgDBTableOptions*/;
index a2ea554..deab60b 100644 (file)
@@ -38,7 +38,7 @@ class AttachLatest extends Maintenance {
                $this->addOption( "fix", "Actually fix the entries, will dry run otherwise" );
                $this->addOption( "regenerate-all",
                        "Regenerate the page_latest field for all records in table page" );
-               $this->mDescription = "Fix page_latest entries in the page table";
+               $this->addDescription( 'Fix page_latest entries in the page table' );
        }
 
        public function execute() {
index 1569234..40a877f 100644 (file)
@@ -34,7 +34,7 @@ require_once __DIR__ . '/Benchmarker.php';
 class BenchHttpHttps extends Benchmarker {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Benchmark HTTP request vs HTTPS request.";
+               $this->addDescription( 'Benchmark HTTP request vs HTTPS request.' );
        }
 
        public function execute() {
index 810937a..439947d 100644 (file)
@@ -34,7 +34,7 @@ require_once __DIR__ . '/Benchmarker.php';
 class BenchWikimediaBaseConvert extends Benchmarker {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Benchmark for Wikimedia\\base_convert.";
+               $this->addDescription( 'Benchmark for Wikimedia\base_convert.' );
                $this->addOption( "inbase", "Input base", false, true );
                $this->addOption( "outbase", "Output base", false, true );
                $this->addOption( "length", "Size in digits to generate for input", false, true );
index 572c548..9acb93a 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Benchmarker.php';
 class BenchmarkDeleteTruncate extends Benchmarker {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Benchmarks SQL DELETE vs SQL TRUNCATE.";
+               $this->addDescription( 'Benchmarks SQL DELETE vs SQL TRUNCATE.' );
        }
 
        public function execute() {
index 698a0f0..8f7f61d 100644 (file)
@@ -34,7 +34,7 @@ require_once __DIR__ . '/Benchmarker.php';
 class BenchIfSwitch extends Benchmarker {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Benchmark if elseif... versus switch case.";
+               $this->addDescription( 'Benchmark if elseif... versus switch case.' );
        }
 
        public function execute() {
index 44c8e03..f34d27f 100644 (file)
@@ -41,7 +41,7 @@ function bfNormalizeTitleStrReplace( $str ) {
 class BenchStrtrStrReplace extends Benchmarker {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Benchmark for strtr() vs str_replace().";
+               $this->addDescription( 'Benchmark for strtr() vs str_replace().' );
        }
 
        public function execute() {
index b742f66..bd18adb 100644 (file)
@@ -64,11 +64,10 @@ class BenchUtf8TitleCheck extends Benchmarker {
                $this->canRun = function_exists( 'mb_check_encoding' );
 
                if ( $this->canRun ) {
-                       $this->mDescription = "Benchmark for using a regexp vs. mb_check_encoding " .
-                               "to check for UTF-8 encoding.";
-                       mb_internal_encoding( 'UTF-8' );
+                       $this->addDescription( "Benchmark for using a regexp vs. mb_check_encoding " .
+                               "to check for UTF-8 encoding." );
                } else {
-                       $this->mDescription = "CANNOT RUN benchmark using mb_check_encoding: function not available.";
+                       $this->addDescription( 'CANNOT RUN benchmark using mb_check_encoding: function not available.' );
                }
        }
 
index 8446694..ea919ef 100644 (file)
@@ -34,7 +34,7 @@ require_once __DIR__ . '/Benchmarker.php';
 class BenchWfIsWindows extends Benchmarker {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Benchmark for wfIsWindows.";
+               $this->addDescription( 'Benchmark for wfIsWindows.' );
        }
 
        public function execute() {
index 1446871..3106f89 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Benchmarker.php';
 class BenchmarkHooks extends Benchmarker {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Benchmark MediaWiki Hooks.';
+               $this->addDescription( 'Benchmark MediaWiki Hooks.' );
        }
 
        public function execute() {
index 9eca73c..e67d226 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Benchmarker.php';
 class BenchmarkPurge extends Benchmarker {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Benchmark the Squid purge functions.";
+               $this->addDescription( 'Benchmark the Squid purge functions.' );
        }
 
        public function execute() {
index 5d98e1f..8687f81 100644 (file)
@@ -37,7 +37,7 @@ class ChangePassword extends Maintenance {
                $this->addOption( "user", "The username to operate on", false, true );
                $this->addOption( "userid", "The user id to operate on", false, true );
                $this->addOption( "password", "The password to use", true, true );
-               $this->mDescription = "Change a user's password";
+               $this->addDescription( "Change a user's password" );
        }
 
        public function execute() {
index 500fc35..985df56 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class CheckBadRedirects extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Check for bad redirects";
+               $this->addDescription( 'Check for bad redirects' );
        }
 
        public function execute() {
index 7a85d64..9ec61dc 100644 (file)
@@ -12,8 +12,8 @@ require_once __DIR__ . '/Maintenance.php';
 class CheckComposerLockUpToDate extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
-                       'Checks whether your composer.lock file is up to date with the current composer.json';
+               $this->addDescription(
+                       'Checks whether your composer.lock file is up to date with the current composer.json' );
        }
 
        public function execute() {
index 9761927..9a8203f 100644 (file)
@@ -31,7 +31,7 @@ class CheckImages extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Check images to see if they exist, are readable, etc";
+               $this->addDescription( 'Check images to see if they exist, are readable, etc' );
                $this->setBatchSize( 1000 );
        }
 
index 2f533cf..889c903 100644 (file)
@@ -30,8 +30,8 @@ class CheckLess extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
-                       'Checks LESS files for errors by running the LessTestSuite PHPUnit test suite';
+               $this->addDescription(
+                       'Checks LESS files for errors by running the LessTestSuite PHPUnit test suite' );
        }
 
        public function execute() {
index 30a23d3..4821e04 100644 (file)
@@ -36,7 +36,7 @@ class CheckSyntax extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Check syntax for all PHP files in MediaWiki";
+               $this->addDescription( 'Check syntax for all PHP files in MediaWiki' );
                $this->addOption( 'with-extensions', 'Also recurse the extensions folder' );
                $this->addOption(
                        'path',
index 6f4d170..1b9a1cc 100644 (file)
@@ -35,7 +35,7 @@ class CheckUsernames extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Verify that database usernames are actually valid";
+               $this->addDescription( 'Verify that database usernames are actually valid' );
                $this->setBatchSize( 1000 );
        }
 
index f1467d5..7f67b60 100644 (file)
@@ -33,7 +33,7 @@ class CleanupAncientTables extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Cleanup ancient tables and indexes";
+               $this->addDescription( 'Cleanup ancient tables and indexes' );
                $this->addOption( 'force', 'Actually run this script' );
        }
 
index 437abe9..2efd7ab 100644 (file)
@@ -33,7 +33,7 @@ class CleanupBlocks extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Cleanup user blocks with user names not matching the 'user' table";
+               $this->addDescription( "Cleanup user blocks with user names not matching the 'user' table" );
                $this->setBatchSize( 1000 );
        }
 
index e0a0f49..a79c2d3 100644 (file)
@@ -42,7 +42,7 @@ class CapsCleanup extends TableCleanup {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Script to cleanup capitalization";
+               $this->addDescription( 'Script to cleanup capitalization' );
                $this->addOption( 'namespace', 'Namespace number to run caps cleanup on', false, true );
        }
 
index ab2d808..0110685 100644 (file)
@@ -42,7 +42,7 @@ class ImageCleanup extends TableCleanup {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Script to clean up broken, unparseable upload filenames";
+               $this->addDescription( 'Script to clean up broken, unparseable upload filenames' );
        }
 
        protected function processRow( $row ) {
index 810fad9..19949bc 100644 (file)
@@ -34,7 +34,8 @@ class CleanupRemovedModules extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Remove cache entries for removed ResourceLoader modules from the database';
+               $this->addDescription(
+                       'Remove cache entries for removed ResourceLoader modules from the database' );
                $this->addOption( 'batchsize', 'Delete rows in batches of this size. Default: 500', false, true );
        }
 
index b43ce81..020f5cd 100644 (file)
@@ -32,7 +32,7 @@ class CleanupSpam extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Cleanup all spam from a given hostname";
+               $this->addDescription( 'Cleanup all spam from a given hostname' );
                $this->addOption( 'all', 'Check all wikis in $wgLocalDatabases' );
                $this->addOption( 'delete', 'Delete pages containing only spam instead of blanking them' );
                $this->addArg(
index 07df1b1..574d5bd 100644 (file)
@@ -35,7 +35,7 @@ require_once __DIR__ . '/cleanupTable.inc';
 class TitleCleanup extends TableCleanup {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Script to clean up broken, unparseable titles";
+               $this->addDescription( 'Script to clean up broken, unparseable titles' );
        }
 
        /**
index 70490e1..480059d 100644 (file)
@@ -37,7 +37,7 @@ class UploadStashCleanup extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Clean up abandoned files in temporary uploaded file stash";
+               $this->addDescription( 'Clean up abandoned files in temporary uploaded file stash' );
                $this->setBatchSize( 50 );
        }
 
index 16f7b61..d8c682b 100644 (file)
@@ -46,7 +46,7 @@ class WatchlistCleanup extends TableCleanup {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Script to remove broken, unparseable titles in the Watchlist";
+               $this->addDescription( 'Script to remove broken, unparseable titles in the Watchlist' );
                $this->addOption( 'fix', 'Actually remove entries; without will only report.' );
        }
 
index 6a6527f..4b5773c 100644 (file)
@@ -32,7 +32,7 @@ class ClearInterwikiCache extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Clear all interwiki links for all languages from the cache";
+               $this->addDescription( 'Clear all interwiki links for all languages from the cache' );
        }
 
        public function execute() {
index 98441b6..e5f0bb3 100644 (file)
@@ -27,7 +27,7 @@ require_once __DIR__ . '/Maintenance.php';
 class CompareParserCache extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Parse random pages and compare output to cache.";
+               $this->addDescription( 'Parse random pages and compare output to cache.' );
                $this->addOption( 'namespace', 'Page namespace number', true, true );
                $this->addOption( 'maxpages', 'Number of pages to try', true, true );
        }
index e67c439..f2540c7 100644 (file)
@@ -43,7 +43,7 @@ class CompareParsers extends DumpIterator {
        public function __construct() {
                parent::__construct();
                $this->saveFailed = false;
-               $this->mDescription = "Run a file or dump with several parsers";
+               $this->addDescription( 'Run a file or dump with several parsers' );
                $this->addOption( 'parser1', 'The first parser to compare.', true, true );
                $this->addOption( 'parser2', 'The second parser to compare.', true, true );
                $this->addOption( 'tidy', 'Run tidy on the articles.', false, false );
index 3113533..eeb2e6d 100644 (file)
@@ -55,7 +55,7 @@ class ConvertExtensionToRegistration extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Converts extension entry points to the new JSON registration format';
+               $this->addDescription( 'Converts extension entry points to the new JSON registration format' );
                $this->addArg( 'path', 'Location to the PHP entry point you wish to convert',
                        /* $required = */ true );
                $this->addOption( 'skin', 'Whether to write to skin.json', false, false );
index 15ca14b..fa9c574 100644 (file)
@@ -36,9 +36,9 @@ class ConvertLinks extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
-                       "Convert from the old links schema (string->ID) to the new schema (ID->ID)."
-                               . "The wiki should be put into read-only mode while this script executes";
+               $this->addDescription(
+                       'Convert from the old links schema (string->ID) to the new schema (ID->ID). '
+                               . 'The wiki should be put into read-only mode while this script executes' );
 
                $this->addArg( 'logperformance', "Log performance to perfLogFilename.", false );
                $this->addArg(
index 11768c8..c245a1e 100644 (file)
@@ -34,7 +34,7 @@ class ConvertUserOptions extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Convert user options from old to new system";
+               $this->addDescription( 'Convert user options from old to new system' );
                $this->setBatchSize( 50 );
        }
 
index b39ff55..25073f7 100644 (file)
@@ -40,7 +40,7 @@ class CopyFileBackend extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Copy files in one backend to another.";
+               $this->addDescription( 'Copy files in one backend to another.' );
                $this->addOption( 'src', 'Backend containing the source files', true, true );
                $this->addOption( 'dst', 'Backend where files should be copied to', true, true );
                $this->addOption( 'containers', 'Pipe separated list of containers', true, true );
index a9c9547..42c2dd4 100644 (file)
@@ -34,7 +34,7 @@ require_once __DIR__ . '/Maintenance.php';
 class CopyJobQueue extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Copy jobs from one queue system to another.";
+               $this->addDescription( 'Copy jobs from one queue system to another.' );
                $this->addOption( 'src', 'Key to $wgJobQueueMigrationConfig for source', true, true );
                $this->addOption( 'dst', 'Key to $wgJobQueueMigrationConfig for destination', true, true );
                $this->addOption( 'type', 'Types of jobs to copy (use "all" for all)', true, true );
index c1a2022..e7d666a 100644 (file)
@@ -35,7 +35,7 @@ class CreateAndPromote extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Create a new user account and/or grant it additional rights";
+               $this->addDescription( 'Create a new user account and/or grant it additional rights' );
                $this->addOption(
                        'force',
                        'If acccount exists already, just grant it rights or change password.'
index c678712..87e7e08 100644 (file)
@@ -37,7 +37,7 @@ class GenerateCommonPassword extends Maintenance {
        public function __construct() {
                global $IP;
                parent::__construct();
-               $this->mDescription = "Generate CDB file of common passwords";
+               $this->addDescription( 'Generate CDB file of common passwords' );
                $this->addOption( 'limit', "Max number of passwords to write", false, true, 'l' );
                $this->addArg( 'inputfile', 'List of passwords (one per line) to use or - for stdin', true );
                $this->addArg(
index 94ebf87..92f1a91 100644 (file)
@@ -34,7 +34,7 @@ require_once __DIR__ . '/Maintenance.php';
 class DeleteArchivedFiles extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Deletes all archived images.";
+               $this->addDescription( 'Deletes all archived images.' );
                $this->addOption( 'delete', 'Perform the deletion' );
                $this->addOption( 'force', 'Force deletion of rows from filearchive' );
        }
index 9924eb0..2fb83fc 100644 (file)
@@ -35,8 +35,8 @@ require_once __DIR__ . '/Maintenance.php';
 class DeleteArchivedRevisions extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
-                       "Deletes all archived revisions\nThese revisions will no longer be restorable";
+               $this->addDescription(
+                       "Deletes all archived revisions\nThese revisions will no longer be restorable" );
                $this->addOption( 'delete', 'Performs the deletion' );
        }
 
index 6c89e67..e8839c5 100644 (file)
@@ -39,7 +39,7 @@ class DeleteBatch extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Deletes a batch of pages";
+               $this->addDescription( 'Deletes a batch of pages' );
                $this->addOption( 'u', "User to perform deletion", false, true );
                $this->addOption( 'r', "Reason to delete page", false, true );
                $this->addOption( 'i', "Interval to sleep between deletions" );
index a5c6199..7e1d315 100644 (file)
@@ -33,8 +33,8 @@ require_once __DIR__ . '/Maintenance.php';
 class DeleteDefaultMessages extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Deletes all pages in the MediaWiki namespace" .
-                       " which were last edited by \"MediaWiki default\"";
+               $this->addDescription( 'Deletes all pages in the MediaWiki namespace' .
+                       ' which were last edited by "MediaWiki default"' );
        }
 
        public function execute() {
index e7bb866..f21f3e1 100644 (file)
@@ -30,8 +30,8 @@ require_once __DIR__ . '/Maintenance.php';
 class DeleteEqualMessages extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Deletes all pages in the MediaWiki namespace that are equal to '
-                       . 'the default message';
+               $this->addDescription( 'Deletes all pages in the MediaWiki namespace that are equal to '
+                       . 'the default message' );
                $this->addOption( 'delete', 'Actually delete the pages (default: dry run)' );
                $this->addOption( 'delete-talk', 'Don\'t leave orphaned talk pages behind during deletion' );
                $this->addOption( 'lang-code', 'Check for subpages of this language code (default: root '
index f411148..123163f 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class DeleteOldRevisions extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Delete old (non-current) revisions from the database";
+               $this->addDescription( 'Delete old (non-current) revisions from the database' );
                $this->addOption( 'delete', 'Actually perform the deletion' );
                $this->addOption( 'page_id', 'List of page ids to work on', false );
        }
index 3d5c1a4..5f08b5a 100644 (file)
@@ -34,7 +34,8 @@ require_once __DIR__ . '/Maintenance.php';
 class DeleteOrphanedRevisions extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Maintenance script to delete revisions which refer to a nonexisting page";
+               $this->addDescription(
+                       'Maintenance script to delete revisions which refer to a nonexisting page' );
                $this->addOption( 'report', 'Prints out a count of affected revisions but doesn\'t delete them' );
        }
 
index 6cda784..4606d92 100644 (file)
@@ -33,7 +33,7 @@ class DeleteRevision extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Delete one or more revisions by moving them to the archive table";
+               $this->addDescription( 'Delete one or more revisions by moving them to the archive table' );
        }
 
        public function execute() {
index f9bb416..ed15fd1 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class DeleteSelfExternals extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Delete self-references to $wgServer from externallinks';
+               $this->addDescription( 'Delete self-references to $wgServer from externallinks' );
                $this->mBatchSize = 1000;
        }
 
index 18737a4..1904325 100644 (file)
@@ -31,7 +31,7 @@ class DumpBackup extends BackupDumper {
        function __construct( $args = null ) {
                parent::__construct();
 
-               $this->mDescription = <<<TEXT
+               $this->addDescription( <<<TEXT
 This script dumps the wiki page or logging database into an
 XML interchange wrapper format for export or backup.
 
@@ -40,7 +40,8 @@ XML output is sent to stdout; progress reports are sent to stderr.
 WARNING: this is not a full database dump! It is merely for public export
          of your wiki. For full backup, see our online help at:
          https://www.mediawiki.org/wiki/Backup
-TEXT;
+TEXT
+               );
                $this->stderr = fopen( "php://stderr", "wt" );
                // Actions
                $this->addOption( 'full', 'Dump all revisions of every page' );
index d8bc3a4..eef535a 100644 (file)
@@ -40,7 +40,7 @@ abstract class DumpIterator extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Does something with a dump";
+               $this->addDescription( 'Does something with a dump' );
                $this->addOption( 'file', 'File with text to run.', false, true );
                $this->addOption( 'dump', 'XML dump to execute all revisions.', false, true );
                $this->addOption( 'from', 'Article from XML dump to start from.', false, true );
@@ -164,7 +164,7 @@ class SearchDump extends DumpIterator {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Runs a regex in the revisions from a dump";
+               $this->addDescription( 'Runs a regex in the revisions from a dump' );
                $this->addOption( 'regex', 'Searching regex', true, true );
        }
 
index 74b500a..7139786 100644 (file)
@@ -40,7 +40,7 @@ require_once __DIR__ . '/Maintenance.php';
 class DumpLinks extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Quick demo hack to generate a plaintext link dump";
+               $this->addDescription( 'Quick demo hack to generate a plaintext link dump' );
        }
 
        public function execute() {
index 7511392..8169ef5 100644 (file)
@@ -93,13 +93,14 @@ class TextPassDumper extends BackupDumper {
        function __construct( $args = null ) {
                parent::__construct();
 
-               $this->mDescription = <<<TEXT
+               $this->addDescription( <<<TEXT
 This script postprocesses XML dumps from dumpBackup.php to add
 page text which was stubbed out (using --stub).
 
 XML input is accepted on stdin.
 XML output is sent to stdout; progress reports are sent to stderr.
-TEXT;
+TEXT
+               );
                $this->stderr = fopen( "php://stderr", "wt" );
 
                $this->addOption( 'stub', 'To load a compressed stub dump instead of stdin. ' .
index 026ac02..64884d5 100644 (file)
@@ -32,8 +32,8 @@ require_once __DIR__ . '/Maintenance.php';
 class UploadDumper extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Generates list of uploaded files which can be fed to tar or similar.
-By default, outputs relative paths against the parent directory of \$wgUploadDirectory.";
+               $this->addDescription( 'Generates list of uploaded files which can be fed to tar or similar.
+By default, outputs relative paths against the parent directory of $wgUploadDirectory.' );
                $this->addOption( 'base', 'Set base relative path instead of wiki include root', false, true );
                $this->addOption( 'local', 'List all local files, used or not. No shared files included' );
                $this->addOption( 'used', 'Skip local images that are not used' );
index b67a957..fc83a91 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class EditCLI extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Edit an article from the command line, text is from stdin";
+               $this->addDescription( 'Edit an article from the command line, text is from stdin' );
                $this->addOption( 'user', 'Username', false, true, 'u' );
                $this->addOption( 'summary', 'Edit summary', false, true, 's' );
                $this->addOption( 'minor', 'Minor edit', false, false, 'm' );
index 69a95e2..2fcdd14 100644 (file)
@@ -35,7 +35,7 @@ require_once __DIR__ . '/Maintenance.php';
 class EraseArchivedFile extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Erases traces of deleted files.";
+               $this->addDescription( 'Erases traces of deleted files.' );
                $this->addOption( 'delete', 'Perform the deletion' );
                $this->addOption( 'filename', 'File name', false, true );
                $this->addOption( 'filekey', 'File storage key (with extension) or "*"', true, true );
index 145c924..157a323 100644 (file)
@@ -15,7 +15,7 @@ require_once $basePath . '/maintenance/Maintenance.php';
 class ExportSites extends Maintenance {
 
        public function __construct() {
-               $this->mDescription = 'Exports site definitions the sites table to XML file';
+               $this->addDescription( 'Exports site definitions the sites table to XML file' );
 
                $this->addArg( 'file', 'A file to write the XML to (see docs/sitelist.txt). ' .
                        'Use "php://stdout" to write to stdout.', true
index cf12838..989e90a 100644 (file)
@@ -32,9 +32,10 @@ require_once __DIR__ . '/Maintenance.php';
 class FetchText extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Fetch the raw revision blob from an old_id.\n" .
+               $this->addDescription( "Fetch the raw revision blob from an old_id.\n" .
                        "NOTE: Export transformations are NOT applied. " .
-                       "This is left to backupTextPass.php";
+                       "This is left to backupTextPass.php"
+               );
        }
 
        /**
index 9dba818..feb927e 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class TestFileOpPerformance extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Test fileop performance";
+               $this->addDescription( 'Test fileop performance' );
                $this->addOption( 'b1', 'Backend 1', true, true );
                $this->addOption( 'b2', 'Backend 2', false, true );
                $this->addOption( 'srcdir', 'File source directory', true, true );
index 8c7e242..9022292 100644 (file)
@@ -124,7 +124,7 @@ class DeprecatedInterfaceFinder extends FileAwareNodeVisitor {
 class FindDeprecated extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Find deprecated interfaces';
+               $this->addDescription( 'Find deprecated interfaces' );
        }
 
        public function getFiles() {
index f9c61c7..1cf818e 100644 (file)
@@ -49,7 +49,7 @@ class FindHooks extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Find hooks that are undocumented, missing, or just plain wrong';
+               $this->addDescription( 'Find hooks that are undocumented, missing, or just plain wrong' );
                $this->addOption( 'online', 'Check against MediaWiki.org hook documentation' );
        }
 
index 5818ee2..2fad7ce 100644 (file)
@@ -25,7 +25,7 @@ class FindMissingFiles extends Maintenance {
        function __construct() {
                parent::__construct();
 
-               $this->mDescription = 'Find registered files with no corresponding file.';
+               $this->addDescription( 'Find registered files with no corresponding file.' );
                $this->addOption( 'start', 'Start after this file name', false, true );
                $this->addOption( 'mtimeafter', 'Only include files changed since this time', false, true );
                $this->addOption( 'mtimebefore', 'Only includes files changed before this time', false, true );
index 41650bd..2362957 100644 (file)
@@ -25,7 +25,7 @@ class FindOrphanedFiles extends Maintenance {
        function __construct() {
                parent::__construct();
 
-               $this->mDescription = "Find unregistered files in the 'public' repo zone.";
+               $this->addDescription( "Find unregistered files in the 'public' repo zone." );
                $this->addOption( 'subdir',
                        'Only scan files in this subdirectory (e.g. "a/a0")', false, true );
                $this->addOption( 'verbose', "Mention file paths checked" );
index 25ec342..18334d6 100644 (file)
@@ -32,8 +32,8 @@ require_once __DIR__ . '/Maintenance.php';
 class FixDefaultJsonContentPages extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
-                               'Fix instances of JSON pages prior to them being the ContentHandler default';
+               $this->addDescription(
+                       'Fix instances of JSON pages prior to them being the ContentHandler default' );
                $this->setBatchSize( 100 );
        }
 
index ca551f8..8faca27 100644 (file)
@@ -35,7 +35,7 @@ require_once __DIR__ . '/Maintenance.php';
 class FixDoubleRedirects extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Script to fix double redirects";
+               $this->addDescription( 'Script to fix double redirects' );
                $this->addOption( 'async', 'Don\'t fix anything directly, just queue the jobs' );
                $this->addOption( 'title', 'Fix only redirects pointing to this page', false, true );
                $this->addOption( 'dry-run', 'Perform a dry run, fix nothing' );
index a44f8e5..d04e0c2 100644 (file)
@@ -34,8 +34,8 @@ require_once __DIR__ . '/Maintenance.php';
 class FixExtLinksProtocolRelative extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
-                       "Fixes any entries in the externallinks table containing protocol-relative URLs";
+               $this->addDescription(
+                       'Fixes any entries in the externallinks table containing protocol-relative URLs' );
        }
 
        protected function getUpdateKey() {
index c2a748c..0fb3d38 100644 (file)
@@ -36,7 +36,7 @@ require_once __DIR__ . '/Maintenance.php';
 class FixTimestamps extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "";
+               $this->addDescription( '' );
                $this->addArg( 'offset', '' );
                $this->addArg( 'start', 'Starting timestamp' );
                $this->addArg( 'end', 'Ending timestamp' );
index d09760b..44ac220 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class FixUserRegistration extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Fix the user_registration field";
+               $this->addDescription( 'Fix the user_registration field' );
                $this->setBatchSize( 1000 );
        }
 
index b9c07fb..0b4f2ed 100644 (file)
@@ -35,7 +35,7 @@ require_once __DIR__ . '/Maintenance.php';
 class GenerateJsonI18n extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Build JSON messages files from a PHP messages file";
+               $this->addDescription( 'Build JSON messages files from a PHP messages file' );
 
                $this->addArg( 'phpfile', 'PHP file defining a $messages array', false );
                $this->addArg( 'jsondir', 'Directory to write JSON files to', false );
index c40d0ce..256824e 100644 (file)
@@ -145,7 +145,7 @@ class GenerateSitemap extends Maintenance {
         */
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Creates a sitemap for the site";
+               $this->addDescription( 'Creates a sitemap for the site' );
                $this->addOption(
                        'fspath',
                        'The file system path to save to, e.g. /tmp/sitemap; defaults to current directory',
index 5838201..b1140ec 100644 (file)
@@ -49,7 +49,7 @@ class GetConfiguration extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Get serialized MediaWiki site configuration";
+               $this->addDescription( 'Get serialized MediaWiki site configuration' );
                $this->addOption( 'regex', 'regex to filter variables with', false, true );
                $this->addOption( 'iregex', 'same as --regex but case insensitive', false, true );
                $this->addOption( 'settings', 'Space-separated list of wg* variables', false, true );
index 7365a2e..c2c6958 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class GetLagTimes extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Dump replication lag times";
+               $this->addDescription( 'Dump replication lag times' );
        }
 
        public function execute() {
index c858c38..81228cc 100644 (file)
@@ -32,7 +32,7 @@ class GetSlaveServer extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->addOption( "group", "Query group to check specifically" );
-               $this->mDescription = "Report the hostname of a slave server";
+               $this->addDescription( 'Report the hostname of a slave server' );
        }
 
        public function execute() {
index c4b8cc9..f519a79 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php';
 class GetTextMaint extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Outputs page text to stdout';
+               $this->addDescription( 'Outputs page text to stdout' );
                $this->addOption( 'show-private', 'Show the text even if it\'s not available to the public' );
                $this->addArg( 'title', 'Page title' );
        }
index 5806ffc..7c452a6 100644 (file)
@@ -49,7 +49,8 @@ class BackupReader extends Maintenance {
                        ? 'ok'
                        : '(disabled; requires PHP bzip2 module)';
 
-               $this->mDescription = <<<TEXT
+               $this->addDescription(
+                       <<<TEXT
 This script reads pages from an XML file as produced from Special:Export or
 dumpBackup.php, and saves them into the current wiki.
 
@@ -61,7 +62,8 @@ Compressed XML files may be read directly:
 Note that for very large data sets, importDump.php may be slow; there are
 alternate methods which can be much faster for full site restoration:
 <https://www.mediawiki.org/wiki/Manual:Importing_XML_dumps>
-TEXT;
+TEXT
+               );
                $this->stderr = fopen( "php://stderr", "wt" );
                $this->addOption( 'report',
                        'Report position and speed after every n pages processed', false, true );
index 5dfd2a8..366594d 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class ImportSiteScripts extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Import site scripts from a site';
+               $this->addDescription( 'Import site scripts from a site' );
                $this->addArg( 'api', 'API base url' );
                $this->addArg( 'index', 'index.php base url' );
                $this->addOption( 'username', 'User name of the script importer' );
index c5c00aa..8845c60 100644 (file)
@@ -15,7 +15,7 @@ require_once $basePath . '/maintenance/Maintenance.php';
 class ImportSites extends Maintenance {
 
        public function __construct() {
-               $this->mDescription = 'Imports site definitions from XML into the sites table.';
+               $this->addDescription( 'Imports site definitions from XML into the sites table.' );
 
                $this->addArg( 'file', 'An XML file containing site definitions (see docs/sitelist.txt). ' .
                        'Use "php://stdin" to read from stdin.', true
index 14d8420..70b6574 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class ImportTextFiles extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Reads in text files and imports their content to pages of the wiki";
+               $this->addDescription( 'Reads in text files and imports their content to pages of the wiki' );
                $this->addOption( 'user', 'Username to which edits should be attributed. ' .
                        'Default: "Maintenance script"', false, true, 'u' );
                $this->addOption( 'summary', 'Specify edit summary for the edits', false, true, 's' );
index dee5db8..5d0dcc6 100644 (file)
@@ -35,7 +35,7 @@ class InitEditCount extends Maintenance {
 Background mode will be automatically used if the server is MySQL 4.0
 (which does not support subqueries) or if multiple servers are listed
 in the load balancer, usually indicating a replication environment.' );
-               $this->mDescription = "Batch-recalculate user_editcount fields from the revision table";
+               $this->addDescription( 'Batch-recalculate user_editcount fields from the revision table' );
        }
 
        public function execute() {
index 8d26063..7e62b89 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php';
 class InitSiteStats extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Re-initialise the site statistics tables";
+               $this->addDescription( 'Re-initialise the site statistics tables' );
                $this->addOption( 'update', 'Update the existing statistics' );
                $this->addOption( 'active', 'Also update active users count' );
                $this->addOption( 'use-master', 'Count using the master database' );
index fddfc02..770251c 100644 (file)
@@ -33,7 +33,7 @@ class JSParseHelper extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Runs parsing/syntax checks on JavaScript files";
+               $this->addDescription( 'Runs parsing/syntax checks on JavaScript files' );
                $this->addArg( 'file(s)', 'JavaScript file to test', false );
        }
 
index 52f8201..9d92794 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class DatabaseLag extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Shows database lag";
+               $this->addDescription( 'Shows database lag' );
                $this->addOption( 'r', "Don't exit immediately, but show the lag every 5 seconds" );
        }
 
index d0e6e84..931718f 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/../Maintenance.php';
 class AllTrans extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Get all messages as defined by the English language file";
+               $this->addDescription( 'Get all messages as defined by the English language file' );
        }
 
        public function execute() {
index 1463418..dc275ab 100644 (file)
@@ -34,7 +34,7 @@ class DateFormats extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Test various language time and date functions";
+               $this->addDescription( 'Test various language time and date functions' );
        }
 
        public function execute() {
index a6e0456..eddfa26 100644 (file)
@@ -41,7 +41,7 @@ class Digit2Html extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Check digit transformation";
+               $this->addDescription( 'Check digit transformation' );
        }
 
        public function execute() {
index a72e25b..5768232 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/../Maintenance.php';
 class DumpMessages extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Dump an entire language, using the keys from English";
+               $this->addDescription( 'Dump an entire language, using the keys from English' );
        }
 
        public function execute() {
index 52ed81f..722db06 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/../Maintenance.php';
 class GenerateNormalizerDataAr extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Generate the normalizer data file for Arabic';
+               $this->addDescription( 'Generate the normalizer data file for Arabic' );
                $this->addOption( 'unicode-data-file', 'The local location of the data file ' .
                        'from http://unicode.org/Public/UNIDATA/UnicodeData.txt', false, true );
        }
index cb6ae69..412e7ef 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/../Maintenance.php';
 class GenerateNormalizerDataMl extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Generate the normalizer data file for Malayalam';
+               $this->addDescription( 'Generate the normalizer data file for Malayalam' );
        }
 
        public function getDbType() {
index 3520b87..676297e 100644 (file)
@@ -37,8 +37,8 @@ class GenerateUtf8Case extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Generate Utf8Case.ser from the Unicode Character Database ' .
-                       'and supplementary files';
+               $this->addDescription( 'Generate Utf8Case.ser from the Unicode Character Database ' .
+                       'and supplementary files' );
                $this->addOption( 'unicode-data-file', 'The local location of the data file ' .
                        'from http://unicode.org/Public/UNIDATA/UnicodeData.txt', false, true );
        }
index 32cfcd7..7c16602 100644 (file)
@@ -34,8 +34,8 @@ class LangMemUsage extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Dumb program that tries to get the memory usage\n" .
-                       "for each language file";
+               $this->addDescription( "Dumb program that tries to get the memory usage\n" .
+                       "for each language file" );
        }
 
        public function execute() {
index 4bff891..e8137ba 100644 (file)
@@ -32,7 +32,7 @@ class ListVariants extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Outputs a list of language variants';
+               $this->addDescription( 'Outputs a list of language variants' );
                $this->addOption( 'flat', 'Output variants in a flat list' );
                $this->addOption( 'json', 'Output variants as JSON' );
        }
index 9d3637f..afa71f2 100644 (file)
@@ -1,2 +1,2 @@
-../../../includes/ZhConversion.php: Makefile.py $(wildcard *.manual)
+../../../languages/data/ZhConversion.php: Makefile.py $(wildcard *.manual)
        ./Makefile.py
index 5924c66..999f25c 100755 (executable)
@@ -414,22 +414,25 @@ def main():
  * @file
  */
 
-$zh2Hant = array(\n'''
+namespace MediaWiki\Languages\Data;
+
+class ZhConversion {
+public static $zh2Hant = array(\n'''
     php += PHPArray(toHant) \
-        + '\n);\n\n$zh2Hans = array(\n' \
+        + '\n);\n\npublic static $zh2Hans = array(\n' \
         + PHPArray(toHans) \
-        + '\n);\n\n$zh2TW = array(\n' \
+        + '\n);\n\npublic static $zh2TW = array(\n' \
         + PHPArray(toTW) \
-        + '\n);\n\n$zh2HK = array(\n' \
+        + '\n);\n\npublic static $zh2HK = array(\n' \
         + PHPArray(toHK) \
-        + '\n);\n\n$zh2CN = array(\n' \
+        + '\n);\n\npublic static $zh2CN = array(\n' \
         + PHPArray(toCN) \
-        + '\n);\n'
+        + '\n);\n}\n'
 
     if pyversion[:1] in ['2']:
-        f = open(os.path.join('..', '..', '..', 'includes', 'ZhConversion.php'), 'wb', encoding='utf8')
+        f = open(os.path.join('..', '..', '..', 'languages', 'data', 'ZhConversion.php'), 'wb', encoding='utf8')
     else:
-        f = open(os.path.join('..', '..', '..', 'includes', 'ZhConversion.php'), 'w', buffering=4096, encoding='utf8')
+        f = open(os.path.join('..', '..', '..', 'languages', 'data', 'ZhConversion.php'), 'w', buffering=4096, encoding='utf8')
     print ('Writing ZhConversion.php ... ')
     f.write(php)
     f.close()
index c6569a0..ca2f7c5 100644 (file)
@@ -30,7 +30,7 @@ require_once __DIR__ . '/Maintenance.php';
 class MakeTestEdits extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Make test edits for a user";
+               $this->addDescription( 'Make test edits for a user' );
                $this->addOption( 'user', 'User name', true, true );
                $this->addOption( 'count', 'Number of edits', true, true );
                $this->addOption( 'namespace', 'Namespace number', false, true );
index a97d2e1..619ada6 100644 (file)
@@ -33,8 +33,8 @@ require_once __DIR__ . '/Maintenance.php';
 class McTest extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Makes several 'set', 'incr' and 'get' requests on every"
-                       . " memcached server and shows a report";
+               $this->addDescription( "Makes several 'set', 'incr' and 'get' requests on every"
+                       . " memcached server and shows a report" );
                $this->addOption( 'i', 'Number of iterations', false, true );
                $this->addOption( 'cache', 'Use servers from this $wgObjectCaches store', false, true );
                $this->addArg( 'server[:port]', 'Memcached server to test, with optional port', false );
index b491497..20b333e 100644 (file)
@@ -51,8 +51,9 @@ class MergeMessageFileList extends Maintenance {
                );
                $this->addOption( 'extensions-dir', 'Path where extensions can be found.', false, true );
                $this->addOption( 'output', 'Send output to this file (omit for stdout)', false, true );
-               $this->mDescription = 'Merge $wgExtensionMessagesFiles and $wgMessagesDirs from ' .
-                       ' various extensions to produce a single file listing all message files and dirs.';
+               $this->addDescription( 'Merge $wgExtensionMessagesFiles and $wgMessagesDirs from ' .
+                       ' various extensions to produce a single file listing all message files and dirs.'
+               );
        }
 
        public function execute() {
index 68b97e3..77d88f5 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php';
 class MigrateFileRepoLayout extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Copy files in repo to a different layout.";
+               $this->addDescription( 'Copy files in repo to a different layout.' );
                $this->addOption( 'oldlayout', "Old layout; one of 'name' or 'sha1'", true, true );
                $this->addOption( 'newlayout', "New layout; one of 'name' or 'sha1'", true, true );
                $this->addOption( 'since', "Copy only files from after this timestamp", false, true );
index dc20eee..df6665a 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class MigrateUserGroup extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Re-assign users from an old group to a new one";
+               $this->addDescription( 'Re-assign users from an old group to a new one' );
                $this->addArg( 'oldgroup', 'Old user group key', true );
                $this->addArg( 'newgroup', 'New user group key', true );
                $this->setBatchSize( 200 );
index c357eeb..16e4d1c 100644 (file)
@@ -40,9 +40,10 @@ class MinifyScript extends Maintenance {
                        "Directory for output. If this is not specified, and neither is --outfile, then the\n" .
                        "output files will be sent to the same directories as the input files.",
                        false, true );
-               $this->mDescription = "Minify a file or set of files.\n\n" .
+               $this->addDescription( "Minify a file or set of files.\n\n" .
                        "If --outfile is not specified, then the output file names will have a .min extension\n" .
-                       "added, e.g. jquery.js -> jquery.min.js.";
+                       "added, e.g. jquery.js -> jquery.min.js."
+               );
        }
 
        public function execute() {
index 43d4d25..8645ab1 100644 (file)
@@ -45,7 +45,7 @@ require_once __DIR__ . '/Maintenance.php';
 class MoveBatch extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Moves a batch of pages";
+               $this->addDescription( 'Moves a batch of pages' );
                $this->addOption( 'u', "User to perform move", false, true );
                $this->addOption( 'r', "Reason to move page", false, true );
                $this->addOption( 'i', "Interval to sleep between moves" );
index 00a15e5..35fca8e 100644 (file)
@@ -46,7 +46,7 @@ class MWDocGen extends Maintenance {
         */
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Build doxygen documentation';
+               $this->addDescription( 'Build doxygen documentation' );
 
                $this->addOption( 'doxygen',
                        'Path to doxygen',
index 6e5cd38..b59f4a9 100644 (file)
@@ -47,7 +47,7 @@ class NamespaceConflictChecker extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "";
+               $this->addDescription( 'Find and fix pages affected by namespace addition/removal' );
                $this->addOption( 'fix', 'Attempt to automatically fix errors' );
                $this->addOption( 'merge', "Instead of renaming conflicts, do a history merge with " .
                        "the correct title" );
index 0f2dbf6..8b45e57 100644 (file)
@@ -44,7 +44,7 @@ require_once __DIR__ . '/Maintenance.php';
 class NukeNS extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Remove pages with only 1 revision from any namespace";
+               $this->addDescription( 'Remove pages with only 1 revision from any namespace' );
                $this->addOption( 'delete', "Actually delete the page" );
                $this->addOption( 'ns', 'Namespace to delete from, default NS_MEDIAWIKI', false, true );
                $this->addOption( 'all', 'Delete everything regardless of revision count' );
index dc45520..44235d5 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php';
 class NukePage extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Remove a page record from the database";
+               $this->addDescription( 'Remove a page record from the database' );
                $this->addOption( 'delete', "Actually delete the page" );
                $this->addArg( 'title', 'Title to delete' );
        }
index 67e5ded..ba1e879 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/../Maintenance.php';
 class AlterSharedConstraints extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Alter foreign key to reference master tables in shared database setup.";
+               $this->addDescription( 'Alter foreign key to reference master tables in shared database setup.' );
        }
 
        public function getDbType() {
index 3c5566f..24ead60 100644 (file)
@@ -39,10 +39,11 @@ require_once __DIR__ . '/Maintenance.php';
 class Orphans extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Look for 'orphan' revisions hooked to pages which don't exist\n" .
+               $this->addDescription( "Look for 'orphan' revisions hooked to pages which don't exist\n" .
                        "and 'childless' pages with no revisions\n" .
                        "Then, kill the poor widows and orphans\n" .
-                       "Man this is depressing";
+                       "Man this is depressing"
+               );
                $this->addOption( 'fix', 'Actually fix broken entries' );
        }
 
index f414383..b631005 100644 (file)
@@ -27,7 +27,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PageExists extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Report whether a specific page exists";
+               $this->addDescription( 'Report whether a specific page exists' );
                $this->addArg( 'title', 'Page title to check whether it exists' );
        }
 
index d655965..effed56 100644 (file)
@@ -61,7 +61,7 @@ class CLIParser extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Parse a given wikitext";
+               $this->addDescription( 'Parse a given wikitext' );
                $this->addOption(
                        'title',
                        'Title name for the given wikitext (Default: \'CLIParser\')',
index 1f77bdb..f94046a 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PatchSql extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Run an SQL file into the DB, replacing prefix and charset vars";
+               $this->addDescription( 'Run an SQL file into the DB, replacing prefix and charset vars' );
                $this->addArg(
                        'patch-name',
                        'Name of the patch file, either full path or in maintenance/archives'
index 054f792..901cdaa 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PopulateBacklinkNamespace extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Populate the *_from_namespace fields";
+               $this->addDescription( 'Populate the *_from_namespace fields' );
                $this->addOption( 'lastUpdatedId', "Highest page_id with updated links", false, true );
        }
 
index 481e073..5a8ef90 100644 (file)
@@ -35,7 +35,8 @@ class PopulateCategory extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = <<<TEXT
+               $this->addDescription(
+                       <<<TEXT
 This script will populate the category table, added in MediaWiki 1.13.  It will
 print out progress indicators every 1000 categories it adds to the table.  The
 script is perfectly safe to run on large, live wikis, and running it multiple
@@ -49,8 +50,9 @@ added after the software update and so will be populated anyway.
 
 When the script has finished, it will make a note of this in the database, and
 will not run again without the --force option.
-TEXT;
-# '
+TEXT
+               );
+
                $this->addOption(
                        'begin',
                        'Only do categories whose names are alphabetically after the provided name',
index 4f9c7ae..c158cb4 100644 (file)
@@ -30,7 +30,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PopulateContentModel extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Populate the various content_* fields';
+               $this->addDescription( 'Populate the various content_* fields' );
                $this->addOption( 'ns', 'Namespace to run in, or "all" for all namespaces', true, true );
                $this->addOption( 'table', 'Table to run in', true, true );
                $this->setBatchSize( 100 );
index 5a67262..24c25b1 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PopulateFilearchiveSha1 extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Populate the fa_sha1 field from fa_storage_key";
+               $this->addDescription( 'Populate the fa_sha1 field from fa_storage_key' );
        }
 
        protected function getUpdateKey() {
index cc52239..51cc72a 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PopulateImageSha1 extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Populate the img_sha1 field";
+               $this->addDescription( 'Populate the img_sha1 field' );
                $this->addOption( 'force', "Recalculate sha1 for rows that already have a value" );
                $this->addOption( 'multiversiononly', "Calculate only for files with several versions" );
                $this->addOption( 'method', "Use 'pipe' to pipe to mysql command line,\n" .
index 4c1a72e..41c3bc9 100644 (file)
@@ -40,7 +40,7 @@ class PopulateLogSearch extends LoggedUpdateMaintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Migrate log params to new table and index for searching";
+               $this->addDescription( 'Migrate log params to new table and index for searching' );
                $this->setBatchSize( 100 );
        }
 
index 60329c0..ec3c472 100644 (file)
@@ -35,7 +35,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PopulateLogUsertext extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Populates the log_user_text field";
+               $this->addDescription( 'Populates the log_user_text field' );
                $this->setBatchSize( 100 );
        }
 
index 9baf28e..beb8cc8 100644 (file)
@@ -34,7 +34,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PopulateParentId extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Populates rev_parent_id";
+               $this->addDescription( 'Populates rev_parent_id' );
        }
 
        protected function getUpdateKey() {
index 25a51d7..452d213 100644 (file)
@@ -32,8 +32,8 @@ require_once __DIR__ . '/Maintenance.php';
 class PopulateRecentChangesSource extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
-                       "Populates rc_source field of the recentchanges table with the data in rc_type.";
+               $this->addDescription(
+                       'Populates rc_source field of the recentchanges table with the data in rc_type.' );
                $this->setBatchSize( 100 );
        }
 
index a9fb394..297bed2 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PopulateRevisionLength extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Populates the rev_len and ar_len fields";
+               $this->addDescription( 'Populates the rev_len and ar_len fields' );
                $this->setBatchSize( 200 );
        }
 
index 43504b1..3aff77e 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Populates the rev_sha1 and ar_sha1 fields";
+               $this->addDescription( 'Populates the rev_sha1 and ar_sha1 fields' );
                $this->setBatchSize( 200 );
        }
 
diff --git a/maintenance/postgres/archives/patch-bot_passwords.sql b/maintenance/postgres/archives/patch-bot_passwords.sql
deleted file mode 100644 (file)
index 8e8a794..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-CREATE TABLE bot_passwords (
-  bp_user INTEGER NOT NULL,
-  bp_app_id TEXT NOT NULL,
-  bp_password TEXT NOT NULL,
-  bp_token TEXT NOT NULL,
-  bp_restrictions TEXT NOT NULL,
-  bp_grants TEXT NOT NULL,
-  PRIMARY KEY ( bp_user, bp_app_id )
-);
index c9f049b..ad7bd9d 100644 (file)
@@ -74,15 +74,6 @@ CREATE TABLE user_newtalk (
 CREATE INDEX user_newtalk_id_idx ON user_newtalk (user_id);
 CREATE INDEX user_newtalk_ip_idx ON user_newtalk (user_ip);
 
-CREATE TABLE bot_passwords (
-  bp_user INTEGER NOT NULL,
-  bp_app_id TEXT NOT NULL,
-  bp_password TEXT NOT NULL,
-  bp_token TEXT NOT NULL,
-  bp_restrictions TEXT NOT NULL,
-  bp_grants TEXT NOT NULL,
-  PRIMARY KEY ( bp_user, bp_app_id )
-);
 
 CREATE SEQUENCE page_page_id_seq;
 CREATE TABLE page (
index 449a7ad..4a3148a 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class Protect extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Protect or unprotect a page from the command line.";
+               $this->addDescription( 'Protect or unprotect a page from the command line.' );
                $this->addOption( 'unprotect', 'Removes protection' );
                $this->addOption( 'semiprotect', 'Adds semi-protection' );
                $this->addOption( 'cascade', 'Add cascading protection' );
index 455e9c0..8e6978d 100644 (file)
@@ -34,7 +34,7 @@ class PruneFileCache extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Build file cache for content pages";
+               $this->addDescription( 'Build file cache for content pages' );
                $this->addOption( 'agedays', 'How many days old files must be in order to delete', true, true );
                $this->addOption( 'subdir', 'Prune one $wgFileCacheDirectory subdirectory name', false, true );
        }
index b98e95f..4f10b6e 100644 (file)
@@ -61,7 +61,7 @@ class PurgeChangedFiles extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Scan the logging table and purge files and thumbnails.";
+               $this->addDescription( 'Scan the logging table and purge files and thumbnails.' );
                $this->addOption( 'starttime', 'Starting timestamp', true, true );
                $this->addOption( 'endtime', 'Ending timestamp', true, true );
                $this->addOption( 'type', 'Comma-separated list of types of changes to send purges for (' .
index 31500c9..cb4f85d 100644 (file)
@@ -36,7 +36,7 @@ class PurgeChangedPages extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Send purge requests for edits in date range to squid/varnish';
+               $this->addDescription( 'Send purge requests for edits in date range to squid/varnish' );
                $this->addOption( 'starttime', 'Starting timestamp', true, true );
                $this->addOption( 'endtime', 'Ending timestamp', true, true );
                $this->addOption( 'htcp-dest', 'HTCP announcement destination (IP:port)', false, true );
index 9963cbf..a733d67 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PurgeList extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Send purge requests for listed pages to squid";
+               $this->addDescription( 'Send purge requests for listed pages to squid' );
                $this->addOption( 'purge', 'Whether to update page_touched.', false, false );
                $this->addOption( 'namespace', 'Namespace number', false, true );
                $this->addOption( 'all', 'Purge all pages', false, false );
index 3d81e2d..1b78c7d 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class PurgeOldText extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Purge old text records from the database";
+               $this->addDescription( 'Purge old text records from the database' );
                $this->addOption( 'purge', 'Performs the deletion' );
        }
 
index e68937a..4d3baaf 100644 (file)
@@ -34,7 +34,7 @@ require_once __DIR__ . '/Maintenance.php';
 class ReassignEdits extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Reassign edits from one user to another";
+               $this->addDescription( 'Reassign edits from one user to another' );
                $this->addOption( "force", "Reassign even if the target user doesn't exist" );
                $this->addOption( "norc", "Don't update the recent changes table" );
                $this->addOption( "report", "Print out details of what would be changed, but don't update it" );
index e07bf03..21cd3a1 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class RebuildFileCache extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Build file cache for content pages";
+               $this->addDescription( 'Build file cache for content pages' );
                $this->addOption( 'start', 'Page_id to start from', false, true );
                $this->addOption( 'end', 'Page_id to end on', false, true );
                $this->addOption( 'overwrite', 'Refresh page cache' );
index 1b0a27d..521ab54 100644 (file)
@@ -51,7 +51,7 @@ class ImageBuilder extends Maintenance {
                // make sure to update old, but compatible img_metadata fields.
                $wgUpdateCompatibleMetadata = true;
 
-               $this->mDescription = 'Script to update image metadata records';
+               $this->addDescription( 'Script to update image metadata records' );
 
                $this->addOption( 'missing', 'Check for files without associated database record' );
                $this->addOption( 'dry-run', 'Only report, don\'t update the database' );
index f89877e..36caa3a 100644 (file)
@@ -39,7 +39,7 @@ require_once __DIR__ . '/Maintenance.php';
 class RebuildLocalisationCache extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Rebuild the localisation cache";
+               $this->addDescription( 'Rebuild the localisation cache' );
                $this->addOption( 'force', 'Rebuild all files, even ones not out of date' );
                $this->addOption( 'threads', 'Fork more than one thread', false, true );
                $this->addOption( 'outdir', 'Override the output directory (normally $wgCacheDirectory)',
index 2bc7510..044bafd 100644 (file)
@@ -32,7 +32,7 @@ class RebuildSitesCache extends Maintenance {
        public function __construct() {
                parent::__construct();
 
-               $this->mDescription = "Cache sites as json for file-based lookup.";
+               $this->addDescription( 'Cache sites as json for file-based lookup.' );
                $this->addOption( 'file', 'File to output the json to', false, true );
        }
 
index 4ff873e..d2ee6fc 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class RebuildAll extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Rebuild links, text index and recent changes";
+               $this->addDescription( 'Rebuild links, text index and recent changes' );
        }
 
        public function getDbType() {
index f223f1a..3b40556 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class RebuildMessages extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Purge all language messages from the cache";
+               $this->addDescription( 'Purge all language messages from the cache' );
        }
 
        public function execute() {
index 34560fd..d61906c 100644 (file)
@@ -33,7 +33,7 @@ require_once __DIR__ . '/Maintenance.php';
 class RebuildRecentchanges extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Rebuild recent changes";
+               $this->addDescription( 'Rebuild recent changes' );
        }
 
        public function execute() {
index e8d59bc..dff734b 100644 (file)
@@ -42,7 +42,7 @@ class RebuildTextIndex extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Rebuild search index table from scratch";
+               $this->addDescription( 'Rebuild search index table from scratch' );
        }
 
        public function getDbType() {
index 6bc72ec..3f1b167 100644 (file)
@@ -34,7 +34,7 @@ require_once __DIR__ . '/Maintenance.php';
 class RefreshFileHeaders extends Maintenance {
        function __construct() {
                parent::__construct();
-               $this->mDescription = 'Script to update file HTTP headers';
+               $this->addDescription( 'Script to update file HTTP headers' );
                $this->addOption( 'verbose', 'Output information about each file.', false, false, 'v' );
                $this->addOption( 'start', 'Name of file to start with', false, true );
                $this->addOption( 'end', 'Name of file to end with', false, true );
index 4f2341c..01fb15e 100644 (file)
@@ -44,7 +44,7 @@ class RefreshImageMetadata extends Maintenance {
        function __construct() {
                parent::__construct();
 
-               $this->mDescription = 'Script to update image metadata records';
+               $this->addDescription( 'Script to update image metadata records' );
                $this->setBatchSize( 200 );
 
                $this->addOption(
index 1159e53..651255b 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class RefreshLinks extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Refresh link tables";
+               $this->addDescription( 'Refresh link tables' );
                $this->addOption( 'dfn-only', 'Delete links from nonexistent articles only' );
                $this->addOption( 'new-only', 'Only affect articles with just a single edit' );
                $this->addOption( 'redirects-only', 'Only fix redirects, not all links' );
index 2218a5e..09b1b1c 100644 (file)
@@ -43,7 +43,8 @@ class DumpRenderer extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Take page text out of an XML dump file and render basic HTML out to files";
+               $this->addDescription(
+                       'Take page text out of an XML dump file and render basic HTML out to files' );
                $this->addOption( 'output-dir', 'The directory to output the HTML files to', true, true );
                $this->addOption( 'prefix', 'Prefix for the rendered files (defaults to wiki)', false, true );
                $this->addOption( 'parser', 'Use an alternative parser class', false, true );
diff --git a/maintenance/resetUserEmail.php b/maintenance/resetUserEmail.php
new file mode 100644 (file)
index 0000000..816e8a4
--- /dev/null
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Reset user email.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script that resets user email.
+ *
+ * @since 1.27
+ * @ingroup Maintenance
+ */
+class ResetUserEmail extends Maintenance {
+       public function __construct() {
+               $this->addDescription( "Resets a user's email" );
+               $this->addArg( 'user', 'Username or user ID, if starts with #', true );
+               $this->addArg( 'email', 'Email to assign' );
+               parent::__construct();
+       }
+
+       public function execute() {
+               $userName = $this->getArg( 0 );
+               if ( preg_match( '/^#\d+$/', $userName ) ) {
+                       $user = User::newFromId( substr( $userName, 1 ) );
+               } else {
+                       $user = User::newFromName( $userName );
+               }
+               if ( !$user || !$user->getId() || !$user->loadFromId() ) {
+                       $this->error( "Error: user '$userName' does not exist\n", 1 );
+               }
+
+               $email = $this->getArg( 1 );
+               if ( !Sanitizer::validateEmail( $email ) ) {
+                       $this->error( "Error: email '$email' is not valid\n", 1 );
+               }
+
+               // Code from https://wikitech.wikimedia.org/wiki/Password_reset
+               $user->setEmail( $email );
+               $user->setEmailAuthenticationTimestamp( wfTimestampNow() );
+               $user->saveSettings();
+               // Kick whomever is currently controlling the account off
+               $user->setPassword( PasswordFactory::generateRandomPasswordString( 128 ) );
+       }
+}
+
+$maintClass = 'ResetUserEmail';
+require_once RUN_MAINTENANCE_IF_MAIN;
index 9c7aef2..7acf975 100644 (file)
@@ -34,8 +34,9 @@ require_once __DIR__ . '/Maintenance.php';
 class ResetUserTokens extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
-                       "Reset the user_token of all users on the wiki. Note that this may log some of them out.";
+               $this->addDescription(
+                       'Reset the user_token of all users on the wiki. Note that this may log some of them out.'
+               );
                $this->addOption( 'nowarn', "Hides the 5 seconds warning", false, false );
                $this->addOption(
                        'nulls',
index 7134453..a2ddb93 100644 (file)
@@ -33,8 +33,8 @@ require_once __DIR__ . '/Maintenance.php';
 class RollbackEdits extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
-                       "Rollback all edits by a given user or IP provided they're the most recent edit";
+               $this->addDescription(
+                       "Rollback all edits by a given user or IP provided they're the most recent edit" );
                $this->addOption(
                        'titles',
                        'A list of titles, none means all titles where the given user is the most recent',
index 3fd9e02..2feae02 100644 (file)
@@ -33,9 +33,9 @@ require_once __DIR__ . '/Maintenance.php';
 class BatchedQueryRunner extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
+               $this->addDescription(
                        "Run a query repeatedly until it affects 0 rows, and wait for slaves in between.\n" .
-                               "NOTE: You need to set a LIMIT clause yourself.";
+                               "NOTE: You need to set a LIMIT clause yourself." );
        }
 
        public function execute() {
index 3c5d28b..86cade2 100644 (file)
@@ -33,7 +33,7 @@ use MediaWiki\Logger\LoggerFactory;
 class RunJobs extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Run pending jobs";
+               $this->addDescription( 'Run pending jobs' );
                $this->addOption( 'maxjobs', 'Maximum number of jobs to run', false, true );
                $this->addOption( 'maxtime', 'Maximum amount of wall-clock time', false, true );
                $this->addOption( 'type', 'Type of job to run', false, true );
index 25a096c..992c238 100644 (file)
@@ -43,7 +43,7 @@ class ShowJobs extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Show number of jobs waiting in master database";
+               $this->addDescription( 'Show number of jobs waiting in master database' );
                $this->addOption( 'group', 'Show number of jobs per job type' );
                $this->addOption( 'list', 'Show a list of all jobs instead of counts' );
                $this->addOption( 'type', 'Only show/count jobs of a given type', false, true );
index 56cc573..098aba5 100644 (file)
@@ -39,7 +39,7 @@ require_once __DIR__ . '/Maintenance.php';
 class ShowSiteStats extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Show the cached statistics";
+               $this->addDescription( 'Show the cached statistics' );
        }
 
        public function execute() {
index a93e51f..f089972 100644 (file)
@@ -32,8 +32,8 @@ require_once __DIR__ . '/Maintenance.php';
 class MwSql extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Send SQL queries to a MediaWiki database. " .
-                               "Takes a file name containing SQL as argument or runs interactively.";
+               $this->addDescription( 'Send SQL queries to a MediaWiki database. ' .
+                       'Takes a file name containing SQL as argument or runs interactively.' );
                $this->addOption( 'query', 'Run a single query instead of running interactively', false, true );
                $this->addOption( 'cluster', 'Use an external cluster by name', false, true );
                $this->addOption( 'wikidb', 'The database wiki ID to use if not the current one', false, true );
index 96a8a38..5cc35ed 100644 (file)
@@ -31,7 +31,7 @@ require_once __DIR__ . '/Maintenance.php';
 class SqliteMaintenance extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Performs some operations specific to SQLite database backend";
+               $this->addDescription( 'Performs some operations specific to SQLite database backend' );
                $this->addOption(
                        'vacuum',
                        'Clean up database by removing deleted pages. Decreases database file size'
index b27b111..dd3ba04 100644 (file)
@@ -63,7 +63,7 @@ class CompressOld extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = 'Compress the text of a wiki';
+               $this->addDescription( 'Compress the text of a wiki' );
                $this->addOption( 'type', 'Set compression type to either: gzip|concat', false, true, 't' );
                $this->addOption(
                        'chunksize',
index e926f56..d353b88 100644 (file)
@@ -36,7 +36,7 @@ class FixBug20757 extends Maintenance {
 
        function __construct() {
                parent::__construct();
-               $this->mDescription = 'Script to fix bug 20757 assuming that blob_tracking is intact';
+               $this->addDescription( 'Script to fix bug 20757 assuming that blob_tracking is intact' );
                $this->addOption( 'dry-run', 'Report only' );
                $this->addOption( 'start', 'old_id to start at', false, true );
        }
index b1bf95b..21f50f5 100644 (file)
@@ -32,8 +32,8 @@ require_once __DIR__ . '/../Maintenance.php';
 class OrphanStats extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription =
-                       "Show some statistics on the blob_orphans table, created with trackBlobs.php";
+               $this->addDescription(
+                       "Show some statistics on the blob_orphans table, created with trackBlobs.php" );
        }
 
        protected function &getDB( $cluster, $groups = array(), $wiki = false ) {
index 63d5e9f..c0663a7 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class SyncFileBackend extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Sync one file backend with another using the journal";
+               $this->addDescription( 'Sync one file backend with another using the journal' );
                $this->addOption( 'src', 'Name of backend to sync from', true, true );
                $this->addOption( 'dst', 'Name of destination backend to sync', false, true );
                $this->addOption( 'start', 'Starting journal ID', false, true );
index 743b9be..756f6c0 100644 (file)
@@ -220,32 +220,6 @@ CREATE TABLE /*_*/user_properties (
 CREATE UNIQUE INDEX /*i*/user_properties_user_property ON /*_*/user_properties (up_user,up_property);
 CREATE INDEX /*i*/user_properties_property ON /*_*/user_properties (up_property);
 
---
--- This table contains a user's bot passwords: passwords that allow access to
--- the account via the API with limited rights.
---
-CREATE TABLE /*_*/bot_passwords (
-  -- User ID obtained from CentralIdLookup.
-  bp_user int NOT NULL,
-
-  -- Application identifier
-  bp_app_id varbinary(32) NOT NULL,
-
-  -- Password hashes, like user.user_password
-  bp_password tinyblob NOT NULL,
-
-  -- Like user.user_token
-  bp_token binary(32) NOT NULL default '',
-
-  -- JSON blob for MWRestrictions
-  bp_restrictions blob NOT NULL,
-
-  -- Grants allowed to the account when authenticated with this bot-password
-  bp_grants blob NOT NULL,
-
-  PRIMARY KEY ( bp_user, bp_app_id )
-) /*$wgDBTableOptions*/;
-
 --
 -- Core of the wiki: each page has an entry here which identifies
 -- it by title and contains some essential metadata.
index 71b4de1..861f5ed 100644 (file)
@@ -26,7 +26,7 @@ require_once __DIR__ . '/Maintenance.php';
 class Undelete extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Undelete a page";
+               $this->addDescription( 'Undelete a page' );
                $this->addOption( 'user', 'The user to perform the undeletion', false, true, 'u' );
                $this->addOption( 'reason', 'The reason to undelete', false, true, 'r' );
                $this->addArg( 'pagename', 'Page to undelete' );
index eeaf9c8..06e947c 100755 (executable)
@@ -36,7 +36,7 @@ require_once __DIR__ . '/Maintenance.php';
 class UpdateMediaWiki extends Maintenance {
        function __construct() {
                parent::__construct();
-               $this->mDescription = "MediaWiki database updater";
+               $this->addDescription( 'MediaWiki database updater' );
                $this->addOption( 'skip-compat-checks', 'Skips compatibility checks, mostly for developers' );
                $this->addOption( 'quick', 'Skip 5 second countdown before starting' );
                $this->addOption( 'doshared', 'Also update shared tables' );
index 9537a79..baba6c8 100644 (file)
@@ -35,7 +35,7 @@ class UpdateArticleCount extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Count of the number of articles and update the site statistics table";
+               $this->addDescription( 'Count of the number of articles and update the site statistics table' );
                $this->addOption( 'update', 'Update the site_stats table with the new count' );
                $this->addOption( 'use-master', 'Count using the master database' );
        }
index bd75b3b..37c9948 100644 (file)
@@ -42,12 +42,13 @@ class UpdateCollation extends Maintenance {
                parent::__construct();
 
                global $wgCategoryCollation;
-               $this->mDescription = <<<TEXT
+               $this->addDescription( <<<TEXT
 This script will find all rows in the categorylinks table whose collation is
 out-of-date (cl_collation != '$wgCategoryCollation') and repopulate cl_sortkey
 using the page title and cl_sortkey_prefix.  If all collations are
 up-to-date, it will do nothing.
-TEXT;
+TEXT
+               );
 
                $this->addOption( 'force', 'Run on all rows, even if the collation is ' .
                        'supposed to be up-to-date.' );
index 5c21b40..f5bb881 100644 (file)
@@ -34,7 +34,7 @@ class UpdateDoubleWidthSearch extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Script to normalize double-byte latin UTF-8 characters";
+               $this->addDescription( 'Script to normalize double-byte latin UTF-8 characters' );
                $this->addOption( 'q', 'quiet', false, true );
                $this->addOption(
                        'l',
index ebfffe4..98d9389 100644 (file)
@@ -35,7 +35,7 @@ require_once __DIR__ . '/Maintenance.php';
 class UpdateRestrictions extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Updates page_restrictions table from old page_restriction column";
+               $this->addDescription( 'Updates page_restrictions table from old page_restriction column' );
                $this->setBatchSize( 100 );
        }
 
index 18edecc..b2f2577 100644 (file)
@@ -39,7 +39,7 @@ class UpdateSearchIndex extends Maintenance {
 
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Script for periodic off-peak updating of the search index";
+               $this->setDescription( 'Script for periodic off-peak updating of the search index' );
                $this->addOption( 's', 'starting timestamp', false, true );
                $this->addOption( 'e', 'Ending timestamp', false, true );
                $this->addOption(
index e0c10f8..2534ca6 100644 (file)
@@ -32,7 +32,7 @@ require_once __DIR__ . '/Maintenance.php';
 class WrapOldPasswords extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Wrap all passwords of a certain type in a new layered type";
+               $this->addDescription( 'Wrap all passwords of a certain type in a new layered type' );
                $this->addOption( 'type',
                        'Password type to wrap passwords in (must inherit LayeredParameterizedPassword)', true, true );
                $this->addOption( 'verbose', 'Enables verbose output', false, false, 'v' );
index dffcbdd..c242b6c 100644 (file)
@@ -21,7 +21,7 @@
         *
         *     $( '#content' ).append( selector.$element );
         *
-        *     selector.setSearchType( [ mw.widgets.CategorySelector.SearchType.SubCategories ] );
+        *     selector.setSearchTypes( [ mw.widgets.CategorySelector.SearchType.SubCategories ] );
         *
         * @class mw.widgets.CategorySelector
         * @uses mw.Api
index 1ffcc66..3e03502 100644 (file)
@@ -72,7 +72,9 @@
         *     while the widget is inactive. Should be as unambiguous as possible (for example, prefer to
         *     spell out the month, rather than rely on the order), even if that makes it longer. When not
         *     given, the default is language-specific.
-        * @cfg {string} [placeholder] User-visible date format string displayed in the textual input
+        * @cfg {string} [placeholderLabel=No date selected] Placeholder text shown when the widget is not
+        *     selected. Default text taken from message `mw-widgets-dateinput-no-date`.
+        * @cfg {string} [placeholderDateFormat] User-visible date format string displayed in the textual input
         *     field when it's empty. Should be the same as `inputFormat`, but translated to the user's
         *     language. When not given, defaults to a translated version of 'YYYY-MM-DD' or 'YYYY-MM',
         *     depending on `precision`.
         */
        mw.widgets.DateInputWidget = function MWWDateInputWidget( config ) {
                // Config initialization
-               config = $.extend( { precision: 'day', required: false }, config );
+               config = $.extend( {
+                       precision: 'day',
+                       required: false,
+                       placeholderLabel: mw.msg( 'mw-widgets-dateinput-no-date' )
+               }, config );
                if ( config.required ) {
                        if ( config.indicator === undefined ) {
                                config.indicator = 'required';
                        }
                }
 
-               var placeholder, mustBeAfter, mustBeBefore;
-               if ( config.placeholder ) {
-                       placeholder = config.placeholder;
+               var placeholderDateFormat, mustBeAfter, mustBeBefore;
+               if ( config.placeholderDateFormat ) {
+                       placeholderDateFormat = config.placeholderDateFormat;
                } else if ( config.inputFormat ) {
                        // We have no way to display a translated placeholder for custom formats
-                       placeholder = '';
+                       placeholderDateFormat = '';
                } else {
                        // Messages: mw-widgets-dateinput-placeholder-day, mw-widgets-dateinput-placeholder-month
-                       placeholder = mw.msg( 'mw-widgets-dateinput-placeholder-' + config.precision );
+                       placeholderDateFormat = mw.msg( 'mw-widgets-dateinput-placeholder-' + config.precision );
                }
 
                // Properties (must be set before parent constructor, which calls #setValue)
                this.label = new OO.ui.LabelWidget();
                this.textInput = new OO.ui.TextInputWidget( {
                        required: config.required,
-                       placeholder: placeholder,
+                       placeholder: placeholderDateFormat,
                        validate: this.validateDate.bind( this )
                } );
                this.calendar = new mw.widgets.CalendarWidget( {
                this.inputFormat = config.inputFormat;
                this.displayFormat = config.displayFormat;
                this.required = config.required;
+               this.placeholderLabel = config.placeholderLabel;
 
                // Validate and set min and max dates as properties
                mustBeAfter = moment( config.mustBeAfter, 'YYYY-MM-DD' );
                if ( this.getValue() === '' ) {
                        this.textInput.setValue( '' );
                        this.calendar.setDate( null );
-                       this.label.setLabel( mw.msg( 'mw-widgets-dateinput-no-date' ) );
+                       this.label.setLabel( this.placeholderLabel );
                        this.$element.addClass( 'mw-widget-dateInputWidget-empty' );
                } else {
                        if ( !this.inTextInput ) {
index b04e01c..b8349d0 100644 (file)
                /**
                 * Get a message object.
                 *
-                * Shorcut for `new mw.Message( mw.messages, key, parameters )`.
+                * Shortcut for `new mw.Message( mw.messages, key, parameters )`.
                 *
                 * @see mw.Message
                 * @param {string} key Key of message to get
                         */
 
                        /**
-                        * Write a message the console's warning channel.
+                        * Write a message to the console's warning channel.
                         * Actions not supported by the browser console are silently ignored.
                         *
                         * @param {...string} msg Messages to output to console
                                $.noop;
 
                        /**
-                        * Write a message the console's error channel.
+                        * Write a message to the console's error channel.
                         *
                         * Most browsers provide a stacktrace by default if the argument
                         * is a caught Error object.
                        /**
                         * A module has entered state 'ready', 'error', or 'missing'. Automatically update
                         * pending jobs and modules that depend upon this module. If the given module failed,
-                        * propagate the 'error' state up the dependency tree. Otherwise, go ahead an execute
+                        * propagate the 'error' state up the dependency tree. Otherwise, go ahead and execute
                         * all jobs/modules now having their dependencies satisfied.
                         *
                         * Jobs that depend on a failed module, will have their error callback ran (if any).
                                                                script( $, $ );
                                                                markModuleReady();
                                                        } else if ( typeof script === 'string' ) {
-                                                               // Site and user modules are legacy scripts that run in the global scope.
+                                                               // Site and user modules are legacy scripts that run in the global scope.
                                                                // This is transported as a string instead of a function to avoid needing
                                                                // to use string manipulation to undo the function wrapper.
                                                                if ( module === 'user' ) {
                        }
 
                        /**
-                        * Adds a dependencies to the queue with optional callbacks to be run
+                        * Adds all dependencies to the queue with optional callbacks to be run
                         * when the dependencies are ready or fail
                         *
                         * @private
                                 * When #load or #using requests one or more modules, the server
                                 * response contain calls to this function.
                                 *
-                                * All arguments are required.
-                                *
                                 * @param {string} module Name of module
-                                * @param {Function|Array} script Function with module code or Array of URLs to
+                                * @param {Function|Array} [script] Function with module code or Array of URLs to
                                 *  be used as the src attribute of a new `<script>` tag.
                                 * @param {Object} [style] Should follow one of the following patterns:
                                 *
        /**
         * Log a message to window.console, if possible.
         *
-        * Useful to force logging of some  errors that are otherwise hard to detect (i.e., this logs
+        * Useful to force logging of some errors that are otherwise hard to detect (i.e., this logs
         * also in production mode). Gets console references in each invocation instead of caching the
         * reference, so that debugging tools loaded later are supported (e.g. Firebug Lite in IE).
         *
                        msg += ( e ? ':' : '.' );
                        console.log( msg );
 
-                       // If we have an exception object, log it to the error channel to trigger a
-                       // proper stacktraces in browsers that support it. No fallback as we have no browsers
-                       // that don't support error(), but do support log().
+                       // If we have an exception object, log it to the error channel to trigger
+                       // proper stacktraces in browsers that support it. No fallback as we have
+                       // no browsers that don't support error(), but do support log().
                        if ( e && console.error ) {
                                console.error( String( e ), e );
                        }
index 05f454c..028ef81 100644 (file)
@@ -50,7 +50,6 @@ $wgAutoloadClasses += array(
        # tests/phpunit/includes
        'RevisionStorageTest' => "$testDir/phpunit/includes/RevisionStorageTest.php",
        'TestingAccessWrapper' => "$testDir/phpunit/includes/TestingAccessWrapper.php",
-       'TestLogger' => "$testDir/phpunit/includes/TestLogger.php",
 
        # tests/phpunit/includes/api
        'ApiFormatTestBase' => "$testDir/phpunit/includes/api/format/ApiFormatTestBase.php",
@@ -99,10 +98,6 @@ $wgAutoloadClasses += array(
        'ResourceLoaderImageModuleTestable' =>
                "$testDir/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php",
 
-       # tests/phpunit/includes/session
-       'MediaWiki\\Session\\TestBagOStuff' => "$testDir/phpunit/includes/session/TestBagOStuff.php",
-       'MediaWiki\\Session\\TestUtils' => "$testDir/phpunit/includes/session/TestUtils.php",
-
        # tests/phpunit/includes/specials
        'SpecialPageTestBase' => "$testDir/phpunit/includes/specials/SpecialPageTestBase.php",
 
@@ -127,9 +122,6 @@ $wgAutoloadClasses += array(
        'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockSvgHandler.php",
        'MockDjVuHandler' => "$testDir/phpunit/mocks/media/MockDjVuHandler.php",
        'MockWebRequest' => "$testDir/phpunit/mocks/MockWebRequest.php",
-       'MediaWiki\\Session\\DummySessionBackend'
-               => "$testDir/phpunit/mocks/session/DummySessionBackend.php",
-       'DummySessionProvider' => "$testDir/phpunit/mocks/session/DummySessionProvider.php",
 
        # tests/parser
        'NewParserTest' => "$testDir/phpunit/includes/parser/NewParserTest.php",
index 078fa6c..d866ed8 100644 (file)
@@ -6334,6 +6334,24 @@ parsoid=wt2html,html2html
 <td data-parsoid='{"startTagSrc":"| ","attrSepSrc":"|","autoInsertedEnd":true}'><a rel="mw:ExtLink" href="ftp://|x||"></a>" onmouseover="alert(document.cookie)">test</td></tr></tbody></table>
 !! end
 
+!! test
+! and || in element attributes should not be parsed as <th>/<td>
+!! wikitext
+{|
+| <div style="color: red !important;" data-contrived="put this here ||">hi</div>
+|}
+!! html/php
+<table>
+<tr>
+<td> <div style="color: red !important;" data-contrived="put this here &#124;&#124;">hi</div>
+</td></tr></table>
+
+!! html/parsoid
+<table>
+<tbody><tr><td> <div style="color: red !important;" data-contrived="put this here ||" data-parsoid='{"stx":"html"}'>hi</div></td></tr>
+</tbody></table>
+!! end
+
 # FIXME: The output seems broken. Filed as T110268.
 !! test
 ! and || in td attributes should not be parsed as <th>/<td>
index 861e3bd..523cf68 100644 (file)
@@ -221,8 +221,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        }
 
        protected function tearDown() {
-               global $wgRequest;
-
                $status = ob_get_status();
                if ( isset( $status['name'] ) &&
                        $status['name'] === 'MediaWikiTestCase::wfResetOutputBuffersBarrier'
@@ -254,12 +252,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->mwGlobals = array();
                RequestContext::resetMain();
                MediaHandler::resetCache();
-               if ( session_id() !== '' ) {
-                       session_write_close();
-                       session_id( '' );
-               }
-               $wgRequest = new FauxRequest();
-               MediaWiki\Session\SessionManager::resetCache();
 
                $phpErrorLevel = intval( ini_get( 'error_reporting' ) );
 
@@ -517,13 +509,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                                false,
                                $user
                        );
-
-                       // doEditContent() probably started the session via
-                       // User::loadFromSession(). Close it now.
-                       if ( session_id() !== '' ) {
-                               session_write_close();
-                               session_id( '' );
-                       }
                }
        }
 
@@ -1026,7 +1011,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @since 1.21
         */
-       protected function checkHasDiff3() {
+       protected function markTestSkippedIfNoDiff3() {
                global $wgDiff3;
 
                # This check may also protect against code injection in
index 51f0083..90ee1bb 100644 (file)
@@ -86,7 +86,7 @@ class EditPageTest extends MediaWikiLangTestCase {
         * @param string $msg
         */
        protected function assertEditedTextEquals( $expected, $actual, $msg = '' ) {
-               return $this->assertEquals( rtrim( $expected ), rtrim( $actual ), $msg );
+               $this->assertEquals( rtrim( $expected ), rtrim( $actual ), $msg );
        }
 
        /**
@@ -272,6 +272,25 @@ class EditPageTest extends MediaWikiLangTestCase {
        public function testCreatePage(
                $desc, $pageTitle, $user, $editText, $expectedCode, $expectedText, $ignoreBlank = false
        ) {
+               $checkId = null;
+
+               $this->setMwGlobals( 'wgHooks', array(
+                       'PageContentInsertComplete' => array( function (
+                               WikiPage &$page, User &$user, Content $content,
+                               $summary, $minor, $u1, $u2, &$flags, Revision $revision
+                       ) {
+                               // types/refs checked
+                       } ),
+                       'PageContentSaveComplete' => array( function (
+                               WikiPage &$page, User &$user, Content $content,
+                               $summary, $minor, $u1, $u2, &$flags, Revision $revision,
+                               Status &$status, $baseRevId
+                       ) use ( &$checkId ) {
+                               $checkId = $status->value['revision']->getId();
+                               // types/refs checked
+                       } ),
+               ) );
+
                $edit = array( 'wpTextbox1' => $editText );
                if ( $ignoreBlank ) {
                        $edit['wpIgnoreBlankArticle'] = 1;
@@ -280,7 +299,67 @@ class EditPageTest extends MediaWikiLangTestCase {
                $page = $this->assertEdit( $pageTitle, null, $user, $edit, $expectedCode, $expectedText, $desc );
 
                if ( $expectedCode != EditPage::AS_BLANK_ARTICLE ) {
+                       $latest = $page->getLatest();
+                       $page->doDeleteArticleReal( $pageTitle );
+
+                       $this->assertGreaterThan( 0, $latest, "Page revision ID updated in object" );
+                       $this->assertEquals( $latest, $checkId, "Revision in Status for hook" );
+               }
+       }
+
+       /**
+        * @dataProvider provideCreatePages
+        * @covers EditPage
+        */
+       public function testCreatePageTrx(
+               $desc, $pageTitle, $user, $editText, $expectedCode, $expectedText, $ignoreBlank = false
+       ) {
+               $checkIds = array();
+               $this->setMwGlobals( 'wgHooks', array(
+                       'PageContentInsertComplete' => array( function (
+                               WikiPage &$page, User &$user, Content $content,
+                               $summary, $minor, $u1, $u2, &$flags, Revision $revision
+                       ) {
+                               // types/refs checked
+                       } ),
+                       'PageContentSaveComplete' => array( function (
+                               WikiPage &$page, User &$user, Content $content,
+                               $summary, $minor, $u1, $u2, &$flags, Revision $revision,
+                               Status &$status, $baseRevId
+                       ) use ( &$checkIds ) {
+                               $checkIds[] = $status->value['revision']->getId();
+                               // types/refs checked
+                       } ),
+               ) );
+
+               wfGetDB( DB_MASTER )->begin( __METHOD__ );
+
+               $edit = array( 'wpTextbox1' => $editText );
+               if ( $ignoreBlank ) {
+                       $edit['wpIgnoreBlankArticle'] = 1;
+               }
+
+               $page = $this->assertEdit(
+                       $pageTitle, null, $user, $edit, $expectedCode, $expectedText, $desc );
+
+               $pageTitle2 = (string)$pageTitle . '/x';
+               $page2 = $this->assertEdit(
+                       $pageTitle2, null, $user, $edit, $expectedCode, $expectedText, $desc );
+
+               wfGetDB( DB_MASTER )->commit( __METHOD__ );
+
+               if ( $expectedCode != EditPage::AS_BLANK_ARTICLE ) {
+                       $latest = $page->getLatest();
                        $page->doDeleteArticleReal( $pageTitle );
+
+                       $this->assertGreaterThan( 0, $latest, "Page #1 revision ID updated in object" );
+                       $this->assertEquals( $latest, $checkIds[0], "Revision #1 in Status for hook" );
+
+                       $latest2 = $page2->getLatest();
+                       $page2->doDeleteArticleReal( $pageTitle2 );
+
+                       $this->assertGreaterThan( 0, $latest2, "Page #2 revision ID updated in object" );
+                       $this->assertEquals( $latest2, $checkIds[1], "Revision #2 in Status for hook" );
                }
        }
 
@@ -463,7 +542,7 @@ hello
        public function testAutoMerge( $baseUser, $text, $adamsEdit, $bertasEdit,
                $expectedCode, $expectedText, $message = null
        ) {
-               $this->checkHasDiff3();
+               $this->markTestSkippedIfNoDiff3();
 
                // create page
                $ns = $this->getDefaultWikitextNS();
index 56f9746..d174947 100644 (file)
@@ -469,7 +469,7 @@ class GlobalTest extends MediaWikiTestCase {
         * @covers ::wfMerge
         */
        public function testMerge( $old, $mine, $yours, $expectedMergeResult, $expectedText ) {
-               $this->checkHasDiff3();
+               $this->markTestSkippedIfNoDiff3();
 
                $mergedText = null;
                $isMerged = wfMerge( $old, $mine, $yours, $mergedText );
index d3dc512..ca1ec50 100644 (file)
@@ -317,33 +317,6 @@ class SanitizerTest extends MediaWikiTestCase {
                );
        }
 
-       /**
-        * Test for support or lack of support for specific attributes in the attribute whitelist.
-        */
-       public static function provideAttributeSupport() {
-               /** array( <attributes>, <expected>, <message> ) */
-               return array(
-                       array(
-                               'div',
-                               ' role="presentation"',
-                               ' role="presentation"',
-                               'Support for WAI-ARIA\'s role="presentation".'
-                       ),
-                       array( 'div', ' role="main"', '', "Other WAI-ARIA roles are currently not supported." ),
-               );
-       }
-
-       /**
-        * @dataProvider provideAttributeSupport
-        * @covers Sanitizer::fixTagAttributes
-        */
-       public function testAttributeSupport( $tag, $attributes, $expected, $message ) {
-               $this->assertEquals( $expected,
-                       Sanitizer::fixTagAttributes( $attributes, $tag ),
-                       $message
-               );
-       }
-
        /**
         * @dataProvider provideEscapeHtmlAllowEntities
         * @covers Sanitizer::escapeHtmlAllowEntities
@@ -363,4 +336,28 @@ class SanitizerTest extends MediaWikiTestCase {
                        array( '&lt;script&gt;foo&lt;/script&gt;', '<script>foo</script>' ),
                );
        }
+
+       /**
+        * Test escapeIdReferenceList for consistency with escapeId
+        *
+        * @dataProvider provideEscapeIdReferenceList
+        * @covers Sanitizer::escapeIdReferenceList
+        */
+       public function testEscapeIdReferenceList( $referenceList, $id1, $id2 ) {
+               $this->assertEquals(
+                       Sanitizer::escapeIdReferenceList( $referenceList, 'noninitial' ),
+                       Sanitizer::escapeId( $id1, 'noninitial' )
+                               . ' '
+                               . Sanitizer::escapeId( $id2, 'noninitial' )
+               );
+       }
+
+       public static function provideEscapeIdReferenceList() {
+               /** array( <reference list>, <individual id 1>, <individual id 2> ) */
+               return array(
+                       array( 'foo bar', 'foo', 'bar' ),
+                       array( '#1 #2', '#1', '#2' ),
+                       array( '+1 +2', '+1', '+2' ),
+               );
+       }
 }
index c95e69b..f5d0480 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * @author Adam Shorland
+ * @author Addshore
  */
 class StatusTest extends MediaWikiLangTestCase {
 
diff --git a/tests/phpunit/includes/TestLogger.php b/tests/phpunit/includes/TestLogger.php
deleted file mode 100644 (file)
index 7099c3a..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-/**
- * Testing logger
- *
- * Copyright (C) 2015 Brad Jorsch <bjorsch@wikimedia.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Brad Jorsch <bjorsch@wikimedia.org>
- */
-
-use Psr\Log\LogLevel;
-
-/**
- * A logger that may be configured to either buffer logs or to print them to
- * the output where PHPUnit will complain about them.
- *
- * @since 1.27
- */
-class TestLogger extends \Psr\Log\AbstractLogger {
-       private $collect = false;
-       private $buffer = array();
-       private $filter = null;
-
-       /**
-        * @param bool $collect Whether to collect logs
-        * @param callable $filter Filter logs before collecting/printing. Signature is
-        *  string|null function ( string $message, string $level );
-        */
-       public function __construct( $collect = false, $filter = null ) {
-               $this->collect = $collect;
-               $this->filter = $filter;
-       }
-
-       /**
-        * Set the "collect" flag
-        * @param bool $collect
-        */
-       public function setCollect( $collect ) {
-               $this->collect = $collect;
-       }
-
-       /**
-        * Return the collected logs
-        * @return array Array of array( string $level, string $message )
-        */
-       public function getBuffer() {
-               return $this->buffer;
-       }
-
-       /**
-        * Clear the collected log buffer
-        */
-       public function clearBuffer() {
-               $this->buffer = array();
-       }
-
-       public function log( $level, $message, array $context = array() ) {
-               $message = trim( $message );
-
-               if ( $this->filter ) {
-                       $message = call_user_func( $this->filter, $message, $level );
-                       if ( $message === null ) {
-                               return;
-                       }
-               }
-
-               if ( $this->collect ) {
-                       $this->buffer[] = array( $level, $message );
-               } else {
-                       switch ( $level ) {
-                               case LogLevel::DEBUG:
-                               case LogLevel::INFO:
-                               case LogLevel::NOTICE:
-                                       trigger_error( "LOG[$level]: $message", E_USER_NOTICE );
-                                       break;
-
-                               case LogLevel::WARNING:
-                                       trigger_error( "LOG[$level]: $message", E_USER_WARNING );
-                                       break;
-
-                               case LogLevel::ERROR:
-                               case LogLevel::CRITICAL:
-                               case LogLevel::ALERT:
-                               case LogLevel::EMERGENCY:
-                                       trigger_error( "LOG[$level]: $message", E_USER_ERROR );
-                                       break;
-                       }
-               }
-       }
-}
index aad435e..f06208b 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * @author Adam Shorland
+ * @author Addshore
  * @covers TitleArrayFromResult
  */
 class TitleArrayFromResultTest extends PHPUnit_Framework_TestCase {
index 4085925..7dfd14f 100644 (file)
@@ -13,13 +13,9 @@ class ApiLoginTest extends ApiTestCase {
         * Test result of attempted login with an empty username
         */
        public function testApiLoginNoName() {
-               $session = array(
-                       'wsLoginToken' => 'foobar'
-               );
                $data = $this->doApiRequest( array( 'action' => 'login',
                        'lgname' => '', 'lgpassword' => self::$users['sysop']->password,
-                       'lgtoken' => 'foobar',
-               ), $session );
+               ) );
                $this->assertEquals( 'NoName', $data[0]['login']['result'] );
        }
 
@@ -183,94 +179,4 @@ class ApiLoginTest extends ApiTestCase {
                $this->assertArrayHasKey( 'lgtoken', $data[0]['login'] );
        }
 
-       public function testBotPassword() {
-               global $wgServer, $wgSessionProviders;
-
-               if ( !isset( $wgServer ) ) {
-                       $this->markTestIncomplete( 'This test needs $wgServer to be set in LocalSettings.php' );
-               }
-
-               $this->setMwGlobals( array(
-                       'wgSessionProviders' => array_merge( $wgSessionProviders, array(
-                               array(
-                                       'class' => 'MediaWiki\\Session\\BotPasswordSessionProvider',
-                                       'args' => array( array( 'priority' => 40 ) ),
-                               )
-                       ) ),
-                       'wgEnableBotPasswords' => true,
-                       'wgBotPasswordsDatabase' => false,
-                       'wgCentralIdLookupProvider' => 'local',
-                       'wgGrantPermissions' => array(
-                               'test' => array( 'read' => true ),
-                       ),
-               ) );
-
-               // Make sure our session provider is present
-               $manager = TestingAccessWrapper::newFromObject( MediaWiki\Session\SessionManager::singleton() );
-               if ( !isset( $manager->sessionProviders['MediaWiki\\Session\\BotPasswordSessionProvider'] ) ) {
-                       $tmp = $manager->sessionProviders;
-                       $manager->sessionProviders = null;
-                       $manager->sessionProviders = $tmp + $manager->getProviders();
-               }
-               $this->assertNotNull(
-                       MediaWiki\Session\SessionManager::singleton()->getProvider(
-                               'MediaWiki\\Session\\BotPasswordSessionProvider'
-                       ),
-                       'sanity check'
-               );
-
-               $user = self::$users['sysop'];
-               $centralId = CentralIdLookup::factory()->centralIdFromLocalUser( $user->getUser() );
-               $this->assertNotEquals( 0, $centralId, 'sanity check' );
-
-               $passwordFactory = new PasswordFactory();
-               $passwordFactory->init( RequestContext::getMain()->getConfig() );
-               // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
-               $passwordFactory->setDefaultType( 'A' );
-               $pwhash = $passwordFactory->newFromPlaintext( 'foobaz' );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->insert(
-                       'bot_passwords',
-                       array(
-                               'bp_user' => $centralId,
-                               'bp_app_id' => 'foo',
-                               'bp_password' => $pwhash->toString(),
-                               'bp_token' => '',
-                               'bp_restrictions' => MWRestrictions::newDefault()->toJson(),
-                               'bp_grants' => '["test"]',
-                       ),
-                       __METHOD__
-               );
-
-               $lgName = $user->username . BotPassword::getSeparator() . 'foo';
-
-               $ret = $this->doApiRequest( array(
-                       'action' => 'login',
-                       'lgname' => $lgName,
-                       'lgpassword' => 'foobaz',
-               ) );
-
-               $result = $ret[0];
-               $this->assertNotInternalType( 'bool', $result );
-               $this->assertNotInternalType( 'null', $result['login'] );
-
-               $a = $result['login']['result'];
-               $this->assertEquals( 'NeedToken', $a );
-               $token = $result['login']['token'];
-
-               $ret = $this->doApiRequest( array(
-                       'action' => 'login',
-                       'lgtoken' => $token,
-                       'lgname' => $lgName,
-                       'lgpassword' => 'foobaz',
-               ), $ret[2] );
-
-               $result = $ret[0];
-               $this->assertNotInternalType( 'bool', $result );
-               $a = $result['login']['result'];
-
-               $this->assertEquals( 'Success', $a );
-       }
-
 }
index 25ffcb7..01113a6 100644 (file)
@@ -47,7 +47,11 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
 
        protected function tearDown() {
                // Avoid leaking session over tests
-               MediaWiki\Session\SessionManager::getGlobalSession()->clear();
+               if ( session_id() != '' ) {
+                       global $wgUser;
+                       $wgUser->logout();
+                       session_destroy();
+               }
 
                parent::tearDown();
        }
index b6ae641..87f794c 100644 (file)
@@ -15,6 +15,8 @@ abstract class ApiTestCaseUpload extends ApiTestCase {
                        'wgEnableAPI' => true,
                ) );
 
+               wfSetupSession();
+
                $this->clearFakeUploads();
        }
 
index 2622ad4..70da12e 100644 (file)
@@ -5,7 +5,7 @@
  *
  * @group Database
  *
- * @author Adam Shorland
+ * @author Addshore
  */
 class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
 
index 8a9d2ab..6a6cecc 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * @author Adam Shorland
+ * @author Addshore
  * @covers JsonContent
  */
 class JsonContentTest extends MediaWikiLangTestCase {
index 361238b..6b7a210 100644 (file)
@@ -157,7 +157,7 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
         * @covers WikitextContentHandler::merge3
         */
        public function testMerge3( $old, $mine, $yours, $expected ) {
-               $this->checkHasDiff3();
+               $this->markTestSkippedIfNoDiff3();
 
                // test merge
                $oldContent = new WikitextContent( $old );
index 25969e6..a9e5be2 100644 (file)
@@ -37,14 +37,6 @@ class RequestContextTest extends MediaWikiTestCase {
         * @covers RequestContext::importScopedSession
         */
        public function testImportScopedSession() {
-               // Make sure session handling is started
-               if ( !MediaWiki\Session\PHPSessionHandler::isInstalled() ) {
-                       MediaWiki\Session\PHPSessionHandler::install(
-                               MediaWiki\Session\SessionManager::singleton()
-                       );
-               }
-               $oldSessionId = session_id();
-
                $context = RequestContext::getMain();
 
                $oInfo = $context->exportSession();
@@ -84,16 +76,7 @@ class RequestContextTest extends MediaWikiTestCase {
                        $context->getRequest()->getAllHeaders(),
                        "Correct context headers."
                );
-               $this->assertEquals(
-                       $sinfo['sessionId'],
-                       MediaWiki\Session\SessionManager::getGlobalSession()->getId(),
-                       "Correct context session ID."
-               );
-               if ( \MediaWiki\Session\PhpSessionHandler::isEnabled() ) {
-                       $this->assertEquals( $sinfo['sessionId'], session_id(), "Correct context session ID." );
-               } else {
-                       $this->assertEquals( $oldSessionId, session_id(), "Unchanged PHP session ID." );
-               }
+               $this->assertEquals( $sinfo['sessionId'], session_id(), "Correct context session ID." );
                $this->assertEquals( true, $context->getUser()->isLoggedIn(), "Correct context user." );
                $this->assertEquals( $sinfo['userId'], $context->getUser()->getId(), "Correct context user ID." );
                $this->assertEquals(
index a546bec..f4757a4 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * @author Adam Shorland
+ * @author Addshore
  *
  * @group Diff
  */
index cbe0573..d15e6cd 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @author Adam Shorland
+ * @author Addshore
  *
  * @group Diff
  */
index e0d7915..31e0f87 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * @author Adam Shorland
+ * @author Addshore
  *
  * @group Diff
  */
index 500b7e4..e6a1812 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * @covers BadTitleError
- * @author Adam Shorland
+ * @author Addshore
  */
 class BadTitleErrorTest extends MediaWikiTestCase {
 
index 9c4e4a0..d045268 100644 (file)
@@ -2,7 +2,7 @@
 
 /**
  * @covers ErrorPageError
- * @author Adam Shorland
+ * @author Addshore
  */
 class ErrorPageErrorTest extends MediaWikiTestCase {
 
index 6f6aba4..bb874e1 100644 (file)
@@ -2,7 +2,7 @@
 
 /**
  * @covers ReadOnlyError
- * @author Adam Shorland
+ * @author Addshore
  */
 class ReadOnlyErrorTest extends MediaWikiTestCase {
 
index a1cf84b..23bb1e8 100644 (file)
@@ -2,7 +2,7 @@
 
 /**
  * @covers ThrottledError
- * @author Adam Shorland
+ * @author Addshore
  */
 class ThrottledErrorTest extends MediaWikiTestCase {
 
index 591a0fa..644de0b 100644 (file)
@@ -2,7 +2,7 @@
 
 /**
  * @covers UserNotLoggedIn
- * @author Adam Shorland
+ * @author Addshore
  */
 class UserNotLoggedInTest extends MediaWikiTestCase {
 
index 93069d2..0550a93 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * @author Adam Shorland
+ * @author Addshore
  */
 class JobTest extends MediaWikiTestCase {
 
index e4415ec..d355e17 100644 (file)
@@ -34,7 +34,7 @@ class BitmapScalingTest extends MediaWikiTestCase {
                                array(
                                        'width' => 512, 'height' => 384,
                                        'physicalWidth' => 512, 'physicalHeight' => 384,
-                                       'page' => 1,
+                                       'page' => 1, 'interlace' => false,
                                ),
                                array( 'width' => 512 ),
                                'Resizing with width set',
@@ -44,7 +44,7 @@ class BitmapScalingTest extends MediaWikiTestCase {
                                array(
                                        'width' => 512, 'height' => 384,
                                        'physicalWidth' => 512, 'physicalHeight' => 384,
-                                       'page' => 1,
+                                       'page' => 1, 'interlace' => false,
                                ),
                                array( 'width' => 512, 'height' => 768 ),
                                'Resizing with height set too high',
@@ -54,7 +54,7 @@ class BitmapScalingTest extends MediaWikiTestCase {
                                array(
                                        'width' => 512, 'height' => 384,
                                        'physicalWidth' => 512, 'physicalHeight' => 384,
-                                       'page' => 1,
+                                       'page' => 1, 'interlace' => false,
                                ),
                                array( 'width' => 1024, 'height' => 384 ),
                                'Resizing with height set',
@@ -66,7 +66,7 @@ class BitmapScalingTest extends MediaWikiTestCase {
                                array(
                                        'width' => 5, 'height' => 1,
                                        'physicalWidth' => 5, 'physicalHeight' => 1,
-                                       'page' => 1,
+                                       'page' => 1, 'interlace' => false,
                                ),
                                array( 'width' => 5 ),
                                'Very wide image',
@@ -77,7 +77,7 @@ class BitmapScalingTest extends MediaWikiTestCase {
                                array(
                                        'width' => 1, 'height' => 10,
                                        'physicalWidth' => 1, 'physicalHeight' => 10,
-                                       'page' => 1,
+                                       'page' => 1, 'interlace' => false,
                                ),
                                array( 'width' => 1 ),
                                'Very high image',
@@ -87,7 +87,7 @@ class BitmapScalingTest extends MediaWikiTestCase {
                                array(
                                        'width' => 1, 'height' => 5,
                                        'physicalWidth' => 1, 'physicalHeight' => 10,
-                                       'page' => 1,
+                                       'page' => 1, 'interlace' => false,
                                ),
                                array( 'width' => 10, 'height' => 5 ),
                                'Very high image with height set',
@@ -98,11 +98,22 @@ class BitmapScalingTest extends MediaWikiTestCase {
                                array(
                                        'width' => 5000, 'height' => 5000,
                                        'physicalWidth' => 4000, 'physicalHeight' => 4000,
-                                       'page' => 1,
+                                       'page' => 1, 'interlace' => false,
                                ),
                                array( 'width' => 5000 ),
                                'Bigger than max image size but doesn\'t need scaling',
                        ),
+                       /* Max interlace image area */
+                       array(
+                               array( 4000, 4000 ),
+                               array(
+                                       'width' => 5000, 'height' => 5000,
+                                       'physicalWidth' => 4000, 'physicalHeight' => 4000,
+                                       'page' => 1, 'interlace' => false,
+                               ),
+                               array( 'width' => 5000, 'interlace' => true ),
+                               'Interlace bigger than max interlace area',
+                       ),
                );
        }
 
index 7c0dd2e..6d2b398 100644 (file)
@@ -816,7 +816,7 @@ more stuff
 
        /* @todo FIXME: fix this!
        public function testGetUndoText() {
-       $this->checkHasDiff3();
+       $this->markTestSkippedIfNoDiff3();
 
        $text = "one";
        $page = $this->createPage( "WikiPageTest_testGetUndoText", $text );
diff --git a/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php b/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php
deleted file mode 100644 (file)
index 52872a4..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use Psr\Log\LogLevel;
-use MediaWikiTestCase;
-use User;
-
-/**
- * @group Session
- * @group Database
- * @covers MediaWiki\Session\BotPasswordSessionProvider
- */
-class BotPasswordSessionProviderTest extends MediaWikiTestCase {
-
-       private $config;
-
-       private function getProvider( $name = null, $prefix = null ) {
-               global $wgSessionProviders;
-
-               $params = array(
-                       'priority' => 40,
-                       'sessionCookieName' => $name,
-                       'sessionCookieOptions' => array(),
-               );
-               if ( $prefix !== null ) {
-                       $params['sessionCookieOptions']['prefix'] = $prefix;
-               }
-
-               if ( !$this->config ) {
-                       $this->config = new \HashConfig( array(
-                               'CookiePrefix' => 'wgCookiePrefix',
-                               'EnableBotPasswords' => true,
-                               'BotPasswordsDatabase' => false,
-                               'SessionProviders' => $wgSessionProviders + array(
-                                       'MediaWiki\\Session\\BotPasswordSessionProvider' => array(
-                                               'class' => 'MediaWiki\\Session\\BotPasswordSessionProvider',
-                                               'args' => array( $params ),
-                                       )
-                               ),
-                       ) );
-               }
-               $manager = new SessionManager( array(
-                       'config' => new \MultiConfig( array( $this->config, \RequestContext::getMain()->getConfig() ) ),
-                       'logger' => new \Psr\Log\NullLogger,
-                       'store' => new TestBagOStuff,
-               ) );
-
-               return $manager->getProvider( 'MediaWiki\\Session\\BotPasswordSessionProvider' );
-       }
-
-       protected function setUp() {
-               parent::setUp();
-
-               $this->setMwGlobals( array(
-                       'wgEnableBotPasswords' => true,
-                       'wgBotPasswordsDatabase' => false,
-                       'wgCentralIdLookupProvider' => 'local',
-                       'wgGrantPermissions' => array(
-                               'test' => array( 'read' => true ),
-                       ),
-               ) );
-       }
-
-       public function addDBData() {
-               $passwordFactory = new \PasswordFactory();
-               $passwordFactory->init( \RequestContext::getMain()->getConfig() );
-               // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
-               $passwordFactory->setDefaultType( 'A' );
-               $pwhash = $passwordFactory->newFromPlaintext( 'foobaz' );
-
-               $userId = \CentralIdLookup::factory( 'local' )->centralIdFromName( 'UTSysop' );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete(
-                       'bot_passwords',
-                       array( 'bp_user' => $userId, 'bp_app_id' => 'BotPasswordSessionProvider' ),
-                       __METHOD__
-               );
-               $dbw->insert(
-                       'bot_passwords',
-                       array(
-                               'bp_user' => $userId,
-                               'bp_app_id' => 'BotPasswordSessionProvider',
-                               'bp_password' => $pwhash->toString(),
-                               'bp_token' => 'token!',
-                               'bp_restrictions' => '{"IPAddresses":["127.0.0.0/8"]}',
-                               'bp_grants' => '["test"]',
-                       ),
-                       __METHOD__
-               );
-       }
-
-       public function testConstructor() {
-               try {
-                       $provider = new BotPasswordSessionProvider();
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'MediaWiki\\Session\\BotPasswordSessionProvider::__construct: priority must be specified',
-                               $ex->getMessage()
-                       );
-               }
-
-               try {
-                       $provider = new BotPasswordSessionProvider( array(
-                               'priority' => SessionInfo::MIN_PRIORITY - 1
-                       ) );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'MediaWiki\\Session\\BotPasswordSessionProvider::__construct: Invalid priority',
-                               $ex->getMessage()
-                       );
-               }
-
-               try {
-                       $provider = new BotPasswordSessionProvider( array(
-                               'priority' => SessionInfo::MAX_PRIORITY + 1
-                       ) );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'MediaWiki\\Session\\BotPasswordSessionProvider::__construct: Invalid priority',
-                               $ex->getMessage()
-                       );
-               }
-
-               $provider = new BotPasswordSessionProvider( array(
-                       'priority' => 40
-               ) );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
-               $this->assertSame( 40, $priv->priority );
-               $this->assertSame( '_BPsession', $priv->sessionCookieName );
-               $this->assertSame( array(), $priv->sessionCookieOptions );
-
-               $provider = new BotPasswordSessionProvider( array(
-                       'priority' => 40,
-                       'sessionCookieName' => null,
-               ) );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
-               $this->assertSame( '_BPsession', $priv->sessionCookieName );
-
-               $provider = new BotPasswordSessionProvider( array(
-                       'priority' => 40,
-                       'sessionCookieName' => 'Foo',
-                       'sessionCookieOptions' => array( 'Bar' ),
-               ) );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
-               $this->assertSame( 'Foo', $priv->sessionCookieName );
-               $this->assertSame( array( 'Bar' ), $priv->sessionCookieOptions );
-       }
-
-       public function testBasics() {
-               $provider = $this->getProvider();
-
-               $this->assertTrue( $provider->persistsSessionID() );
-               $this->assertFalse( $provider->canChangeUser() );
-
-               $this->assertNull( $provider->newSessionInfo() );
-               $this->assertNull( $provider->newSessionInfo( 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ) );
-       }
-
-       public function testProvideSessionInfo() {
-               $provider = $this->getProvider();
-               $request = new \FauxRequest;
-               $request->setCookie( '_BPsession', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'wgCookiePrefix' );
-
-               if ( !defined( 'MW_API' ) ) {
-                       $this->assertNull( $provider->provideSessionInfo( $request ) );
-                       define( 'MW_API', 1 );
-               }
-
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\SessionInfo', $info );
-               $this->assertSame( 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', $info->getId() );
-
-               $this->config->set( 'EnableBotPasswords', false );
-               $this->assertNull( $provider->provideSessionInfo( $request ) );
-               $this->config->set( 'EnableBotPasswords', true );
-
-               $this->assertNull( $provider->provideSessionInfo( new \FauxRequest ) );
-       }
-
-       public function testNewSessionInfoForRequest() {
-               $provider = $this->getProvider();
-               $user = \User::newFromName( 'UTSysop' );
-               $request = $this->getMock( 'FauxRequest', array( 'getIP' ) );
-               $request->expects( $this->any() )->method( 'getIP' )
-                       ->will( $this->returnValue( '127.0.0.1' ) );
-               $bp = \BotPassword::newFromUser( $user, 'BotPasswordSessionProvider' );
-
-               $session = $provider->newSessionForRequest( $user, $bp, $request );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-
-               $this->assertEquals( $session->getId(), $request->getSession()->getId() );
-               $this->assertEquals( $user->getName(), $session->getUser()->getName() );
-
-               $this->assertEquals( array(
-                       'centralId' => $bp->getUserCentralId(),
-                       'appId' => $bp->getAppId(),
-                       'token' => $bp->getToken(),
-                       'rights' => array( 'read' ),
-               ), $session->getProviderMetadata() );
-
-               $this->assertEquals( array( 'read' ), $session->getAllowedUserRights() );
-       }
-
-       public function testCheckSessionInfo() {
-               $logger = new \TestLogger( true, function ( $m ) {
-                       return preg_replace(
-                               '/^Session \[\d+\][a-zA-Z0-9_\\\\]+<(?:null|anon|[+-]:\d+:\w+)>\w+: /', 'Session X: ', $m
-                       );
-               } );
-               $provider = $this->getProvider();
-               $provider->setLogger( $logger );
-
-               $user = \User::newFromName( 'UTSysop' );
-               $request = $this->getMock( 'FauxRequest', array( 'getIP' ) );
-               $request->expects( $this->any() )->method( 'getIP' )
-                       ->will( $this->returnValue( '127.0.0.1' ) );
-               $bp = \BotPassword::newFromUser( $user, 'BotPasswordSessionProvider' );
-
-               $data = array(
-                       'provider' => $provider,
-                       'id' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
-                       'userInfo' => UserInfo::newFromUser( $user, true ),
-                       'persisted' => false,
-                       'metadata' => array(
-                               'centralId' => $bp->getUserCentralId(),
-                               'appId' => $bp->getAppId(),
-                               'token' => $bp->getToken(),
-                       ),
-               );
-               $dataMD = $data['metadata'];
-
-               foreach ( array_keys( $data['metadata'] ) as $key ) {
-                       $data['metadata'] = $dataMD;
-                       unset( $data['metadata'][$key] );
-                       $info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data );
-                       $metadata = $info->getProviderMetadata();
-
-                       $this->assertFalse( $provider->refreshSessionInfo( $info, $request, $metadata ) );
-                       $this->assertSame( array(
-                               array( LogLevel::INFO, "Session X: Missing metadata: $key" )
-                       ), $logger->getBuffer() );
-                       $logger->clearBuffer();
-               }
-
-               $data['metadata'] = $dataMD;
-               $data['metadata']['appId'] = 'Foobar';
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data );
-               $metadata = $info->getProviderMetadata();
-               $this->assertFalse( $provider->refreshSessionInfo( $info, $request, $metadata ) );
-               $this->assertSame( array(
-                       array( LogLevel::INFO, "Session X: No BotPassword for {$bp->getUserCentralId()} Foobar" ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               $data['metadata'] = $dataMD;
-               $data['metadata']['token'] = 'Foobar';
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data );
-               $metadata = $info->getProviderMetadata();
-               $this->assertFalse( $provider->refreshSessionInfo( $info, $request, $metadata ) );
-               $this->assertSame( array(
-                       array( LogLevel::INFO, 'Session X: BotPassword token check failed' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               $request2 = $this->getMock( 'FauxRequest', array( 'getIP' ) );
-               $request2->expects( $this->any() )->method( 'getIP' )
-                       ->will( $this->returnValue( '10.0.0.1' ) );
-               $data['metadata'] = $dataMD;
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data );
-               $metadata = $info->getProviderMetadata();
-               $this->assertFalse( $provider->refreshSessionInfo( $info, $request2, $metadata ) );
-               $this->assertSame( array(
-                       array( LogLevel::INFO, 'Session X: Restrictions check failed' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data );
-               $metadata = $info->getProviderMetadata();
-               $this->assertTrue( $provider->refreshSessionInfo( $info, $request, $metadata ) );
-               $this->assertSame( array(), $logger->getBuffer() );
-               $this->assertEquals( $dataMD + array( 'rights' => array( 'read' ) ), $metadata );
-       }
-}
diff --git a/tests/phpunit/includes/session/CookieSessionProviderTest.php b/tests/phpunit/includes/session/CookieSessionProviderTest.php
deleted file mode 100644 (file)
index 702f556..0000000
+++ /dev/null
@@ -1,726 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use MediaWikiTestCase;
-use User;
-
-/**
- * @group Session
- * @group Database
- * @covers MediaWiki\Session\CookieSessionProvider
- */
-class CookieSessionProviderTest extends MediaWikiTestCase {
-
-       private function getConfig() {
-               global $wgCookieExpiration;
-               return new \HashConfig( array(
-                       'CookiePrefix' => 'CookiePrefix',
-                       'CookiePath' => 'CookiePath',
-                       'CookieDomain' => 'CookieDomain',
-                       'CookieSecure' => true,
-                       'CookieHttpOnly' => true,
-                       'SessionName' => false,
-                       'ExtendedLoginCookies' => array( 'UserID', 'Token' ),
-                       'ExtendedLoginCookieExpiration' => $wgCookieExpiration * 2,
-               ) );
-       }
-
-       public function testConstructor() {
-               try {
-                       new CookieSessionProvider();
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'MediaWiki\\Session\\CookieSessionProvider::__construct: priority must be specified',
-                               $ex->getMessage()
-                       );
-               }
-
-               try {
-                       new CookieSessionProvider( array( 'priority' => 'foo' ) );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'MediaWiki\\Session\\CookieSessionProvider::__construct: Invalid priority',
-                               $ex->getMessage()
-                       );
-               }
-               try {
-                       new CookieSessionProvider( array( 'priority' => SessionInfo::MIN_PRIORITY - 1 ) );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'MediaWiki\\Session\\CookieSessionProvider::__construct: Invalid priority',
-                               $ex->getMessage()
-                       );
-               }
-               try {
-                       new CookieSessionProvider( array( 'priority' => SessionInfo::MAX_PRIORITY + 1 ) );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'MediaWiki\\Session\\CookieSessionProvider::__construct: Invalid priority',
-                               $ex->getMessage()
-                       );
-               }
-
-               try {
-                       new CookieSessionProvider( array( 'priority' => 1, 'cookieOptions' => null ) );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'MediaWiki\\Session\\CookieSessionProvider::__construct: cookieOptions must be an array',
-                               $ex->getMessage()
-                       );
-               }
-
-               $config = $this->getConfig();
-               $p = \TestingAccessWrapper::newFromObject(
-                       new CookieSessionProvider( array( 'priority' => 1 ) )
-               );
-               $p->setLogger( new \TestLogger() );
-               $p->setConfig( $config );
-               $this->assertEquals( 1, $p->priority );
-               $this->assertEquals( array(
-                       'callUserSetCookiesHook' => false,
-                       'sessionName' => 'CookiePrefix_session',
-               ), $p->params );
-               $this->assertEquals( array(
-                       'prefix' => 'CookiePrefix',
-                       'path' => 'CookiePath',
-                       'domain' => 'CookieDomain',
-                       'secure' => true,
-                       'httpOnly' => true,
-               ), $p->cookieOptions );
-
-               $config->set( 'SessionName', 'SessionName' );
-               $p = \TestingAccessWrapper::newFromObject(
-                       new CookieSessionProvider( array( 'priority' => 3 ) )
-               );
-               $p->setLogger( new \TestLogger() );
-               $p->setConfig( $config );
-               $this->assertEquals( 3, $p->priority );
-               $this->assertEquals( array(
-                       'callUserSetCookiesHook' => false,
-                       'sessionName' => 'SessionName',
-               ), $p->params );
-               $this->assertEquals( array(
-                       'prefix' => 'CookiePrefix',
-                       'path' => 'CookiePath',
-                       'domain' => 'CookieDomain',
-                       'secure' => true,
-                       'httpOnly' => true,
-               ), $p->cookieOptions );
-
-               $p = \TestingAccessWrapper::newFromObject( new CookieSessionProvider( array(
-                       'priority' => 10,
-                       'callUserSetCookiesHook' => true,
-                       'cookieOptions' => array(
-                               'prefix' => 'XPrefix',
-                               'path' => 'XPath',
-                               'domain' => 'XDomain',
-                               'secure' => 'XSecure',
-                               'httpOnly' => 'XHttpOnly',
-                       ),
-                       'sessionName' => 'XSession',
-               ) ) );
-               $p->setLogger( new \TestLogger() );
-               $p->setConfig( $config );
-               $this->assertEquals( 10, $p->priority );
-               $this->assertEquals( array(
-                       'callUserSetCookiesHook' => true,
-                       'sessionName' => 'XSession',
-               ), $p->params );
-               $this->assertEquals( array(
-                       'prefix' => 'XPrefix',
-                       'path' => 'XPath',
-                       'domain' => 'XDomain',
-                       'secure' => 'XSecure',
-                       'httpOnly' => 'XHttpOnly',
-               ), $p->cookieOptions );
-       }
-
-       public function testBasics() {
-               $provider = new CookieSessionProvider( array( 'priority' => 10 ) );
-
-               $this->assertTrue( $provider->persistsSessionID() );
-               $this->assertTrue( $provider->canChangeUser() );
-
-               $msg = $provider->whyNoSession();
-               $this->assertInstanceOf( 'Message', $msg );
-               $this->assertSame( 'sessionprovider-nocookies', $msg->getKey() );
-       }
-
-       public function testProvideSessionInfo() {
-               $params = array(
-                       'priority' => 20,
-                       'sessionName' => 'session',
-                       'cookieOptions' => array( 'prefix' => 'x' ),
-               );
-               $provider = new CookieSessionProvider( $params );
-               $provider->setLogger( new \TestLogger() );
-               $provider->setConfig( $this->getConfig() );
-               $provider->setManager( new SessionManager() );
-
-               $user = User::newFromName( 'UTSysop' );
-               $id = $user->getId();
-               $name = $user->getName();
-               $token = $user->getToken( true );
-
-               $sessionId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-
-               // No data
-               $request = new \FauxRequest();
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNull( $info );
-
-               // Session key only
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'session' => $sessionId,
-               ), '' );
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNotNull( $info );
-               $this->assertSame( $params['priority'], $info->getPriority() );
-               $this->assertSame( $sessionId, $info->getId() );
-               $this->assertNull( $info->getUserInfo() );
-               $this->assertFalse( $info->forceHTTPS() );
-
-               // User, no session key
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'xUserID' => $id,
-                       'xToken' => $token,
-               ), '' );
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNotNull( $info );
-               $this->assertSame( $params['priority'], $info->getPriority() );
-               $this->assertNotSame( $sessionId, $info->getId() );
-               $this->assertNotNull( $info->getUserInfo() );
-               $this->assertSame( $id, $info->getUserInfo()->getId() );
-               $this->assertSame( $name, $info->getUserInfo()->getName() );
-               $this->assertFalse( $info->forceHTTPS() );
-
-               // User and session key
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'session' => $sessionId,
-                       'xUserID' => $id,
-                       'xToken' => $token,
-               ), '' );
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNotNull( $info );
-               $this->assertSame( $params['priority'], $info->getPriority() );
-               $this->assertSame( $sessionId, $info->getId() );
-               $this->assertNotNull( $info->getUserInfo() );
-               $this->assertSame( $id, $info->getUserInfo()->getId() );
-               $this->assertSame( $name, $info->getUserInfo()->getName() );
-               $this->assertFalse( $info->forceHTTPS() );
-
-               // User with bad token
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'session' => $sessionId,
-                       'xUserID' => $id,
-                       'xToken' => 'BADTOKEN',
-               ), '' );
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNull( $info );
-
-               // User id with no token
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'session' => $sessionId,
-                       'xUserID' => $id,
-               ), '' );
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNotNull( $info );
-               $this->assertSame( $params['priority'], $info->getPriority() );
-               $this->assertSame( $sessionId, $info->getId() );
-               $this->assertNotNull( $info->getUserInfo() );
-               $this->assertFalse( $info->getUserInfo()->isVerified() );
-               $this->assertSame( $id, $info->getUserInfo()->getId() );
-               $this->assertSame( $name, $info->getUserInfo()->getName() );
-               $this->assertFalse( $info->forceHTTPS() );
-
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'xUserID' => $id,
-               ), '' );
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNull( $info );
-
-               // User and session key, with forceHTTPS flag
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'session' => $sessionId,
-                       'xUserID' => $id,
-                       'xToken' => $token,
-                       'forceHTTPS' => true,
-               ), '' );
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNotNull( $info );
-               $this->assertSame( $params['priority'], $info->getPriority() );
-               $this->assertSame( $sessionId, $info->getId() );
-               $this->assertNotNull( $info->getUserInfo() );
-               $this->assertSame( $id, $info->getUserInfo()->getId() );
-               $this->assertSame( $name, $info->getUserInfo()->getName() );
-               $this->assertTrue( $info->forceHTTPS() );
-
-               // Invalid user id
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'session' => $sessionId,
-                       'xUserID' => '-1',
-               ), '' );
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNull( $info );
-
-               // User id with matching name
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'session' => $sessionId,
-                       'xUserID' => $id,
-                       'xUserName' => $name,
-               ), '' );
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNotNull( $info );
-               $this->assertSame( $params['priority'], $info->getPriority() );
-               $this->assertSame( $sessionId, $info->getId() );
-               $this->assertNotNull( $info->getUserInfo() );
-               $this->assertFalse( $info->getUserInfo()->isVerified() );
-               $this->assertSame( $id, $info->getUserInfo()->getId() );
-               $this->assertSame( $name, $info->getUserInfo()->getName() );
-               $this->assertFalse( $info->forceHTTPS() );
-
-               // User id with wrong name
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'session' => $sessionId,
-                       'xUserID' => $id,
-                       'xUserName' => 'Wrong',
-               ), '' );
-               $info = $provider->provideSessionInfo( $request );
-               $this->assertNull( $info );
-       }
-
-       public function testGetVaryCookies() {
-               $provider = new CookieSessionProvider( array(
-                       'priority' => 1,
-                       'sessionName' => 'MySessionName',
-                       'cookieOptions' => array( 'prefix' => 'MyCookiePrefix' ),
-               ) );
-               $this->assertArrayEquals( array(
-                       'MyCookiePrefixToken',
-                       'MyCookiePrefixLoggedOut',
-                       'MySessionName',
-                       'forceHTTPS',
-               ), $provider->getVaryCookies() );
-       }
-
-       public function testSuggestLoginUsername() {
-               $provider = new CookieSessionProvider( array(
-                       'priority' => 1,
-                       'sessionName' => 'MySessionName',
-                       'cookieOptions' => array( 'prefix' => 'x' ),
-               ) );
-
-               $request = new \FauxRequest();
-               $this->assertEquals( null, $provider->suggestLoginUsername( $request ) );
-
-               $request->setCookies( array(
-                       'xUserName' => 'Example',
-               ), '' );
-               $this->assertEquals( 'Example', $provider->suggestLoginUsername( $request ) );
-       }
-
-       public function testPersistSession() {
-               $this->setMwGlobals( array( 'wgCookieExpiration' => 100 ) );
-
-               $provider = new CookieSessionProvider( array(
-                       'priority' => 1,
-                       'sessionName' => 'MySessionName',
-                       'callUserSetCookiesHook' => false,
-                       'cookieOptions' => array( 'prefix' => 'x' ),
-               ) );
-               $config = $this->getConfig();
-               $provider->setLogger( new \TestLogger() );
-               $provider->setConfig( $config );
-               $provider->setManager( SessionManager::singleton() );
-
-               $sessionId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-               $store = new \HashBagOStuff();
-               $user = User::newFromName( 'UTSysop' );
-               $anon = new User;
-
-               $backend = new SessionBackend(
-                       new SessionId( $sessionId ),
-                       new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                               'provider' => $provider,
-                               'id' => $sessionId,
-                               'persisted' => true,
-                               'idIsSafe' => true,
-                       ) ),
-                       $store,
-                       new \Psr\Log\NullLogger(),
-                       10
-               );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
-
-               $mock = $this->getMock( 'stdClass', array( 'onUserSetCookies' ) );
-               $mock->expects( $this->never() )->method( 'onUserSetCookies' );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'UserSetCookies' => array( $mock ) ) );
-
-               // Anonymous user
-               $backend->setUser( $anon );
-               $backend->setRememberUser( true );
-               $backend->setForceHTTPS( false );
-               $request = new \FauxRequest();
-               $provider->persistSession( $backend, $request );
-               $this->assertSame( $sessionId, $request->response()->getCookie( 'MySessionName' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'xUserID' ) );
-               $this->assertSame( null, $request->response()->getCookie( 'xUserName' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'xToken' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'forceHTTPS' ) );
-               $this->assertSame( array(), $backend->getData() );
-
-               // Logged-in user, no remember
-               $backend->setUser( $user );
-               $backend->setRememberUser( false );
-               $backend->setForceHTTPS( false );
-               $request = new \FauxRequest();
-               $provider->persistSession( $backend, $request );
-               $this->assertSame( $sessionId, $request->response()->getCookie( 'MySessionName' ) );
-               $this->assertSame( (string)$user->getId(), $request->response()->getCookie( 'xUserID' ) );
-               $this->assertSame( $user->getName(), $request->response()->getCookie( 'xUserName' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'xToken' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'forceHTTPS' ) );
-               $this->assertSame( array(), $backend->getData() );
-
-               // Logged-in user, remember
-               $backend->setUser( $user );
-               $backend->setRememberUser( true );
-               $backend->setForceHTTPS( true );
-               $request = new \FauxRequest();
-               $time = time();
-               $provider->persistSession( $backend, $request );
-               $this->assertSame( $sessionId, $request->response()->getCookie( 'MySessionName' ) );
-               $this->assertSame( (string)$user->getId(), $request->response()->getCookie( 'xUserID' ) );
-               $this->assertSame( $user->getName(), $request->response()->getCookie( 'xUserName' ) );
-               $this->assertSame( $user->getToken(), $request->response()->getCookie( 'xToken' ) );
-               $this->assertSame( 'true', $request->response()->getCookie( 'forceHTTPS' ) );
-               $this->assertSame( array(), $backend->getData() );
-       }
-
-       /**
-        * @dataProvider provideCookieData
-        * @param bool $secure
-        * @param bool $remember
-        */
-       public function testCookieData( $secure, $remember ) {
-               $this->setMwGlobals( array(
-                       'wgCookieExpiration' => 100,
-                       'wgSecureLogin' => false,
-               ) );
-
-               $provider = new CookieSessionProvider( array(
-                       'priority' => 1,
-                       'sessionName' => 'MySessionName',
-                       'callUserSetCookiesHook' => false,
-                       'cookieOptions' => array( 'prefix' => 'x' ),
-               ) );
-               $config = $this->getConfig();
-               $config->set( 'CookieSecure', $secure );
-               $provider->setLogger( new \TestLogger() );
-               $provider->setConfig( $config );
-               $provider->setManager( SessionManager::singleton() );
-
-               $sessionId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-               $user = User::newFromName( 'UTSysop' );
-               $this->assertFalse( $user->requiresHTTPS(), 'sanity check' );
-
-               $backend = new SessionBackend(
-                       new SessionId( $sessionId ),
-                       new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                               'provider' => $provider,
-                               'id' => $sessionId,
-                               'persisted' => true,
-                               'idIsSafe' => true,
-                       ) ),
-                       new \EmptyBagOStuff(),
-                       new \Psr\Log\NullLogger(),
-                       10
-               );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
-               $backend->setUser( $user );
-               $backend->setRememberUser( $remember );
-               $backend->setForceHTTPS( $secure );
-               $request = new \FauxRequest();
-               $time = time();
-               $provider->persistSession( $backend, $request );
-
-               $defaults = array(
-                       'expire' => (int)100,
-                       'path' => $config->get( 'CookiePath' ),
-                       'domain' => $config->get( 'CookieDomain' ),
-                       'secure' => $secure,
-                       'httpOnly' => $config->get( 'CookieHttpOnly' ),
-                       'raw' => false,
-               );
-               $extendedExpiry = $config->get( 'ExtendedLoginCookieExpiration' );
-               $extendedExpiry = (int)( $extendedExpiry === null ? 0 : $extendedExpiry );
-               $this->assertEquals( array( 'UserID', 'Token' ), $config->get( 'ExtendedLoginCookies' ),
-                       'sanity check' );
-               $expect = array(
-                       'MySessionName' => array(
-                               'value' => (string)$sessionId,
-                               'expire' => 0,
-                       ) + $defaults,
-                       'xUserID' => array(
-                               'value' => (string)$user->getId(),
-                               'expire' => $extendedExpiry,
-                       ) + $defaults,
-                       'xUserName' => array(
-                               'value' => $user->getName(),
-                       ) + $defaults,
-                       'xToken' => array(
-                               'value' => $remember ? $user->getToken() : '',
-                               'expire' => $remember ? $extendedExpiry : -31536000,
-                       ) + $defaults,
-                       'forceHTTPS' => array(
-                               'value' => $secure ? 'true' : '',
-                               'secure' => false,
-                               'expire' => $secure ? $remember ? $defaults['expire'] : 0 : -31536000,
-                       ) + $defaults,
-               );
-               foreach ( $expect as $key => $value ) {
-                       $actual = $request->response()->getCookieData( $key );
-                       if ( $actual && $actual['expire'] > 0 ) {
-                               // Round expiry so we don't randomly fail if the seconds ticked during the test.
-                               $actual['expire'] = round( $actual['expire'] - $time, -2 );
-                       }
-                       $this->assertEquals( $value, $actual, "Cookie $key" );
-               }
-       }
-
-       public static function provideCookieData() {
-               return array(
-                       array( false, false ),
-                       array( false, true ),
-                       array( true, false ),
-                       array( true, true ),
-               );
-       }
-
-       protected function getSentRequest() {
-               $sentResponse = $this->getMock( 'FauxResponse', array( 'headersSent', 'setCookie', 'header' ) );
-               $sentResponse->expects( $this->any() )->method( 'headersSent' )
-                       ->will( $this->returnValue( true ) );
-               $sentResponse->expects( $this->never() )->method( 'setCookie' );
-               $sentResponse->expects( $this->never() )->method( 'header' );
-
-               $sentRequest = $this->getMock( 'FauxRequest', array( 'response' ) );
-               $sentRequest->expects( $this->any() )->method( 'response' )
-                       ->will( $this->returnValue( $sentResponse ) );
-               return $sentRequest;
-       }
-
-       public function testPersistSessionWithHook() {
-               $that = $this;
-
-               $provider = new CookieSessionProvider( array(
-                       'priority' => 1,
-                       'sessionName' => 'MySessionName',
-                       'callUserSetCookiesHook' => true,
-                       'cookieOptions' => array( 'prefix' => 'x' ),
-               ) );
-               $provider->setLogger( new \Psr\Log\NullLogger() );
-               $provider->setConfig( $this->getConfig() );
-               $provider->setManager( SessionManager::singleton() );
-
-               $sessionId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-               $store = new \HashBagOStuff();
-               $user = User::newFromName( 'UTSysop' );
-               $anon = new User;
-
-               $backend = new SessionBackend(
-                       new SessionId( $sessionId ),
-                       new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                               'provider' => $provider,
-                               'id' => $sessionId,
-                               'persisted' => true,
-                               'idIsSafe' => true,
-                       ) ),
-                       $store,
-                       new \Psr\Log\NullLogger(),
-                       10
-               );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
-
-               // Anonymous user
-               $mock = $this->getMock( 'stdClass', array( 'onUserSetCookies' ) );
-               $mock->expects( $this->never() )->method( 'onUserSetCookies' );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'UserSetCookies' => array( $mock ) ) );
-               $backend->setUser( $anon );
-               $backend->setRememberUser( true );
-               $backend->setForceHTTPS( false );
-               $request = new \FauxRequest();
-               $provider->persistSession( $backend, $request );
-               $this->assertSame( $sessionId, $request->response()->getCookie( 'MySessionName' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'xUserID' ) );
-               $this->assertSame( null, $request->response()->getCookie( 'xUserName' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'xToken' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'forceHTTPS' ) );
-               $this->assertSame( array(), $backend->getData() );
-
-               $provider->persistSession( $backend, $this->getSentRequest() );
-
-               // Logged-in user, no remember
-               $mock = $this->getMock( __CLASS__, array( 'onUserSetCookies' ) );
-               $mock->expects( $this->once() )->method( 'onUserSetCookies' )
-                       ->will( $this->returnCallback( function ( $u, &$sessionData, &$cookies ) use ( $that, $user ) {
-                               $that->assertSame( $user, $u );
-                               $that->assertEquals( array(
-                                       'wsUserID' => $user->getId(),
-                                       'wsUserName' => $user->getName(),
-                                       'wsToken' => $user->getToken(),
-                               ), $sessionData );
-                               $that->assertEquals( array(
-                                       'UserID' => $user->getId(),
-                                       'UserName' => $user->getName(),
-                                       'Token' => false,
-                               ), $cookies );
-
-                               $sessionData['foo'] = 'foo!';
-                               $cookies['bar'] = 'bar!';
-                               return true;
-                       } ) );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'UserSetCookies' => array( $mock ) ) );
-               $backend->setUser( $user );
-               $backend->setRememberUser( false );
-               $backend->setForceHTTPS( false );
-               $backend->setLoggedOutTimestamp( $loggedOut = time() );
-               $request = new \FauxRequest();
-               $provider->persistSession( $backend, $request );
-               $this->assertSame( $sessionId, $request->response()->getCookie( 'MySessionName' ) );
-               $this->assertSame( (string)$user->getId(), $request->response()->getCookie( 'xUserID' ) );
-               $this->assertSame( $user->getName(), $request->response()->getCookie( 'xUserName' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'xToken' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'forceHTTPS' ) );
-               $this->assertSame( 'bar!', $request->response()->getCookie( 'xbar' ) );
-               $this->assertSame( (string)$loggedOut, $request->response()->getCookie( 'xLoggedOut' ) );
-               $this->assertEquals( array(
-                       'wsUserID' => $user->getId(),
-                       'wsUserName' => $user->getName(),
-                       'wsToken' => $user->getToken(),
-                       'foo' => 'foo!',
-               ), $backend->getData() );
-
-               $provider->persistSession( $backend, $this->getSentRequest() );
-
-               // Logged-in user, remember
-               $mock = $this->getMock( __CLASS__, array( 'onUserSetCookies' ) );
-               $mock->expects( $this->once() )->method( 'onUserSetCookies' )
-                       ->will( $this->returnCallback( function ( $u, &$sessionData, &$cookies ) use ( $that, $user ) {
-                               $that->assertSame( $user, $u );
-                               $that->assertEquals( array(
-                                       'wsUserID' => $user->getId(),
-                                       'wsUserName' => $user->getName(),
-                                       'wsToken' => $user->getToken(),
-                               ), $sessionData );
-                               $that->assertEquals( array(
-                                       'UserID' => $user->getId(),
-                                       'UserName' => $user->getName(),
-                                       'Token' => $user->getToken(),
-                               ), $cookies );
-
-                               $sessionData['foo'] = 'foo 2!';
-                               $cookies['bar'] = 'bar 2!';
-                               return true;
-                       } ) );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'UserSetCookies' => array( $mock ) ) );
-               $backend->setUser( $user );
-               $backend->setRememberUser( true );
-               $backend->setForceHTTPS( true );
-               $backend->setLoggedOutTimestamp( 0 );
-               $request = new \FauxRequest();
-               $provider->persistSession( $backend, $request );
-               $this->assertSame( $sessionId, $request->response()->getCookie( 'MySessionName' ) );
-               $this->assertSame( (string)$user->getId(), $request->response()->getCookie( 'xUserID' ) );
-               $this->assertSame( $user->getName(), $request->response()->getCookie( 'xUserName' ) );
-               $this->assertSame( $user->getToken(), $request->response()->getCookie( 'xToken' ) );
-               $this->assertSame( 'true', $request->response()->getCookie( 'forceHTTPS' ) );
-               $this->assertSame( 'bar 2!', $request->response()->getCookie( 'xbar' ) );
-               $this->assertSame( null, $request->response()->getCookie( 'xLoggedOut' ) );
-               $this->assertEquals( array(
-                       'wsUserID' => $user->getId(),
-                       'wsUserName' => $user->getName(),
-                       'wsToken' => $user->getToken(),
-                       'foo' => 'foo 2!',
-               ), $backend->getData() );
-
-               $provider->persistSession( $backend, $this->getSentRequest() );
-       }
-
-       public function testUnpersistSession() {
-               $provider = new CookieSessionProvider( array(
-                       'priority' => 1,
-                       'sessionName' => 'MySessionName',
-                       'cookieOptions' => array( 'prefix' => 'x' ),
-               ) );
-               $provider->setLogger( new \Psr\Log\NullLogger() );
-               $provider->setConfig( $this->getConfig() );
-               $provider->setManager( SessionManager::singleton() );
-
-               $request = new \FauxRequest();
-               $provider->unpersistSession( $request );
-               $this->assertSame( '', $request->response()->getCookie( 'MySessionName' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'xUserID' ) );
-               $this->assertSame( null, $request->response()->getCookie( 'xUserName' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'xToken' ) );
-               $this->assertSame( '', $request->response()->getCookie( 'forceHTTPS' ) );
-
-               $provider->unpersistSession( $this->getSentRequest() );
-       }
-
-       public function testSetLoggedOutCookie() {
-               $provider = \TestingAccessWrapper::newFromObject( new CookieSessionProvider( array(
-                       'priority' => 1,
-                       'sessionName' => 'MySessionName',
-                       'cookieOptions' => array( 'prefix' => 'x' ),
-               ) ) );
-               $provider->setLogger( new \Psr\Log\NullLogger() );
-               $provider->setConfig( $this->getConfig() );
-               $provider->setManager( SessionManager::singleton() );
-
-               $t1 = time();
-               $t2 = time() - 86400 * 2;
-
-               // Set it
-               $request = new \FauxRequest();
-               $provider->setLoggedOutCookie( $t1, $request );
-               $this->assertSame( (string)$t1, $request->response()->getCookie( 'xLoggedOut' ) );
-
-               // Too old
-               $request = new \FauxRequest();
-               $provider->setLoggedOutCookie( $t2, $request );
-               $this->assertSame( null, $request->response()->getCookie( 'xLoggedOut' ) );
-
-               // Don't reset if it's already set
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       'xLoggedOut' => $t1,
-               ), '' );
-               $provider->setLoggedOutCookie( $t1, $request );
-               $this->assertSame( null, $request->response()->getCookie( 'xLoggedOut' ) );
-       }
-
-       /**
-        * To be mocked for hooks, since PHPUnit can't otherwise mock methods that
-        * take references.
-        */
-       public function onUserSetCookies( $user, &$sessionData, &$cookies ) {
-       }
-
-}
diff --git a/tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php b/tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php
deleted file mode 100644 (file)
index e06dfd5..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use MediaWikiTestCase;
-use User;
-
-/**
- * @group Session
- * @group Database
- * @covers MediaWiki\Session\ImmutableSessionProviderWithCookie
- */
-class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase {
-
-       private function getProvider( $name, $prefix = null ) {
-               $config = new \HashConfig();
-               $config->set( 'CookiePrefix', 'wgCookiePrefix' );
-
-               $params = array(
-                       'sessionCookieName' => $name,
-                       'sessionCookieOptions' => array(),
-               );
-               if ( $prefix !== null ) {
-                       $params['sessionCookieOptions']['prefix'] = $prefix;
-               }
-
-               $provider = $this->getMockBuilder( 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' )
-                       ->setConstructorArgs( array( $params ) )
-                       ->getMockForAbstractClass();
-               $provider->setLogger( new \TestLogger() );
-               $provider->setConfig( $config );
-               $provider->setManager( new SessionManager() );
-
-               return $provider;
-       }
-
-       public function testConstructor() {
-               $provider = $this->getMockBuilder( 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' )
-                       ->getMockForAbstractClass();
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
-               $this->assertNull( $priv->sessionCookieName );
-               $this->assertSame( array(), $priv->sessionCookieOptions );
-
-               $provider = $this->getMockBuilder( 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' )
-                       ->setConstructorArgs( array( array(
-                               'sessionCookieName' => 'Foo',
-                               'sessionCookieOptions' => array( 'Bar' ),
-                       ) ) )
-                       ->getMockForAbstractClass();
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
-               $this->assertSame( 'Foo', $priv->sessionCookieName );
-               $this->assertSame( array( 'Bar' ), $priv->sessionCookieOptions );
-
-               try {
-                       $provider = $this->getMockBuilder( 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' )
-                               ->setConstructorArgs( array( array(
-                                       'sessionCookieName' => false,
-                               ) ) )
-                               ->getMockForAbstractClass();
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'sessionCookieName must be a string',
-                               $ex->getMessage()
-                       );
-               }
-
-               try {
-                       $provider = $this->getMockBuilder( 'MediaWiki\\Session\\ImmutableSessionProviderWithCookie' )
-                               ->setConstructorArgs( array( array(
-                                       'sessionCookieOptions' => 'x',
-                               ) ) )
-                               ->getMockForAbstractClass();
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'sessionCookieOptions must be an array',
-                               $ex->getMessage()
-                       );
-               }
-       }
-
-       public function testBasics() {
-               $provider = $this->getProvider( null );
-               $this->assertFalse( $provider->persistsSessionID() );
-               $this->assertFalse( $provider->canChangeUser() );
-
-               $provider = $this->getProvider( 'Foo' );
-               $this->assertTrue( $provider->persistsSessionID() );
-               $this->assertFalse( $provider->canChangeUser() );
-
-               $msg = $provider->whyNoSession();
-               $this->assertInstanceOf( 'Message', $msg );
-               $this->assertSame( 'sessionprovider-nocookies', $msg->getKey() );
-       }
-
-       public function testGetVaryCookies() {
-               $provider = $this->getProvider( null );
-               $this->assertSame( array(), $provider->getVaryCookies() );
-
-               $provider = $this->getProvider( 'Foo' );
-               $this->assertSame( array( 'wgCookiePrefixFoo' ), $provider->getVaryCookies() );
-
-               $provider = $this->getProvider( 'Foo', 'Bar' );
-               $this->assertSame( array( 'BarFoo' ), $provider->getVaryCookies() );
-
-               $provider = $this->getProvider( 'Foo', '' );
-               $this->assertSame( array( 'Foo' ), $provider->getVaryCookies() );
-       }
-
-       public function testGetSessionIdFromCookie() {
-               $this->setMwGlobals( 'wgCookiePrefix', 'wgCookiePrefix' );
-               $request = new \FauxRequest();
-               $request->setCookies( array(
-                       '' => 'empty---------------------------',
-                       'Foo' => 'foo-----------------------------',
-                       'wgCookiePrefixFoo' => 'wgfoo---------------------------',
-                       'BarFoo' => 'foobar--------------------------',
-                       'bad' => 'bad',
-               ), '' );
-
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( null ) );
-               try {
-                       $provider->getSessionIdFromCookie( $request );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \BadMethodCallException $ex ) {
-                       $this->assertSame(
-                               'MediaWiki\\Session\\ImmutableSessionProviderWithCookie::getSessionIdFromCookie ' .
-                                       'may not be called when $this->sessionCookieName === null',
-                               $ex->getMessage()
-                       );
-               }
-
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( 'Foo' ) );
-               $this->assertSame(
-                       'wgfoo---------------------------',
-                       $provider->getSessionIdFromCookie( $request )
-               );
-
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( 'Foo', 'Bar' ) );
-               $this->assertSame(
-                       'foobar--------------------------',
-                       $provider->getSessionIdFromCookie( $request )
-               );
-
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( 'Foo', '' ) );
-               $this->assertSame(
-                       'foo-----------------------------',
-                       $provider->getSessionIdFromCookie( $request )
-               );
-
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( 'bad', '' ) );
-               $this->assertSame( null, $provider->getSessionIdFromCookie( $request ) );
-
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( 'none', '' ) );
-               $this->assertSame( null, $provider->getSessionIdFromCookie( $request ) );
-       }
-
-       protected function getSentRequest() {
-               $sentResponse = $this->getMock( 'FauxResponse', array( 'headersSent', 'setCookie', 'header' ) );
-               $sentResponse->expects( $this->any() )->method( 'headersSent' )
-                       ->will( $this->returnValue( true ) );
-               $sentResponse->expects( $this->never() )->method( 'setCookie' );
-               $sentResponse->expects( $this->never() )->method( 'header' );
-
-               $sentRequest = $this->getMock( 'FauxRequest', array( 'response' ) );
-               $sentRequest->expects( $this->any() )->method( 'response' )
-                       ->will( $this->returnValue( $sentResponse ) );
-               return $sentRequest;
-       }
-
-       /**
-        * @dataProvider providePersistSession
-        * @param bool $secure
-        * @param bool $remember
-        */
-       public function testPersistSession( $secure, $remember ) {
-               $this->setMwGlobals( array(
-                       'wgCookieExpiration' => 100,
-                       'wgSecureLogin' => false,
-               ) );
-
-               $provider = $this->getProvider( 'session' );
-               $provider->setLogger( new \Psr\Log\NullLogger() );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
-               $priv->sessionCookieOptions = array(
-                       'prefix' => 'x',
-                       'path' => 'CookiePath',
-                       'domain' => 'CookieDomain',
-                       'secure' => false,
-                       'httpOnly' => true,
-               );
-
-               $sessionId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-               $user = User::newFromName( 'UTSysop' );
-               $this->assertFalse( $user->requiresHTTPS(), 'sanity check' );
-
-               $backend = new SessionBackend(
-                       new SessionId( $sessionId ),
-                       new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                               'provider' => $provider,
-                               'id' => $sessionId,
-                               'persisted' => true,
-                               'userInfo' => UserInfo::newFromUser( $user, true ),
-                               'idIsSafe' => true,
-                       ) ),
-                       new \EmptyBagOStuff(),
-                       new \Psr\Log\NullLogger(),
-                       10
-               );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
-               $backend->setRememberUser( $remember );
-               $backend->setForceHTTPS( $secure );
-
-               // No cookie
-               $priv->sessionCookieName = null;
-               $request = new \FauxRequest();
-               $provider->persistSession( $backend, $request );
-               $this->assertSame( array(), $request->response()->getCookies() );
-
-               // Cookie
-               $priv->sessionCookieName = 'session';
-               $request = new \FauxRequest();
-               $time = time();
-               $provider->persistSession( $backend, $request );
-
-               $cookie = $request->response()->getCookieData( 'xsession' );
-               $this->assertInternalType( 'array', $cookie );
-               if ( isset( $cookie['expire'] ) && $cookie['expire'] > 0 ) {
-                       // Round expiry so we don't randomly fail if the seconds ticked during the test.
-                       $cookie['expire'] = round( $cookie['expire'] - $time, -2 );
-               }
-               $this->assertEquals( array(
-                       'value' => $sessionId,
-                       'expire' => null,
-                       'path' => 'CookiePath',
-                       'domain' => 'CookieDomain',
-                       'secure' => $secure,
-                       'httpOnly' => true,
-                       'raw' => false,
-               ), $cookie );
-
-               $cookie = $request->response()->getCookieData( 'forceHTTPS' );
-               if ( $secure ) {
-                       $this->assertInternalType( 'array', $cookie );
-                       if ( isset( $cookie['expire'] ) && $cookie['expire'] > 0 ) {
-                               // Round expiry so we don't randomly fail if the seconds ticked during the test.
-                               $cookie['expire'] = round( $cookie['expire'] - $time, -2 );
-                       }
-                       $this->assertEquals( array(
-                               'value' => 'true',
-                               'expire' => $remember ? 100 : null,
-                               'path' => 'CookiePath',
-                               'domain' => 'CookieDomain',
-                               'secure' => false,
-                               'httpOnly' => true,
-                               'raw' => false,
-                       ), $cookie );
-               } else {
-                       $this->assertNull( $cookie );
-               }
-
-               // Headers sent
-               $request = $this->getSentRequest();
-               $provider->persistSession( $backend, $request );
-               $this->assertSame( array(), $request->response()->getCookies() );
-       }
-
-       public static function providePersistSession() {
-               return array(
-                       array( false, false ),
-                       array( false, true ),
-                       array( true, false ),
-                       array( true, true ),
-               );
-       }
-
-       public function testUnpersistSession() {
-               $provider = $this->getProvider( 'session', '' );
-               $provider->setLogger( new \Psr\Log\NullLogger() );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
-
-               // No cookie
-               $priv->sessionCookieName = null;
-               $request = new \FauxRequest();
-               $provider->unpersistSession( $request );
-               $this->assertSame( null, $request->response()->getCookie( 'session', '' ) );
-
-               // Cookie
-               $priv->sessionCookieName = 'session';
-               $request = new \FauxRequest();
-               $provider->unpersistSession( $request );
-               $this->assertSame( '', $request->response()->getCookie( 'session', '' ) );
-
-               // Headers sent
-               $request = $this->getSentRequest();
-               $provider->unpersistSession( $request );
-               $this->assertSame( null, $request->response()->getCookie( 'session', '' ) );
-       }
-
-}
diff --git a/tests/phpunit/includes/session/PHPSessionHandlerTest.php b/tests/phpunit/includes/session/PHPSessionHandlerTest.php
deleted file mode 100644 (file)
index 125e1b6..0000000
+++ /dev/null
@@ -1,373 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use Psr\Log\LogLevel;
-use MediaWikiTestCase;
-
-/**
- * @group Session
- * @covers MediaWiki\Session\PHPSessionHandler
- */
-class PHPSessionHandlerTest extends MediaWikiTestCase {
-
-       private function getResetter( &$rProp = null ) {
-               $reset = array();
-
-               // Ignore "headers already sent" warnings during this test
-               set_error_handler( function ( $errno, $errstr ) use ( &$warnings ) {
-                       if ( preg_match( '/headers already sent/', $errstr ) ) {
-                               return true;
-                       }
-                       return false;
-               } );
-               $reset[] = new \ScopedCallback( 'restore_error_handler' );
-
-               $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' );
-               $rProp->setAccessible( true );
-               if ( $rProp->getValue() ) {
-                       $old = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
-                       $oldManager = $old->manager;
-                       $oldStore = $old->store;
-                       $oldLogger = $old->logger;
-                       $reset[] = new \ScopedCallback(
-                               array( 'MediaWiki\\Session\\PHPSessionHandler', 'install' ),
-                               array( $oldManager, $oldStore, $oldLogger )
-                       );
-               }
-
-               return $reset;
-       }
-
-       public function testEnableFlags() {
-               $handler = \TestingAccessWrapper::newFromObject(
-                       $this->getMockBuilder( 'MediaWiki\\Session\\PHPSessionHandler' )
-                               ->setMethods( null )
-                               ->disableOriginalConstructor()
-                               ->getMock()
-               );
-
-               $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' );
-               $rProp->setAccessible( true );
-               $reset = new \ScopedCallback( array( $rProp, 'setValue' ), array( $rProp->getValue() ) );
-               $rProp->setValue( $handler );
-
-               $handler->setEnableFlags( 'enable' );
-               $this->assertTrue( $handler->enable );
-               $this->assertFalse( $handler->warn );
-               $this->assertTrue( PHPSessionHandler::isEnabled() );
-
-               $handler->setEnableFlags( 'warn' );
-               $this->assertTrue( $handler->enable );
-               $this->assertTrue( $handler->warn );
-               $this->assertTrue( PHPSessionHandler::isEnabled() );
-
-               $handler->setEnableFlags( 'disable' );
-               $this->assertFalse( $handler->enable );
-               $this->assertFalse( PHPSessionHandler::isEnabled() );
-
-               $rProp->setValue( null );
-               $this->assertFalse( PHPSessionHandler::isEnabled() );
-       }
-
-       public function testInstall() {
-               $reset = $this->getResetter( $rProp );
-               $rProp->setValue( null );
-
-               session_write_close();
-               ini_set( 'session.use_cookies', 1 );
-               ini_set( 'session.use_trans_sid', 1 );
-
-               $store = new \HashBagOStuff();
-               $logger = new \TestLogger();
-               $manager = new SessionManager( array(
-                       'store' => $store,
-                       'logger' => $logger,
-               ) );
-
-               $this->assertFalse( PHPSessionHandler::isInstalled() );
-               PHPSessionHandler::install( $manager );
-               $this->assertTrue( PHPSessionHandler::isInstalled() );
-
-               $this->assertFalse( wfIniGetBool( 'session.use_cookies' ) );
-               $this->assertFalse( wfIniGetBool( 'session.use_trans_sid' ) );
-
-               $this->assertNotNull( $rProp->getValue() );
-               $priv = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
-               $this->assertSame( $manager, $priv->manager );
-               $this->assertSame( $store, $priv->store );
-               $this->assertSame( $logger, $priv->logger );
-       }
-
-       /**
-        * @dataProvider provideHandlers
-        * @param string $handler php serialize_handler to use
-        */
-       public function testSessionHandling( $handler ) {
-               $this->hideDeprecated( '$_SESSION' );
-               $reset[] = $this->getResetter( $rProp );
-
-               $this->setMwGlobals( array(
-                       'wgSessionProviders' => array( array( 'class' => 'DummySessionProvider' ) ),
-                       'wgObjectCacheSessionExpiry' => 2,
-               ) );
-
-               $store = new \HashBagOStuff();
-               $logger = new \TestLogger( true, function ( $m ) {
-                       return preg_match( '/^SessionBackend a{32} /', $m ) ? null : $m;
-               } );
-               $manager = new SessionManager( array(
-                       'store' => $store,
-                       'logger' => $logger,
-               ) );
-               PHPSessionHandler::install( $manager );
-               $wrap = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
-               $reset[] = new \ScopedCallback(
-                       array( $wrap, 'setEnableFlags' ),
-                       array( $wrap->enable ? $wrap->warn ? 'warn' : 'enable' : 'disable' )
-               );
-               $wrap->setEnableFlags( 'warn' );
-
-               \MediaWiki\suppressWarnings();
-               ini_set( 'session.serialize_handler', $handler );
-               \MediaWiki\restoreWarnings();
-               if ( ini_get( 'session.serialize_handler' ) !== $handler ) {
-                       $this->markTestSkipped( "Cannot set session.serialize_handler to \"$handler\"" );
-               }
-
-               // Session IDs for testing
-               $sessionA = str_repeat( 'a', 32 );
-               $sessionB = str_repeat( 'b', 32 );
-               $sessionC = str_repeat( 'c', 32 );
-
-               // Set up garbage data in the session
-               $_SESSION['AuthenticationSessionTest'] = 'bogus';
-
-               session_id( $sessionA );
-               session_start();
-               $this->assertSame( array(), $_SESSION );
-               $this->assertSame( $sessionA, session_id() );
-
-               // Set some data in the session so we can see if it works.
-               $rand = mt_rand();
-               $_SESSION['AuthenticationSessionTest'] = $rand;
-               $expect = array( 'AuthenticationSessionTest' => $rand );
-               session_write_close();
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Something wrote to $_SESSION!' ),
-               ), $logger->getBuffer() );
-
-               // Screw up $_SESSION so we can tell the difference between "this
-               // worked" and "this did nothing"
-               $_SESSION['AuthenticationSessionTest'] = 'bogus';
-
-               // Re-open the session and see that data was actually reloaded
-               session_start();
-               $this->assertSame( $expect, $_SESSION );
-
-               // Make sure session_reset() works too.
-               if ( function_exists( 'session_reset' ) ) {
-                       $_SESSION['AuthenticationSessionTest'] = 'bogus';
-                       session_reset();
-                       $this->assertSame( $expect, $_SESSION );
-               }
-
-               // Test expiry
-               session_write_close();
-               ini_set( 'session.gc_divisor', 1 );
-               ini_set( 'session.gc_probability', 1 );
-               sleep( 3 );
-               session_start();
-               $this->assertSame( array(), $_SESSION );
-
-               // Re-fill the session, then test that session_destroy() works.
-               $_SESSION['AuthenticationSessionTest'] = $rand;
-               session_write_close();
-               session_start();
-               $this->assertSame( $expect, $_SESSION );
-               session_destroy();
-               session_id( $sessionA );
-               session_start();
-               $this->assertSame( array(), $_SESSION );
-               session_write_close();
-
-               // Test that our session handler won't clone someone else's session
-               session_id( $sessionB );
-               session_start();
-               $this->assertSame( $sessionB, session_id() );
-               $_SESSION['id'] = 'B';
-               session_write_close();
-
-               session_id( $sessionC );
-               session_start();
-               $this->assertSame( array(), $_SESSION );
-               $_SESSION['id'] = 'C';
-               session_write_close();
-
-               session_id( $sessionB );
-               session_start();
-               $this->assertSame( array( 'id' => 'B' ), $_SESSION );
-               session_write_close();
-
-               session_id( $sessionC );
-               session_start();
-               $this->assertSame( array( 'id' => 'C' ), $_SESSION );
-               session_destroy();
-
-               session_id( $sessionB );
-               session_start();
-               $this->assertSame( array( 'id' => 'B' ), $_SESSION );
-
-               // Test merging between Session and $_SESSION
-               session_write_close();
-
-               $session = $manager->getEmptySession();
-               $session->set( 'Unchanged', 'setup' );
-               $session->set( 'Unchanged, null', null );
-               $session->set( 'Changed in $_SESSION', 'setup' );
-               $session->set( 'Changed in Session', 'setup' );
-               $session->set( 'Changed in both', 'setup' );
-               $session->set( 'Deleted in Session', 'setup' );
-               $session->set( 'Deleted in $_SESSION', 'setup' );
-               $session->set( 'Deleted in both', 'setup' );
-               $session->set( 'Deleted in Session, changed in $_SESSION', 'setup' );
-               $session->set( 'Deleted in $_SESSION, changed in Session', 'setup' );
-               $session->persist();
-               $session->save();
-
-               session_id( $session->getId() );
-               session_start();
-               $session->set( 'Added in Session', 'Session' );
-               $session->set( 'Added in both', 'Session' );
-               $session->set( 'Changed in Session', 'Session' );
-               $session->set( 'Changed in both', 'Session' );
-               $session->set( 'Deleted in $_SESSION, changed in Session', 'Session' );
-               $session->remove( 'Deleted in Session' );
-               $session->remove( 'Deleted in both' );
-               $session->remove( 'Deleted in Session, changed in $_SESSION' );
-               $session->save();
-               $_SESSION['Added in $_SESSION'] = '$_SESSION';
-               $_SESSION['Added in both'] = '$_SESSION';
-               $_SESSION['Changed in $_SESSION'] = '$_SESSION';
-               $_SESSION['Changed in both'] = '$_SESSION';
-               $_SESSION['Deleted in Session, changed in $_SESSION'] = '$_SESSION';
-               unset( $_SESSION['Deleted in $_SESSION'] );
-               unset( $_SESSION['Deleted in both'] );
-               unset( $_SESSION['Deleted in $_SESSION, changed in Session'] );
-               session_write_close();
-
-               $this->assertEquals( array(
-                       'Added in Session' => 'Session',
-                       'Added in $_SESSION' => '$_SESSION',
-                       'Added in both' => 'Session',
-                       'Unchanged' => 'setup',
-                       'Unchanged, null' => null,
-                       'Changed in Session' => 'Session',
-                       'Changed in $_SESSION' => '$_SESSION',
-                       'Changed in both' => 'Session',
-                       'Deleted in Session, changed in $_SESSION' => '$_SESSION',
-                       'Deleted in $_SESSION, changed in Session' => 'Session',
-               ), iterator_to_array( $session ) );
-
-               $session->clear();
-               $session->set( 42, 'forty-two' );
-               $session->set( 'forty-two', 42 );
-               $session->set( 'wrong', 43 );
-               $session->persist();
-               $session->save();
-
-               session_start();
-               $this->assertArrayHasKey( 'forty-two', $_SESSION );
-               $this->assertSame( 42, $_SESSION['forty-two'] );
-               $this->assertArrayHasKey( 'wrong', $_SESSION );
-               unset( $_SESSION['wrong'] );
-               session_write_close();
-
-               $this->assertEquals( array(
-                       42 => 'forty-two',
-                       'forty-two' => 42,
-               ), iterator_to_array( $session ) );
-
-               // Test that write doesn't break if the session is invalid
-               $session = $manager->getEmptySession();
-               $session->persist();
-               session_id( $session->getId() );
-               session_start();
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
-                       'SessionCheckInfo' => array( function ( &$reason ) {
-                               $reason = 'Testing';
-                               return false;
-                       } ),
-               ) );
-               $this->assertNull( $manager->getSessionById( $session->getId(), true ), 'sanity check' );
-               session_write_close();
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
-                       'SessionCheckInfo' => array(),
-               ) );
-               $this->assertNotNull( $manager->getSessionById( $session->getId(), true ), 'sanity check' );
-       }
-
-       public static function provideHandlers() {
-               return array(
-                       array( 'php' ),
-                       array( 'php_binary' ),
-                       array( 'php_serialize' ),
-               );
-       }
-
-       /**
-        * @dataProvider provideDisabled
-        * @expectedException BadMethodCallException
-        * @expectedExceptionMessage Attempt to use PHP session management
-        */
-       public function testDisabled( $method, $args ) {
-               $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' );
-               $rProp->setAccessible( true );
-               $handler = $this->getMockBuilder( 'MediaWiki\\Session\\PHPSessionHandler' )
-                       ->setMethods( null )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-               \TestingAccessWrapper::newFromObject( $handler )->setEnableFlags( 'disable' );
-               $oldValue = $rProp->getValue();
-               $rProp->setValue( $handler );
-               $reset = new \ScopedCallback( array( $rProp, 'setValue' ), array( $oldValue ) );
-
-               call_user_func_array( array( $handler, $method ), $args );
-       }
-
-       public static function provideDisabled() {
-               return array(
-                       array( 'open', array( '', '' ) ),
-                       array( 'read', array( '' ) ),
-                       array( 'write', array( '', '' ) ),
-                       array( 'destroy', array( '' ) ),
-               );
-       }
-
-       /**
-        * @dataProvider provideWrongInstance
-        * @expectedException UnexpectedValueException
-        * @expectedExceptionMessageRegExp /: Wrong instance called!$/
-        */
-       public function testWrongInstance( $method, $args ) {
-               $handler = $this->getMockBuilder( 'MediaWiki\\Session\\PHPSessionHandler' )
-                       ->setMethods( null )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-               \TestingAccessWrapper::newFromObject( $handler )->setEnableFlags( 'enable' );
-
-               call_user_func_array( array( $handler, $method ), $args );
-       }
-
-       public static function provideWrongInstance() {
-               return array(
-                       array( 'open', array( '', '' ) ),
-                       array( 'close', array() ),
-                       array( 'read', array( '' ) ),
-                       array( 'write', array( '', '' ) ),
-                       array( 'destroy', array( '' ) ),
-                       array( 'gc', array( 0 ) ),
-               );
-       }
-
-}
diff --git a/tests/phpunit/includes/session/SessionBackendTest.php b/tests/phpunit/includes/session/SessionBackendTest.php
deleted file mode 100644 (file)
index d06706b..0000000
+++ /dev/null
@@ -1,757 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use MediaWikiTestCase;
-use User;
-
-/**
- * @group Session
- * @group Database
- * @covers MediaWiki\Session\SessionBackend
- */
-class SessionBackendTest extends MediaWikiTestCase {
-       const SESSIONID = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-
-       protected $manager;
-       protected $config;
-       protected $provider;
-       protected $store;
-
-       protected $onSessionMetadataCalled = false;
-
-       /**
-        * Returns a non-persistent backend that thinks it has at least one session active
-        * @param User|null $user
-        */
-       protected function getBackend( User $user = null ) {
-               if ( !$this->config ) {
-                       $this->config = new \HashConfig();
-                       $this->manager = null;
-               }
-               if ( !$this->store ) {
-                       $this->store = new TestBagOStuff();
-                       $this->manager = null;
-               }
-
-               $logger = new \Psr\Log\NullLogger();
-               if ( !$this->manager ) {
-                       $this->manager = new SessionManager( array(
-                               'store' => $this->store,
-                               'logger' => $logger,
-                               'config' => $this->config,
-                       ) );
-               }
-
-               if ( !$this->provider ) {
-                       $this->provider = new \DummySessionProvider();
-               }
-               $this->provider->setLogger( $logger );
-               $this->provider->setConfig( $this->config );
-               $this->provider->setManager( $this->manager );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $this->provider,
-                       'id' => self::SESSIONID,
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newFromUser( $user ?: new User, true ),
-                       'idIsSafe' => true,
-               ) );
-               $id = new SessionId( $info->getId() );
-
-               $backend = new SessionBackend( $id, $info, $this->store, $logger, 10 );
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
-               $priv->persist = false;
-               $priv->requests = array( 100 => new \FauxRequest() );
-               $priv->usePhpSessionHandling = false;
-
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
-               $manager->allSessionBackends = array( $backend->getId() => $backend );
-               $manager->allSessionIds = array( $backend->getId() => $id );
-               $manager->sessionProviders = array( (string)$this->provider => $this->provider );
-
-               return $backend;
-       }
-
-       public function testConstructor() {
-               // Set variables
-               $this->getBackend();
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $this->provider,
-                       'id' => self::SESSIONID,
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newFromName( 'UTSysop', false ),
-                       'idIsSafe' => true,
-               ) );
-               $id = new SessionId( $info->getId() );
-               $logger = new \Psr\Log\NullLogger();
-               try {
-                       new SessionBackend( $id, $info, $this->store, $logger, 10 );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               "Refusing to create session for unverified user {$info->getUserInfo()}",
-                               $ex->getMessage()
-                       );
-               }
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'id' => self::SESSIONID,
-                       'userInfo' => UserInfo::newFromName( 'UTSysop', true ),
-                       'idIsSafe' => true,
-               ) );
-               $id = new SessionId( $info->getId() );
-               try {
-                       new SessionBackend( $id, $info, $this->store, $logger, 10 );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Cannot create session without a provider', $ex->getMessage() );
-               }
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $this->provider,
-                       'id' => self::SESSIONID,
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newFromName( 'UTSysop', true ),
-                       'idIsSafe' => true,
-               ) );
-               $id = new SessionId( '!' . $info->getId() );
-               try {
-                       new SessionBackend( $id, $info, $this->store, $logger, 10 );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'SessionId and SessionInfo don\'t match',
-                               $ex->getMessage()
-                       );
-               }
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $this->provider,
-                       'id' => self::SESSIONID,
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newFromName( 'UTSysop', true ),
-                       'idIsSafe' => true,
-               ) );
-               $id = new SessionId( $info->getId() );
-               $backend = new SessionBackend( $id, $info, $this->store, $logger, 10 );
-               $this->assertSame( self::SESSIONID, $backend->getId() );
-               $this->assertSame( $id, $backend->getSessionId() );
-               $this->assertSame( $this->provider, $backend->getProvider() );
-               $this->assertInstanceOf( 'User', $backend->getUser() );
-               $this->assertSame( 'UTSysop', $backend->getUser()->getName() );
-               $this->assertSame( $info->wasPersisted(), $backend->isPersistent() );
-               $this->assertSame( $info->wasRemembered(), $backend->shouldRememberUser() );
-               $this->assertSame( $info->forceHTTPS(), $backend->shouldForceHTTPS() );
-
-               $expire = time() + 100;
-               $this->store->setSessionMeta( self::SESSIONID, array( 'expires' => $expire ), 2 );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $this->provider,
-                       'id' => self::SESSIONID,
-                       'persisted' => true,
-                       'forceHTTPS' => true,
-                       'metadata' => array( 'foo' ),
-                       'idIsSafe' => true,
-               ) );
-               $id = new SessionId( $info->getId() );
-               $backend = new SessionBackend( $id, $info, $this->store, $logger, 10 );
-               $this->assertSame( self::SESSIONID, $backend->getId() );
-               $this->assertSame( $id, $backend->getSessionId() );
-               $this->assertSame( $this->provider, $backend->getProvider() );
-               $this->assertInstanceOf( 'User', $backend->getUser() );
-               $this->assertTrue( $backend->getUser()->isAnon() );
-               $this->assertSame( $info->wasPersisted(), $backend->isPersistent() );
-               $this->assertSame( $info->wasRemembered(), $backend->shouldRememberUser() );
-               $this->assertSame( $info->forceHTTPS(), $backend->shouldForceHTTPS() );
-               $this->assertSame( $expire, \TestingAccessWrapper::newFromObject( $backend )->expires );
-               $this->assertSame( array( 'foo' ), $backend->getProviderMetadata() );
-       }
-
-       public function testSessionStuff() {
-               $backend = $this->getBackend();
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
-               $priv->requests = array(); // Remove dummy session
-
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
-
-               $request1 = new \FauxRequest();
-               $session1 = $backend->getSession( $request1 );
-               $request2 = new \FauxRequest();
-               $session2 = $backend->getSession( $request2 );
-
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session1 );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session2 );
-               $this->assertSame( 2, count( $priv->requests ) );
-
-               $index = \TestingAccessWrapper::newFromObject( $session1 )->index;
-
-               $this->assertSame( $request1, $backend->getRequest( $index ) );
-               $this->assertSame( null, $backend->suggestLoginUsername( $index ) );
-               $request1->setCookie( 'UserName', 'Example' );
-               $this->assertSame( 'Example', $backend->suggestLoginUsername( $index ) );
-
-               $session1 = null;
-               $this->assertSame( 1, count( $priv->requests ) );
-               $this->assertArrayHasKey( $backend->getId(), $manager->allSessionBackends );
-               $this->assertSame( $backend, $manager->allSessionBackends[$backend->getId()] );
-               try {
-                       $backend->getRequest( $index );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid session index', $ex->getMessage() );
-               }
-               try {
-                       $backend->suggestLoginUsername( $index );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid session index', $ex->getMessage() );
-               }
-
-               $session2 = null;
-               $this->assertSame( 0, count( $priv->requests ) );
-               $this->assertArrayNotHasKey( $backend->getId(), $manager->allSessionBackends );
-               $this->assertArrayHasKey( $backend->getId(), $manager->allSessionIds );
-       }
-
-       public function testResetId() {
-               $id = session_id();
-
-               $builder = $this->getMockBuilder( 'DummySessionProvider' )
-                       ->setMethods( array( 'persistsSessionId', 'sessionIdWasReset' ) );
-
-               $this->provider = $builder->getMock();
-               $this->provider->expects( $this->any() )->method( 'persistsSessionId' )
-                       ->will( $this->returnValue( false ) );
-               $this->provider->expects( $this->never() )->method( 'sessionIdWasReset' );
-               $backend = $this->getBackend( User::newFromName( 'UTSysop' ) );
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
-               $sessionId = $backend->getSessionId();
-               $backend->resetId();
-               $this->assertSame( self::SESSIONID, $backend->getId() );
-               $this->assertSame( $backend->getId(), $sessionId->getId() );
-               $this->assertSame( $id, session_id() );
-               $this->assertSame( $backend, $manager->allSessionBackends[self::SESSIONID] );
-
-               $this->provider = $builder->getMock();
-               $this->provider->expects( $this->any() )->method( 'persistsSessionId' )
-                       ->will( $this->returnValue( true ) );
-               $backend = $this->getBackend();
-               $this->provider->expects( $this->once() )->method( 'sessionIdWasReset' )
-                       ->with( $this->identicalTo( $backend ), $this->identicalTo( self::SESSIONID ) );
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
-               $sessionId = $backend->getSessionId();
-               $backend->resetId();
-               $this->assertNotEquals( self::SESSIONID, $backend->getId() );
-               $this->assertSame( $backend->getId(), $sessionId->getId() );
-               $this->assertInternalType( 'array', $this->store->getSession( $backend->getId() ) );
-               $this->assertFalse( $this->store->getSession( self::SESSIONID ) );
-               $this->assertSame( $id, session_id() );
-               $this->assertArrayNotHasKey( self::SESSIONID, $manager->allSessionBackends );
-               $this->assertArrayHasKey( $backend->getId(), $manager->allSessionBackends );
-               $this->assertSame( $backend, $manager->allSessionBackends[$backend->getId()] );
-       }
-
-       public function testPersist() {
-               $this->provider = $this->getMock( 'DummySessionProvider', array( 'persistSession' ) );
-               $this->provider->expects( $this->once() )->method( 'persistSession' );
-               $backend = $this->getBackend();
-               $this->assertFalse( $backend->isPersistent(), 'sanity check' );
-               $backend->save(); // This one shouldn't call $provider->persistSession()
-
-               $backend->persist();
-               $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-
-               $this->provider = null;
-               $backend = $this->getBackend();
-               $wrap = \TestingAccessWrapper::newFromObject( $backend );
-               $wrap->persist = true;
-               $wrap->expires = 0;
-               $backend->persist();
-               $this->assertNotEquals( 0, $wrap->expires );
-       }
-
-       public function testRememberUser() {
-               $backend = $this->getBackend();
-
-               $remembered = $backend->shouldRememberUser();
-               $backend->setRememberUser( !$remembered );
-               $this->assertNotEquals( $remembered, $backend->shouldRememberUser() );
-               $backend->setRememberUser( $remembered );
-               $this->assertEquals( $remembered, $backend->shouldRememberUser() );
-       }
-
-       public function testForceHTTPS() {
-               $backend = $this->getBackend();
-
-               $force = $backend->shouldForceHTTPS();
-               $backend->setForceHTTPS( !$force );
-               $this->assertNotEquals( $force, $backend->shouldForceHTTPS() );
-               $backend->setForceHTTPS( $force );
-               $this->assertEquals( $force, $backend->shouldForceHTTPS() );
-       }
-
-       public function testLoggedOutTimestamp() {
-               $backend = $this->getBackend();
-
-               $backend->setLoggedOutTimestamp( 42 );
-               $this->assertSame( 42, $backend->getLoggedOutTimestamp() );
-               $backend->setLoggedOutTimestamp( '123' );
-               $this->assertSame( 123, $backend->getLoggedOutTimestamp() );
-       }
-
-       public function testSetUser() {
-               $user = User::newFromName( 'UTSysop' );
-
-               $this->provider = $this->getMock( 'DummySessionProvider', array( 'canChangeUser' ) );
-               $this->provider->expects( $this->any() )->method( 'canChangeUser' )
-                       ->will( $this->returnValue( false ) );
-               $backend = $this->getBackend();
-               $this->assertFalse( $backend->canSetUser() );
-               try {
-                       $backend->setUser( $user );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \BadMethodCallException $ex ) {
-                       $this->assertSame(
-                               'Cannot set user on this session; check $session->canSetUser() first',
-                               $ex->getMessage()
-                       );
-               }
-               $this->assertNotSame( $user, $backend->getUser() );
-
-               $this->provider = null;
-               $backend = $this->getBackend();
-               $this->assertTrue( $backend->canSetUser() );
-               $this->assertNotSame( $user, $backend->getUser(), 'sanity check' );
-               $backend->setUser( $user );
-               $this->assertSame( $user, $backend->getUser() );
-       }
-
-       public function testDirty() {
-               $backend = $this->getBackend();
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
-               $priv->dataDirty = false;
-               $backend->dirty();
-               $this->assertTrue( $priv->dataDirty );
-       }
-
-       public function testGetData() {
-               $backend = $this->getBackend();
-               $data = $backend->getData();
-               $this->assertSame( array(), $data );
-               $this->assertTrue( \TestingAccessWrapper::newFromObject( $backend )->dataDirty );
-               $data['???'] = '!!!';
-               $this->assertSame( array( '???' => '!!!' ), $data );
-
-               $testData = array( 'foo' => 'foo!', 'bar', array( 'baz', null ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend();
-               $this->assertSame( $testData, $backend->getData() );
-               $this->assertFalse( \TestingAccessWrapper::newFromObject( $backend )->dataDirty );
-       }
-
-       public function testAddData() {
-               $backend = $this->getBackend();
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
-
-               $priv->data = array( 'foo' => 1 );
-               $priv->dataDirty = false;
-               $backend->addData( array( 'foo' => 1 ) );
-               $this->assertSame( array( 'foo' => 1 ), $priv->data );
-               $this->assertFalse( $priv->dataDirty );
-
-               $priv->data = array( 'foo' => 1 );
-               $priv->dataDirty = false;
-               $backend->addData( array( 'foo' => '1' ) );
-               $this->assertSame( array( 'foo' => '1' ), $priv->data );
-               $this->assertTrue( $priv->dataDirty );
-
-               $priv->data = array( 'foo' => 1 );
-               $priv->dataDirty = false;
-               $backend->addData( array( 'bar' => 2 ) );
-               $this->assertSame( array( 'foo' => 1, 'bar' => 2 ), $priv->data );
-               $this->assertTrue( $priv->dataDirty );
-       }
-
-       public function testDelaySave() {
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $this ) ) );
-               $backend = $this->getBackend();
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
-               $priv->persist = true;
-
-               // Saves happen normally when no delay is in effect
-               $this->onSessionMetadataCalled = false;
-               $priv->metaDirty = true;
-               $backend->save();
-               $this->assertTrue( $this->onSessionMetadataCalled, 'sanity check' );
-
-               $this->onSessionMetadataCalled = false;
-               $priv->metaDirty = true;
-               $priv->autosave();
-               $this->assertTrue( $this->onSessionMetadataCalled, 'sanity check' );
-
-               $delay = $backend->delaySave();
-
-               // Autosave doesn't happen when no delay is in effect
-               $this->onSessionMetadataCalled = false;
-               $priv->metaDirty = true;
-               $priv->autosave();
-               $this->assertFalse( $this->onSessionMetadataCalled );
-
-               // Save still does happen when no delay is in effect
-               $priv->save();
-               $this->assertTrue( $this->onSessionMetadataCalled );
-
-               // Save happens when delay is consumed
-               $this->onSessionMetadataCalled = false;
-               $priv->metaDirty = true;
-               \ScopedCallback::consume( $delay );
-               $this->assertTrue( $this->onSessionMetadataCalled );
-
-               // Test multiple delays
-               $delay1 = $backend->delaySave();
-               $delay2 = $backend->delaySave();
-               $delay3 = $backend->delaySave();
-               $this->onSessionMetadataCalled = false;
-               $priv->metaDirty = true;
-               $priv->autosave();
-               $this->assertFalse( $this->onSessionMetadataCalled );
-               \ScopedCallback::consume( $delay3 );
-               $this->assertFalse( $this->onSessionMetadataCalled );
-               \ScopedCallback::consume( $delay1 );
-               $this->assertFalse( $this->onSessionMetadataCalled );
-               \ScopedCallback::consume( $delay2 );
-               $this->assertTrue( $this->onSessionMetadataCalled );
-       }
-
-       public function testSave() {
-               $user = User::newFromName( 'UTSysop' );
-               $this->store = new TestBagOStuff();
-               $testData = array( 'foo' => 'foo!', 'bar', array( 'baz', null ) );
-
-               $neverHook = $this->getMock( __CLASS__, array( 'onSessionMetadata' ) );
-               $neverHook->expects( $this->never() )->method( 'onSessionMetadata' );
-
-               $neverProvider = $this->getMock( 'DummySessionProvider', array( 'persistSession' ) );
-               $neverProvider->expects( $this->never() )->method( 'persistSession' );
-
-               // Not persistent or dirty
-               $this->provider = $neverProvider;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $neverHook ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               $this->assertFalse( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
-               $backend->save();
-               $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
-
-               // Not persistent, but dirty
-               $this->provider = $neverProvider;
-               $this->onSessionMetadataCalled = false;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $this ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               $this->assertFalse( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
-               $backend->save();
-               $this->assertTrue( $this->onSessionMetadataCalled );
-               $blob = $this->store->getSession( self::SESSIONID );
-               $this->assertInternalType( 'array', $blob );
-               $this->assertArrayHasKey( 'metadata', $blob );
-               $metadata = $blob['metadata'];
-               $this->assertInternalType( 'array', $metadata );
-               $this->assertArrayHasKey( '???', $metadata );
-               $this->assertSame( '!!!', $metadata['???'] );
-
-               // Persistent, not dirty
-               $this->provider = $neverProvider;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $neverHook ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
-               $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
-               $backend->save();
-               $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
-
-               $this->provider = $this->getMock( 'DummySessionProvider', array( 'persistSession' ) );
-               $this->provider->expects( $this->atLeastOnce() )->method( 'persistSession' );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $neverHook ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
-               \TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
-               $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
-               $backend->save();
-               $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
-
-               // Persistent and dirty
-               $this->provider = $neverProvider;
-               $this->onSessionMetadataCalled = false;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $this ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
-               $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
-               $backend->save();
-               $this->assertTrue( $this->onSessionMetadataCalled );
-               $blob = $this->store->getSession( self::SESSIONID );
-               $this->assertInternalType( 'array', $blob );
-               $this->assertArrayHasKey( 'metadata', $blob );
-               $metadata = $blob['metadata'];
-               $this->assertInternalType( 'array', $metadata );
-               $this->assertArrayHasKey( '???', $metadata );
-               $this->assertSame( '!!!', $metadata['???'] );
-
-               $this->provider = $this->getMock( 'DummySessionProvider', array( 'persistSession' ) );
-               $this->provider->expects( $this->atLeastOnce() )->method( 'persistSession' );
-               $this->onSessionMetadataCalled = false;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $this ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
-               \TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
-               $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
-               $backend->save();
-               $this->assertTrue( $this->onSessionMetadataCalled );
-               $blob = $this->store->getSession( self::SESSIONID );
-               $this->assertInternalType( 'array', $blob );
-               $this->assertArrayHasKey( 'metadata', $blob );
-               $metadata = $blob['metadata'];
-               $this->assertInternalType( 'array', $metadata );
-               $this->assertArrayHasKey( '???', $metadata );
-               $this->assertSame( '!!!', $metadata['???'] );
-
-               $this->provider = $this->getMock( 'DummySessionProvider', array( 'persistSession' ) );
-               $this->provider->expects( $this->atLeastOnce() )->method( 'persistSession' );
-               $this->onSessionMetadataCalled = false;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $this ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
-               $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = true;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
-               $backend->save();
-               $this->assertTrue( $this->onSessionMetadataCalled );
-               $blob = $this->store->getSession( self::SESSIONID );
-               $this->assertInternalType( 'array', $blob );
-               $this->assertArrayHasKey( 'metadata', $blob );
-               $metadata = $blob['metadata'];
-               $this->assertInternalType( 'array', $metadata );
-               $this->assertArrayHasKey( '???', $metadata );
-               $this->assertSame( '!!!', $metadata['???'] );
-
-               // Not marked dirty, but dirty data
-               $this->provider = $neverProvider;
-               $this->onSessionMetadataCalled = false;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $this ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
-               $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataHash = 'Doesn\'t match';
-               $backend->save();
-               $this->assertTrue( $this->onSessionMetadataCalled );
-               $blob = $this->store->getSession( self::SESSIONID );
-               $this->assertInternalType( 'array', $blob );
-               $this->assertArrayHasKey( 'metadata', $blob );
-               $metadata = $blob['metadata'];
-               $this->assertInternalType( 'array', $metadata );
-               $this->assertArrayHasKey( '???', $metadata );
-               $this->assertSame( '!!!', $metadata['???'] );
-
-               // Bad hook
-               $this->provider = null;
-               $mockHook = $this->getMock( __CLASS__, array( 'onSessionMetadata' ) );
-               $mockHook->expects( $this->any() )->method( 'onSessionMetadata' )
-                       ->will( $this->returnCallback(
-                               function ( SessionBackend $backend, array &$metadata, array $requests ) {
-                                       $metadata['userId']++;
-                               }
-                       ) );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $mockHook ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $backend->dirty();
-               try {
-                       $backend->save();
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \UnexpectedValueException $ex ) {
-                       $this->assertSame(
-                               'SessionMetadata hook changed metadata key "userId"',
-                               $ex->getMessage()
-                       );
-               }
-
-               // SessionManager::preventSessionsForUser
-               \TestingAccessWrapper::newFromObject( $this->manager )->preventUsers = array(
-                       $user->getName() => true,
-               );
-               $this->provider = $neverProvider;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $neverHook ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
-               $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = true;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
-               $backend->save();
-               $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
-       }
-
-       public function testRenew() {
-               $user = User::newFromName( 'UTSysop' );
-               $this->store = new TestBagOStuff();
-               $testData = array( 'foo' => 'foo!', 'bar', array( 'baz', null ) );
-
-               // Not persistent
-               $this->provider = $this->getMock( 'DummySessionProvider', array( 'persistSession' ) );
-               $this->provider->expects( $this->never() )->method( 'persistSession' );
-               $this->onSessionMetadataCalled = false;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $this ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               $wrap = \TestingAccessWrapper::newFromObject( $backend );
-               $this->assertFalse( $backend->isPersistent(), 'sanity check' );
-               $wrap->metaDirty = false;
-               $wrap->dataDirty = false;
-               $wrap->forcePersist = false;
-               $wrap->expires = 0;
-               $backend->renew();
-               $this->assertTrue( $this->onSessionMetadataCalled );
-               $blob = $this->store->getSession( self::SESSIONID );
-               $this->assertInternalType( 'array', $blob );
-               $this->assertArrayHasKey( 'metadata', $blob );
-               $metadata = $blob['metadata'];
-               $this->assertInternalType( 'array', $metadata );
-               $this->assertArrayHasKey( '???', $metadata );
-               $this->assertSame( '!!!', $metadata['???'] );
-               $this->assertNotEquals( 0, $wrap->expires );
-
-               // Persistent
-               $this->provider = $this->getMock( 'DummySessionProvider', array( 'persistSession' ) );
-               $this->provider->expects( $this->atLeastOnce() )->method( 'persistSession' );
-               $this->onSessionMetadataCalled = false;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $this ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               $wrap = \TestingAccessWrapper::newFromObject( $backend );
-               $wrap->persist = true;
-               $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               $wrap->metaDirty = false;
-               $wrap->dataDirty = false;
-               $wrap->forcePersist = false;
-               $wrap->expires = 0;
-               $backend->renew();
-               $this->assertTrue( $this->onSessionMetadataCalled );
-               $blob = $this->store->getSession( self::SESSIONID );
-               $this->assertInternalType( 'array', $blob );
-               $this->assertArrayHasKey( 'metadata', $blob );
-               $metadata = $blob['metadata'];
-               $this->assertInternalType( 'array', $metadata );
-               $this->assertArrayHasKey( '???', $metadata );
-               $this->assertSame( '!!!', $metadata['???'] );
-               $this->assertNotEquals( 0, $wrap->expires );
-
-               // Not persistent, not expiring
-               $this->provider = $this->getMock( 'DummySessionProvider', array( 'persistSession' ) );
-               $this->provider->expects( $this->never() )->method( 'persistSession' );
-               $this->onSessionMetadataCalled = false;
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'SessionMetadata' => array( $this ) ) );
-               $this->store->setSessionData( self::SESSIONID, $testData );
-               $backend = $this->getBackend( $user );
-               $this->store->deleteSession( self::SESSIONID );
-               $wrap = \TestingAccessWrapper::newFromObject( $backend );
-               $this->assertFalse( $backend->isPersistent(), 'sanity check' );
-               $wrap->metaDirty = false;
-               $wrap->dataDirty = false;
-               $wrap->forcePersist = false;
-               $expires = time() + $wrap->lifetime + 100;
-               $wrap->expires = $expires;
-               $backend->renew();
-               $this->assertFalse( $this->onSessionMetadataCalled );
-               $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
-               $this->assertEquals( $expires, $wrap->expires );
-       }
-
-       public function onSessionMetadata( SessionBackend $backend, array &$metadata, array $requests ) {
-               $this->onSessionMetadataCalled = true;
-               $metadata['???'] = '!!!';
-       }
-
-       public function testResetIdOfGlobalSession() {
-               if ( !PHPSessionHandler::isInstalled() ) {
-                       PHPSessionHandler::install( SessionManager::singleton() );
-               }
-               if ( !PHPSessionHandler::isEnabled() ) {
-                       $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' );
-                       $rProp->setAccessible( true );
-                       $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
-                       $resetHandler = new \ScopedCallback( function () use ( $handler ) {
-                               session_write_close();
-                               $handler->enable = false;
-                       } );
-                       $handler->enable = true;
-               }
-
-               $backend = $this->getBackend( User::newFromName( 'UTSysop' ) );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = true;
-
-               TestUtils::setSessionManagerSingleton( $this->manager );
-
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
-               $request = \RequestContext::getMain()->getRequest();
-               $manager->globalSession = $backend->getSession( $request );
-               $manager->globalSessionRequest = $request;
-
-               session_id( self::SESSIONID );
-               \MediaWiki\quietCall( 'session_start' );
-               $backend->resetId();
-               $this->assertNotEquals( self::SESSIONID, $backend->getId() );
-               $this->assertSame( $backend->getId(), session_id() );
-               session_write_close();
-
-               session_id( '' );
-               $this->assertNotSame( $backend->getId(), session_id(), 'sanity check' );
-               $backend->persist();
-               $this->assertSame( $backend->getId(), session_id() );
-               session_write_close();
-       }
-
-       public function testGetAllowedUserRights() {
-               $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
-                       ->setMethods( array( 'getAllowedUserRights' ) )
-                       ->getMock();
-               $this->provider->expects( $this->any() )->method( 'getAllowedUserRights' )
-                       ->will( $this->returnValue( array( 'foo', 'bar' ) ) );
-
-               $backend = $this->getBackend();
-               $this->assertSame( array( 'foo', 'bar' ), $backend->getAllowedUserRights() );
-       }
-
-}
diff --git a/tests/phpunit/includes/session/SessionIdTest.php b/tests/phpunit/includes/session/SessionIdTest.php
deleted file mode 100644 (file)
index 2b06d97..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use MediaWikiTestCase;
-
-/**
- * @group Session
- * @covers MediaWiki\Session\SessionId
- */
-class SessionIdTest extends MediaWikiTestCase {
-
-       public function testEverything() {
-               $id = new SessionId( 'foo' );
-               $this->assertSame( 'foo', $id->getId() );
-               $this->assertSame( 'foo', (string)$id );
-               $id->setId( 'bar' );
-               $this->assertSame( 'bar', $id->getId() );
-               $this->assertSame( 'bar', (string)$id );
-       }
-
-}
diff --git a/tests/phpunit/includes/session/SessionInfoTest.php b/tests/phpunit/includes/session/SessionInfoTest.php
deleted file mode 100644 (file)
index b411f3c..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use Psr\Log\LogLevel;
-use MediaWikiTestCase;
-
-/**
- * @group Session
- * @group Database
- * @covers MediaWiki\Session\SessionInfo
- */
-class SessionInfoTest extends MediaWikiTestCase {
-
-       public function testBasics() {
-               $anonInfo = UserInfo::newAnonymous();
-               $userInfo = UserInfo::newFromName( 'UTSysop', true );
-               $unverifiedUserInfo = UserInfo::newFromName( 'UTSysop', false );
-
-               try {
-                       new SessionInfo( SessionInfo::MIN_PRIORITY - 1, array() );
-                       $this->fail( 'Expected exception not thrown', 'priority < min' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid priority', $ex->getMessage(), 'priority < min' );
-               }
-
-               try {
-                       new SessionInfo( SessionInfo::MAX_PRIORITY + 1, array() );
-                       $this->fail( 'Expected exception not thrown', 'priority > max' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid priority', $ex->getMessage(), 'priority > max' );
-               }
-
-               try {
-                       new SessionInfo( SessionInfo::MIN_PRIORITY, array( 'id' => 'ABC?' ) );
-                       $this->fail( 'Expected exception not thrown', 'bad session ID' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid session ID', $ex->getMessage(), 'bad session ID' );
-               }
-
-               try {
-                       new SessionInfo( SessionInfo::MIN_PRIORITY, array( 'userInfo' => new \stdClass ) );
-                       $this->fail( 'Expected exception not thrown', 'bad userInfo' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid userInfo', $ex->getMessage(), 'bad userInfo' );
-               }
-
-               try {
-                       new SessionInfo( SessionInfo::MIN_PRIORITY, array() );
-                       $this->fail( 'Expected exception not thrown', 'no provider, no id' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Must supply an ID when no provider is given', $ex->getMessage(),
-                               'no provider, no id' );
-               }
-
-               try {
-                       new SessionInfo( SessionInfo::MIN_PRIORITY, array( 'copyFrom' => new \stdClass ) );
-                       $this->fail( 'Expected exception not thrown', 'bad copyFrom' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid copyFrom', $ex->getMessage(),
-                               'bad copyFrom' );
-               }
-
-               $manager = new SessionManager();
-               $provider = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' )
-                       ->setMethods( array( 'persistsSessionId', 'canChangeUser', '__toString' ) )
-                       ->getMockForAbstractClass();
-               $provider->setManager( $manager );
-               $provider->expects( $this->any() )->method( 'persistsSessionId' )
-                       ->will( $this->returnValue( true ) );
-               $provider->expects( $this->any() )->method( 'canChangeUser' )
-                       ->will( $this->returnValue( true ) );
-               $provider->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'Mock' ) );
-
-               $provider2 = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' )
-                       ->setMethods( array( 'persistsSessionId', 'canChangeUser', '__toString' ) )
-                       ->getMockForAbstractClass();
-               $provider2->setManager( $manager );
-               $provider2->expects( $this->any() )->method( 'persistsSessionId' )
-                       ->will( $this->returnValue( true ) );
-               $provider2->expects( $this->any() )->method( 'canChangeUser' )
-                       ->will( $this->returnValue( true ) );
-               $provider2->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'Mock2' ) );
-
-               try {
-                       new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                               'provider' => $provider,
-                               'userInfo' => $anonInfo,
-                               'metadata' => 'foo',
-                       ) );
-                       $this->fail( 'Expected exception not thrown', 'bad metadata' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid metadata', $ex->getMessage(), 'bad metadata' );
-               }
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'provider' => $provider,
-                       'userInfo' => $anonInfo
-               ) );
-               $this->assertSame( $provider, $info->getProvider() );
-               $this->assertNotNull( $info->getId() );
-               $this->assertSame( SessionInfo::MIN_PRIORITY + 5, $info->getPriority() );
-               $this->assertSame( $anonInfo, $info->getUserInfo() );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertFalse( $info->wasPersisted() );
-               $this->assertFalse( $info->wasRemembered() );
-               $this->assertFalse( $info->forceHTTPS() );
-               $this->assertNull( $info->getProviderMetadata() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'provider' => $provider,
-                       'userInfo' => $unverifiedUserInfo,
-                       'metadata' => array( 'Foo' ),
-               ) );
-               $this->assertSame( $provider, $info->getProvider() );
-               $this->assertNotNull( $info->getId() );
-               $this->assertSame( SessionInfo::MIN_PRIORITY + 5, $info->getPriority() );
-               $this->assertSame( $unverifiedUserInfo, $info->getUserInfo() );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertFalse( $info->wasPersisted() );
-               $this->assertFalse( $info->wasRemembered() );
-               $this->assertFalse( $info->forceHTTPS() );
-               $this->assertSame( array( 'Foo' ), $info->getProviderMetadata() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'provider' => $provider,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertSame( $provider, $info->getProvider() );
-               $this->assertNotNull( $info->getId() );
-               $this->assertSame( SessionInfo::MIN_PRIORITY + 5, $info->getPriority() );
-               $this->assertSame( $userInfo, $info->getUserInfo() );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertFalse( $info->wasPersisted() );
-               $this->assertTrue( $info->wasRemembered() );
-               $this->assertFalse( $info->forceHTTPS() );
-               $this->assertNull( $info->getProviderMetadata() );
-
-               $id = $manager->generateSessionId();
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'persisted' => true,
-                       'userInfo' => $anonInfo
-               ) );
-               $this->assertSame( $provider, $info->getProvider() );
-               $this->assertSame( $id, $info->getId() );
-               $this->assertSame( SessionInfo::MIN_PRIORITY + 5, $info->getPriority() );
-               $this->assertSame( $anonInfo, $info->getUserInfo() );
-               $this->assertFalse( $info->isIdSafe() );
-               $this->assertTrue( $info->wasPersisted() );
-               $this->assertFalse( $info->wasRemembered() );
-               $this->assertFalse( $info->forceHTTPS() );
-               $this->assertNull( $info->getProviderMetadata() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertSame( $provider, $info->getProvider() );
-               $this->assertSame( $id, $info->getId() );
-               $this->assertSame( SessionInfo::MIN_PRIORITY + 5, $info->getPriority() );
-               $this->assertSame( $userInfo, $info->getUserInfo() );
-               $this->assertFalse( $info->isIdSafe() );
-               $this->assertFalse( $info->wasPersisted() );
-               $this->assertTrue( $info->wasRemembered() );
-               $this->assertFalse( $info->forceHTTPS() );
-               $this->assertNull( $info->getProviderMetadata() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'id' => $id,
-                       'persisted' => true,
-                       'userInfo' => $userInfo,
-                       'metadata' => array( 'Foo' ),
-               ) );
-               $this->assertSame( $id, $info->getId() );
-               $this->assertSame( SessionInfo::MIN_PRIORITY + 5, $info->getPriority() );
-               $this->assertSame( $userInfo, $info->getUserInfo() );
-               $this->assertFalse( $info->isIdSafe() );
-               $this->assertTrue( $info->wasPersisted() );
-               $this->assertFalse( $info->wasRemembered() );
-               $this->assertFalse( $info->forceHTTPS() );
-               $this->assertNull( $info->getProviderMetadata() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'id' => $id,
-                       'remembered' => true,
-                       'userInfo' => $userInfo,
-               ) );
-               $this->assertFalse( $info->wasRemembered(), 'no provider' );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'remembered' => true,
-               ) );
-               $this->assertFalse( $info->wasRemembered(), 'no user' );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'remembered' => true,
-                       'userInfo' => $anonInfo,
-               ) );
-               $this->assertFalse( $info->wasRemembered(), 'anonymous user' );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'remembered' => true,
-                       'userInfo' => $unverifiedUserInfo,
-               ) );
-               $this->assertFalse( $info->wasRemembered(), 'unverified user' );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'remembered' => false,
-                       'userInfo' => $userInfo,
-               ) );
-               $this->assertFalse( $info->wasRemembered(), 'specific override' );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 5, array(
-                       'id' => $id,
-                       'idIsSafe' => true,
-               ) );
-               $this->assertSame( $id, $info->getId() );
-               $this->assertSame( SessionInfo::MIN_PRIORITY + 5, $info->getPriority() );
-               $this->assertTrue( $info->isIdSafe() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'id' => $id,
-                       'forceHTTPS' => 1,
-               ) );
-               $this->assertTrue( $info->forceHTTPS() );
-
-               $fromInfo = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'id' => $id . 'A',
-                       'provider' => $provider,
-                       'userInfo' => $userInfo,
-                       'idIsSafe' => true,
-                       'persisted' => true,
-                       'remembered' => true,
-                       'forceHTTPS' => true,
-                       'metadata' => array( 'foo!' ),
-               ) );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 4, array(
-                       'copyFrom' => $fromInfo,
-               ) );
-               $this->assertSame( $id . 'A', $info->getId() );
-               $this->assertSame( SessionInfo::MIN_PRIORITY + 4, $info->getPriority() );
-               $this->assertSame( $provider, $info->getProvider() );
-               $this->assertSame( $userInfo, $info->getUserInfo() );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertTrue( $info->wasPersisted() );
-               $this->assertTrue( $info->wasRemembered() );
-               $this->assertTrue( $info->forceHTTPS() );
-               $this->assertSame( array( 'foo!' ), $info->getProviderMetadata() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY + 4, array(
-                       'id' => $id . 'X',
-                       'provider' => $provider2,
-                       'userInfo' => $unverifiedUserInfo,
-                       'idIsSafe' => false,
-                       'persisted' => false,
-                       'remembered' => false,
-                       'forceHTTPS' => false,
-                       'metadata' => null,
-                       'copyFrom' => $fromInfo,
-               ) );
-               $this->assertSame( $id . 'X', $info->getId() );
-               $this->assertSame( SessionInfo::MIN_PRIORITY + 4, $info->getPriority() );
-               $this->assertSame( $provider2, $info->getProvider() );
-               $this->assertSame( $unverifiedUserInfo, $info->getUserInfo() );
-               $this->assertFalse( $info->isIdSafe() );
-               $this->assertFalse( $info->wasPersisted() );
-               $this->assertFalse( $info->wasRemembered() );
-               $this->assertFalse( $info->forceHTTPS() );
-               $this->assertNull( $info->getProviderMetadata() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'id' => $id,
-               ) );
-               $this->assertSame(
-                       '[' . SessionInfo::MIN_PRIORITY . "]null<null>$id",
-                       (string)$info,
-                       'toString'
-               );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'persisted' => true,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertSame(
-                       '[' . SessionInfo::MIN_PRIORITY . "]Mock<+:{$userInfo->getId()}:UTSysop>$id",
-                       (string)$info,
-                       'toString'
-               );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'persisted' => true,
-                       'userInfo' => $unverifiedUserInfo
-               ) );
-               $this->assertSame(
-                       '[' . SessionInfo::MIN_PRIORITY . "]Mock<-:{$userInfo->getId()}:UTSysop>$id",
-                       (string)$info,
-                       'toString'
-               );
-       }
-
-       public function testCompare() {
-               $id = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-               $info1 = new SessionInfo( SessionInfo::MIN_PRIORITY + 1, array( 'id' => $id ) );
-               $info2 = new SessionInfo( SessionInfo::MIN_PRIORITY + 2, array( 'id' => $id ) );
-
-               $this->assertTrue( SessionInfo::compare( $info1, $info2 ) < 0, '<' );
-               $this->assertTrue( SessionInfo::compare( $info2, $info1 ) > 0, '>' );
-               $this->assertTrue( SessionInfo::compare( $info1, $info1 ) === 0, '==' );
-       }
-}
diff --git a/tests/phpunit/includes/session/SessionManagerTest.php b/tests/phpunit/includes/session/SessionManagerTest.php
deleted file mode 100644 (file)
index 083223e..0000000
+++ /dev/null
@@ -1,1646 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use Psr\Log\LogLevel;
-use MediaWikiTestCase;
-use User;
-
-/**
- * @group Session
- * @group Database
- * @covers MediaWiki\Session\SessionManager
- */
-class SessionManagerTest extends MediaWikiTestCase {
-
-       protected $config, $logger, $store;
-
-       protected function getManager() {
-               \ObjectCache::$instances['testSessionStore'] = new TestBagOStuff();
-               $this->config = new \HashConfig( array(
-                       'LanguageCode' => 'en',
-                       'SessionCacheType' => 'testSessionStore',
-                       'ObjectCacheSessionExpiry' => 100,
-                       'SessionProviders' => array(
-                               array( 'class' => 'DummySessionProvider' ),
-                       )
-               ) );
-               $this->logger = new \TestLogger( false, function ( $m ) {
-                       return substr( $m, 0, 15 ) === 'SessionBackend ' ? null : $m;
-               } );
-               $this->store = new TestBagOStuff();
-
-               return new SessionManager( array(
-                       'config' => $this->config,
-                       'logger' => $this->logger,
-                       'store' => $this->store,
-               ) );
-       }
-
-       protected function objectCacheDef( $object ) {
-               return array( 'factory' => function () use ( $object ) {
-                       return $object;
-               } );
-       }
-
-       public function testSingleton() {
-               $reset = TestUtils::setSessionManagerSingleton( null );
-
-               $singleton = SessionManager::singleton();
-               $this->assertInstanceOf( 'MediaWiki\\Session\\SessionManager', $singleton );
-               $this->assertSame( $singleton, SessionManager::singleton() );
-       }
-
-       public function testGetGlobalSession() {
-               $context = \RequestContext::getMain();
-
-               if ( !PHPSessionHandler::isInstalled() ) {
-                       PHPSessionHandler::install( SessionManager::singleton() );
-               }
-               $rProp = new \ReflectionProperty( 'MediaWiki\\Session\\PHPSessionHandler', 'instance' );
-               $rProp->setAccessible( true );
-               $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
-               $oldEnable = $handler->enable;
-               $reset[] = new \ScopedCallback( function () use ( $handler, $oldEnable ) {
-                       if ( $handler->enable ) {
-                               session_write_close();
-                       }
-                       $handler->enable = $oldEnable;
-               } );
-               $reset[] = TestUtils::setSessionManagerSingleton( $this->getManager() );
-
-               $handler->enable = true;
-               $request = new \FauxRequest();
-               $context->setRequest( $request );
-               $id = $request->getSession()->getId();
-
-               session_id( '' );
-               $session = SessionManager::getGlobalSession();
-               $this->assertSame( $id, $session->getId() );
-
-               session_id( 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' );
-               $session = SessionManager::getGlobalSession();
-               $this->assertSame( 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', $session->getId() );
-               $this->assertSame( 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', $request->getSession()->getId() );
-
-               session_write_close();
-               $handler->enable = false;
-               $request = new \FauxRequest();
-               $context->setRequest( $request );
-               $id = $request->getSession()->getId();
-
-               session_id( '' );
-               $session = SessionManager::getGlobalSession();
-               $this->assertSame( $id, $session->getId() );
-
-               session_id( 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' );
-               $session = SessionManager::getGlobalSession();
-               $this->assertSame( $id, $session->getId() );
-               $this->assertSame( $id, $request->getSession()->getId() );
-       }
-
-       public function testConstructor() {
-               $manager = \TestingAccessWrapper::newFromObject( $this->getManager() );
-               $this->assertSame( $this->config, $manager->config );
-               $this->assertSame( $this->logger, $manager->logger );
-               $this->assertSame( $this->store, $manager->store );
-
-               $manager = \TestingAccessWrapper::newFromObject( new SessionManager() );
-               $this->assertSame( \RequestContext::getMain()->getConfig(), $manager->config );
-
-               $manager = \TestingAccessWrapper::newFromObject( new SessionManager( array(
-                       'config' => $this->config,
-               ) ) );
-               $this->assertSame( \ObjectCache::$instances['testSessionStore'], $manager->store );
-
-               foreach ( array(
-                       'config' => '$options[\'config\'] must be an instance of Config',
-                       'logger' => '$options[\'logger\'] must be an instance of LoggerInterface',
-                       'store' => '$options[\'store\'] must be an instance of BagOStuff',
-               ) as $key => $error ) {
-                       try {
-                               new SessionManager( array( $key => new \stdClass ) );
-                               $this->fail( 'Expected exception not thrown' );
-                       } catch ( \InvalidArgumentException $ex ) {
-                               $this->assertSame( $error, $ex->getMessage() );
-                       }
-               }
-       }
-
-       public function testGetSessionForRequest() {
-               $manager = $this->getManager();
-               $request = new \FauxRequest();
-
-               $id1 = '';
-               $id2 = '';
-               $idEmpty = 'empty-session-------------------';
-
-               $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
-                       ->setMethods(
-                               array( 'provideSessionInfo', 'newSessionInfo', '__toString', 'describe' )
-                       );
-
-               $provider1 = $providerBuilder->getMock();
-               $provider1->expects( $this->any() )->method( 'provideSessionInfo' )
-                       ->with( $this->identicalTo( $request ) )
-                       ->will( $this->returnCallback( function ( $request ) {
-                               return $request->info1;
-                       } ) );
-               $provider1->expects( $this->any() )->method( 'newSessionInfo' )
-                       ->will( $this->returnCallback( function () use ( $idEmpty, $provider1 ) {
-                               return new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                                       'provider' => $provider1,
-                                       'id' => $idEmpty,
-                                       'persisted' => true,
-                                       'idIsSafe' => true,
-                               ) );
-                       } ) );
-               $provider1->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'Provider1' ) );
-               $provider1->expects( $this->any() )->method( 'describe' )
-                       ->will( $this->returnValue( '#1 sessions' ) );
-
-               $provider2 = $providerBuilder->getMock();
-               $provider2->expects( $this->any() )->method( 'provideSessionInfo' )
-                       ->with( $this->identicalTo( $request ) )
-                       ->will( $this->returnCallback( function ( $request ) {
-                               return $request->info2;
-                       } ) );
-               $provider2->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'Provider2' ) );
-               $provider2->expects( $this->any() )->method( 'describe' )
-                       ->will( $this->returnValue( '#2 sessions' ) );
-
-               $this->config->set( 'SessionProviders', array(
-                       $this->objectCacheDef( $provider1 ),
-                       $this->objectCacheDef( $provider2 ),
-               ) );
-
-               // No provider returns info
-               $request->info1 = null;
-               $request->info2 = null;
-               $session = $manager->getSessionForRequest( $request );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( $idEmpty, $session->getId() );
-
-               // Both providers return info, picks best one
-               $request->info1 = new SessionInfo( SessionInfo::MIN_PRIORITY + 1, array(
-                       'provider' => $provider1,
-                       'id' => ( $id1 = $manager->generateSessionId() ),
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $request->info2 = new SessionInfo( SessionInfo::MIN_PRIORITY + 2, array(
-                       'provider' => $provider2,
-                       'id' => ( $id2 = $manager->generateSessionId() ),
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $session = $manager->getSessionForRequest( $request );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( $id2, $session->getId() );
-
-               $request->info1 = new SessionInfo( SessionInfo::MIN_PRIORITY + 2, array(
-                       'provider' => $provider1,
-                       'id' => ( $id1 = $manager->generateSessionId() ),
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $request->info2 = new SessionInfo( SessionInfo::MIN_PRIORITY + 1, array(
-                       'provider' => $provider2,
-                       'id' => ( $id2 = $manager->generateSessionId() ),
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $session = $manager->getSessionForRequest( $request );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( $id1, $session->getId() );
-
-               // Tied priorities
-               $request->info1 = new SessionInfo( SessionInfo::MAX_PRIORITY, array(
-                       'provider' => $provider1,
-                       'id' => ( $id1 = $manager->generateSessionId() ),
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newAnonymous(),
-                       'idIsSafe' => true,
-               ) );
-               $request->info2 = new SessionInfo( SessionInfo::MAX_PRIORITY, array(
-                       'provider' => $provider2,
-                       'id' => ( $id2 = $manager->generateSessionId() ),
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newAnonymous(),
-                       'idIsSafe' => true,
-               ) );
-               try {
-                       $manager->getSessionForRequest( $request );
-                       $this->fail( 'Expcected exception not thrown' );
-               } catch ( \OverFlowException $ex ) {
-                       $this->assertStringStartsWith(
-                               'Multiple sessions for this request tied for top priority: ',
-                               $ex->getMessage()
-                       );
-                       $this->assertCount( 2, $ex->sessionInfos );
-                       $this->assertContains( $request->info1, $ex->sessionInfos );
-                       $this->assertContains( $request->info2, $ex->sessionInfos );
-               }
-
-               // Bad provider
-               $request->info1 = new SessionInfo( SessionInfo::MAX_PRIORITY, array(
-                       'provider' => $provider2,
-                       'id' => ( $id1 = $manager->generateSessionId() ),
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $request->info2 = null;
-               try {
-                       $manager->getSessionForRequest( $request );
-                       $this->fail( 'Expcected exception not thrown' );
-               } catch ( \UnexpectedValueException $ex ) {
-                       $this->assertSame(
-                               'Provider1 returned session info for a different provider: ' . $request->info1,
-                               $ex->getMessage()
-                       );
-               }
-
-               // Unusable session info
-               $this->logger->setCollect( true );
-               $request->info1 = new SessionInfo( SessionInfo::MAX_PRIORITY, array(
-                       'provider' => $provider1,
-                       'id' => ( $id1 = $manager->generateSessionId() ),
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newFromName( 'UTSysop', false ),
-                       'idIsSafe' => true,
-               ) );
-               $request->info2 = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider2,
-                       'id' => ( $id2 = $manager->generateSessionId() ),
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $session = $manager->getSessionForRequest( $request );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( $id2, $session->getId() );
-               $this->logger->setCollect( false );
-
-               // Unpersisted session ID
-               $request->info1 = new SessionInfo( SessionInfo::MAX_PRIORITY, array(
-                       'provider' => $provider1,
-                       'id' => ( $id1 = $manager->generateSessionId() ),
-                       'persisted' => false,
-                       'userInfo' => UserInfo::newFromName( 'UTSysop', true ),
-                       'idIsSafe' => true,
-               ) );
-               $request->info2 = null;
-               $session = $manager->getSessionForRequest( $request );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( $id1, $session->getId() );
-               $session->persist();
-               $this->assertTrue( $session->isPersistent(), 'sanity check' );
-       }
-
-       public function testGetSessionById() {
-               $manager = $this->getManager();
-
-               try {
-                       $manager->getSessionById( 'bad' );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid session ID', $ex->getMessage() );
-               }
-
-               // Unknown session ID
-               $id = $manager->generateSessionId();
-               $session = $manager->getSessionById( $id, true );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( $id, $session->getId() );
-
-               $id = $manager->generateSessionId();
-               $this->assertNull( $manager->getSessionById( $id, false ) );
-
-               // Known but unloadable session ID
-               $this->logger->setCollect( true );
-               $id = $manager->generateSessionId();
-               $this->store->setSession( $id, array( 'metadata' => array(
-                       'userId' => User::idFromName( 'UTSysop' ),
-                       'userToken' => 'bad',
-               ) ) );
-
-               $this->assertNull( $manager->getSessionById( $id, true ) );
-               $this->assertNull( $manager->getSessionById( $id, false ) );
-               $this->logger->setCollect( false );
-
-               // Known session ID
-               $this->store->setSession( $id, array() );
-               $session = $manager->getSessionById( $id, false );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( $id, $session->getId() );
-       }
-
-       public function testGetEmptySession() {
-               $manager = $this->getManager();
-               $pmanager = \TestingAccessWrapper::newFromObject( $manager );
-               $request = new \FauxRequest();
-
-               $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
-                       ->setMethods( array( 'provideSessionInfo', 'newSessionInfo', '__toString' ) );
-
-               $expectId = null;
-               $info1 = null;
-               $info2 = null;
-
-               $provider1 = $providerBuilder->getMock();
-               $provider1->expects( $this->any() )->method( 'provideSessionInfo' )
-                       ->will( $this->returnValue( null ) );
-               $provider1->expects( $this->any() )->method( 'newSessionInfo' )
-                       ->with( $this->callback( function ( $id ) use ( &$expectId ) {
-                               return $id === $expectId;
-                       } ) )
-                       ->will( $this->returnCallback( function () use ( &$info1 ) {
-                               return $info1;
-                       } ) );
-               $provider1->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'MockProvider1' ) );
-
-               $provider2 = $providerBuilder->getMock();
-               $provider2->expects( $this->any() )->method( 'provideSessionInfo' )
-                       ->will( $this->returnValue( null ) );
-               $provider2->expects( $this->any() )->method( 'newSessionInfo' )
-                       ->with( $this->callback( function ( $id ) use ( &$expectId ) {
-                               return $id === $expectId;
-                       } ) )
-                       ->will( $this->returnCallback( function () use ( &$info2 ) {
-                               return $info2;
-                       } ) );
-               $provider1->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'MockProvider2' ) );
-
-               $this->config->set( 'SessionProviders', array(
-                       $this->objectCacheDef( $provider1 ),
-                       $this->objectCacheDef( $provider2 ),
-               ) );
-
-               // No info
-               $expectId = null;
-               $info1 = null;
-               $info2 = null;
-               try {
-                       $manager->getEmptySession();
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \UnexpectedValueException $ex ) {
-                       $this->assertSame(
-                               'No provider could provide an empty session!',
-                               $ex->getMessage()
-                       );
-               }
-
-               // Info
-               $expectId = null;
-               $info1 = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider1,
-                       'id' => 'empty---------------------------',
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $info2 = null;
-               $session = $manager->getEmptySession();
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( 'empty---------------------------', $session->getId() );
-
-               // Info, explicitly
-               $expectId = 'expected------------------------';
-               $info1 = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider1,
-                       'id' => $expectId,
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $info2 = null;
-               $session = $pmanager->getEmptySessionInternal( null, $expectId );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( $expectId, $session->getId() );
-
-               // Wrong ID
-               $expectId = 'expected-----------------------2';
-               $info1 = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider1,
-                       'id' => "un$expectId",
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $info2 = null;
-               try {
-                       $pmanager->getEmptySessionInternal( null, $expectId );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \UnexpectedValueException $ex ) {
-                       $this->assertSame(
-                               'MockProvider1 returned empty session info with a wrong id: ' .
-                                       "un$expectId != $expectId",
-                               $ex->getMessage()
-                       );
-               }
-
-               // Unsafe ID
-               $expectId = 'expected-----------------------2';
-               $info1 = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider1,
-                       'id' => $expectId,
-                       'persisted' => true,
-               ) );
-               $info2 = null;
-               try {
-                       $pmanager->getEmptySessionInternal( null, $expectId );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \UnexpectedValueException $ex ) {
-                       $this->assertSame(
-                               'MockProvider1 returned empty session info with id flagged unsafe',
-                               $ex->getMessage()
-                       );
-               }
-
-               // Wrong provider
-               $expectId = null;
-               $info1 = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider2,
-                       'id' => 'empty---------------------------',
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $info2 = null;
-               try {
-                       $manager->getEmptySession();
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \UnexpectedValueException $ex ) {
-                       $this->assertSame(
-                               'MockProvider1 returned an empty session info for a different provider: ' . $info1,
-                               $ex->getMessage()
-                       );
-               }
-
-               // Highest priority wins
-               $expectId = null;
-               $info1 = new SessionInfo( SessionInfo::MIN_PRIORITY + 1, array(
-                       'provider' => $provider1,
-                       'id' => 'empty1--------------------------',
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $info2 = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider2,
-                       'id' => 'empty2--------------------------',
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $session = $manager->getEmptySession();
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( 'empty1--------------------------', $session->getId() );
-
-               $expectId = null;
-               $info1 = new SessionInfo( SessionInfo::MIN_PRIORITY + 1, array(
-                       'provider' => $provider1,
-                       'id' => 'empty1--------------------------',
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $info2 = new SessionInfo( SessionInfo::MIN_PRIORITY + 2, array(
-                       'provider' => $provider2,
-                       'id' => 'empty2--------------------------',
-                       'persisted' => true,
-                       'idIsSafe' => true,
-               ) );
-               $session = $manager->getEmptySession();
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertSame( 'empty2--------------------------', $session->getId() );
-
-               // Tied priorities throw an exception
-               $expectId = null;
-               $info1 = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider1,
-                       'id' => 'empty1--------------------------',
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newAnonymous(),
-                       'idIsSafe' => true,
-               ) );
-               $info2 = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider2,
-                       'id' => 'empty2--------------------------',
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newAnonymous(),
-                       'idIsSafe' => true,
-               ) );
-               try {
-                       $manager->getEmptySession();
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \UnexpectedValueException $ex ) {
-                       $this->assertStringStartsWith(
-                               'Multiple empty sessions tied for top priority: ',
-                               $ex->getMessage()
-                       );
-               }
-
-               // Bad id
-               try {
-                       $pmanager->getEmptySessionInternal( null, 'bad' );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid session ID', $ex->getMessage() );
-               }
-
-               // Session already exists
-               $expectId = 'expected-----------------------3';
-               $this->store->setSessionMeta( $expectId, array(
-                       'provider' => 'MockProvider2',
-                       'userId' => 0,
-                       'userName' => null,
-                       'userToken' => null,
-               ) );
-               try {
-                       $pmanager->getEmptySessionInternal( null, $expectId );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Session ID already exists', $ex->getMessage() );
-               }
-       }
-
-       public function testGetVaryHeaders() {
-               $manager = $this->getManager();
-
-               $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
-                       ->setMethods( array( 'getVaryHeaders', '__toString' ) );
-
-               $provider1 = $providerBuilder->getMock();
-               $provider1->expects( $this->once() )->method( 'getVaryHeaders' )
-                       ->will( $this->returnValue( array(
-                               'Foo' => null,
-                               'Bar' => array( 'X', 'Bar1' ),
-                               'Quux' => null,
-                       ) ) );
-               $provider1->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'MockProvider1' ) );
-
-               $provider2 = $providerBuilder->getMock();
-               $provider2->expects( $this->once() )->method( 'getVaryHeaders' )
-                       ->will( $this->returnValue( array(
-                               'Baz' => null,
-                               'Bar' => array( 'X', 'Bar2' ),
-                               'Quux' => array( 'Quux' ),
-                       ) ) );
-               $provider2->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'MockProvider2' ) );
-
-               $this->config->set( 'SessionProviders', array(
-                       $this->objectCacheDef( $provider1 ),
-                       $this->objectCacheDef( $provider2 ),
-               ) );
-
-               $expect = array(
-                       'Foo' => array(),
-                       'Bar' => array( 'X', 'Bar1', 3 => 'Bar2' ),
-                       'Quux' => array( 'Quux' ),
-                       'Baz' => array(),
-                       'Quux' => array( 'Quux' ),
-               );
-
-               $this->assertEquals( $expect, $manager->getVaryHeaders() );
-
-               // Again, to ensure it's cached
-               $this->assertEquals( $expect, $manager->getVaryHeaders() );
-       }
-
-       public function testGetVaryCookies() {
-               $manager = $this->getManager();
-
-               $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
-                       ->setMethods( array( 'getVaryCookies', '__toString' ) );
-
-               $provider1 = $providerBuilder->getMock();
-               $provider1->expects( $this->once() )->method( 'getVaryCookies' )
-                       ->will( $this->returnValue( array( 'Foo', 'Bar' ) ) );
-               $provider1->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'MockProvider1' ) );
-
-               $provider2 = $providerBuilder->getMock();
-               $provider2->expects( $this->once() )->method( 'getVaryCookies' )
-                       ->will( $this->returnValue( array( 'Foo', 'Baz' ) ) );
-               $provider2->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'MockProvider2' ) );
-
-               $this->config->set( 'SessionProviders', array(
-                       $this->objectCacheDef( $provider1 ),
-                       $this->objectCacheDef( $provider2 ),
-               ) );
-
-               $expect = array( 'Foo', 'Bar', 'Baz' );
-
-               $this->assertEquals( $expect, $manager->getVaryCookies() );
-
-               // Again, to ensure it's cached
-               $this->assertEquals( $expect, $manager->getVaryCookies() );
-       }
-
-       public function testGetProviders() {
-               $realManager = $this->getManager();
-               $manager = \TestingAccessWrapper::newFromObject( $realManager );
-
-               $this->config->set( 'SessionProviders', array(
-                       array( 'class' => 'DummySessionProvider' ),
-               ) );
-               $providers = $manager->getProviders();
-               $this->assertArrayHasKey( 'DummySessionProvider', $providers );
-               $provider = \TestingAccessWrapper::newFromObject( $providers['DummySessionProvider'] );
-               $this->assertSame( $manager->logger, $provider->logger );
-               $this->assertSame( $manager->config, $provider->config );
-               $this->assertSame( $realManager, $provider->getManager() );
-
-               $this->config->set( 'SessionProviders', array(
-                       array( 'class' => 'DummySessionProvider' ),
-                       array( 'class' => 'DummySessionProvider' ),
-               ) );
-               $manager->sessionProviders = null;
-               try {
-                       $manager->getProviders();
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \UnexpectedValueException $ex ) {
-                       $this->assertSame(
-                               'Duplicate provider name "DummySessionProvider"',
-                               $ex->getMessage()
-                       );
-               }
-       }
-
-       public function testShutdown() {
-               $manager = \TestingAccessWrapper::newFromObject( $this->getManager() );
-               $manager->setLogger( new \Psr\Log\NullLogger() );
-
-               $mock = $this->getMock( 'stdClass', array( 'save' ) );
-               $mock->expects( $this->once() )->method( 'save' );
-
-               $manager->allSessionBackends = array( $mock );
-               $manager->shutdown();
-       }
-
-       public function testGetSessionFromInfo() {
-               $manager = \TestingAccessWrapper::newFromObject( $this->getManager() );
-               $request = new \FauxRequest();
-
-               $id = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $manager->getProvider( 'DummySessionProvider' ),
-                       'id' => $id,
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newFromName( 'UTSysop', true ),
-                       'idIsSafe' => true,
-               ) );
-               \TestingAccessWrapper::newFromObject( $info )->idIsSafe = true;
-               $session1 = \TestingAccessWrapper::newFromObject(
-                       $manager->getSessionFromInfo( $info, $request )
-               );
-               $session2 = \TestingAccessWrapper::newFromObject(
-                       $manager->getSessionFromInfo( $info, $request )
-               );
-
-               $this->assertSame( $session1->backend, $session2->backend );
-               $this->assertNotEquals( $session1->index, $session2->index );
-               $this->assertSame( $session1->getSessionId(), $session2->getSessionId() );
-               $this->assertSame( $id, $session1->getId() );
-
-               \TestingAccessWrapper::newFromObject( $info )->idIsSafe = false;
-               $session3 = $manager->getSessionFromInfo( $info, $request );
-               $this->assertNotSame( $id, $session3->getId() );
-       }
-
-       public function testBackendRegistration() {
-               $manager = $this->getManager();
-
-               $session = $manager->getSessionForRequest( new \FauxRequest );
-               $backend = \TestingAccessWrapper::newFromObject( $session )->backend;
-               $sessionId = $session->getSessionId();
-               $id = (string)$sessionId;
-
-               $this->assertSame( $sessionId, $manager->getSessionById( $id, true )->getSessionId() );
-
-               $manager->changeBackendId( $backend );
-               $this->assertSame( $sessionId, $session->getSessionId() );
-               $this->assertNotEquals( $id, (string)$sessionId );
-               $id = (string)$sessionId;
-
-               $this->assertSame( $sessionId, $manager->getSessionById( $id, true )->getSessionId() );
-
-               // Destruction of the session here causes the backend to be deregistered
-               $session = null;
-
-               try {
-                       $manager->changeBackendId( $backend );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'Backend was not registered with this SessionManager', $ex->getMessage()
-                       );
-               }
-
-               try {
-                       $manager->deregisterSessionBackend( $backend );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'Backend was not registered with this SessionManager', $ex->getMessage()
-                       );
-               }
-
-               $session = $manager->getSessionById( $id, true );
-               $this->assertSame( $sessionId, $session->getSessionId() );
-       }
-
-       public function testGenerateSessionId() {
-               $manager = $this->getManager();
-
-               $id = $manager->generateSessionId();
-               $this->assertTrue( SessionManager::validateSessionId( $id ), "Generated ID: $id" );
-       }
-
-       public function testAutoCreateUser() {
-               global $wgGroupPermissions;
-
-               $that = $this;
-
-               \ObjectCache::$instances[__METHOD__] = new \HashBagOStuff();
-               $this->setMwGlobals( array( 'wgMainCacheType' => __METHOD__ ) );
-
-               $this->stashMwGlobals( array( 'wgGroupPermissions' ) );
-               $wgGroupPermissions['*']['createaccount'] = true;
-               $wgGroupPermissions['*']['autocreateaccount'] = false;
-
-               // Replace the global singleton with one configured for testing
-               $manager = $this->getManager();
-               $reset = TestUtils::setSessionManagerSingleton( $manager );
-
-               $logger = new \TestLogger( true, function ( $m ) {
-                       if ( substr( $m, 0, 15 ) === 'SessionBackend ' ) {
-                               // Don't care.
-                               return null;
-                       }
-                       $m = str_replace( 'MediaWiki\Session\SessionManager::autoCreateUser: ', '', $m );
-                       $m = preg_replace( '/ - from: .*$/', ' - from: XXX', $m );
-                       return $m;
-               } );
-               $manager->setLogger( $logger );
-
-               $session = SessionManager::getGlobalSession();
-
-               // Can't create an already-existing user
-               $user = User::newFromName( 'UTSysop' );
-               $id = $user->getId();
-               $this->assertFalse( $manager->autoCreateUser( $user ) );
-               $this->assertSame( $id, $user->getId() );
-               $this->assertSame( 'UTSysop', $user->getName() );
-               $this->assertSame( array(), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Sanity check that creation works at all
-               $user = User::newFromName( 'UTSessionAutoCreate1' );
-               $this->assertSame( 0, $user->getId(), 'sanity check' );
-               $this->assertTrue( $manager->autoCreateUser( $user ) );
-               $this->assertNotEquals( 0, $user->getId() );
-               $this->assertSame( 'UTSessionAutoCreate1', $user->getName() );
-               $this->assertEquals(
-                       $user->getId(), User::idFromName( 'UTSessionAutoCreate1', User::READ_LATEST )
-               );
-               $this->assertSame( array(
-                       array( LogLevel::INFO, 'creating new user (UTSessionAutoCreate1) - from: XXX' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Check lack of permissions
-               $wgGroupPermissions['*']['createaccount'] = false;
-               $wgGroupPermissions['*']['autocreateaccount'] = false;
-               $user = User::newFromName( 'UTDoesNotExist' );
-               $this->assertFalse( $manager->autoCreateUser( $user ) );
-               $this->assertSame( 0, $user->getId() );
-               $this->assertNotSame( 'UTDoesNotExist', $user->getName() );
-               $this->assertEquals( 0, User::idFromName( 'UTDoesNotExist', User::READ_LATEST ) );
-               $session->clear();
-               $this->assertSame( array(
-                       array( LogLevel::DEBUG, 'user is blocked from this wiki, blacklisting' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Check other permission
-               $wgGroupPermissions['*']['createaccount'] = false;
-               $wgGroupPermissions['*']['autocreateaccount'] = true;
-               $user = User::newFromName( 'UTSessionAutoCreate2' );
-               $this->assertSame( 0, $user->getId(), 'sanity check' );
-               $this->assertTrue( $manager->autoCreateUser( $user ) );
-               $this->assertNotEquals( 0, $user->getId() );
-               $this->assertSame( 'UTSessionAutoCreate2', $user->getName() );
-               $this->assertEquals(
-                       $user->getId(), User::idFromName( 'UTSessionAutoCreate2', User::READ_LATEST )
-               );
-               $this->assertSame( array(
-                       array( LogLevel::INFO, 'creating new user (UTSessionAutoCreate2) - from: XXX' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Test account-creation block
-               $anon = new User;
-               $block = new \Block( array(
-                       'address' => $anon->getName(),
-                       'user' => $id,
-                       'reason' => __METHOD__,
-                       'expiry' => time() + 100500,
-                       'createAccount' => true,
-               ) );
-               $block->insert();
-               $this->assertInstanceOf( 'Block', $anon->isBlockedFromCreateAccount(), 'sanity check' );
-               $reset2 = new \ScopedCallback( array( $block, 'delete' ) );
-               $user = User::newFromName( 'UTDoesNotExist' );
-               $this->assertFalse( $manager->autoCreateUser( $user ) );
-               $this->assertSame( 0, $user->getId() );
-               $this->assertNotSame( 'UTDoesNotExist', $user->getName() );
-               $this->assertEquals( 0, User::idFromName( 'UTDoesNotExist', User::READ_LATEST ) );
-               \ScopedCallback::consume( $reset2 );
-               $session->clear();
-               $this->assertSame( array(
-                       array( LogLevel::DEBUG, 'user is blocked from this wiki, blacklisting' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Sanity check that creation still works
-               $user = User::newFromName( 'UTSessionAutoCreate3' );
-               $this->assertSame( 0, $user->getId(), 'sanity check' );
-               $this->assertTrue( $manager->autoCreateUser( $user ) );
-               $this->assertNotEquals( 0, $user->getId() );
-               $this->assertSame( 'UTSessionAutoCreate3', $user->getName() );
-               $this->assertEquals(
-                       $user->getId(), User::idFromName( 'UTSessionAutoCreate3', User::READ_LATEST )
-               );
-               $this->assertSame( array(
-                       array( LogLevel::INFO, 'creating new user (UTSessionAutoCreate3) - from: XXX' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Test prevention by AuthPlugin
-               global $wgAuth;
-               $oldWgAuth = $wgAuth;
-               $mockWgAuth = $this->getMock( 'AuthPlugin', array( 'autoCreate' ) );
-               $mockWgAuth->expects( $this->once() )->method( 'autoCreate' )
-                       ->will( $this->returnValue( false ) );
-               $this->setMwGlobals( array(
-                       'wgAuth' => $mockWgAuth,
-               ) );
-               $user = User::newFromName( 'UTDoesNotExist' );
-               $this->assertFalse( $manager->autoCreateUser( $user ) );
-               $this->assertSame( 0, $user->getId() );
-               $this->assertNotSame( 'UTDoesNotExist', $user->getName() );
-               $this->assertEquals( 0, User::idFromName( 'UTDoesNotExist', User::READ_LATEST ) );
-               $this->setMwGlobals( array(
-                       'wgAuth' => $oldWgAuth,
-               ) );
-               $session->clear();
-               $this->assertSame( array(
-                       array( LogLevel::DEBUG, 'denied by AuthPlugin' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Test prevention by wfReadOnly()
-               $this->setMwGlobals( array(
-                       'wgReadOnly' => 'Because',
-               ) );
-               $user = User::newFromName( 'UTDoesNotExist' );
-               $this->assertFalse( $manager->autoCreateUser( $user ) );
-               $this->assertSame( 0, $user->getId() );
-               $this->assertNotSame( 'UTDoesNotExist', $user->getName() );
-               $this->assertEquals( 0, User::idFromName( 'UTDoesNotExist', User::READ_LATEST ) );
-               $this->setMwGlobals( array(
-                       'wgReadOnly' => false,
-               ) );
-               $session->clear();
-               $this->assertSame( array(
-                       array( LogLevel::DEBUG, 'denied by wfReadOnly()' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Test prevention by a previous session
-               $session->set( 'MWSession::AutoCreateBlacklist', 'test' );
-               $user = User::newFromName( 'UTDoesNotExist' );
-               $this->assertFalse( $manager->autoCreateUser( $user ) );
-               $this->assertSame( 0, $user->getId() );
-               $this->assertNotSame( 'UTDoesNotExist', $user->getName() );
-               $this->assertEquals( 0, User::idFromName( 'UTDoesNotExist', User::READ_LATEST ) );
-               $session->clear();
-               $this->assertSame( array(
-                       array( LogLevel::DEBUG, 'blacklisted in session (test)' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Test uncreatable name
-               $user = User::newFromName( 'UTDoesNotExist@' );
-               $this->assertFalse( $manager->autoCreateUser( $user ) );
-               $this->assertSame( 0, $user->getId() );
-               $this->assertNotSame( 'UTDoesNotExist@', $user->getName() );
-               $this->assertEquals( 0, User::idFromName( 'UTDoesNotExist', User::READ_LATEST ) );
-               $session->clear();
-               $this->assertSame( array(
-                       array( LogLevel::DEBUG, 'Invalid username, blacklisting' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Test AbortAutoAccount hook
-               $mock = $this->getMock( __CLASS__, array( 'onAbortAutoAccount' ) );
-               $mock->expects( $this->once() )->method( 'onAbortAutoAccount' )
-                       ->will( $this->returnCallback( function ( User $user, &$msg ) {
-                               $msg = 'No way!';
-                               return false;
-                       } ) );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'AbortAutoAccount' => array( $mock ) ) );
-               $user = User::newFromName( 'UTDoesNotExist' );
-               $this->assertFalse( $manager->autoCreateUser( $user ) );
-               $this->assertSame( 0, $user->getId() );
-               $this->assertNotSame( 'UTDoesNotExist', $user->getName() );
-               $this->assertEquals( 0, User::idFromName( 'UTDoesNotExist', User::READ_LATEST ) );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'AbortAutoAccount' => array() ) );
-               $session->clear();
-               $this->assertSame( array(
-                       array( LogLevel::DEBUG, 'denied by hook: No way!' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Test AbortAutoAccount hook screwing up the name
-               $mock = $this->getMock( 'stdClass', array( 'onAbortAutoAccount' ) );
-               $mock->expects( $this->once() )->method( 'onAbortAutoAccount' )
-                       ->will( $this->returnCallback( function ( User $user ) {
-                               $user->setName( 'UTDoesNotExistEither' );
-                       } ) );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'AbortAutoAccount' => array( $mock ) ) );
-               try {
-                       $user = User::newFromName( 'UTDoesNotExist' );
-                       $manager->autoCreateUser( $user );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \UnexpectedValueException $ex ) {
-                       $this->assertSame(
-                               'AbortAutoAccount hook tried to change the user name',
-                               $ex->getMessage()
-                       );
-               }
-               $this->assertSame( 0, $user->getId() );
-               $this->assertNotSame( 'UTDoesNotExist', $user->getName() );
-               $this->assertNotSame( 'UTDoesNotExistEither', $user->getName() );
-               $this->assertEquals( 0, User::idFromName( 'UTDoesNotExist', User::READ_LATEST ) );
-               $this->assertEquals( 0, User::idFromName( 'UTDoesNotExistEither', User::READ_LATEST ) );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array( 'AbortAutoAccount' => array() ) );
-               $session->clear();
-               $this->assertSame( array(), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Test for "exception backoff"
-               $user = User::newFromName( 'UTDoesNotExist' );
-               $cache = \ObjectCache::getLocalClusterInstance();
-               $backoffKey = wfMemcKey( 'MWSession', 'autocreate-failed', md5( $user->getName() ) );
-               $cache->set( $backoffKey, 1, 60 * 10 );
-               $this->assertFalse( $manager->autoCreateUser( $user ) );
-               $this->assertSame( 0, $user->getId() );
-               $this->assertNotSame( 'UTDoesNotExist', $user->getName() );
-               $this->assertEquals( 0, User::idFromName( 'UTDoesNotExist', User::READ_LATEST ) );
-               $cache->delete( $backoffKey );
-               $session->clear();
-               $this->assertSame( array(
-                       array( LogLevel::DEBUG, 'denied by prior creation attempt failures' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Sanity check that creation still works, and test completion hook
-               $cb = $this->callback( function ( User $user ) use ( $that ) {
-                       $that->assertNotEquals( 0, $user->getId() );
-                       $that->assertSame( 'UTSessionAutoCreate4', $user->getName() );
-                       $that->assertEquals(
-                               $user->getId(), User::idFromName( 'UTSessionAutoCreate4', User::READ_LATEST )
-                       );
-                       return true;
-               } );
-               $mock = $this->getMock( 'stdClass',
-                       array( 'onAuthPluginAutoCreate', 'onLocalUserCreated' ) );
-               $mock->expects( $this->once() )->method( 'onAuthPluginAutoCreate' )
-                       ->with( $cb );
-               $mock->expects( $this->once() )->method( 'onLocalUserCreated' )
-                       ->with( $cb, $this->identicalTo( true ) );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
-                       'AuthPluginAutoCreate' => array( $mock ),
-                       'LocalUserCreated' => array( $mock ),
-               ) );
-               $user = User::newFromName( 'UTSessionAutoCreate4' );
-               $this->assertSame( 0, $user->getId(), 'sanity check' );
-               $this->assertTrue( $manager->autoCreateUser( $user ) );
-               $this->assertNotEquals( 0, $user->getId() );
-               $this->assertSame( 'UTSessionAutoCreate4', $user->getName() );
-               $this->assertEquals(
-                       $user->getId(),
-                       User::idFromName( 'UTSessionAutoCreate4', User::READ_LATEST )
-               );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
-                       'AuthPluginAutoCreate' => array(),
-                       'LocalUserCreated' => array(),
-               ) );
-               $this->assertSame( array(
-                       array( LogLevel::INFO, 'creating new user (UTSessionAutoCreate4) - from: XXX' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-       }
-
-       public function onAbortAutoAccount( User $user, &$msg ) {
-       }
-
-       public function testPreventSessionsForUser() {
-               $manager = $this->getManager();
-
-               $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
-                       ->setMethods( array( 'preventSessionsForUser', '__toString' ) );
-
-               $provider1 = $providerBuilder->getMock();
-               $provider1->expects( $this->once() )->method( 'preventSessionsForUser' )
-                       ->with( $this->equalTo( 'UTSysop' ) );
-               $provider1->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'MockProvider1' ) );
-
-               $this->config->set( 'SessionProviders', array(
-                       $this->objectCacheDef( $provider1 ),
-               ) );
-
-               $user = User::newFromName( 'UTSysop' );
-               $token = $user->getToken( true );
-
-               $this->assertFalse( $manager->isUserSessionPrevented( 'UTSysop' ) );
-               $manager->preventSessionsForUser( 'UTSysop' );
-               $this->assertNotEquals( $token, User::newFromName( 'UTSysop' )->getToken() );
-               $this->assertTrue( $manager->isUserSessionPrevented( 'UTSysop' ) );
-       }
-
-       public function testLoadSessionInfoFromStore() {
-               $manager = $this->getManager();
-               $logger = new \TestLogger( true, function ( $m ) {
-                       return preg_replace(
-                               '/^Session \[\d+\]\w+<(?:null|anon|[+-]:\d+:\w+)>\w+: /', 'Session X: ', $m
-                       );
-               } );
-               $manager->setLogger( $logger );
-               $request = new \FauxRequest();
-
-               // TestingAccessWrapper can't handle methods with reference arguments, sigh.
-               $rClass = new \ReflectionClass( $manager );
-               $rMethod = $rClass->getMethod( 'loadSessionInfoFromStore' );
-               $rMethod->setAccessible( true );
-               $loadSessionInfoFromStore = function ( &$info ) use ( $rMethod, $manager, $request ) {
-                       return $rMethod->invokeArgs( $manager, array( &$info, $request ) );
-               };
-
-               $userInfo = UserInfo::newFromName( 'UTSysop', true );
-               $unverifiedUserInfo = UserInfo::newFromName( 'UTSysop', false );
-
-               $id = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-               $metadata = array(
-                       'userId' => $userInfo->getId(),
-                       'userName' => $userInfo->getName(),
-                       'userToken' => $userInfo->getToken( true ),
-                       'provider' => 'Mock',
-               );
-
-               $builder = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' )
-                       ->setMethods( array( '__toString', 'mergeMetadata', 'refreshSessionInfo' ) );
-
-               $provider = $builder->getMockForAbstractClass();
-               $provider->setManager( $manager );
-               $provider->expects( $this->any() )->method( 'persistsSessionId' )
-                       ->will( $this->returnValue( true ) );
-               $provider->expects( $this->any() )->method( 'canChangeUser' )
-                       ->will( $this->returnValue( true ) );
-               $provider->expects( $this->any() )->method( 'refreshSessionInfo' )
-                       ->will( $this->returnValue( true ) );
-               $provider->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'Mock' ) );
-               $provider->expects( $this->any() )->method( 'mergeMetadata' )
-                       ->will( $this->returnCallback( function ( $a, $b ) {
-                               if ( $b === array( 'Throw' ) ) {
-                                       throw new \UnexpectedValueException( 'no merge!' );
-                               }
-                               return array( 'Merged' );
-                       } ) );
-
-               $provider2 = $builder->getMockForAbstractClass();
-               $provider2->setManager( $manager );
-               $provider2->expects( $this->any() )->method( 'persistsSessionId' )
-                       ->will( $this->returnValue( false ) );
-               $provider2->expects( $this->any() )->method( 'canChangeUser' )
-                       ->will( $this->returnValue( false ) );
-               $provider2->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'Mock2' ) );
-               $provider2->expects( $this->any() )->method( 'refreshSessionInfo' )
-                       ->will( $this->returnCallback( function ( $info, $request, &$metadata ) {
-                               $metadata['changed'] = true;
-                               return true;
-                       } ) );
-
-               $provider3 = $builder->getMockForAbstractClass();
-               $provider3->setManager( $manager );
-               $provider3->expects( $this->any() )->method( 'persistsSessionId' )
-                       ->will( $this->returnValue( true ) );
-               $provider3->expects( $this->any() )->method( 'canChangeUser' )
-                       ->will( $this->returnValue( true ) );
-               $provider3->expects( $this->once() )->method( 'refreshSessionInfo' )
-                       ->will( $this->returnValue( false ) );
-               $provider3->expects( $this->any() )->method( '__toString' )
-                       ->will( $this->returnValue( 'Mock3' ) );
-
-               \TestingAccessWrapper::newFromObject( $manager )->sessionProviders = array(
-                       (string)$provider => $provider,
-                       (string)$provider2 => $provider2,
-                       (string)$provider3 => $provider3,
-               );
-
-               // No metadata, basic usage
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertFalse( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertTrue( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider2,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // Unverified user, no metadata
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $unverifiedUserInfo
-               ) );
-               $this->assertSame( $unverifiedUserInfo, $info->getUserInfo() );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Unverified user provided and no metadata to auth it' )
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // No metadata, missing data
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Null provider and no metadata' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertInstanceOf( 'MediaWiki\\Session\\UserInfo', $info->getUserInfo() );
-               $this->assertTrue( $info->getUserInfo()->isVerified() );
-               $this->assertTrue( $info->getUserInfo()->isAnon() );
-               $this->assertFalse( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider2,
-                       'id' => $id,
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::INFO, 'Session X: No user provided and provider cannot set user' )
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Incomplete/bad metadata
-               $this->store->setRawSession( $id, true );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Bad data' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               $this->store->setRawSession( $id, array( 'data' => array() ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Bad data structure' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               $this->store->deleteSession( $id );
-               $this->store->setRawSession( $id, array( 'metadata' => $metadata ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Bad data structure' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               $this->store->setRawSession( $id, array( 'metadata' => $metadata, 'data' => true ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Bad data structure' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               $this->store->setRawSession( $id, array( 'metadata' => true, 'data' => array() ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Bad data structure' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               foreach ( $metadata as $key => $dummy ) {
-                       $tmp = $metadata;
-                       unset( $tmp[$key] );
-                       $this->store->setRawSession( $id, array( 'metadata' => $tmp, 'data' => array() ) );
-                       $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-                       $this->assertSame( array(
-                               array( LogLevel::WARNING, 'Session X: Bad metadata' ),
-                       ), $logger->getBuffer() );
-                       $logger->clearBuffer();
-               }
-
-               // Basic usage with metadata
-               $this->store->setRawSession( $id, array( 'metadata' => $metadata, 'data' => array() ) );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // Mismatched provider
-               $this->store->setSessionMeta( $id, array( 'provider' => 'Bad' ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Wrong provider, Bad !== Mock' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Unknown provider
-               $this->store->setSessionMeta( $id, array( 'provider' => 'Bad' ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Unknown provider, Bad' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Fill in provider
-               $this->store->setSessionMeta( $id, $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // Bad user metadata
-               $this->store->setSessionMeta( $id, array( 'userId' => -1, 'userToken' => null ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::ERROR, 'Session X: Invalid ID' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               $this->store->setSessionMeta(
-                       $id, array( 'userId' => 0, 'userName' => '<X>', 'userToken' => null ) + $metadata
-               );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::ERROR, 'Session X: Invalid user name' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Mismatched user by ID
-               $this->store->setSessionMeta(
-                       $id, array( 'userId' => $userInfo->getId() + 1, 'userToken' => null ) + $metadata
-               );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: User ID mismatch, 2 !== 1' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Mismatched user by name
-               $this->store->setSessionMeta(
-                       $id, array( 'userId' => 0, 'userName' => 'X', 'userToken' => null ) + $metadata
-               );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: User name mismatch, X !== UTSysop' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // ID matches, name doesn't
-               $this->store->setSessionMeta(
-                       $id, array( 'userId' => $userInfo->getId(), 'userName' => 'X', 'userToken' => null ) + $metadata
-               );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array(
-                               LogLevel::WARNING, 'Session X: User ID matched but name didn\'t (rename?), X !== UTSysop'
-                       ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Mismatched anon user
-               $this->store->setSessionMeta(
-                       $id, array( 'userId' => 0, 'userName' => null, 'userToken' => null ) + $metadata
-               );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array(
-                               LogLevel::WARNING, 'Session X: Metadata has an anonymous user, but a non-anon user was provided'
-                       ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Lookup user by ID
-               $this->store->setSessionMeta( $id, array( 'userToken' => null ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( $userInfo->getId(), $info->getUserInfo()->getId() );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // Lookup user by name
-               $this->store->setSessionMeta(
-                       $id, array( 'userId' => 0, 'userName' => 'UTSysop', 'userToken' => null ) + $metadata
-               );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( $userInfo->getId(), $info->getUserInfo()->getId() );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // Lookup anonymous user
-               $this->store->setSessionMeta(
-                       $id, array( 'userId' => 0, 'userName' => null, 'userToken' => null ) + $metadata
-               );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->getUserInfo()->isAnon() );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // Unverified user with metadata
-               $this->store->setSessionMeta( $id, $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $unverifiedUserInfo
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->getUserInfo()->isVerified() );
-               $this->assertSame( $unverifiedUserInfo->getId(), $info->getUserInfo()->getId() );
-               $this->assertSame( $unverifiedUserInfo->getName(), $info->getUserInfo()->getName() );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // Unverified user with metadata
-               $this->store->setSessionMeta( $id, $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $unverifiedUserInfo
-               ) );
-               $this->assertFalse( $info->isIdSafe(), 'sanity check' );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->getUserInfo()->isVerified() );
-               $this->assertSame( $unverifiedUserInfo->getId(), $info->getUserInfo()->getId() );
-               $this->assertSame( $unverifiedUserInfo->getName(), $info->getUserInfo()->getName() );
-               $this->assertTrue( $info->isIdSafe() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // Wrong token
-               $this->store->setSessionMeta( $id, array( 'userToken' => 'Bad' ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: User token mismatch' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Provider metadata
-               $this->store->setSessionMeta( $id, array( 'provider' => 'Mock2' ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider2,
-                       'id' => $id,
-                       'userInfo' => $userInfo,
-                       'metadata' => array( 'Info' ),
-               ) );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array( 'Info', 'changed' => true ), $info->getProviderMetadata() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               $this->store->setSessionMeta( $id, array( 'providerMetadata' => array( 'Saved' ) ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo,
-               ) );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array( 'Saved' ), $info->getProviderMetadata() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo,
-                       'metadata' => array( 'Info' ),
-               ) );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array( 'Merged' ), $info->getProviderMetadata() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo,
-                       'metadata' => array( 'Throw' ),
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Metadata merge failed: no merge!' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-
-               // Remember from session
-               $this->store->setSessionMeta( $id, $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-               ) );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertFalse( $info->wasRemembered() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               $this->store->setSessionMeta( $id, array( 'remember' => true ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-               ) );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->wasRemembered() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               $this->store->setSessionMeta( $id, array( 'remember' => false ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->wasRemembered() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // forceHTTPS from session
-               $this->store->setSessionMeta( $id, $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertFalse( $info->forceHTTPS() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               $this->store->setSessionMeta( $id, array( 'forceHTTPS' => true ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->forceHTTPS() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               $this->store->setSessionMeta( $id, array( 'forceHTTPS' => false ) + $metadata );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo,
-                       'forceHTTPS' => true
-               ) );
-               $this->assertTrue( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $info->forceHTTPS() );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // Provider refreshSessionInfo() returning false
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider3,
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertSame( array(), $logger->getBuffer() );
-
-               // Hook
-               $that = $this;
-               $called = false;
-               $data = array( 'foo' => 1 );
-               $this->store->setSession( $id, array( 'metadata' => $metadata, 'data' => $data ) );
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $provider,
-                       'id' => $id,
-                       'userInfo' => $userInfo
-               ) );
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
-                       'SessionCheckInfo' => array( function ( &$reason, $i, $r, $m, $d ) use (
-                               $that, $info, $metadata, $data, $request, &$called
-                       ) {
-                               $that->assertSame( $info->getId(), $i->getId() );
-                               $that->assertSame( $info->getProvider(), $i->getProvider() );
-                               $that->assertSame( $info->getUserInfo(), $i->getUserInfo() );
-                               $that->assertSame( $request, $r );
-                               $that->assertEquals( $metadata, $m );
-                               $that->assertEquals( $data, $d );
-                               $called = true;
-                               return false;
-                       } )
-               ) );
-               $this->assertFalse( $loadSessionInfoFromStore( $info ) );
-               $this->assertTrue( $called );
-               $this->assertSame( array(
-                       array( LogLevel::WARNING, 'Session X: Hook aborted' ),
-               ), $logger->getBuffer() );
-               $logger->clearBuffer();
-       }
-
-}
diff --git a/tests/phpunit/includes/session/SessionProviderTest.php b/tests/phpunit/includes/session/SessionProviderTest.php
deleted file mode 100644 (file)
index d7aebcd..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use MediaWikiTestCase;
-
-/**
- * @group Session
- * @group Database
- * @covers MediaWiki\Session\SessionProvider
- */
-class SessionProviderTest extends MediaWikiTestCase {
-
-       public function testBasics() {
-               $manager = new SessionManager();
-               $logger = new \TestLogger();
-               $config = new \HashConfig();
-
-               $provider = $this->getMockForAbstractClass( 'MediaWiki\\Session\\SessionProvider' );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
-
-               $provider->setConfig( $config );
-               $this->assertSame( $config, $priv->config );
-               $provider->setLogger( $logger );
-               $this->assertSame( $logger, $priv->logger );
-               $provider->setManager( $manager );
-               $this->assertSame( $manager, $priv->manager );
-               $this->assertSame( $manager, $provider->getManager() );
-
-               $this->assertSame( array(), $provider->getVaryHeaders() );
-               $this->assertSame( array(), $provider->getVaryCookies() );
-               $this->assertSame( null, $provider->suggestLoginUsername( new \FauxRequest ) );
-
-               $this->assertSame( get_class( $provider ), (string)$provider );
-
-               $this->assertNull( $provider->whyNoSession() );
-
-               $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'id' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
-                       'provider' => $provider,
-               ) );
-               $metadata = array( 'foo' );
-               $this->assertTrue( $provider->refreshSessionInfo( $info, new \FauxRequest, $metadata ) );
-               $this->assertSame( array( 'foo' ), $metadata );
-       }
-
-       /**
-        * @dataProvider provideNewSessionInfo
-        * @param bool $persistId Return value for ->persistsSessionId()
-        * @param bool $persistUser Return value for ->persistsSessionUser()
-        * @param bool $ok Whether a SessionInfo is provided
-        */
-       public function testNewSessionInfo( $persistId, $persistUser, $ok ) {
-               $manager = new SessionManager();
-
-               $provider = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' )
-                       ->setMethods( array( 'canChangeUser', 'persistsSessionId' ) )
-                       ->getMockForAbstractClass();
-               $provider->expects( $this->any() )->method( 'persistsSessionId' )
-                       ->will( $this->returnValue( $persistId ) );
-               $provider->expects( $this->any() )->method( 'canChangeUser' )
-                       ->will( $this->returnValue( $persistUser ) );
-               $provider->setManager( $manager );
-
-               if ( $ok ) {
-                       $info = $provider->newSessionInfo();
-                       $this->assertNotNull( $info );
-                       $this->assertFalse( $info->wasPersisted() );
-                       $this->assertTrue( $info->isIdSafe() );
-
-                       $id = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-                       $info = $provider->newSessionInfo( $id );
-                       $this->assertNotNull( $info );
-                       $this->assertSame( $id, $info->getId() );
-                       $this->assertFalse( $info->wasPersisted() );
-                       $this->assertTrue( $info->isIdSafe() );
-               } else {
-                       $this->assertNull( $provider->newSessionInfo() );
-               }
-       }
-
-       public function testMergeMetadata() {
-               $provider = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' )
-                       ->getMockForAbstractClass();
-
-               try {
-                       $provider->mergeMetadata(
-                               array( 'foo' => 1, 'baz' => 3 ),
-                               array( 'bar' => 2, 'baz' => '3' )
-                       );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \UnexpectedValueException $ex ) {
-                       $this->assertSame( 'Key "baz" changed', $ex->getMessage() );
-               }
-
-               $res = $provider->mergeMetadata(
-                       array( 'foo' => 1, 'baz' => 3 ),
-                       array( 'bar' => 2, 'baz' => 3 )
-               );
-               $this->assertSame( array( 'bar' => 2, 'baz' => 3 ), $res );
-       }
-
-       public static function provideNewSessionInfo() {
-               return array(
-                       array( false, false, false ),
-                       array( true, false, false ),
-                       array( false, true, false ),
-                       array( true, true, true ),
-               );
-       }
-
-       public function testImmutableSessions() {
-               $provider = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' )
-                       ->setMethods( array( 'canChangeUser', 'persistsSessionId' ) )
-                       ->getMockForAbstractClass();
-               $provider->expects( $this->any() )->method( 'canChangeUser' )
-                       ->will( $this->returnValue( true ) );
-               $provider->preventSessionsForUser( 'Foo' );
-
-               $provider = $this->getMockBuilder( 'MediaWiki\\Session\\SessionProvider' )
-                       ->setMethods( array( 'canChangeUser', 'persistsSessionId' ) )
-                       ->getMockForAbstractClass();
-               $provider->expects( $this->any() )->method( 'canChangeUser' )
-                       ->will( $this->returnValue( false ) );
-               try {
-                       $provider->preventSessionsForUser( 'Foo' );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \BadMethodCallException $ex ) {
-               }
-
-       }
-
-       public function testHashToSessionId() {
-               $config = new \HashConfig( array(
-                       'SecretKey' => 'Shhh!',
-               ) );
-
-               $provider = $this->getMockForAbstractClass( 'MediaWiki\\Session\\SessionProvider',
-                       array(), 'MockSessionProvider' );
-               $provider->setConfig( $config );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
-
-               $this->assertSame( 'eoq8cb1mg7j30ui5qolafps4hg29k5bb', $priv->hashToSessionId( 'foobar' ) );
-               $this->assertSame( '4do8j7tfld1g8tte9jqp3csfgmulaun9',
-                       $priv->hashToSessionId( 'foobar', 'secret' ) );
-
-               try {
-                       $priv->hashToSessionId( array() );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               '$data must be a string, array was passed',
-                               $ex->getMessage()
-                       );
-               }
-               try {
-                       $priv->hashToSessionId( '', false );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               '$key must be a string or null, boolean was passed',
-                               $ex->getMessage()
-                       );
-               }
-       }
-
-       public function testDescribe() {
-               $provider = $this->getMockForAbstractClass( 'MediaWiki\\Session\\SessionProvider',
-                       array(), 'MockSessionProvider' );
-
-               $this->assertSame(
-                       'MockSessionProvider sessions',
-                       $provider->describe( \Language::factory( 'en' ) )
-               );
-       }
-
-       public function testGetAllowedUserRights() {
-               $provider = $this->getMockForAbstractClass( 'MediaWiki\\Session\\SessionProvider' );
-               $backend = TestUtils::getDummySessionBackend();
-
-               try {
-                       $provider->getAllowedUserRights( $backend );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame(
-                               'Backend\'s provider isn\'t $this',
-                               $ex->getMessage()
-                       );
-               }
-
-               \TestingAccessWrapper::newFromObject( $backend )->provider = $provider;
-               $this->assertNull( $provider->getAllowedUserRights( $backend ) );
-       }
-
-}
diff --git a/tests/phpunit/includes/session/SessionTest.php b/tests/phpunit/includes/session/SessionTest.php
deleted file mode 100644 (file)
index efc92f7..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use MediaWikiTestCase;
-use User;
-
-/**
- * @group Session
- * @covers MediaWiki\Session\Session
- */
-class SessionTest extends MediaWikiTestCase {
-
-       public function testConstructor() {
-               $backend = TestUtils::getDummySessionBackend();
-               \TestingAccessWrapper::newFromObject( $backend )->requests = array( -1 => 'dummy' );
-               \TestingAccessWrapper::newFromObject( $backend )->id = new SessionId( 'abc' );
-
-               $session = new Session( $backend, 42 );
-               $priv = \TestingAccessWrapper::newFromObject( $session );
-               $this->assertSame( $backend, $priv->backend );
-               $this->assertSame( 42, $priv->index );
-
-               $request = new \FauxRequest();
-               $priv2 = \TestingAccessWrapper::newFromObject( $session->sessionWithRequest( $request ) );
-               $this->assertSame( $backend, $priv2->backend );
-               $this->assertNotSame( $priv->index, $priv2->index );
-               $this->assertSame( $request, $priv2->getRequest() );
-       }
-
-       /**
-        * @dataProvider provideMethods
-        * @param string $m Method to test
-        * @param array $args Arguments to pass to the method
-        * @param bool $index Whether the backend method gets passed the index
-        * @param bool $ret Whether the method returns a value
-        */
-       public function testMethods( $m, $args, $index, $ret ) {
-               $mock = $this->getMock( 'MediaWiki\\Session\\DummySessionBackend',
-                       array( $m, 'deregisterSession' ) );
-               $mock->expects( $this->once() )->method( 'deregisterSession' )
-                       ->with( $this->identicalTo( 42 ) );
-
-               $tmp = $mock->expects( $this->once() )->method( $m );
-               $expectArgs = array();
-               if ( $index ) {
-                       $expectArgs[] = $this->identicalTo( 42 );
-               }
-               foreach ( $args as $arg ) {
-                       $expectArgs[] = $this->identicalTo( $arg );
-               }
-               $tmp = call_user_func_array( array( $tmp, 'with' ), $expectArgs );
-
-               $retval = new \stdClass;
-               $tmp->will( $this->returnValue( $retval ) );
-
-               $session = TestUtils::getDummySession( $mock, 42 );
-
-               if ( $ret ) {
-                       $this->assertSame( $retval, call_user_func_array( array( $session, $m ), $args ) );
-               } else {
-                       $this->assertNull( call_user_func_array( array( $session, $m ), $args ) );
-               }
-
-               // Trigger Session destructor
-               $session = null;
-       }
-
-       public static function provideMethods() {
-               return array(
-                       array( 'getId', array(), false, true ),
-                       array( 'getSessionId', array(), false, true ),
-                       array( 'resetId', array(), false, true ),
-                       array( 'getProvider', array(), false, true ),
-                       array( 'isPersistent', array(), false, true ),
-                       array( 'persist', array(), false, false ),
-                       array( 'shouldRememberUser', array(), false, true ),
-                       array( 'setRememberUser', array( true ), false, false ),
-                       array( 'getRequest', array(), true, true ),
-                       array( 'getUser', array(), false, true ),
-                       array( 'getAllowedUserRights', array(), false, true ),
-                       array( 'canSetUser', array(), false, true ),
-                       array( 'setUser', array( new \stdClass ), false, false ),
-                       array( 'suggestLoginUsername', array(), true, true ),
-                       array( 'shouldForceHTTPS', array(), false, true ),
-                       array( 'setForceHTTPS', array( true ), false, false ),
-                       array( 'getLoggedOutTimestamp', array(), false, true ),
-                       array( 'setLoggedOutTimestamp', array( 123 ), false, false ),
-                       array( 'getProviderMetadata', array(), false, true ),
-                       array( 'save', array(), false, false ),
-                       array( 'delaySave', array(), false, true ),
-                       array( 'renew', array(), false, false ),
-               );
-       }
-
-       public function testDataAccess() {
-               $session = TestUtils::getDummySession();
-               $backend = \TestingAccessWrapper::newFromObject( $session )->backend;
-
-               $this->assertEquals( 1, $session->get( 'foo' ) );
-               $this->assertEquals( 'zero', $session->get( 0 ) );
-               $this->assertFalse( $backend->dirty );
-
-               $this->assertEquals( null, $session->get( 'null' ) );
-               $this->assertEquals( 'default', $session->get( 'null', 'default' ) );
-               $this->assertFalse( $backend->dirty );
-
-               $session->set( 'foo', 55 );
-               $this->assertEquals( 55, $backend->data['foo'] );
-               $this->assertTrue( $backend->dirty );
-               $backend->dirty = false;
-
-               $session->set( 1, 'one' );
-               $this->assertEquals( 'one', $backend->data[1] );
-               $this->assertTrue( $backend->dirty );
-               $backend->dirty = false;
-
-               $session->set( 1, 'one' );
-               $this->assertFalse( $backend->dirty );
-
-               $this->assertTrue( $session->exists( 'foo' ) );
-               $this->assertTrue( $session->exists( 1 ) );
-               $this->assertFalse( $session->exists( 'null' ) );
-               $this->assertFalse( $session->exists( 100 ) );
-               $this->assertFalse( $backend->dirty );
-
-               $session->remove( 'foo' );
-               $this->assertArrayNotHasKey( 'foo', $backend->data );
-               $this->assertTrue( $backend->dirty );
-               $backend->dirty = false;
-               $session->remove( 1 );
-               $this->assertArrayNotHasKey( 1, $backend->data );
-               $this->assertTrue( $backend->dirty );
-               $backend->dirty = false;
-
-               $session->remove( 101 );
-               $this->assertFalse( $backend->dirty );
-
-               $backend->data = array( 'a', 'b', '?' => 'c' );
-               $this->assertSame( 3, $session->count() );
-               $this->assertSame( 3, count( $session ) );
-               $this->assertFalse( $backend->dirty );
-
-               $data = array();
-               foreach ( $session as $key => $value ) {
-                       $data[$key] = $value;
-               }
-               $this->assertEquals( $backend->data, $data );
-               $this->assertFalse( $backend->dirty );
-
-               $this->assertEquals( $backend->data, iterator_to_array( $session ) );
-               $this->assertFalse( $backend->dirty );
-       }
-
-       public function testClear() {
-               $session = TestUtils::getDummySession();
-               $priv = \TestingAccessWrapper::newFromObject( $session );
-
-               $backend = $this->getMock(
-                       'MediaWiki\\Session\\DummySessionBackend', array( 'canSetUser', 'setUser', 'save' )
-               );
-               $backend->expects( $this->once() )->method( 'canSetUser' )
-                       ->will( $this->returnValue( true ) );
-               $backend->expects( $this->once() )->method( 'setUser' )
-                       ->with( $this->callback( function ( $user ) {
-                               return $user instanceof User && $user->isAnon();
-                       } ) );
-               $backend->expects( $this->once() )->method( 'save' );
-               $priv->backend = $backend;
-               $session->clear();
-               $this->assertSame( array(), $backend->data );
-               $this->assertTrue( $backend->dirty );
-
-               $backend = $this->getMock(
-                       'MediaWiki\\Session\\DummySessionBackend', array( 'canSetUser', 'setUser', 'save' )
-               );
-               $backend->data = array();
-               $backend->expects( $this->once() )->method( 'canSetUser' )
-                       ->will( $this->returnValue( true ) );
-               $backend->expects( $this->once() )->method( 'setUser' )
-                       ->with( $this->callback( function ( $user ) {
-                               return $user instanceof User && $user->isAnon();
-                       } ) );
-               $backend->expects( $this->once() )->method( 'save' );
-               $priv->backend = $backend;
-               $session->clear();
-               $this->assertFalse( $backend->dirty );
-
-               $backend = $this->getMock(
-                       'MediaWiki\\Session\\DummySessionBackend', array( 'canSetUser', 'setUser', 'save' )
-               );
-               $backend->expects( $this->once() )->method( 'canSetUser' )
-                       ->will( $this->returnValue( false ) );
-               $backend->expects( $this->never() )->method( 'setUser' );
-               $backend->expects( $this->once() )->method( 'save' );
-               $priv->backend = $backend;
-               $session->clear();
-               $this->assertSame( array(), $backend->data );
-               $this->assertTrue( $backend->dirty );
-       }
-
-}
diff --git a/tests/phpunit/includes/session/TestBagOStuff.php b/tests/phpunit/includes/session/TestBagOStuff.php
deleted file mode 100644 (file)
index e674e7b..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-/**
- * BagOStuff with utility functions for MediaWiki\\Session\\* testing
- */
-class TestBagOStuff extends \HashBagOStuff {
-
-       /**
-        * @param string $id Session ID
-        * @param array $data Session data
-        * @param int $expiry Expiry
-        * @param User $user User for metadata
-        */
-       public function setSessionData( $id, array $data, $expiry = 0, User $user = null ) {
-               $this->setSession( $id, array( 'data' => $data ), $expiry, $user );
-       }
-
-       /**
-        * @param string $id Session ID
-        * @param array $metadata Session metadata
-        * @param int $expiry Expiry
-        */
-       public function setSessionMeta( $id, array $metadata, $expiry = 0 ) {
-               $this->setSession( $id, array( 'metadata' => $metadata ), $expiry );
-       }
-
-       /**
-        * @param string $id Session ID
-        * @param array $blob Session metadata and data
-        * @param int $expiry Expiry
-        * @param User $user User for metadata
-        */
-       public function setSession( $id, array $blob, $expiry = 0, User $user = null ) {
-               $blob += array(
-                       'data' => array(),
-                       'metadata' => array(),
-               );
-               $blob['metadata'] += array(
-                       'userId' => $user ? $user->getId() : 0,
-                       'userName' => $user ? $user->getName() : null,
-                       'userToken' => $user ? $user->getToken( true ) : null,
-                       'provider' => 'DummySessionProvider',
-               );
-
-               $this->setRawSession( $id, $blob, $expiry, $user );
-       }
-
-       /**
-        * @param string $id Session ID
-        * @param array|mixed $blob Session metadata and data
-        * @param int $expiry Expiry
-        */
-       public function setRawSession( $id, $blob, $expiry = 0 ) {
-               if ( $expiry <= 0 ) {
-                       $expiry = \RequestContext::getMain()->getConfig()->get( 'ObjectCacheSessionExpiry' );
-               }
-
-               $this->set( wfMemcKey( 'MWSession', $id ), $blob, $expiry );
-       }
-
-       /**
-        * @param string $id Session ID
-        * @return mixed
-        */
-       public function getSession( $id ) {
-               return $this->get( wfMemcKey( 'MWSession', $id ) );
-       }
-
-       /**
-        * @param string $id Session ID
-        */
-       public function deleteSession( $id ) {
-               $this->delete( wfMemcKey( 'MWSession', $id ) );
-       }
-
-}
diff --git a/tests/phpunit/includes/session/TestUtils.php b/tests/phpunit/includes/session/TestUtils.php
deleted file mode 100644 (file)
index 1619983..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-/**
- * Utility functions for Session unit tests
- */
-class TestUtils {
-
-       /**
-        * Override the singleton for unit testing
-        * @param SessionManager|null $manager
-        * @return \\ScopedCallback|null
-        */
-       public static function setSessionManagerSingleton( SessionManager $manager = null ) {
-               session_write_close();
-
-               $rInstance = new \ReflectionProperty(
-                       'MediaWiki\\Session\\SessionManager', 'instance'
-               );
-               $rInstance->setAccessible( true );
-               $rGlobalSession = new \ReflectionProperty(
-                       'MediaWiki\\Session\\SessionManager', 'globalSession'
-               );
-               $rGlobalSession->setAccessible( true );
-               $rGlobalSessionRequest = new \ReflectionProperty(
-                       'MediaWiki\\Session\\SessionManager', 'globalSessionRequest'
-               );
-               $rGlobalSessionRequest->setAccessible( true );
-
-               $oldInstance = $rInstance->getValue();
-
-               $reset = array(
-                       array( $rInstance, $oldInstance ),
-                       array( $rGlobalSession, $rGlobalSession->getValue() ),
-                       array( $rGlobalSessionRequest, $rGlobalSessionRequest->getValue() ),
-               );
-
-               $rInstance->setValue( $manager );
-               $rGlobalSession->setValue( null );
-               $rGlobalSessionRequest->setValue( null );
-               if ( $manager && PHPSessionHandler::isInstalled() ) {
-                       PHPSessionHandler::install( $manager );
-               }
-
-               return new \ScopedCallback( function () use ( &$reset, $oldInstance ) {
-                       foreach ( $reset as &$arr ) {
-                               $arr[0]->setValue( $arr[1] );
-                       }
-                       if ( $oldInstance && PHPSessionHandler::isInstalled() ) {
-                               PHPSessionHandler::install( $oldInstance );
-                       }
-               } );
-       }
-
-       /**
-        * If you need a SessionBackend for testing but don't want to create a real
-        * one, use this.
-        * @return SessionBackend Unconfigured! Use reflection to set any private
-        *  fields necessary.
-        */
-       public static function getDummySessionBackend() {
-               $rc = new \ReflectionClass( 'MediaWiki\\Session\\SessionBackend' );
-               if ( !method_exists( $rc, 'newInstanceWithoutConstructor' ) ) {
-                       \PHPUnit_Framework_Assert::markTestSkipped(
-                               'ReflectionClass::newInstanceWithoutConstructor isn\'t available'
-                       );
-               }
-
-               return $rc->newInstanceWithoutConstructor();
-       }
-
-       /**
-        * If you need a Session for testing but don't want to create a backend to
-        * construct one, use this.
-        * @param object $backend Object to serve as the SessionBackend
-        * @param int $index Index
-        * @return Session
-        */
-       public static function getDummySession( $backend = null, $index = -1 ) {
-               $rc = new \ReflectionClass( 'MediaWiki\\Session\\Session' );
-               if ( !method_exists( $rc, 'newInstanceWithoutConstructor' ) ) {
-                       \PHPUnit_Framework_Assert::markTestSkipped(
-                               'ReflectionClass::newInstanceWithoutConstructor isn\'t available'
-                       );
-               }
-
-               if ( $backend === null ) {
-                       $backend = new DummySessionBackend;
-               }
-
-               $session = $rc->newInstanceWithoutConstructor();
-               $priv = \TestingAccessWrapper::newFromObject( $session );
-               $priv->backend = $backend;
-               $priv->index = $index;
-               return $session;
-       }
-
-}
diff --git a/tests/phpunit/includes/session/UserInfoTest.php b/tests/phpunit/includes/session/UserInfoTest.php
deleted file mode 100644 (file)
index 121bb72..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-use MediaWikiTestCase;
-use User;
-
-/**
- * @group Session
- * @group Database
- * @covers MediaWiki\Session\UserInfo
- */
-class UserInfoTest extends MediaWikiTestCase {
-
-       public function testNewAnonymous() {
-               $userinfo = UserInfo::newAnonymous();
-
-               $this->assertTrue( $userinfo->isAnon() );
-               $this->assertTrue( $userinfo->isVerified() );
-               $this->assertSame( 0, $userinfo->getId() );
-               $this->assertSame( null, $userinfo->getName() );
-               $this->assertSame( null, $userinfo->getToken() );
-               $this->assertNotNull( $userinfo->getUser() );
-               $this->assertSame( $userinfo, $userinfo->verified() );
-               $this->assertSame( '<anon>', (string)$userinfo );
-       }
-
-       public function testNewFromId() {
-               $id = wfGetDB( DB_MASTER )->selectField( 'user', 'MAX(user_id)' ) + 1;
-               try {
-                       UserInfo::newFromId( $id );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid ID', $ex->getMessage() );
-               }
-
-               $user = User::newFromName( 'UTSysop' );
-               $userinfo = UserInfo::newFromId( $user->getId() );
-               $this->assertFalse( $userinfo->isAnon() );
-               $this->assertFalse( $userinfo->isVerified() );
-               $this->assertSame( $user->getId(), $userinfo->getId() );
-               $this->assertSame( $user->getName(), $userinfo->getName() );
-               $this->assertSame( $user->getToken( true ), $userinfo->getToken() );
-               $this->assertInstanceOf( 'User', $userinfo->getUser() );
-               $userinfo2 = $userinfo->verified();
-               $this->assertNotSame( $userinfo2, $userinfo );
-               $this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
-
-               $this->assertFalse( $userinfo2->isAnon() );
-               $this->assertTrue( $userinfo2->isVerified() );
-               $this->assertSame( $user->getId(), $userinfo2->getId() );
-               $this->assertSame( $user->getName(), $userinfo2->getName() );
-               $this->assertSame( $user->getToken( true ), $userinfo2->getToken() );
-               $this->assertInstanceOf( 'User', $userinfo2->getUser() );
-               $this->assertSame( $userinfo2, $userinfo2->verified() );
-               $this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
-
-               $userinfo = UserInfo::newFromId( $user->getId(), true );
-               $this->assertTrue( $userinfo->isVerified() );
-               $this->assertSame( $userinfo, $userinfo->verified() );
-       }
-
-       public function testNewFromName() {
-               try {
-                       UserInfo::newFromName( '<bad name>' );
-                       $this->fail( 'Expected exception not thrown' );
-               } catch ( \InvalidArgumentException $ex ) {
-                       $this->assertSame( 'Invalid user name', $ex->getMessage() );
-               }
-
-               // User name that exists
-               $user = User::newFromName( 'UTSysop' );
-               $userinfo = UserInfo::newFromName( $user->getName() );
-               $this->assertFalse( $userinfo->isAnon() );
-               $this->assertFalse( $userinfo->isVerified() );
-               $this->assertSame( $user->getId(), $userinfo->getId() );
-               $this->assertSame( $user->getName(), $userinfo->getName() );
-               $this->assertSame( $user->getToken( true ), $userinfo->getToken() );
-               $this->assertInstanceOf( 'User', $userinfo->getUser() );
-               $userinfo2 = $userinfo->verified();
-               $this->assertNotSame( $userinfo2, $userinfo );
-               $this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
-
-               $this->assertFalse( $userinfo2->isAnon() );
-               $this->assertTrue( $userinfo2->isVerified() );
-               $this->assertSame( $user->getId(), $userinfo2->getId() );
-               $this->assertSame( $user->getName(), $userinfo2->getName() );
-               $this->assertSame( $user->getToken( true ), $userinfo2->getToken() );
-               $this->assertInstanceOf( 'User', $userinfo2->getUser() );
-               $this->assertSame( $userinfo2, $userinfo2->verified() );
-               $this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
-
-               $userinfo = UserInfo::newFromName( $user->getName(), true );
-               $this->assertTrue( $userinfo->isVerified() );
-               $this->assertSame( $userinfo, $userinfo->verified() );
-
-               // User name that does not exist should still be non-anon
-               $user = User::newFromName( 'DoesNotExist' );
-               $this->assertSame( 0, $user->getId(), 'sanity check' );
-               $userinfo = UserInfo::newFromName( $user->getName() );
-               $this->assertFalse( $userinfo->isAnon() );
-               $this->assertFalse( $userinfo->isVerified() );
-               $this->assertSame( $user->getId(), $userinfo->getId() );
-               $this->assertSame( $user->getName(), $userinfo->getName() );
-               $this->assertSame( null, $userinfo->getToken() );
-               $this->assertInstanceOf( 'User', $userinfo->getUser() );
-               $userinfo2 = $userinfo->verified();
-               $this->assertNotSame( $userinfo2, $userinfo );
-               $this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
-
-               $this->assertFalse( $userinfo2->isAnon() );
-               $this->assertTrue( $userinfo2->isVerified() );
-               $this->assertSame( $user->getId(), $userinfo2->getId() );
-               $this->assertSame( $user->getName(), $userinfo2->getName() );
-               $this->assertSame( null, $userinfo2->getToken() );
-               $this->assertInstanceOf( 'User', $userinfo2->getUser() );
-               $this->assertSame( $userinfo2, $userinfo2->verified() );
-               $this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
-
-               $userinfo = UserInfo::newFromName( $user->getName(), true );
-               $this->assertTrue( $userinfo->isVerified() );
-               $this->assertSame( $userinfo, $userinfo->verified() );
-       }
-
-       public function testNewFromUser() {
-               // User that exists
-               $user = User::newFromName( 'UTSysop' );
-               $userinfo = UserInfo::newFromUser( $user );
-               $this->assertFalse( $userinfo->isAnon() );
-               $this->assertFalse( $userinfo->isVerified() );
-               $this->assertSame( $user->getId(), $userinfo->getId() );
-               $this->assertSame( $user->getName(), $userinfo->getName() );
-               $this->assertSame( $user->getToken( true ), $userinfo->getToken() );
-               $this->assertSame( $user, $userinfo->getUser() );
-               $userinfo2 = $userinfo->verified();
-               $this->assertNotSame( $userinfo2, $userinfo );
-               $this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
-
-               $this->assertFalse( $userinfo2->isAnon() );
-               $this->assertTrue( $userinfo2->isVerified() );
-               $this->assertSame( $user->getId(), $userinfo2->getId() );
-               $this->assertSame( $user->getName(), $userinfo2->getName() );
-               $this->assertSame( $user->getToken( true ), $userinfo2->getToken() );
-               $this->assertSame( $user, $userinfo2->getUser() );
-               $this->assertSame( $userinfo2, $userinfo2->verified() );
-               $this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
-
-               $userinfo = UserInfo::newFromUser( $user, true );
-               $this->assertTrue( $userinfo->isVerified() );
-               $this->assertSame( $userinfo, $userinfo->verified() );
-
-               // User name that does not exist should still be non-anon
-               $user = User::newFromName( 'DoesNotExist' );
-               $this->assertSame( 0, $user->getId(), 'sanity check' );
-               $userinfo = UserInfo::newFromUser( $user );
-               $this->assertFalse( $userinfo->isAnon() );
-               $this->assertFalse( $userinfo->isVerified() );
-               $this->assertSame( $user->getId(), $userinfo->getId() );
-               $this->assertSame( $user->getName(), $userinfo->getName() );
-               $this->assertSame( null, $userinfo->getToken() );
-               $this->assertSame( $user, $userinfo->getUser() );
-               $userinfo2 = $userinfo->verified();
-               $this->assertNotSame( $userinfo2, $userinfo );
-               $this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
-
-               $this->assertFalse( $userinfo2->isAnon() );
-               $this->assertTrue( $userinfo2->isVerified() );
-               $this->assertSame( $user->getId(), $userinfo2->getId() );
-               $this->assertSame( $user->getName(), $userinfo2->getName() );
-               $this->assertSame( null, $userinfo2->getToken() );
-               $this->assertSame( $user, $userinfo2->getUser() );
-               $this->assertSame( $userinfo2, $userinfo2->verified() );
-               $this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
-
-               $userinfo = UserInfo::newFromUser( $user, true );
-               $this->assertTrue( $userinfo->isVerified() );
-               $this->assertSame( $userinfo, $userinfo->verified() );
-
-               // Anonymous user gives anon
-               $userinfo = UserInfo::newFromUser( new User, false );
-               $this->assertTrue( $userinfo->isVerified() );
-               $this->assertSame( 0, $userinfo->getId() );
-               $this->assertSame( null, $userinfo->getName() );
-       }
-
-}
index 1d4f5e5..7bfb861 100644 (file)
@@ -2,7 +2,7 @@
 
 /**
  * @licence GNU GPL v2+
- * @author Adam Shorland
+ * @author Addshore
  *
  * @covers SpecialBlankpage
  */
index 9c7b0f0..db8ae0f 100644 (file)
@@ -8,7 +8,7 @@
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  * @author Daniel Kinzler
- * @author Adam Shorland
+ * @author Addshore
  * @author Thiemo Mättig
  */
 abstract class SpecialPageTestBase extends MediaWikiTestCase {
index fb14c65..7834d9b 100644 (file)
@@ -15,6 +15,7 @@ class UploadFromUrlTest extends ApiTestCase {
                        'wgEnableUploads' => true,
                        'wgAllowCopyUploads' => true,
                ) );
+               wfSetupSession();
 
                if ( wfLocalFile( 'UploadFromUrlTest.png' )->exists() ) {
                        $this->deleteFile( 'UploadFromUrlTest.png' );
@@ -24,12 +25,15 @@ class UploadFromUrlTest extends ApiTestCase {
        protected function doApiRequest( array $params, array $unused = null,
                $appendModule = false, User $user = null
        ) {
-               global $wgRequest;
+               $sessionId = session_id();
+               session_write_close();
 
-               $req = new FauxRequest( $params, true, $wgRequest->getSession() );
+               $req = new FauxRequest( $params, true, $_SESSION );
                $module = new ApiMain( $req, true );
                $module->execute();
 
+               wfSetupSession( $sessionId );
+
                return array(
                        $module->getResult()->getResultData( null, array( 'Strip' => 'all' ) ),
                        $req
diff --git a/tests/phpunit/includes/user/BotPasswordTest.php b/tests/phpunit/includes/user/BotPasswordTest.php
deleted file mode 100644 (file)
index c118803..0000000
+++ /dev/null
@@ -1,379 +0,0 @@
-<?php
-
-use MediaWiki\Session\SessionManager;
-
-/**
- * @covers BotPassword
- * @group Database
- */
-class BotPasswordTest extends MediaWikiTestCase {
-       protected function setUp() {
-               parent::setUp();
-
-               $this->setMwGlobals( array(
-                       'wgEnableBotPasswords' => true,
-                       'wgBotPasswordsDatabase' => false,
-                       'wgCentralIdLookupProvider' => 'BotPasswordTest OkMock',
-                       'wgGrantPermissions' => array(
-                               'test' => array( 'read' => true ),
-                       ),
-                       'wgUserrightsInterwikiDelimiter' => '@',
-               ) );
-
-               $mock1 = $this->getMockForAbstractClass( 'CentralIdLookup' );
-               $mock1->expects( $this->any() )->method( 'isAttached' )
-                       ->will( $this->returnValue( true ) );
-               $mock1->expects( $this->any() )->method( 'lookupUserNames' )
-                       ->will( $this->returnValue( array( 'UTSysop' => 42, 'UTDummy' => 43, 'UTInvalid' => 0 ) ) );
-               $mock1->expects( $this->never() )->method( 'lookupCentralIds' );
-
-               $mock2 = $this->getMockForAbstractClass( 'CentralIdLookup' );
-               $mock2->expects( $this->any() )->method( 'isAttached' )
-                       ->will( $this->returnValue( false ) );
-               $mock2->expects( $this->any() )->method( 'lookupUserNames' )
-                       ->will( $this->returnArgument( 0 ) );
-               $mock2->expects( $this->never() )->method( 'lookupCentralIds' );
-
-               $this->mergeMwGlobalArrayValue( 'wgCentralIdLookupProviders', array(
-                       'BotPasswordTest OkMock' => array( 'factory' => function () use ( $mock1 ) {
-                               return $mock1;
-                       } ),
-                       'BotPasswordTest FailMock' => array( 'factory' => function () use ( $mock2 ) {
-                               return $mock2;
-                       } ),
-               ) );
-
-               CentralIdLookup::resetCache();
-       }
-
-       public function addDBData() {
-               $passwordFactory = new \PasswordFactory();
-               $passwordFactory->init( \RequestContext::getMain()->getConfig() );
-               // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
-               $passwordFactory->setDefaultType( 'A' );
-               $pwhash = $passwordFactory->newFromPlaintext( 'foobaz' );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete(
-                       'bot_passwords',
-                       array( 'bp_user' => array( 42, 43 ), 'bp_app_id' => 'BotPassword' ),
-                       __METHOD__
-               );
-               $dbw->insert(
-                       'bot_passwords',
-                       array(
-                               array(
-                                       'bp_user' => 42,
-                                       'bp_app_id' => 'BotPassword',
-                                       'bp_password' => $pwhash->toString(),
-                                       'bp_token' => 'token!',
-                                       'bp_restrictions' => '{"IPAddresses":["127.0.0.0/8"]}',
-                                       'bp_grants' => '["test"]',
-                               ),
-                               array(
-                                       'bp_user' => 43,
-                                       'bp_app_id' => 'BotPassword',
-                                       'bp_password' => $pwhash->toString(),
-                                       'bp_token' => 'token!',
-                                       'bp_restrictions' => '{"IPAddresses":["127.0.0.0/8"]}',
-                                       'bp_grants' => '["test"]',
-                               ),
-                       ),
-                       __METHOD__
-               );
-       }
-
-       public function testBasics() {
-               $user = User::newFromName( 'UTSysop' );
-               $bp = BotPassword::newFromUser( $user, 'BotPassword' );
-               $this->assertInstanceOf( 'BotPassword', $bp );
-               $this->assertTrue( $bp->isSaved() );
-               $this->assertSame( 42, $bp->getUserCentralId() );
-               $this->assertSame( 'BotPassword', $bp->getAppId() );
-               $this->assertSame( 'token!', trim( $bp->getToken(), " \0" ) );
-               $this->assertEquals( '{"IPAddresses":["127.0.0.0/8"]}', $bp->getRestrictions()->toJson() );
-               $this->assertSame( array( 'test' ), $bp->getGrants() );
-
-               $this->assertNull( BotPassword::newFromUser( $user, 'DoesNotExist' ) );
-
-               $this->setMwGlobals( array(
-                       'wgCentralIdLookupProvider' => 'BotPasswordTest FailMock'
-               ) );
-               $this->assertNull( BotPassword::newFromUser( $user, 'BotPassword' ) );
-
-               $this->assertSame( '@', BotPassword::getSeparator() );
-               $this->setMwGlobals( array(
-                       'wgUserrightsInterwikiDelimiter' => '#',
-               ) );
-               $this->assertSame( '#', BotPassword::getSeparator() );
-       }
-
-       public function testUnsaved() {
-               $user = User::newFromName( 'UTSysop' );
-               $bp = BotPassword::newUnsaved( array(
-                       'user' => $user,
-                       'appId' => 'DoesNotExist'
-               ) );
-               $this->assertInstanceOf( 'BotPassword', $bp );
-               $this->assertFalse( $bp->isSaved() );
-               $this->assertSame( 42, $bp->getUserCentralId() );
-               $this->assertSame( 'DoesNotExist', $bp->getAppId() );
-               $this->assertEquals( MWRestrictions::newDefault(), $bp->getRestrictions() );
-               $this->assertSame( array(), $bp->getGrants() );
-
-               $bp = BotPassword::newUnsaved( array(
-                       'username' => 'UTDummy',
-                       'appId' => 'DoesNotExist2',
-                       'restrictions' => MWRestrictions::newFromJson( '{"IPAddresses":["127.0.0.0/8"]}' ),
-                       'grants' => array( 'test' ),
-               ) );
-               $this->assertInstanceOf( 'BotPassword', $bp );
-               $this->assertFalse( $bp->isSaved() );
-               $this->assertSame( 43, $bp->getUserCentralId() );
-               $this->assertSame( 'DoesNotExist2', $bp->getAppId() );
-               $this->assertEquals( '{"IPAddresses":["127.0.0.0/8"]}', $bp->getRestrictions()->toJson() );
-               $this->assertSame( array( 'test' ), $bp->getGrants() );
-
-               $user = User::newFromName( 'UTSysop' );
-               $bp = BotPassword::newUnsaved( array(
-                       'centralId' => 45,
-                       'appId' => 'DoesNotExist'
-               ) );
-               $this->assertInstanceOf( 'BotPassword', $bp );
-               $this->assertFalse( $bp->isSaved() );
-               $this->assertSame( 45, $bp->getUserCentralId() );
-               $this->assertSame( 'DoesNotExist', $bp->getAppId() );
-
-               $user = User::newFromName( 'UTSysop' );
-               $bp = BotPassword::newUnsaved( array(
-                       'user' => $user,
-                       'appId' => 'BotPassword'
-               ) );
-               $this->assertInstanceOf( 'BotPassword', $bp );
-               $this->assertFalse( $bp->isSaved() );
-
-               $this->assertNull( BotPassword::newUnsaved( array(
-                       'user' => $user,
-                       'appId' => '',
-               ) ) );
-               $this->assertNull( BotPassword::newUnsaved( array(
-                       'user' => $user,
-                       'appId' => str_repeat( 'X', BotPassword::APPID_MAXLENGTH + 1 ),
-               ) ) );
-               $this->assertNull( BotPassword::newUnsaved( array(
-                       'user' => 'UTSysop',
-                       'appId' => 'Ok',
-               ) ) );
-               $this->assertNull( BotPassword::newUnsaved( array(
-                       'username' => 'UTInvalid',
-                       'appId' => 'Ok',
-               ) ) );
-               $this->assertNull( BotPassword::newUnsaved( array(
-                       'appId' => 'Ok',
-               ) ) );
-       }
-
-       public function testGetPassword() {
-               $bp = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) );
-
-               $password = $bp->getPassword();
-               $this->assertInstanceOf( 'Password', $password );
-               $this->assertTrue( $password->equals( 'foobaz' ) );
-
-               $bp->centralId = 44;
-               $password = $bp->getPassword();
-               $this->assertInstanceOf( 'InvalidPassword', $password );
-
-               $bp = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) );
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->update(
-                       'bot_passwords',
-                       array( 'bp_password' => 'garbage' ),
-                       array( 'bp_user' => 42, 'bp_app_id' => 'BotPassword' ),
-                       __METHOD__
-               );
-               $password = $bp->getPassword();
-               $this->assertInstanceOf( 'InvalidPassword', $password );
-       }
-
-       public function testInvalidateAllPasswordsForUser() {
-               $bp1 = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) );
-               $bp2 = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 43, 'BotPassword' ) );
-
-               $this->assertNotInstanceOf( 'InvalidPassword', $bp1->getPassword(), 'sanity check' );
-               $this->assertNotInstanceOf( 'InvalidPassword', $bp2->getPassword(), 'sanity check' );
-               BotPassword::invalidateAllPasswordsForUser( 'UTSysop' );
-               $this->assertInstanceOf( 'InvalidPassword', $bp1->getPassword() );
-               $this->assertNotInstanceOf( 'InvalidPassword', $bp2->getPassword() );
-
-               $bp = TestingAccessWrapper::newFromObject( BotPassword::newFromCentralId( 42, 'BotPassword' ) );
-               $this->assertInstanceOf( 'InvalidPassword', $bp->getPassword() );
-       }
-
-       public function testRemoveAllPasswordsForUser() {
-               $this->assertNotNull( BotPassword::newFromCentralId( 42, 'BotPassword' ), 'sanity check' );
-               $this->assertNotNull( BotPassword::newFromCentralId( 43, 'BotPassword' ), 'sanity check' );
-
-               BotPassword::removeAllPasswordsForUser( 'UTSysop' );
-
-               $this->assertNull( BotPassword::newFromCentralId( 42, 'BotPassword' ) );
-               $this->assertNotNull( BotPassword::newFromCentralId( 43, 'BotPassword' ) );
-       }
-
-       public function testLogin() {
-               // Test failure when bot passwords aren't enabled
-               $this->setMwGlobals( 'wgEnableBotPasswords', false );
-               $status = BotPassword::login( 'UTSysop@BotPassword', 'foobaz', new FauxRequest );
-               $this->assertEquals( Status::newFatal( 'botpasswords-disabled' ), $status );
-               $this->setMwGlobals( 'wgEnableBotPasswords', true );
-
-               // Test failure when BotPasswordSessionProvider isn't configured
-               $manager = new SessionManager( array(
-                       'logger' => new Psr\Log\NullLogger,
-                       'store' => new EmptyBagOStuff,
-               ) );
-               $reset = MediaWiki\Session\TestUtils::setSessionManagerSingleton( $manager );
-               $this->assertNull(
-                       $manager->getProvider( 'MediaWiki\\Session\\BotPasswordSessionProvider' ),
-                       'sanity check'
-               );
-               $status = BotPassword::login( 'UTSysop@BotPassword', 'foobaz', new FauxRequest );
-               $this->assertEquals( Status::newFatal( 'botpasswords-no-provider' ), $status );
-               ScopedCallback::consume( $reset );
-
-               // Now configure BotPasswordSessionProvider for further tests...
-               $mainConfig = RequestContext::getMain()->getConfig();
-               $config = new HashConfig( array(
-                       'SessionProviders' => $mainConfig->get( 'SessionProviders' ) + array(
-                               'MediaWiki\\Session\\BotPasswordSessionProvider' => array(
-                                       'class' => 'MediaWiki\\Session\\BotPasswordSessionProvider',
-                                       'args' => array( array( 'priority' => 40 ) ),
-                               )
-                       ),
-               ) );
-               $manager = new SessionManager( array(
-                       'config' => new MultiConfig( array( $config, RequestContext::getMain()->getConfig() ) ),
-                       'logger' => new Psr\Log\NullLogger,
-                       'store' => new EmptyBagOStuff,
-               ) );
-               $reset = MediaWiki\Session\TestUtils::setSessionManagerSingleton( $manager );
-
-               // No "@"-thing in the username
-               $status = BotPassword::login( 'UTSysop', 'foobaz', new FauxRequest );
-               $this->assertEquals( Status::newFatal( 'botpasswords-invalid-name', '@' ), $status );
-
-               // No base user
-               $status = BotPassword::login( 'UTDummy@BotPassword', 'foobaz', new FauxRequest );
-               $this->assertEquals( Status::newFatal( 'nosuchuser', 'UTDummy' ), $status );
-
-               // No bot password
-               $status = BotPassword::login( 'UTSysop@DoesNotExist', 'foobaz', new FauxRequest );
-               $this->assertEquals(
-                       Status::newFatal( 'botpasswords-not-exist', 'UTSysop', 'DoesNotExist' ),
-                       $status
-               );
-
-               // Failed restriction
-               $request = $this->getMock( 'FauxRequest', array( 'getIP' ) );
-               $request->expects( $this->any() )->method( 'getIP' )
-                       ->will( $this->returnValue( '10.0.0.1' ) );
-               $status = BotPassword::login( 'UTSysop@BotPassword', 'foobaz', $request );
-               $this->assertEquals( Status::newFatal( 'botpasswords-restriction-failed' ), $status );
-
-               // Wrong password
-               $status = BotPassword::login( 'UTSysop@BotPassword', 'UTSysopPassword', new FauxRequest );
-               $this->assertEquals( Status::newFatal( 'wrongpassword' ), $status );
-
-               // Success!
-               $request = new FauxRequest;
-               $this->assertNotInstanceOf(
-                       'MediaWiki\\Session\\BotPasswordSessionProvider',
-                       $request->getSession()->getProvider(),
-                       'sanity check'
-               );
-               $status = BotPassword::login( 'UTSysop@BotPassword', 'foobaz', $request );
-               $this->assertInstanceOf( 'Status', $status );
-               $this->assertTrue( $status->isGood() );
-               $session = $status->getValue();
-               $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
-               $this->assertInstanceOf(
-                       'MediaWiki\\Session\\BotPasswordSessionProvider', $session->getProvider()
-               );
-               $this->assertSame( $session->getId(), $request->getSession()->getId() );
-
-               ScopedCallback::consume( $reset );
-       }
-
-       /**
-        * @dataProvider provideSave
-        * @param string|null $password
-        */
-       public function testSave( $password ) {
-               $passwordFactory = new \PasswordFactory();
-               $passwordFactory->init( \RequestContext::getMain()->getConfig() );
-               // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
-               $passwordFactory->setDefaultType( 'A' );
-
-               $bp = BotPassword::newUnsaved( array(
-                       'centralId' => 42,
-                       'appId' => 'TestSave',
-                       'restrictions' => MWRestrictions::newFromJson( '{"IPAddresses":["127.0.0.0/8"]}' ),
-                       'grants' => array( 'test' ),
-               ) );
-               $this->assertFalse( $bp->isSaved(), 'sanity check' );
-               $this->assertNull(
-                       BotPassword::newFromCentralId( 42, 'TestSave', BotPassword::READ_LATEST ), 'sanity check'
-               );
-
-               $pwhash = $password ? $passwordFactory->newFromPlaintext( $password ) : null;
-               $this->assertFalse( $bp->save( 'update', $pwhash ) );
-               $this->assertTrue( $bp->save( 'insert', $pwhash ) );
-               $bp2 = BotPassword::newFromCentralId( 42, 'TestSave', BotPassword::READ_LATEST );
-               $this->assertInstanceOf( 'BotPassword', $bp2 );
-               $this->assertEquals( $bp->getUserCentralId(), $bp2->getUserCentralId() );
-               $this->assertEquals( $bp->getAppId(), $bp2->getAppId() );
-               $this->assertEquals( $bp->getToken(), $bp2->getToken() );
-               $this->assertEquals( $bp->getRestrictions(), $bp2->getRestrictions() );
-               $this->assertEquals( $bp->getGrants(), $bp2->getGrants() );
-               $pw = TestingAccessWrapper::newFromObject( $bp )->getPassword();
-               if ( $password === null ) {
-                       $this->assertInstanceOf( 'InvalidPassword', $pw );
-               } else {
-                       $this->assertTrue( $pw->equals( $password ) );
-               }
-
-               $token = $bp->getToken();
-               $this->assertFalse( $bp->save( 'insert' ) );
-               $this->assertTrue( $bp->save( 'update' ) );
-               $this->assertNotEquals( $token, $bp->getToken() );
-               $bp2 = BotPassword::newFromCentralId( 42, 'TestSave', BotPassword::READ_LATEST );
-               $this->assertInstanceOf( 'BotPassword', $bp2 );
-               $this->assertEquals( $bp->getToken(), $bp2->getToken() );
-               $pw = TestingAccessWrapper::newFromObject( $bp )->getPassword();
-               if ( $password === null ) {
-                       $this->assertInstanceOf( 'InvalidPassword', $pw );
-               } else {
-                       $this->assertTrue( $pw->equals( $password ) );
-               }
-
-               $pwhash = $passwordFactory->newFromPlaintext( 'XXX' );
-               $token = $bp->getToken();
-               $this->assertTrue( $bp->save( 'update', $pwhash ) );
-               $this->assertNotEquals( $token, $bp->getToken() );
-               $pw = TestingAccessWrapper::newFromObject( $bp )->getPassword();
-               $this->assertTrue( $pw->equals( 'XXX' ) );
-
-               $this->assertTrue( $bp->delete() );
-               $this->assertFalse( $bp->isSaved() );
-               $this->assertNull( BotPassword::newFromCentralId( 42, 'TestSave', BotPassword::READ_LATEST ) );
-
-               $this->assertFalse( $bp->save( 'foobar' ) );
-       }
-
-       public static function provideSave() {
-               return array(
-                       array( null ),
-                       array( 'foobar' ),
-               );
-       }
-}
index 469ad29..4bc7765 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 /**
- * @author Adam Shorland
+ * @author Addshore
  * @covers UserArrayFromResult
  */
 class UserArrayFromResultTest extends MediaWikiTestCase {
index aadc5c9..45c4b8c 100644 (file)
@@ -446,4 +446,89 @@ class UserTest extends MediaWikiTestCase {
                $this->assertGreaterThan(
                        $touched, $user->getDBTouched(), "user_touched increased with casOnTouched() #2" );
        }
+
+       public static function setExtendedLoginCookieDataProvider() {
+               $data = array();
+               $now = time();
+
+               $secondsInDay = 86400;
+
+               // Arbitrary durations, in units of days, to ensure it chooses the
+               // right one.  There is a 5-minute grace period (see testSetExtendedLoginCookie)
+               // to work around slow tests, since we're not currently mocking time() for PHP.
+
+               $durationOne = $secondsInDay * 5;
+               $durationTwo = $secondsInDay * 29;
+               $durationThree = $secondsInDay * 17;
+
+               // If $wgExtendedLoginCookieExpiration is null, then the expiry passed to
+               // set cookie is time() + $wgCookieExpiration
+               $data[] = array(
+                       null,
+                       $durationOne,
+                       $now + $durationOne,
+               );
+
+               // If $wgExtendedLoginCookieExpiration isn't null, then the expiry passed to
+               // set cookie is $now + $wgExtendedLoginCookieExpiration
+               $data[] = array(
+                       $durationTwo,
+                       $durationThree,
+                       $now + $durationTwo,
+               );
+
+               return $data;
+       }
+
+       /**
+        * @dataProvider setExtendedLoginCookieDataProvider
+        * @covers User::getRequest
+        * @covers User::setCookie
+        * @backupGlobals enabled
+        */
+       public function testSetExtendedLoginCookie(
+               $extendedLoginCookieExpiration,
+               $cookieExpiration,
+               $expectedExpiry
+       ) {
+               $this->setMwGlobals( array(
+                       'wgExtendedLoginCookieExpiration' => $extendedLoginCookieExpiration,
+                       'wgCookieExpiration' => $cookieExpiration,
+               ) );
+
+               $response = $this->getMock( 'WebResponse' );
+               $setcookieSpy = $this->any();
+               $response->expects( $setcookieSpy )
+                       ->method( 'setcookie' );
+
+               $request = new MockWebRequest( $response );
+               $user = new UserProxy( User::newFromSession( $request ) );
+               $user->setExtendedLoginCookie( 'name', 'value', true );
+
+               $setcookieInvocations = $setcookieSpy->getInvocations();
+               $setcookieInvocation = end( $setcookieInvocations );
+               $actualExpiry = $setcookieInvocation->parameters[2];
+
+               // TODO: ± 600 seconds compensates for
+               // slow-running tests. However, the dependency on the time
+               // function should be removed.  This requires some way
+               // to mock/isolate User->setExtendedLoginCookie's call to time()
+               $this->assertEquals( $expectedExpiry, $actualExpiry, '', 600 );
+       }
+}
+
+class UserProxy extends User {
+
+       /**
+        * @var User
+        */
+       protected $user;
+
+       public function __construct( User $user ) {
+               $this->user = $user;
+       }
+
+       public function setExtendedLoginCookie( $name, $value, $secure ) {
+               $this->user->setExtendedLoginCookie( $name, $value, $secure );
+       }
 }
diff --git a/tests/phpunit/mocks/session/DummySessionBackend.php b/tests/phpunit/mocks/session/DummySessionBackend.php
deleted file mode 100644 (file)
index f96e61c..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-namespace MediaWiki\Session;
-
-/**
- * Dummy session backend
- *
- * This isn't a real backend, but implements some methods that SessionBackend
- * does so tests can run.
- */
-class DummySessionBackend {
-       public $data = array(
-               'foo' => 1,
-               'bar' => 2,
-               0 => 'zero',
-       );
-       public $dirty = false;
-
-       public function &getData() {
-               return $this->data;
-       }
-
-       public function dirty() {
-               $this->dirty = true;
-       }
-
-       public function deregisterSession( $index ) {
-       }
-}
diff --git a/tests/phpunit/mocks/session/DummySessionProvider.php b/tests/phpunit/mocks/session/DummySessionProvider.php
deleted file mode 100644 (file)
index 4468191..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-use MediaWiki\Session\SessionProvider;
-use MediaWiki\Session\SessionInfo;
-use MediaWiki\Session\SessionBackend;
-use MediaWiki\Session\UserInfo;
-
-/**
- * Dummy session provider
- *
- * An implementation of a session provider that doesn't actually do anything.
- */
-class DummySessionProvider extends SessionProvider {
-
-       const ID = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-
-       public function provideSessionInfo( WebRequest $request ) {
-               return new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'provider' => $this,
-                       'id' => self::ID,
-                       'persisted' => true,
-                       'userInfo' => UserInfo::newAnonymous(),
-               ) );
-       }
-
-       public function newSessionInfo( $id = null ) {
-               return new SessionInfo( SessionInfo::MIN_PRIORITY, array(
-                       'id' => $id,
-                       'idIsSafe' => true,
-                       'provider' => $this,
-                       'persisted' => false,
-                       'userInfo' => UserInfo::newAnonymous(),
-               ) );
-       }
-
-       public function persistsSessionId() {
-               return true;
-       }
-
-       public function canChangeUser() {
-               return $this->persistsSessionId();
-       }
-
-       public function persistSession( SessionBackend $session, WebRequest $request ) {
-       }
-
-       public function unpersistSession( WebRequest $request ) {
-       }
-
-       public function immutableSessionCouldExistForUser( $user ) {
-               return false;
-       }
-
-       public function preventImmutableSessionsForUser( $user ) {
-       }
-
-       public function suggestLoginUsername( WebRequest $request ) {
-               return $request->getCookie( 'UserName' );
-       }
-
-}
index 0ae0b21..f080593 100755 (executable)
@@ -74,7 +74,6 @@ class PHPUnitMaintClass extends Maintenance {
                global $wgLanguageConverterCacheType, $wgUseDatabaseMessages;
                global $wgLocaltimezone, $wgLocalisationCacheConf;
                global $wgDevelopmentWarnings;
-               global $wgSessionProviders;
                global $wgJobTypeConf;
 
                // Inject test autoloader
@@ -110,19 +109,6 @@ class PHPUnitMaintClass extends Maintenance {
 
                $wgLocalisationCacheConf['storeClass'] = 'LCStoreNull';
 
-               // Generic MediaWiki\Session\SessionManager configuration for tests
-               // We use CookieSessionProvider because things might be expecting
-               // cookies to show up in a FauxRequest somewhere.
-               $wgSessionProviders = array(
-                       array(
-                               'class' => 'MediaWiki\\Session\\CookieSessionProvider',
-                               'args' => array( array(
-                                       'priority' => 30,
-                                       'callUserSetCookiesHook' => true,
-                               ) ),
-                       ),
-               );
-
                // Bug 44192 Do not attempt to send a real e-mail
                Hooks::clear( 'AlternateUserMailer' );
                Hooks::register(
index 64def91..8887499 100644 (file)
@@ -2,7 +2,7 @@
 
 /**
  * @covers MediaWikiTestCase
- * @author Adam Shorland
+ * @author Addshore
  */
 class MediaWikiTestCaseTest extends MediaWikiTestCase {
 
index ed3f2cd..fe5530b 100644 (file)
                } );
        } );
 
+       QUnit.test( 'mw.loader.implement( empty )', 1, function ( assert ) {
+               mw.loader.implement( 'test.empty' );
+               assert.strictEqual( mw.loader.getState( 'test.empty' ), 'ready' );
+       } );
+
        QUnit.test( 'mw.loader with broken indirect dependency', 4, function ( assert ) {
                // don't emit an error event
                this.sandbox.stub( mw, 'track' );