├── .github └── workflows │ └── main.yml ├── .gitignore ├── .gitmodules ├── .phpcs.xml ├── .scrutinizer.yml ├── .travis.yml ├── COPYING ├── DefaultSettings.php ├── Makefile ├── README.md ├── RELEASE-NOTES.md ├── SemanticInterlanguageLinks.php ├── codecov.yml ├── composer.json ├── docs ├── 01-parser-function.md ├── 02-ask-queries.md ├── 09-notes.md ├── ISSUE_TEMPLATE.md ├── PULL_REQUEST_TEMPLATE.md └── README.md ├── extension.json ├── i18n ├── SemanticInterlanguageLinks.magic.php ├── ar.json ├── ast.json ├── be-tarask.json ├── bn.json ├── br.json ├── ca.json ├── ce.json ├── cs.json ├── de.json ├── en.json ├── eo.json ├── es.json ├── eu.json ├── fa.json ├── fi.json ├── fr.json ├── gl.json ├── he.json ├── hi.json ├── ia.json ├── id.json ├── it.json ├── ja.json ├── ko.json ├── ksh.json ├── ku-latn.json ├── lb.json ├── li.json ├── lt.json ├── mg.json ├── mk.json ├── mr.json ├── nb.json ├── nl.json ├── oc.json ├── pam.json ├── pl.json ├── ps.json ├── pt-br.json ├── pt.json ├── qqq.json ├── roa-tara.json ├── ru.json ├── sd.json ├── si.json ├── sl.json ├── sv.json ├── tg-cyrl.json ├── tr.json ├── uk.json ├── vo.json ├── yi.json ├── zh-hans.json └── zh-hant.json ├── phpunit.xml.dist ├── src ├── AnnotatedLanguageParserFunction.php ├── CacheKeyProvider.php ├── Category │ ├── LanguageFilterCategoryPage.php │ └── LanguageFilterCategoryViewer.php ├── HookRegistry.php ├── InterlanguageLink.php ├── InterlanguageLinkParserFunction.php ├── InterlanguageLinksLookup.php ├── InterlanguageListParserFunction.php ├── InterwikiLanguageLink.php ├── InterwikiLanguageLinkFetcher.php ├── LanguageLinkAnnotator.php ├── LanguageTargetLinksCache.php ├── PageContentLanguageDbModifier.php ├── PageContentLanguageOnTheFlyModifier.php ├── ParserFunctionFactory.php ├── PropertyRegistry.php ├── Search │ ├── LanguageResultMatchFinder.php │ ├── MappedSearchResultSet.php │ └── SearchResultModifier.php ├── SiteLanguageLinkModifier.php └── SiteLanguageLinksParserOutputAppender.php └── tests ├── bootstrap.php ├── phpunit ├── Integration │ ├── I18nJsonFileIntegrityTest.php │ ├── LanguageFilterCategoryViewerIntegrationTest.php │ └── ParserFunctionIntegrationTest.php └── Unit │ ├── AnnotatedLanguageParserFunctionTest.php │ ├── CacheKeyProviderTest.php │ ├── Category │ ├── LanguageFilterCategoryPageTest.php │ └── LanguageFilterCategoryViewerTest.php │ ├── HookRegistryTest.php │ ├── InterlanguageLinkParserFunctionTest.php │ ├── InterlanguageLinkTest.php │ ├── InterlanguageLinksLookupTest.php │ ├── InterlanguageListParserFunctionTest.php │ ├── InterwikiLanguageLinkFetcherTest.php │ ├── InterwikiLanguageLinkTest.php │ ├── LanguageLinkAnnotatorTest.php │ ├── LanguageTargetLinksCacheTest.php │ ├── PageContentLanguageDbModifierTest.php │ ├── PageContentLanguageOnTheFlyModifierTest.php │ ├── ParserFunctionFactoryTest.php │ ├── PropertyRegistryTest.php │ ├── Search │ ├── LanguageResultMatchFinderTest.php │ ├── MappedSearchResultSetTest.php │ └── SearchResultModifierTest.php │ ├── SiteLanguageLinkModifierTest.php │ └── SiteLanguageLinksParserOutputAppenderTest.php └── travis ├── install-semantic-interlanguage-links.sh └── run-tests.sh /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | workflow_dispatch: 9 | 10 | jobs: 11 | 12 | test: 13 | 14 | runs-on: ubuntu-22.04 15 | continue-on-error: ${{ matrix.experimental }} 16 | 17 | strategy: 18 | matrix: 19 | include: 20 | - mediawiki_version: '1.39' 21 | smw_version: dev-master 22 | php_version: 8.1 23 | database_type: mysql 24 | database_image: "mariadb:10" 25 | coverage: false 26 | experimental: false 27 | - mediawiki_version: '1.40' 28 | smw_version: dev-master 29 | php_version: 8.1 30 | database_type: mysql 31 | database_image: "mariadb:11.2" 32 | coverage: true 33 | experimental: false 34 | - mediawiki_version: '1.41' 35 | smw_version: dev-master 36 | php_version: 8.1 37 | database_type: mysql 38 | database_image: "mariadb:11.2" 39 | coverage: false 40 | experimental: false 41 | - mediawiki_version: '1.42' 42 | smw_version: dev-master 43 | php_version: 8.1 44 | database_type: mysql 45 | database_image: "mariadb:11.2" 46 | coverage: false 47 | experimental: false 48 | - mediawiki_version: '1.43' 49 | smw_version: dev-master 50 | php_version: 8.1 51 | database_type: mysql 52 | database_image: "mariadb:11.2" 53 | coverage: false 54 | experimental: true 55 | 56 | env: 57 | MW_VERSION: ${{ matrix.mediawiki_version }} 58 | SMW_VERSION: ${{ matrix.smw_version }} 59 | PHP_VERSION: ${{ matrix.php_version }} 60 | DB_TYPE: ${{ matrix.database_type }} 61 | DB_IMAGE: ${{ matrix.database_image }} 62 | 63 | steps: 64 | - name: Checkout 65 | uses: actions/checkout@v4 66 | with: 67 | submodules: recursive 68 | 69 | - name: Update submodules 70 | run: git submodule update --init --remote 71 | 72 | - name: Run tests 73 | run: make ci 74 | if: matrix.coverage == false 75 | 76 | - name: Run tests with coverage 77 | run: make ci-coverage 78 | if: matrix.coverage == true 79 | 80 | - name: Upload code coverage 81 | uses: codecov/codecov-action@v4 82 | with: 83 | token: ${{ secrets.CODECOV_TOKEN }} 84 | files: coverage/php/coverage.xml 85 | if: matrix.coverage == true 86 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | !.* 2 | *~ 3 | 4 | *.kate-swp 5 | 6 | vendor/ 7 | extensions/ 8 | 9 | composer.phar 10 | composer.lock 11 | 12 | .idea/ 13 | 14 | .envrc 15 | .phpunit.result.cache 16 | conf/ 17 | makeutil/ 18 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "build"] 2 | path = build 3 | url = https://github.com/gesinn-it-pub/docker-compose-ci.git 4 | -------------------------------------------------------------------------------- /.phpcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 0 39 | 40 | . 41 | /(vendor|conf)/ 42 | extensions/* 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /.scrutinizer.yml: -------------------------------------------------------------------------------- 1 | filter: 2 | excluded_paths: 3 | - 'vendor/*' 4 | 5 | tools: 6 | php_mess_detector: 7 | config: 8 | controversial_rules: { superglobals: false } 9 | php_cpd: true 10 | php_pdepend: true 11 | php_code_coverage: false 12 | php_code_sniffer: true 13 | php_cs_fixer: true 14 | php_loc: true 15 | php_analyzer: true 16 | sensiolabs_security_checker: true 17 | external_code_coverage: 18 | timeout: '900' 19 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | os: 4 | - linux 5 | 6 | env: 7 | global: 8 | # fix "Xdebug 3 is installed by default, breaking builds" 9 | # see https://travis-ci.community/t/xdebug-3-is-installed-by-default-breaking-builds/10748 10 | - XDEBUG_MODE=coverage 11 | 12 | services: 13 | - mysql 14 | - postgresql 15 | 16 | jobs: 17 | fast_finish: true 18 | include: 19 | # 1) sqlite, previous MW LTS stable, current SMW stable 20 | - env: DB=sqlite; MW=REL1_31; SMW=3.2.2 21 | php: 7.1 22 | # 2) postgres, current MW non-LTS stable, current SMW stable 23 | - env: DB=postgres; MW=REL1_34; SMW=3.2.2 24 | php: 7.2 25 | # 3) mysql, current MW LTS stable, current SMW stable, COVERAGE 26 | # temp run against cherry-pick SMW until SMW 3.2.3 is available 27 | # temp stay with MW 1.34 until all SMW tests are passing for 1.35 28 | - env: DB=mysql; MW=REL1_34; SMW='dev-master#229e166 as 3.2.2'; TYPE=coverage 29 | php: 7.3 30 | 31 | before_install: 32 | # MW is not yet compatible with Composer 2.x, see https://phabricator.wikimedia.org/T266417 33 | - composer self-update --1 34 | - wget https://raw.githubusercontent.com/SemanticMediaWiki/CIScripts/main/travis/install-mediawiki.sh 35 | - wget https://raw.githubusercontent.com/SemanticMediaWiki/CIScripts/main/travis/install-phpunit.sh 36 | - wget https://raw.githubusercontent.com/SemanticMediaWiki/CIScripts/main/travis/install-semantic-mediawiki.sh 37 | - wget https://raw.githubusercontent.com/SemanticMediaWiki/CIScripts/main/travis/upload-scrutinizer-coverage-report.sh 38 | 39 | install: 40 | - bash ./install-mediawiki.sh 41 | - bash ./install-phpunit.sh 42 | - bash ./install-semantic-mediawiki.sh 43 | - bash ./tests/travis/install-semantic-interlanguage-links.sh 44 | 45 | script: 46 | - bash ./tests/travis/run-tests.sh 47 | 48 | after_success: 49 | - bash ./upload-scrutinizer-coverage-report.sh 50 | 51 | notifications: 52 | email: 53 | on_success: change 54 | on_failure: always 55 | 56 | cache: 57 | directories: 58 | - $HOME/.composer/cache 59 | -------------------------------------------------------------------------------- /DefaultSettings.php: -------------------------------------------------------------------------------- 1 | newCompositeCache( [ 46 | $cacheFactory->newFixedInMemoryLruCache( 500 ), 47 | $cacheFactory->newMediaWikiCache( ObjectCache::getInstance( $GLOBALS['silgCacheType'] ) ) 48 | ] ); 49 | 50 | $cacheKeyProvider = new CacheKeyProvider( 51 | $GLOBALS['wgCachePrefix'] === false ? WikiMap::getCurrentWikiId() : $GLOBALS['wgCachePrefix'] 52 | ); 53 | 54 | $hookRegistry = new HookRegistry( 55 | ApplicationFactory::getInstance()->getStore(), 56 | $compositeCache, 57 | $cacheKeyProvider 58 | ); 59 | 60 | $hookRegistry->register(); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | fixes: 2 | - "/var/www/html/extensions/SemanticInterlanguageLinks/::" 3 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mediawiki/semantic-interlanguage-links", 3 | "type": "mediawiki-extension", 4 | "description": "A Semantic Mediawiki extension to create and manage interlanguage links.", 5 | "keywords": [ 6 | "smw", 7 | "semantic mediawiki", 8 | "wiki", 9 | "mediawiki", 10 | "localization" 11 | ], 12 | "homepage": "https://semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links", 13 | "license": "GPL-2.0-or-later", 14 | "authors": [ 15 | { 16 | "name": "James Hong Kong", 17 | "role": "Developer" 18 | } 19 | ], 20 | "support": { 21 | "email": "semediawiki-user@lists.sourceforge.net", 22 | "issues": "https://github.com/SemanticMediaWiki/SemanticInterlanguageLinks/issues", 23 | "forum": "https://www.semantic-mediawiki.org/wiki/semantic-mediawiki.org_talk:Community_portal", 24 | "wiki": "https://www.semantic-mediawiki.org/wiki/", 25 | "source": "https://github.com/SemanticMediaWiki/SemanticInterlanguageLinks" 26 | }, 27 | "require": { 28 | "php": ">=8.1.0", 29 | "composer/installers": ">=1.0.1", 30 | "onoi/cache": "~1.2" 31 | }, 32 | "require-dev": { 33 | "mediawiki/mediawiki-codesniffer": "46.0.0", 34 | "mediawiki/minus-x": "1.1.3", 35 | "php-parallel-lint/php-console-highlighter": "1.0.0", 36 | "php-parallel-lint/php-parallel-lint": "1.4.0" 37 | }, 38 | "extra": { 39 | "branch-alias": { 40 | "dev-master": "2.x-dev" 41 | } 42 | }, 43 | "config": { 44 | "process-timeout": 0, 45 | "allow-plugins": { 46 | "composer/installers": true, 47 | "dealerdirect/phpcodesniffer-composer-installer": true 48 | } 49 | }, 50 | "scripts":{ 51 | "test": [ 52 | "@analyze", 53 | "@phpunit" 54 | ], 55 | "test-coverage": [ 56 | "@analyze", 57 | "@phpunit-coverage" 58 | ], 59 | "analyze": [ 60 | "@lint", 61 | "@phpcs", 62 | "@minus-x" 63 | ], 64 | "fix": [ 65 | "@phpcs-fix" 66 | ], 67 | "phpunit": "php ${MW_INSTALL_PATH:-../..}/tests/phpunit/phpunit.php -c phpunit.xml.dist", 68 | "phpunit-coverage": "php ${MW_INSTALL_PATH:-../..}/tests/phpunit/phpunit.php -c phpunit.xml.dist --testdox --coverage-text --coverage-html coverage/php --coverage-clover coverage/php/coverage.xml", 69 | "post-test-coverage": [ 70 | "sed -i 's|/var/www/html/extensions/SemanticResultFormats/||g' coverage/php/coverage.xml", 71 | "find coverage/php -type f -name '*.html' -exec sed -i 's|/var/www/html/extensions/||g' {} +" 72 | ], 73 | "integration": "composer phpunit -- --testsuite=semantic-result-formats-integration", 74 | "phpcs": "phpcs -ps -d memory_limit=2G", 75 | "phpcs-fix": "phpcbf -p", 76 | "lint": "parallel-lint . --exclude vendor --exclude node_modules --exclude extensions", 77 | "minus-x": "minus-x check ." 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /docs/01-parser-function.md: -------------------------------------------------------------------------------- 1 | 2 | ## interlanguagelink 3 | 4 | ![sil](https://cloud.githubusercontent.com/assets/1245473/7594045/0d88d938-f919-11e4-9c79-8e8d166c507a.png) 5 | 6 | If `Foo` and `Bar` are to represent similar content in different languages the it is assumed 7 | they will share a commmon reference (mostly the page name of the main content e.e.g `Lorem ipsum`) making those 8 | assignment link to each other through the sitelink navigation. 9 | 10 | ```text 11 | Page: Foo 12 | 13 | Lorem ipsum dolor sit amet, sale lucilius id mei, pri id prima legendos, at 14 | vix tantas habemus tincidunt. 15 | 16 | {{interlanguagelink:la|Lorem ipsum}} 17 | ``` 18 | ```text 19 | Page:Bar 20 | 21 | 真リ議著ぞねおへ司末ゅ自門学15根然6債モカナツ意集ソタロル就海ホルトヤ討舎ニ制置だみくろ冬場ヲフ針哲ソセモ 22 | 決見ク指47返もスごち貨仙届角夜おいっす。 23 | 24 | {{interlanguagelink:ja|Lorem ipsum}} 25 | ``` 26 | 27 | ### Interwiki annotation 28 | 29 | In cases where an interwiki language link (e.g `[[en:Foo]]`) is added to a page 30 | (representing a non-local link, see also [`wgInterwikiMagic`][iwlm] or 31 | [`wgExtraInterlanguageLinkPrefixes`][iwlp]), SIL will create an additional 32 | `Has interlanguage links` entry (internally being identified by something like 33 | `Foo#iwl.en`). 34 | 35 | The interwiki information will not be used for any language filter (search, 36 | category). 37 | 38 | ## interlanguagelist 39 | 40 | The parser function `{{interlanguagelist: interlanguage reference | template }}` can 41 | generate a customizable language target link list for the provided `interlanguage reference` 42 | and being formatted using a template with parameters: 43 | 44 | - `target-link` being the target link 45 | - `lang-code` the language code 46 | - `lang-name` representing the localized language name for the language code 47 | - `#` contains the list position 48 | 49 | Using `Template:InterlanguageLinksTemplate` in `interlanguagelist` will output all available links to the `Lorem ipsum` reference on top of the page `FooBar`. 50 | 51 | ```text 52 | Template:InterlanguageLinksTemplate 53 | 54 | [[{{{target-link}}}|{{{lang-name}}}]] 55 | 56 | ``` 57 | ```text 58 | Page:FooBar 59 | 60 | {{interlanguagelist:Lorem ipsum|InterlanguageLinksTemplate}} 61 | 62 | ``` 63 | 64 | ## annotatedlanguage 65 | 66 | The parser function is called either as `{{annotatedlanguage: }}` where it just returns the language code 67 | for the current page (if one is annotated using SIL) or with `{{annotatedlanguage: template }}` to return content 68 | as formatted using a template with parameters defined as: 69 | 70 | - `target-link` being the target link 71 | - `lang-code` the language code 72 | - `lang-name` representing the localized language name for the language code 73 | 74 | [iwlm]: https://www.mediawiki.org/wiki/Manual:$wgInterwikiMagic 75 | [iwlp]: https://www.mediawiki.org/wiki/Manual:$wgExtraInterlanguageLinkPrefixes 76 | -------------------------------------------------------------------------------- /docs/02-ask-queries.md: -------------------------------------------------------------------------------- 1 | ## Example ask queries 2 | 3 | List all subjects (articles) that have a reference to the `Shogi` topic. 4 | 5 | ``` 6 | {{#ask: 7 | [[Has interlanguage link.Interlanguage reference::Shogi]] 8 | |?Some property 9 | }} 10 | ``` 11 | List all available languages that are connected to the `Shogi` topic. 12 | 13 | ``` 14 | {{#ask: 15 | [[Interlanguage reference::Shogi]] 16 | |?Page content language 17 | }} 18 | ``` 19 | 20 | The subject `将棋` is assigned to which language? 21 | 22 | ``` 23 | {{#ask: 24 | [[-Has interlanguage link::将棋]] 25 | |?Page content language 26 | }} 27 | ``` 28 | -------------------------------------------------------------------------------- /docs/09-notes.md: -------------------------------------------------------------------------------- 1 | ## Components 2 | 3 | ### InterlanguageLinksLookup 4 | 5 | `InterlanguageLinksLookup` is the most critical component of SIL as it combines the store 6 | interface with the cache interface. 7 | 8 | Any request either for a target link or language code lookup are channelled 9 | through this class in order to make a decision whether to use an existing 10 | cache entry or to make a "fresh" query request to the storage back-end. 11 | 12 | No other component of SIL should communicate to the store directly and let 13 | the lookup class to handle those requests. 14 | 15 | ![sil-interlanguagelinkslookup](https://cloud.githubusercontent.com/assets/1245473/5961425/e84ffaa6-a81f-11e4-8b04-9aaece9d5e70.png) 16 | 17 | ### LanguageTargetLinksCache 18 | 19 | In order to keep a page view responsive and avoid a repetitive or exhausting query process, 20 | `LanguageTargetLinksCache` is expected to cache all objects necessary and be accessible 21 | through the `InterlanguageLinksLookup` class. 22 | 23 | It is recommended that the cache uses a "Composite" approach in order for short-lived 24 | requests to be stored in-memory while other information are stored on a 25 | persistence layer to increase lookup performance for succeeding requests. 26 | 27 | ![sil-languagetargetlinkscache](https://cloud.githubusercontent.com/assets/1245473/5961559/f2e2ab16-a820-11e4-9a79-66b5507d9498.png) 28 | 29 | Class schematics were generated by `scrutinizer-ci.com`. 30 | -------------------------------------------------------------------------------- /docs/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Setup and configuration 2 | 3 | - SMW version: 4 | - SIL version: 5 | - MW version: 6 | - DB (MySQL etc. and version): 7 | 8 | ### Issue 9 | 10 | Produces a [stack trace](https://www.semantic-mediawiki.org/wiki/Help:Identifying_bugs) and outputs: 11 | 12 | ``` 13 | ``` 14 | 15 | Steps to reproduce the observation (recommendation is to use the [sandbox](https://sandbox.semantic-mediawiki.org)): 16 | -------------------------------------------------------------------------------- /docs/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | This PR is made in reference to: # 2 | 3 | This PR addresses or contains: 4 | - ... 5 | - ... 6 | - ... 7 | 8 | This PR includes: 9 | - [ ] Tests (unit/integration) 10 | - [ ] CI build passed 11 | 12 | Fixes # 13 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | 2 | * [Parser functions](01-parser-function.md) contains details and usage examples 3 | * [Example `#ask` queries](02-ask-queries.md) 4 | * [Technical notes](09-notes.md) 5 | 6 | ## Usage 7 | 8 | The parser function `{{interlanguagelink: ... }}` provides an interface 9 | to declare multilingual content using semantic annotations. 10 | 11 | `{{interlanguagelink: language code | interlanguage reference }}`, the first 12 | argument specifies the language code (e.g `es`, `ja`) of the content while 13 | the second argument contains an arbitrary reference (`interlanguage reference`) 14 | that describes content of similar nature (content that should be connected to 15 | each other) for different languages. 16 | 17 | ![sil](https://cloud.githubusercontent.com/assets/1245473/9477943/450195e0-4b75-11e5-9cd4-61e2672eb8fa.png) 18 | 19 | The parser function `{{interlanguagelist: ... }}` can generate a customizable 20 | language target link list. 21 | 22 | ### Other features 23 | 24 | - The page content language is preset with the language annotated by `interlanguagelink` together 25 | with an auto-updated sitelink navigation for pages that point to the same `interlanguage reference`. 26 | - A set of predefined properties ( `Page content language`, `Interlanguage reference`, 27 | `Interwiki language`, `Interwiki reference`, and `Has interlanguage links`) are provided and can 28 | be used to create customized `#ask` queries (e.g `Has interlanguage links.Page content language`). 29 | - If a category page contains a `Page content language` annotation, SIL will filter and display only pages 30 | that match that content language. In cases where no language has been assigned (or filtering has been disabled), 31 | the category page will display all pages without changes or filtering. 32 | 33 | ### Configuration 34 | 35 | - `$silgCacheType = CACHE_ANYTHING;` is being set to be the default value to improve query lookups 36 | during each page view with cache invalidation being carried out during any delete, change or move action. 37 | - `$wgHideInterlanguageLinks` is enabled (set to `true`), no sitelinks or annotations are created 38 | (in order to correspond to the MW default behaviour for interwiki links) 39 | - If `$wgPageLanguageUseDB` was enabled and `Special:PageLanguage` assigned a different language from 40 | the annotated SIL value then the `Page content language` will be restored to provide consistency with the 41 | expected language 42 | -------------------------------------------------------------------------------- /extension.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SemanticInterlanguageLinks", 3 | "version": "2.2.0-alpha", 4 | "author": [ 5 | "James Hong Kong", 6 | "..." 7 | ], 8 | "url": "https://github.com/SemanticMediaWiki/SemanticInterlanguageLinks/", 9 | "descriptionmsg": "sil-desc", 10 | "namemsg": "sil-name", 11 | "license-name": "GPL-2.0-or-later", 12 | "type": "semantic", 13 | "requires": { 14 | "MediaWiki": ">= 1.39" 15 | }, 16 | "MessagesDirs": { 17 | "SemanticInterlanguageLinks": [ 18 | "i18n" 19 | ] 20 | }, 21 | "callback": "SemanticInterlanguageLinks::initExtension", 22 | "AutoloadClasses": { 23 | "SemanticInterlanguageLinks": "SemanticInterlanguageLinks.php" 24 | }, 25 | "AutoloadNamespaces": { 26 | "SIL\\": "src/" 27 | }, 28 | "ExtensionFunctions": [ 29 | "SemanticInterlanguageLinks::onExtensionFunction" 30 | ], 31 | "load_composer_autoloader": true, 32 | "manifest_version": 2 33 | } 34 | -------------------------------------------------------------------------------- /i18n/SemanticInterlanguageLinks.magic.php: -------------------------------------------------------------------------------- 1 | [ 0, 'INTERLANGUAGELINK:', 'SIL:' ], 13 | 'interlanguagelist' => [ 0, 'INTERLANGUAGELIST:', 'SILIST:' ], 14 | 'annotatedlanguage' => [ 0, 'ANNOTATEDLANGUAGE:' ], 15 | ]; 16 | 17 | /** 18 | * German (Deutsch) 19 | */ 20 | $magicWords['de'] = [ 21 | 'interlanguagelink' => [ 0, 'SPRACHLINK:' ], 22 | 'interlanguagelist' => [ 0, 'SPRACHLISTE:' ], 23 | 'annotatedlanguage' => [ 0, 'SEITENSPRACHE:' ], 24 | ]; 25 | 26 | /** 27 | * Japanese (日本語) 28 | */ 29 | $magicWords['ja'] = [ 30 | 'interlanguagelink' => [ 0, '言語間:' ], 31 | ]; 32 | -------------------------------------------------------------------------------- /i18n/ar.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Meno25", 5 | "ديفيد", 6 | "محمد أحمد عبد الفتاح" 7 | ] 8 | }, 9 | "sil-desc": "امتداد [https://www.semantic-mediawiki.org ميدياويكي الدلالية] لإنشاء وإدارة وصلات الإنترويكي", 10 | "sil-property-ill-alias-language": "لغة محتوى الصفحة", 11 | "sil-property-ill-alias-reference": "مرجع وصلة إنترويكي", 12 | "sil-property-iwl-alias-language": "لغة إنترويكي", 13 | "sil-property-iwl-alias-reference": "مرجع إنترويكي", 14 | "sil-property-alias-container": "بها وصلة إنترويكي", 15 | "smw-pa-property-predefined__sil_container": "\"$1\" هي خاصية معرفة مسبقا وتمثل كيان حاوية لوصف معلومات مرتبطة بوصلة إنترويكي وهي موفرة بواسطة امتداد [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 16 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" هي خاصية موفرة مسبقا تحتوي على كود لغة معلم وهي موفرة بواسطة امتداد [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 17 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\" هي خاصية معرفة مسبقا تحتوي على مرجع افتراضي وهي موفرة بواسطة امتداد [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 18 | "smw-pa-property-predefined-long__sil_ill_ref": "الكيانات بنفس المرجع يتم وصلها ويتوقع أن تمثل محتوى مماثل بلغات مختلفة.", 19 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" هي خاصبة معرفة مسبقا وتمثل كود لغة مشتق من وصلة إنترويكي وهي موفرة بواسطة امتداد [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 20 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" هي خاصية معرفة مسبقا وتمثل صفحة هدف مشتقة من وصلة إنترويكي وهي موفرة بواسطة امتداد [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 21 | "sil-interlanguagelink-hideinterlanguagelinks": "وظيفة المحلل لا يمكن أن تُستخدَم بسبب تعيين $wgHideInterlanguageLinks.", 22 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" لم يُعترَف به كرمز لغة صالح.", 23 | "sil-interlanguagelink-multiplecalls-different-languagecode": "تم استدعاء وظيفة المحلل عدة مرات ولكن مع رمز لغة مختلف (\"$1\") الذي يتم تجنبه كمحتوى صفحة من المتوقع أن تكون ممثلة بلغة واحدة.", 24 | "sil-interlanguagelink-languagetargetcombination-exists": "المزيج \"$1\":\"$2\" موجود بالفعل لصفحة \"$3\" ومن ثم لم يتم إنشاء أي تفسير لغوي.", 25 | "sil-interlanguagelist-missing-linkreference": "وظيفة محلل تفتقد مرجعًا صالحًا.", 26 | "sil-interlanguagelist-missing-template": "وظيفة محلل تفتقد قالب إنتاج.", 27 | "sil-interlanguageparser-linkreference-error": "احتوت وظيفة المحلل على مشكلة لإنشاء كائن العنوان من \"$1\".", 28 | "sil-search-profile": "حسب اللغة", 29 | "sil-search-profile-tooltip": "تصفية المقالات حسب شرح اللغة", 30 | "sil-search-languagefilter-label": "فلترة حسب اللغة", 31 | "sil-search-nolanguagefilter": "لا يوجد مرشح لغة", 32 | "sil-categorypage-languagefilter-active": "هذا التصنيف يحتوي على معلومات (صفحة، وصفحة فرعية، وصورة) تمت تصفيتها حسب اللغة \"$1\"." 33 | } 34 | -------------------------------------------------------------------------------- /i18n/ast.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Xuacu", 5 | "YoaR" 6 | ] 7 | }, 8 | "sil-desc": "Estensión de [https://www.semantic-mediawiki.org MediaWiki Semántica] pa crear y xestionar los enllaces interllingüísticos", 9 | "sil-property-ill-alias-language": "Llingua del conteníu de la páxina", 10 | "sil-property-ill-alias-reference": "Referencia interllingüística", 11 | "sil-property-iwl-alias-language": "Llingua d'interwiki", 12 | "sil-property-iwl-alias-reference": "Referencia d'interwiki", 13 | "sil-property-alias-container": "Tien enllaz interllingüísticu", 14 | "smw-pa-property-predefined__sil_container": "«$1» ye una propiedá predefinida que representa una entidá contenedora pa describir la información rellacionada col enllaz interlingüísticu y proporciónala la estensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Enllaces Semánticos Interllingüísticos].", 15 | "smw-pa-property-predefined__sil_ill_lang": "«$1» ye una propiedá predefinida que contién un códigu de llingua anotáu y proporciónala la estensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Enllaces Semánticos Interllingüísticos].", 16 | "smw-pa-property-predefined__sil_ill_ref": "«$1» ye una propiedá predefinida que contién una referencia arbitraria y proporciónala la estensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Enllaces Semánticos Interllingüísticos].", 17 | "smw-pa-property-predefined-long__sil_ill_ref": "Les entidaes cola mesma referencia tán enllazaes ente elles y espérase que representen conteníu asemeyáu en distintes llingües.", 18 | "smw-pa-property-predefined__sil_iwl_lang": "«$1» ye una propiedá predefinida que representa un códigu de llingua deriváu d'un enllaz interllingüísticu y proporciónala la estensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Enllaces Semánticos Interllingüísticos].", 19 | "smw-pa-property-predefined__sil_iwl_ref": "«$1» ye una propiedá predefinida que representa una páxina destín derivada d'un enllaz interllingüísticu y proporciónala la estensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Enllaces Semánticos Interllingüísticos].", 20 | "sil-interlanguagelink-hideinterlanguagelinks": "Nun puede usase la función del analizador porque ta configurao $wgHideInterlanguageLinks.", 21 | "sil-interlanguagelink-invalidlanguagecode": "Nun se reconoció «$1» como códigu de llingua válidu.", 22 | "sil-interlanguagelink-multiplecalls-different-languagecode": "La función d'analizador llamóse múltiples veces pero con un códigu de llingua distintu («$1») lo que tien d'evitase porque xeneralmente espérase que'l conteníu d'una páxina tea representáu nun únicu idioma.", 23 | "sil-interlanguagelink-languagetargetcombination-exists": "Yá existe la combinación \"$1\":\"$2\" pa la páxina \"$3\", poro, nun se creó nenguna anotación interllingüística.", 24 | "sil-interlanguagelist-missing-linkreference": "Falta una referencia válida na función del analizador.", 25 | "sil-interlanguagelist-missing-template": "Falta una plantía de salida na función del analizador.", 26 | "sil-interlanguageparser-linkreference-error": "La función del analizador tuvo un problema pa crear un oxetu de títulu dende «$1».", 27 | "sil-search-profile": "Por llingua", 28 | "sil-search-profile-tooltip": "Filtriar artículos por anotación de llingua", 29 | "sil-search-languagefilter-label": "Filtriar por llingua", 30 | "sil-search-nolanguagefilter": "Sin filtru de llingua", 31 | "sil-categorypage-languagefilter-active": "Esta categoría contién información (páxina, subcategoría ya imaxe) filtriada pola llingua «$1»." 32 | } 33 | -------------------------------------------------------------------------------- /i18n/be-tarask.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Nerogaf", 5 | "Red Winged Duck" 6 | ] 7 | }, 8 | "sil-desc": "Пашырэньне [https://www.semantic-mediawiki.org Semantic MediaWiki] для стварэньня й кіраваньня міжмоўнымі спасылкамі", 9 | "sil-property-ill-alias-language": "Мова зьместу старонкі", 10 | "sil-property-ill-alias-reference": "Міжмоўная спасылка", 11 | "sil-property-iwl-alias-language": "Мова інтэрвікі", 12 | "sil-property-iwl-alias-reference": "Interwiki-спасылка", 13 | "sil-property-alias-container": "Мае міжмоўную спасылку", 14 | "sil-interlanguagelink-invalidlanguagecode": "«$1» ня быў распазнаны як дапушчальны код мовы.", 15 | "sil-search-profile": "Паводле мовы", 16 | "sil-search-profile-tooltip": "Фільтраваць артыкулы па моўнай анатацыі", 17 | "sil-search-languagefilter-label": "Фільтар паводле мовы", 18 | "sil-search-nolanguagefilter": "Бяз моўнага фільтру" 19 | } 20 | -------------------------------------------------------------------------------- /i18n/bn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Aftabuzzaman", 5 | "Mohammed Galib Hasan", 6 | "আজিজ", 7 | "আফতাবুজ্জামান" 8 | ] 9 | }, 10 | "sil-property-iwl-alias-reference": "আন্তউইকি তথ্যসূত্র", 11 | "sil-property-alias-container": "আন্তঃভাষার সংযোগ আছে", 12 | "sil-search-profile": "ভাষা অনুযায়ী", 13 | "sil-search-languagefilter-label": "ভাষা অনুযায়ী ছাঁকনি", 14 | "sil-search-nolanguagefilter": "ভাষার ছাঁকনি নেই", 15 | "sil-categorypage-languagefilter-active": "এই বিষয়শ্রেণীতে অন্তর্ভুক্ত তথ্য (পৃষ্ঠা, সদস্যতা, এবং চিত্রসমূহ) \"$1\" ভাষা দ্বারা পরিস্রুত করা হয়।" 16 | } 17 | -------------------------------------------------------------------------------- /i18n/br.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Fulup" 5 | ] 6 | }, 7 | "sil-property-ill-alias-language": "Yezh endalc'had ar bajenn", 8 | "sil-property-ill-alias-reference": "Daveenn etreyezhel", 9 | "sil-property-iwl-alias-language": "Yezh etrewiki", 10 | "sil-property-iwl-alias-reference": "Daveenn etrewiki", 11 | "sil-property-alias-container": "zo ennañ ul liamm etrewiki", 12 | "sil-search-profile": "Dre yezh", 13 | "sil-search-profile-tooltip": "Silañ ar pennadoù dre yezh an notennoù", 14 | "sil-search-languagefilter-label": "Silañ dre yezh", 15 | "sil-search-nolanguagefilter": "Sil yezh ebet" 16 | } 17 | -------------------------------------------------------------------------------- /i18n/ca.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Annamerida", 5 | "Fitoschido", 6 | "Jmarchn" 7 | ] 8 | }, 9 | "sil-interlanguagelink-invalidlanguagecode": "No s’ha reconegut «$1» com un codi d’idioma vàlid.", 10 | "sil-search-profile": "Per idioma.", 11 | "sil-search-languagefilter-label": "Filtra per idioma", 12 | "sil-search-nolanguagefilter": "Cap filtre d'idioma.", 13 | "sil-categorypage-languagefilter-active": "Aquesta categoria conté informació (de pàgina, subcategories, i imatges) filtrades per l'idioma \"$1\"." 14 | } 15 | -------------------------------------------------------------------------------- /i18n/ce.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Умар" 5 | ] 6 | }, 7 | "sil-desc": "[https://www.semantic-mediawiki.org Semantic MediaWiki] шордар интервики-хьажоргаш кхолла а, царна урхалла дан а лерина йу", 8 | "sil-property-ill-alias-language": "АгӀонан чулацаман мотт", 9 | "sil-property-ill-alias-reference": "Меттанашна йукъара хьажорг", 10 | "sil-property-iwl-alias-language": "Интервикин мотт", 11 | "sil-property-iwl-alias-reference": "Интервики-хьажоргаш", 12 | "sil-property-alias-container": "Интервики-хьажорг йу", 13 | "smw-pa-property-predefined__sil_container": "«$1» — хьалххе билгалйаьккхина хьал ду, меттанашна йукъара зӀенца йоьзна йолу информаци йовзийтархьама контейнеран агӀо гойтуш йолу, иза аьтто ло [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] шордаро.", 14 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" — хӀара хьалххе билгалйаьккхина билгало йу, шена чохь аннотаци йина меттан код а йолуш, иза луш йу шордаро [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links]", 15 | "smw-pa-property-predefined__sil_ill_ref": "«$1» — хьалххе билгалйаьккхина билгало йу, аьтто луш бу шордаро [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 16 | "smw-pa-property-predefined-long__sil_ill_ref": "Цхьа хьажорг йолу элементаш цхьана тобин йукъатуху, цхьатерра чулацам тайп-тайпанчу меттанашкахь гайта аьтто беш.", 17 | "smw-pa-property-predefined__sil_iwl_lang": "«$1» — хьалххе билгалйаьккхина билгало йу, иза йу меттан код, иза схьаэцна йу интервики-хьажорган тӀера, иза аьтто луш бу шордаро [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 18 | "smw-pa-property-predefined__sil_iwl_ref": "«$1» — хьалххе билгалйаьккхина билгало йу, иза йуьззина агӀо йу, интервики-хьажорган тӀера схьаоьцуш йолу, аьтто луш бу шордаро [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 19 | "sil-interlanguagelink-hideinterlanguagelinks": "Функцин парсер лело йиш йац, хӀунда аьлча $wgHideInterlanguageLinks дӀахӀоттийна йу.", 20 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" нийса меттан код санна къобалйина йац.", 21 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Функцин парсер маситтазза кхайкхина амма кхечу меттан кодца («$1»), цуьнах лардала деза, хӀунда аьлча агӀонан чулацам йерриг цхьана маттахь гайта беза.", 22 | "sil-interlanguagelink-languagetargetcombination-exists": "«$1»:«$2» комбинаци хӀинцале а йолуш йу «$3» агӀонна, цундела кхин меттанашна йукъара аннотаци ца кхоьллина.", 23 | "sil-interlanguagelist-missing-linkreference": "Функцин парсерна кхин а тӀе хьажорг йац.", 24 | "sil-interlanguagelist-missing-template": "Функцин парсерна арайаларан кеп йац.", 25 | "sil-search-profile": "Меттаца", 26 | "sil-search-languagefilter-label": "Маттаца фильтр:", 27 | "sil-search-nolanguagefilter": "Фильтран мотт бац" 28 | } 29 | -------------------------------------------------------------------------------- /i18n/cs.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Aktron", 5 | "Dvorapa", 6 | "Jaroslav Cerny" 7 | ] 8 | }, 9 | "sil-desc": "Rozšíření [https://www.semantic-mediawiki.org Sémantické MediaWiki] určené k vytváření a správě mezijazykových odkazů", 10 | "sil-property-ill-alias-language": "Jazyk obsahu stránky", 11 | "sil-property-ill-alias-reference": "Mezijazyková reference", 12 | "sil-property-iwl-alias-language": "Jazyk interwiki", 13 | "sil-property-iwl-alias-reference": "Reference interwiki", 14 | "sil-property-alias-container": "Obsahuje mezijazykový odkaz", 15 | "smw-pa-property-predefined__sil_container": "\"$1\" je předem definovaná vlastnost, která reprezentuje entitu kontejneru popisujícího informace související s mezijazykovým odkazem a je definována v rozšíření [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Sémantické mezijazykové odkazy].", 16 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" je předem definovaná vlastnost, která obsahuje anotovaný jazykový kód a je definována v rozšíření [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Sémantické mezijazykové odkazy].", 17 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\" je předem definovaná vlastnost, která obsahuje náhodnou referenci a je definována v rozšíření [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Sémantické mezijazykové odkazy].", 18 | "smw-pa-property-predefined-long__sil_ill_ref": "Entity se stejnou referencí jsou vzájemně propojeny a očekává se, že v různých jazycích reprezentují podobný obsah.", 19 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" je předem definovaná vlastnost, která reprezentuje jazykový kód odvozený z interwiki odkazu a je definována v rozšíření [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Sémantické mezijazykové odkazy].", 20 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" je předem definovaná vlastnost, která reprezentuje cílovou stránku odvozenou z interwiki odkazu a je definována v rozšíření [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Sémantické mezijazykové odkazy].", 21 | "sil-interlanguagelink-hideinterlanguagelinks": "Funkci syntaktického analyzátoru nelze použít, protože je nastavena proměnná $wgHideInterlanguageLinks.", 22 | "sil-interlanguagelink-invalidlanguagecode": "Řetězec \"$1\" není platným jazykovým kódem.", 23 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Funkce syntaktického analyzátoru byla volána několikrát, ale s odlišným jazykovým kódem (\"$1\"), kterému je třeba se vyhnout, protože obsah stránky má být psán jen jedním jazykem.", 24 | "sil-interlanguagelink-languagetargetcombination-exists": "Kombinace \"$1\":\"$2\" již existuje pro stránku \"$3\" a proto nebyly vytvořeny žádné další mezijazykové anotace.", 25 | "sil-interlanguagelist-missing-linkreference": "Funkci syntaktického analyzátoru nebyla předána platná reference.", 26 | "sil-interlanguagelist-missing-template": "Funkci syntaktického analyzátoru nebyla předána výstupní šablona.", 27 | "sil-interlanguageparser-linkreference-error": "Funkce syntaktického analyzátoru nedokázala vytvořit objekt nadpisu z \"$1\".", 28 | "sil-search-profile": "Podle jazyka", 29 | "sil-search-profile-tooltip": "Filtrovat články podle jazykové anotace", 30 | "sil-search-languagefilter-label": "Filtrovat podle jazyka", 31 | "sil-search-nolanguagefilter": "Bez jazykového filtru", 32 | "sil-categorypage-languagefilter-active": "Tato kategorie obsahuje informace (stránku, podkategorii a obrázek), které jsou filtrovány jazykem \"$1\"." 33 | } 34 | -------------------------------------------------------------------------------- /i18n/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kghbln", 5 | "Metalhead64", 6 | "Purodha", 7 | "kghbln" 8 | ] 9 | }, 10 | "sil-desc": "Ermöglicht das Erstellen und Verwalten semantischer Links zwischen einzelnen Sprachversionen einer Seite", 11 | "sil-property-ill-alias-language": "Seiteninhaltsprache", 12 | "sil-property-ill-alias-reference": "Sprachreferenz", 13 | "sil-property-iwl-alias-language": "Interwiki-Sprache", 14 | "sil-property-iwl-alias-reference": "Interwiki-Sprachreferenz", 15 | "sil-property-alias-container": "Sprachlink", 16 | "smw-pa-property-predefined__sil_container": "„$1“ ist ein softwareseitig fest definiertes Attribut, das sprachbezogene Metainformationen einer Seite in einem Subobjekt speichert. Es wird von der Softwareerweiterung [https://www.semantic-mediawiki.org/wiki/Semantic_Interlanguage_Links_(de) „Semantic Interlanguage Links“] bereitgestellt.", 17 | "smw-pa-property-predefined__sil_ill_lang": "„$1“ ist ein softwareseitig fest definiertes Attribut, das den Sprachcode speichert. Es wird von der Softwareerweiterung [https://www.semantic-mediawiki.org/wiki/Semantic_Interlanguage_Links_(de) „Semantic Interlanguage Links“] bereitgestellt.", 18 | "smw-pa-property-predefined__sil_ill_ref": "„$1“ ist ein softwareseitig fest definiertes Attribut, das eine beliebige Referenz speichert. Es wird von der Softwareerweiterung [https://www.semantic-mediawiki.org/wiki/Semantic_Interlanguage_Links_(de) „Semantic Interlanguage Links“] bereitgestellt.", 19 | "smw-pa-property-predefined-long__sil_ill_ref": "Objekte mit der gleichen Referenz werden mit Interwiki-Links verknüpft. Dabei wird davon ausgegangen, dass sie ähnlichen Inhalt in unterschiedlichen Sprachen darstellen.", 20 | "smw-pa-property-predefined__sil_iwl_lang": "„$1“ ist ein softwareseitig fest definiertes Attribut das den Sprachcode eines Interwiki-Links speichert. Es wird von der Softwareerweiterung [https://www.semantic-mediawiki.org/wiki/Semantic_Interlanguage_Links_(de) „Semantic Interlanguage Links“] bereitgestellt.", 21 | "smw-pa-property-predefined__sil_iwl_ref": "„$1“ ist ein softwareseitig fest definiertes Attribut, das die Zielseite eines Interwiki-Links speichert. Es wird von der Softwareerweiterung [https://www.semantic-mediawiki.org/wiki/Semantic_Interlanguage_Links_(de) „Semantic Interlanguage Links“] bereitgestellt.", 22 | "sil-interlanguagelink-hideinterlanguagelinks": "Diese Parserfunktion kann nicht genutzt werden. Dies wurde mit dem Konfigurationsparameter $wgHideInterlanguageLinks festgelegt.", 23 | "sil-interlanguagelink-invalidlanguagecode": "„$1“ ist kein gültiger Sprachcode.", 24 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Die Parserfunktion wurde mehrere Male mit jeweils einem anderen Sprachcode („$1“) genutzt. Dies muss vermieden werden, da hierbei davon ausgegangen wird, dass der Inhalt einer einzelnen Seite stets einer einzelnen Sprache entspricht.", 25 | "sil-interlanguagelink-languagetargetcombination-exists": "Die Kombination „$1“:„$2“ zum Zuordnen von Sprachen wurde für Seite „$3“ bereits festgelegt, sodaß keine weitere identische Annotation gespeichert wurde.", 26 | "sil-interlanguagelist-missing-linkreference": "Mit dieser Parserfunktion wurde keine gültige Sprachreferenz angegeben.", 27 | "sil-interlanguagelist-missing-template": "Mit dieser Parserfunktion wurde keine gültige Ausgabevorlage festgelegt.", 28 | "sil-interlanguageparser-linkreference-error": "Beim Erstellen einer Sprachreferenz aus „$1“ ist ein Problem aufgetreten.", 29 | "sil-search-profile": "nach Sprache", 30 | "sil-search-profile-tooltip": "Ermöglicht das Filtern von Artikeln nach einer Sprache.", 31 | "sil-search-languagefilter-label": "Nach Sprache filtern", 32 | "sil-search-nolanguagefilter": "Es ist kein Sprachfilter aktiv", 33 | "sil-categorypage-languagefilter-active": "Diese Kategorie enthält nach der Sprache „$1“ gefilterte Seiten." 34 | } 35 | -------------------------------------------------------------------------------- /i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kghbln", 5 | "mwjames" 6 | ] 7 | }, 8 | "sil-desc": "A [https://www.semantic-mediawiki.org Semantic MediaWiki] extension to create and manage interlanguage links", 9 | "sil-name": "Semantic Interlanguage Links", 10 | "sil-property-ill-alias-language": "Page content language", 11 | "sil-property-ill-alias-reference": "Interlanguage reference", 12 | "sil-property-iwl-alias-language": "Interwiki language", 13 | "sil-property-iwl-alias-reference": "Interwiki reference", 14 | "sil-property-alias-container": "Has interlanguage link", 15 | "smw-pa-property-predefined__sil_container": "\"$1\" is a predefined property that represents a container entity to describe interlanguage link related information and is provided by the [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] extension.", 16 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" is a predefined property that contains an annotated language code and is provided by the [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] extension.", 17 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\" is a predefined property that contains an arbitrary reference and is provided by the [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] extension.", 18 | "smw-pa-property-predefined-long__sil_ill_ref": "Entities with the same reference are interlinked and expected to represent similar content in different languages.", 19 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" is a predefined property and represents a language code derived from an interwiki link and is provided by the [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] extension.", 20 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" is a predefined property and represents a target page derived from an interwiki link and is provided by the [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] extension.", 21 | "sil-interlanguagelink-hideinterlanguagelinks": "The parser function cannot be used because $wgHideInterlanguageLinks is set.", 22 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" was not recognized as valid language code.", 23 | "sil-interlanguagelink-multiplecalls-different-languagecode": "The parser function was called multiple times but with a different language code (\"$1\") which is to be avoided as content of a page is generally expected to be represented by a single language.", 24 | "sil-interlanguagelink-languagetargetcombination-exists": "The combination \"$1\":\"$2\" already exists for page \"$3\" therefore no additional interlanguage annotation was created.", 25 | "sil-interlanguagelist-missing-linkreference": "The parser function is missing a valid reference.", 26 | "sil-interlanguagelist-missing-template": "The parser function is missing an output template.", 27 | "sil-interlanguageparser-linkreference-error": "The parser function had a problem to create a title object from \"$1\".", 28 | "sil-search-profile":"By Language", 29 | "sil-search-profile-tooltip":"Filter articles by language annotation", 30 | "sil-search-languagefilter-label":"Filter by language", 31 | "sil-search-nolanguagefilter":"No language filter", 32 | "sil-categorypage-languagefilter-active":"This category contains information (page, subcategory, and image) that is filtered by \"$1\" language." 33 | } 34 | -------------------------------------------------------------------------------- /i18n/eo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mirin", 5 | "Robin van der Vliet" 6 | ] 7 | }, 8 | "sil-property-ill-alias-reference": "Interlingva referenco", 9 | "sil-property-iwl-alias-language": "Intervikia lingvo", 10 | "sil-property-iwl-alias-reference": "Intervikia referenco", 11 | "sil-property-alias-container": "Ĉu havas interlingvan ligilon", 12 | "sil-search-profile": "Laŭ lingvo", 13 | "sil-search-languagefilter-label": "Filtri laŭ lingvo", 14 | "sil-search-nolanguagefilter": "Neniu lingva filtrilo" 15 | } 16 | -------------------------------------------------------------------------------- /i18n/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Dgstranz", 5 | "Fitoschido", 6 | "Laurenslimb", 7 | "Macofe" 8 | ] 9 | }, 10 | "sil-desc": "Extensión de [https://www.semantic-mediawiki.org Semantic MediaWiki] para crear y gestionar enlaces interlingüísticos", 11 | "sil-property-ill-alias-language": "Idioma de la página de contenido", 12 | "sil-property-ill-alias-reference": "Referencia interlingüística", 13 | "sil-property-iwl-alias-language": "Idioma interwiki", 14 | "sil-property-iwl-alias-reference": "Referencia interwiki", 15 | "sil-property-alias-container": "Tiene enlace interlingüístico", 16 | "smw-pa-property-predefined__sil_container": "\"$1\" es una propiedad predefinida, provista por la extensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links], que representa una entidad contenedora de metainformación relacionada con enlaces interlingüísticos.", 17 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" es una propiedad predefinida, provista por la extensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links], que contiene un código de idioma anotado.", 18 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\" es una propiedad predefinida, provista por la extensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links], que contiene una referencia arbitraria.", 19 | "smw-pa-property-predefined-long__sil_ill_ref": "Las entidades con la misma referencia están enlazadas entre sí y se espera que representen el mismo contenido en idiomas distintos.", 20 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" es una propiedad predefinida, provista por la extensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links], que representa un código de idioma obtenido a partir de un enlace interlingüístico.", 21 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" es una propiedad predefinida, provista por la extensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links], que representa una página de destino obtenida a partir de un enlace interlingüístico.", 22 | "sil-interlanguagelink-hideinterlanguagelinks": "No se puede utilizar la función del analizador porque $wgHideInterlanguageLinks se ha establecido.", 23 | "sil-interlanguagelink-invalidlanguagecode": "No se reconoce «$1» como un código de idioma válido.", 24 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Hay múltiples llamadas a la función de analizador sintáctico, pero con otro código de idioma ($1). Esto debería evitarse, porque normalmente se espera que el contenido de una página esté representado por un único idioma.", 25 | "sil-interlanguagelink-languagetargetcombination-exists": "Ya existe la combinación «$1»:«$2» para la página «$3»; por lo tanto, no se creó ninguna anotación interlingüística.", 26 | "sil-interlanguagelist-missing-linkreference": "A la función del analizador le falta una referencia válida.", 27 | "sil-interlanguagelist-missing-template": "A la función del analizador le falta una plantilla de salida.", 28 | "sil-interlanguageparser-linkreference-error": "La función del analizador experimentó un problema al crear un objeto de título a partir de «$1».", 29 | "sil-search-profile": "por idioma", 30 | "sil-search-profile-tooltip": "Filtrar artículos por anotación de idioma", 31 | "sil-search-languagefilter-label": "Filtrar por idioma", 32 | "sil-search-nolanguagefilter": "Sin filtro de idioma", 33 | "sil-categorypage-languagefilter-active": "Esta categoría contiene información (página, subpágina e imagen) filtrada por idioma \"$1\"." 34 | } 35 | -------------------------------------------------------------------------------- /i18n/eu.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Amaia", 5 | "An13sa", 6 | "Mikel Ibaiba", 7 | "Subi" 8 | ] 9 | }, 10 | "sil-property-ill-alias-language": "Eduki orriaren hizkuntza", 11 | "sil-property-ill-alias-reference": "Hizkuntza-arteko erreferentzia", 12 | "sil-property-iwl-alias-language": "Interwiki hizkuntza", 13 | "sil-property-iwl-alias-reference": "Interwiki erreferentzia", 14 | "sil-property-alias-container": "Hizkuntzen arteko loturak ditu", 15 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" ez da hizkuntza kode baliogarri moduan aitortu.", 16 | "sil-interlanguagelist-missing-linkreference": "Funtzio aztertzaileari balio onargarri bat falta zaio.", 17 | "sil-interlanguageparser-linkreference-error": "Funtzio aztertzaileak arazo bat izan du \"$1\"-(e)tik izenburu objektu bat sortzeko.", 18 | "sil-search-profile": "Hizkuntzaren arabera", 19 | "sil-search-profile-tooltip": "Hizkuntza oharpen arabera artikuluak iragazi", 20 | "sil-search-languagefilter-label": "Iragazi hizkuntzaren arabera", 21 | "sil-search-nolanguagefilter": "Hizkuntzaren araberako iragazkirik gabe", 22 | "sil-categorypage-languagefilter-active": "Kategoria honek \"$1\" hizkuntzak iragazitako informazioa (orria, azpikategoria, eta irudia) dauka." 23 | } 24 | -------------------------------------------------------------------------------- /i18n/fa.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Alirezaaa", 5 | "Beginneruser", 6 | "DEXi", 7 | "Mahdy Saffar", 8 | "Reza1615" 9 | ] 10 | }, 11 | "sil-property-ill-alias-language": "زبان محتوای صفحه", 12 | "sil-property-ill-alias-reference": "منبع میان‌زبان", 13 | "sil-property-iwl-alias-language": "زبان میان‌ویکی", 14 | "sil-property-iwl-alias-reference": "منبع میان‌ویکی", 15 | "sil-property-alias-container": "پیوند بین‌زبانی دارد", 16 | "sil-search-profile": "با زبان", 17 | "sil-search-profile-tooltip": "پالایش مقالات با تفسیر زبان", 18 | "sil-search-languagefilter-label": "پالایش با زبان", 19 | "sil-search-nolanguagefilter": "بدون پالایش زبان" 20 | } 21 | -------------------------------------------------------------------------------- /i18n/fi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "01miki10", 5 | "Pyscowicz" 6 | ] 7 | }, 8 | "sil-property-ill-alias-language": "Sivun sisällön kieli", 9 | "sil-property-ill-alias-reference": "Kieltenväliset viittauksen", 10 | "sil-property-iwl-alias-language": "Interwiki-kieli", 11 | "sil-property-iwl-alias-reference": "Interwiki-viittaus", 12 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" ei tunnistettu kelvolliseksi kielikoodiksi.", 13 | "sil-search-profile": "Kielen mukaan", 14 | "sil-search-languagefilter-label": "Suodata kielen perusteella", 15 | "sil-search-nolanguagefilter": "Ei kielisuojatusta" 16 | } 17 | -------------------------------------------------------------------------------- /i18n/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Element303", 5 | "Gomoko", 6 | "Macofe", 7 | "Nicolapps", 8 | "Thibaut120094", 9 | "Urhixidur", 10 | "Verdy p", 11 | "Wladek92" 12 | ] 13 | }, 14 | "sil-desc": "Une extension de [https://www.semantic-mediawiki.org Semantic MediaWiki] pour créer et gérer des liens interlangues.", 15 | "sil-property-ill-alias-language": "Langue du contenu de la page", 16 | "sil-property-ill-alias-reference": "Référence interlangue", 17 | "sil-property-iwl-alias-language": "Langue interwiki", 18 | "sil-property-iwl-alias-reference": "Référence interwiki", 19 | "sil-property-alias-container": "A un lien interlangue", 20 | "smw-pa-property-predefined__sil_container": "« $1 » est une propriété prédéfinie qui représente une entité conteneur servant à décrire les informations liées aux liens interlangues. Ceci est fournie par l’extension [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Liens interlangues sémantiques].", 21 | "smw-pa-property-predefined__sil_ill_lang": "« $1 » est une propriété prédéfinie qui contient un code de langue annoté. Ceci est fourni par l’extension [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Liens interlangues sémantiques].", 22 | "smw-pa-property-predefined__sil_ill_ref": "« $1 » est une propriété prédéfinie qui contient une référence arbitraire. Ceci est fourni par l’extension [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Liens sémantiques interlangues].", 23 | "smw-pa-property-predefined-long__sil_ill_ref": "Les entités ayant la même référence sont mutuellement liées et supposées représenter un contenu similaire dans différentes langues.", 24 | "smw-pa-property-predefined__sil_iwl_lang": "« $1 » est une propriété prédéfinie qui représente un code de langue dérivé d’un lien interwiki. Ceci est fourni par l’extension [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Liens interlangues sémantiques].", 25 | "smw-pa-property-predefined__sil_iwl_ref": "« $1 » est une propriété prédéfinie qui représente une page cible dérivée d’un lien interwiki. Ceci est fourni par l’extension [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Liens interlangues sémantiques].", 26 | "sil-interlanguagelink-hideinterlanguagelinks": "La fonction n’a pas pu être utilisée car $wgHideInterlanguageLinks est défini.", 27 | "sil-interlanguagelink-invalidlanguagecode": "« $1 » n’a pas été reconnu comme code de langue valide.", 28 | "sil-interlanguagelink-multiplecalls-different-languagecode": "La fonction d’analyse a été appelée plusieurs fois mais avec un code de langue différent (« $1 »), ce qui doit être évité, car le contenu d’une page est en général attendu dans une seule langue.", 29 | "sil-interlanguagelink-languagetargetcombination-exists": "La combinaison « $1 »:« $2 » existe déjà pour la page « $3 », donc aucune autre annotation interlangues n’a été créée.", 30 | "sil-interlanguagelist-missing-linkreference": "Une référence valide est manquante pour la fonction de l’analyseur.", 31 | "sil-interlanguagelist-missing-template": "Un modèle de format de sortie est manquant pour la fonction de l’analyseur.", 32 | "sil-interlanguageparser-linkreference-error": "La fonction d’analyse eu un problème pour créer un objet de titre avec « $1 ».", 33 | "sil-search-profile": "Par langue", 34 | "sil-search-profile-tooltip": "Filtrer les articles par annotation de langue", 35 | "sil-search-languagefilter-label": "Filtrer par langue", 36 | "sil-search-nolanguagefilter": "Aucun filtre de langue", 37 | "sil-categorypage-languagefilter-active": "Cette catégorie contient des informations (de pages, sous-catégories ou images) qui sont filtrées par la langue « $1 »." 38 | } 39 | -------------------------------------------------------------------------------- /i18n/gl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Banjo", 5 | "Elisardojm" 6 | ] 7 | }, 8 | "sil-desc": "Extensión de [https://www.semantic-mediawiki.org MediaWiki Semántica] para crear e xestionar ligazóns interlingüísticas", 9 | "sil-property-ill-alias-language": "Lingua do contido da páxina", 10 | "sil-property-ill-alias-reference": "Referencia interlingüística", 11 | "sil-property-iwl-alias-language": "Idioma interwiki", 12 | "sil-property-iwl-alias-reference": "Referencia interwiki", 13 | "sil-property-alias-container": "Ten unha ligazón interlingüística", 14 | "smw-pa-property-predefined__sil_container": "\"$1\" é unha propiedade predefinida que representa unha entidade contedora para describir información relativa a ligazóns interlingüísticas e é proporcionada pola extensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Ligazóns Interidioma Semánticas].", 15 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" é unha propiedade predefinida que contén un código de lingua anotado e é proporcionado pola extensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Ligazóns Interidioma Semánticas].", 16 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\" é unha propiedade predefinida que contén unha referencia arbitraria e é proporcionado pola extensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Ligazóns Interidioma Semánticas].", 17 | "smw-pa-property-predefined-long__sil_ill_ref": "As entidades coa mesma referencia están ligadas e espérase que representen contido similar en diferentes linguas.", 18 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" é unha propiedade predefinida e representa un código de lingua derivado dunha ligazón interwiki e é proporcionado pola extensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Ligazóns Interidioma Semánticas].", 19 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" é unha propiedade predefinida e representa unha páxina obxectivo derivada dunha ligazón interwiki e é proporcionado pola extensión [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Ligazóns Interidioma Semánticas].", 20 | "sil-interlanguagelink-hideinterlanguagelinks": "Non se pode utilizar a función do analizador porque $wgHideInterlanguageLinks está activa.", 21 | "sil-interlanguagelink-invalidlanguagecode": "Non se recoñece \"$1\" como código de idioma válido.", 22 | "sil-interlanguagelink-multiplecalls-different-languagecode": "A función de análise foi chamada varias veces pero cun código de lingua diferente (\"$1\") o que debe evitarse xa que o contido dunha páxina xeralmente espérase que estea representado nunha única lingua.", 23 | "sil-interlanguagelink-languagetargetcombination-exists": "Xa existe a combinación \"$1\":\"$2\" para a páxina \"$3\", polo tanto, non se creou ningunha anotación interlingüística.", 24 | "sil-interlanguagelist-missing-linkreference": "Á función do analizador fáltalle unha referencia válida.", 25 | "sil-interlanguagelist-missing-template": "Á función do analizador fáltalle un modelo de saída.", 26 | "sil-interlanguageparser-linkreference-error": "A función do analizador experimentou un problema ó crear un objecto de título a partir de \"$1\".", 27 | "sil-search-profile": "por idioma", 28 | "sil-search-profile-tooltip": "Filtrar artigo por anotación de idioma", 29 | "sil-search-languagefilter-label": "Filtro por lingua", 30 | "sil-search-nolanguagefilter": "Sen filtro de idioma", 31 | "sil-categorypage-languagefilter-active": "Esta categoría contén información (páxina, subpáxina e imaxe) filtrada polo idioma \"$1\"." 32 | } 33 | -------------------------------------------------------------------------------- /i18n/he.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Amire80", 5 | "Guycn2", 6 | "המקיסט" 7 | ] 8 | }, 9 | "sil-desc": "הרחבת [https://www.semantic-mediawiki.org מדיה־ויקי סמנטית] שמטרתה ליצור ולנהל קישורים בכל השפות", 10 | "sil-property-ill-alias-language": "שפת התוכן של הדף", 11 | "sil-property-ill-alias-reference": "מקור בין־לשוני", 12 | "sil-property-iwl-alias-language": "שפת בין־ויקי", 13 | "sil-property-iwl-alias-reference": "הפניית בין־ויקי", 14 | "sil-property-alias-container": "בעל קישור בין־לשוני", 15 | "smw-pa-property-predefined__sil_container": "\"$1\" הוא מאפיין מוגדר מראש שמייצג ישות מכילה לתיאור מידע הקשור לקישורים בין שפות והוא מסופק על־ידי ההרחבה [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 16 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" הוא מאפיין מוגדר מראש שמכיל קוד שפה מוער והוא מסופק על־ידי ההרחבה [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 17 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\" הוא מאפיין מוגדר מראש שמכיל התייחסות שרירותית והוא מסופק על־ידי ההרחבה [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 18 | "smw-pa-property-predefined-long__sil_ill_ref": "ישויות עם אותה התייחסות מקושרות זו לזו וצפויות לייצג תוכן דומה בשפות שונות.", 19 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" הוא מאפיין מוגדר מראש והוא מיוצג קוד שפה שמוסק מקישור בין־ויקי והוא מסופק על־ידי ההרחבה [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 20 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" הוא מאפיין מוגדר מראש והוא מייצג דף יעד שמוסק מקישור בין־ויקי והוא מסופק על־ידי ההרחבה [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 21 | "sil-interlanguagelink-hideinterlanguagelinks": "לא ניתן להשתמש בפונקציית המפענח כי מוגדר $wgHideInterlanguageLinks.", 22 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" לא זוהה בתור קוד שפה תקין.", 23 | "sil-interlanguagelink-multiplecalls-different-languagecode": "פונקציית המפענח נקראה כמה פעמים אבל עם קוד שפה שונה (\"$1\"), ויש להימנע מזה מכיוון שתוכן של דף בדרך־כלל צפוי להיות מיוצג על־ידי שפה אחת.", 24 | "sil-interlanguagelink-languagetargetcombination-exists": "הצירוף \"$1\":\"$2\" כבר קיים עבור הדף \"$3\" ולכן לא נוצרה הערה נוספת בין־לשונית.", 25 | "sil-interlanguagelist-missing-linkreference": "לפונקציית המפענח חסרה התייחסות חוקית.", 26 | "sil-interlanguagelist-missing-template": "בפונקציית המפענח חסרה תבנית פלט.", 27 | "sil-interlanguageparser-linkreference-error": "לפונקציית המפענח הייתה בעיה ליצור עצם כותרת מתוך \"$1\".", 28 | "sil-search-profile": "לפי שפה", 29 | "sil-search-profile-tooltip": "לסנן ערכים לפי הערת שפה", 30 | "sil-search-languagefilter-label": "סינון לפי שפה", 31 | "sil-search-nolanguagefilter": "אין מסנן שפה", 32 | "sil-categorypage-languagefilter-active": "הקטגוריה הזאת מכילה מידע (דף, קטגוריית־משנה ותמונה) שמסונן לפי השפה \"$1\"." 33 | } 34 | -------------------------------------------------------------------------------- /i18n/hi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "चक्रपाणी" 5 | ] 6 | }, 7 | "sil-property-ill-alias-language": "पेज सामग्री की भाषा", 8 | "sil-property-ill-alias-reference": "अंतरभाषी संदर्भ", 9 | "sil-property-iwl-alias-language": "अंतरविकि भाषा", 10 | "sil-property-iwl-alias-reference": "अंतरविकि संदर्भ", 11 | "sil-property-alias-container": "अन्तरभाषी लिंक है", 12 | "sil-search-profile": "भाषा अनुसार", 13 | "sil-search-profile-tooltip": "भाषा टिप्पणी अनुसार लेखों को छानें", 14 | "sil-search-languagefilter-label": "भाषा अनुसार छानें", 15 | "sil-search-nolanguagefilter": "कोई भाषा फ़िल्टर नहीं" 16 | } 17 | -------------------------------------------------------------------------------- /i18n/ia.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "McDutchie" 5 | ] 6 | }, 7 | "sil-desc": "Extension pro [https://www.semantic-mediawiki.org Semantic MediaWiki] pro crear e gerer ligamines interlingual", 8 | "sil-property-ill-alias-language": "Lingua del contento del pagina", 9 | "sil-property-ill-alias-reference": "Referentia interlinguistic", 10 | "sil-property-iwl-alias-language": "Lingua interwiki", 11 | "sil-property-iwl-alias-reference": "Referentia interwiki", 12 | "sil-property-alias-container": "Ha un ligamine interlinguistic", 13 | "smw-pa-property-predefined__sil_container": "\"$1\" es un proprietate predefinite que representa un entitate contentor pro describer informationes concernente le ligamines inter linguas e es fornite per le extension [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 14 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" es un proprietate predefinite que contine un codice de lingua annotate e es fornite per le extension [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 15 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\" es un proprietate predefinite que contine un referentia arbitrari e es fornite per le extension [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 16 | "smw-pa-property-predefined-long__sil_ill_ref": "Le entitates con le mesme referentia es interligate e se expecta de representar contento similar in differente linguas.", 17 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" es un proprietate predefinite que representa un codice de lingua derivate de un ligamine interwiki e es fornite per le extension [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 18 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" es un proprietate predefinite que representa un pagina de destination derivate de un ligmine interwiki e es fornite per le extension [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 19 | "sil-interlanguagelink-hideinterlanguagelinks": "Le function analysator non pote esser usate perque $wgHideInterlanguageLinks es definite.", 20 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" non es recognoscite como codice de lingua valide.", 21 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Le function analysator ha essite appellate plure vices ma con un differente codice de lingua (\"$1\"). Isto debe esser evitate perque le contento de un pagina es normalmente representate per un sol lingua.", 22 | "sil-interlanguagelink-languagetargetcombination-exists": "Le combination \"$1\":\"$2\" ja existe pro le pagina \"$3\". Per consequente, nulle annotation interlinguistic ha essite addite.", 23 | "sil-interlanguagelist-missing-linkreference": "Al function analysator manca un referentia valide.", 24 | "sil-interlanguagelist-missing-template": "Al function analysator manca un patrono de output.", 25 | "sil-interlanguageparser-linkreference-error": "Le function analysator habeva un problema creante un objecto de titulo ab \"$1\".", 26 | "sil-search-profile": "Per lingua", 27 | "sil-search-profile-tooltip": "Filtrar articulos per annotation de lingua", 28 | "sil-search-languagefilter-label": "Filtrar per lingua", 29 | "sil-search-nolanguagefilter": "Sin filtro de lingua", 30 | "sil-categorypage-languagefilter-active": "Iste categoria contine information (pagina, subcategoria e imagine) que es filtrate per le lingua \"$1\"." 31 | } 32 | -------------------------------------------------------------------------------- /i18n/id.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bagas Chrisara" 5 | ] 6 | }, 7 | "sil-property-ill-alias-language": "Bahasa konten halaman", 8 | "sil-property-ill-alias-reference": "Referensi antarbahasa", 9 | "sil-property-iwl-alias-language": "Bahasa interwiki", 10 | "sil-property-iwl-alias-reference": "Rujukan interwiki", 11 | "sil-property-alias-container": "Pranala antarbahasa has", 12 | "sil-search-profile": "Menurut Bahasa" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/it.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Alexmar983", 5 | "Beta16", 6 | "JackLantern" 7 | ] 8 | }, 9 | "sil-property-ill-alias-language": "Lingua del contenuto della pagina", 10 | "sil-property-iwl-alias-language": "Lingua interwiki", 11 | "sil-property-alias-container": "Ha collegamento interlinguistico", 12 | "sil-interlanguageparser-linkreference-error": "La funzione parser ha avuto un problema nel creare un oggetto titolo da \"$1\".", 13 | "sil-search-profile": "Per lingua", 14 | "sil-search-languagefilter-label": "Filtro per lingua", 15 | "sil-search-nolanguagefilter": "Nessun filtro di lingua", 16 | "sil-categorypage-languagefilter-active": "Questa categoria contiene le informazioni (pagina, sottocategoria e immagine) filtrate dalla lingua \"$1\"." 17 | } 18 | -------------------------------------------------------------------------------- /i18n/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Shirayuki", 5 | "Sujiniku", 6 | "Suyama", 7 | "Wat", 8 | "mwjames", 9 | "ネイ" 10 | ] 11 | }, 12 | "sil-property-ill-alias-language": "ページ本文の言語", 13 | "sil-property-alias-container": "言語間リンクがあります", 14 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" は識別可能な言語コードではありません。", 15 | "sil-search-profile": "言語で絞り込む", 16 | "sil-search-languagefilter-label": "言語で絞り込み", 17 | "sil-categorypage-languagefilter-active": "このカテゴリには言語\"$1\"でフィルターされている情報 (ページ、下位カテゴリ、画像) が含まれています。" 18 | } 19 | -------------------------------------------------------------------------------- /i18n/ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Nuevo Paso", 5 | "Ykhwong" 6 | ] 7 | }, 8 | "sil-desc": "언어 간 링크를 만들고 관리하기 위한 [https://www.semantic-mediawiki.org 시맨틱 미디어위키] 확장 기능입니다", 9 | "sil-property-ill-alias-language": "문서 내용 언어", 10 | "sil-property-ill-alias-reference": "언어 간 참조", 11 | "sil-property-iwl-alias-language": "인터위키 언어", 12 | "sil-property-iwl-alias-reference": "인터위키 참조", 13 | "sil-property-alias-container": "언어 간 링크가 있습니다", 14 | "sil-interlanguagelink-hideinterlanguagelinks": "$wgHideInterlanguageLinks가 설정되어 있기 때문에 파서 함수를 사용할 수 없습니다.", 15 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\"는 유효한 언어 코드로 인식되지 않습니다.", 16 | "sil-interlanguagelist-missing-linkreference": "파서 함수에 유효한 참조가 없습니다.", 17 | "sil-interlanguagelist-missing-template": "파서 함수에 출력 탬플릿이 없습니다.", 18 | "sil-interlanguageparser-linkreference-error": "파서 함수에 문제가 있어 \"$1\"(으)로부터 제목 객체를 만들지 못했습니다.", 19 | "sil-search-profile": "언어별", 20 | "sil-search-profile-tooltip": "언어 주석으로 문서 필터링", 21 | "sil-search-languagefilter-label": "언어별 필터", 22 | "sil-search-nolanguagefilter": "언어 필터 없음", 23 | "sil-categorypage-languagefilter-active": "이 분류는 \"$1\" 언어로 필터링된 정보(문서, 하위 분류, 그림)를 포함하고 있습니다." 24 | } 25 | -------------------------------------------------------------------------------- /i18n/ksh.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Purodha" 5 | ] 6 | }, 7 | "sil-desc": "E Zohsazprojramm zom Zohsazprojramm [https://www.semantic-mediawiki.org Semantesch MeedijaWikki] öm Lenks zwesche ongerscheidlijje Schprohche-Väsjuhne vun Sigge enzereeschte un ze verwallde.", 8 | "sil-property-ill-alias-language": "De Schprohch vum Enhallt vun dä Sigg", 9 | "sil-property-ill-alias-reference": "Bezoch zwesche Schprohche", 10 | "sil-property-iwl-alias-language": "Engewikkischprohch", 11 | "sil-property-iwl-alias-reference": "Engewikkibezoch", 12 | "sil-property-alias-container": "Hädd ene Lengk obb anndere Schprohche", 13 | "smw-pa-property-predefined__sil_container": "„$1“ ess_en Eijeschaff, di vum Wikki faßjelaat weed. Di wääde och [https://www.semantic-mediawiki.org/wiki/Help:Special_properties äxtra Eijeschaffte] jenannt.\n\nSe sammeld Enfommazuhne em Zersammehang met Schprohche övver Sigge.\nSe weed övver dat Zohsazprojramm [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Semantic Interlanguage Links] en et Wikki jebraat.", 14 | "sil-interlanguagelink-hideinterlanguagelinks": "Heh di Paaserfonxjuhn kam_mer nit bruche, weil dem Wikki sing Enschtällong „$wgHideInterlanguageLinks“ jesaz es.", 15 | "sil-interlanguagelink-invalidlanguagecode": "„$1“ wohr nit als e Köözel för en Schprohch ze verschtonn.", 16 | "sil-interlanguagelink-languagetargetcombination-exists": "De Kombinazjuhn „$1“:„$2“ för et Zohoodene vun Schprohche es för di Sigg „$3“ alld en jebruch. Dröm es datsällve nit norr_ens faßjehallde woode.", 17 | "sil-interlanguagelist-missing-linkreference": "Em Oprohf vun dä Paaserfonxjuhn fähld ene jölteje Bezoch obb en Schprohch.", 18 | "sil-interlanguagelist-missing-template": "Em Oprohf vun dä Paaserfonxjuhn fähld en Schablohn för jäd aanzezeije.", 19 | "sil-interlanguageparser-linkreference-error": "En dä Paaserfonxjuhn kunnt kei Objäk vun dä Klass „Övverschreff“ för „$1“ aanjelaat wähde.", 20 | "sil-search-profile": "Pä Schprohch", 21 | "sil-search-profile-tooltip": "Sigge övver de verbonge Schprohche ußwähle", 22 | "sil-search-languagefilter-label": "Övver de Schprohch ußwähle", 23 | "sil-search-nolanguagefilter": "Nidd övver de Schprohch ußwähle", 24 | "sil-categorypage-languagefilter-active": "Heh di Saachjopp hät pä Schprohch „$1“ ußjewählte Sigge, Saachjroppe un Datteije." 25 | } 26 | -------------------------------------------------------------------------------- /i18n/ku-latn.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "George Animal" 5 | ] 6 | }, 7 | "sil-property-iwl-alias-language": "Zimanê înterwîkiyê", 8 | "sil-search-profile": "li gorî ziman" 9 | } 10 | -------------------------------------------------------------------------------- /i18n/lb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Robby" 5 | ] 6 | }, 7 | "sil-property-ill-alias-language": "Sprooch vum Inhalt vun der Säit", 8 | "sil-property-ill-alias-reference": "Sproochreferenz", 9 | "sil-property-iwl-alias-language": "Interwiki-Sprooch", 10 | "sil-property-iwl-alias-reference": "Interwiki-Referenz", 11 | "sil-property-alias-container": "Huet e Sproochlinken", 12 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" gouf net als valabele Sproochcode erkannt.", 13 | "sil-interlanguagelist-missing-linkreference": "D'Parser-Funktioun huet keng valabel Referenz.", 14 | "sil-search-profile": "no Sprooch", 15 | "sil-search-languagefilter-label": "Filter no der Sprooch", 16 | "sil-search-nolanguagefilter": "Kee Sproochfilter", 17 | "sil-categorypage-languagefilter-active": "An dëser Kategorie sinn Informatiounen (Säit, Ënnerkategorie a Bild) déi no der Sprooch \"$1\" gefiltert sinn." 18 | } 19 | -------------------------------------------------------------------------------- /i18n/li.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ooswesthoesbes" 5 | ] 6 | }, 7 | "sil-desc": "'n [https://www.semantic-mediawiki.org Semantic MediaWiki]-oetbrejing veur 't make en behieëre van interwiki's", 8 | "sil-property-ill-alias-language": "Spraok worin dees pagina steit", 9 | "sil-property-ill-alias-reference": "Interwiki-rifferensie", 10 | "sil-property-iwl-alias-language": "Interwiki-spraok", 11 | "sil-property-iwl-alias-reference": "Interwiki-rifferensie", 12 | "sil-property-alias-container": "Haet interwiki's", 13 | "sil-interlanguagelink-hideinterlanguagelinks": "De parserfunctie kan neet waere gebroek ómdet $wgHideInterlanguageLinks is ingestèld.", 14 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" woort neet herkènd es 'n geljige spraokcode.", 15 | "sil-search-profile": "Op Spraok", 16 | "sil-search-profile-tooltip": "Filtjer artikele op spraokannotaasje", 17 | "sil-search-languagefilter-label": "Filtjer op spraok", 18 | "sil-search-nolanguagefilter": "Geine spraokfiltjer", 19 | "sil-categorypage-languagefilter-active": "Dees categorie bevat infermasie (pagina, óngercategorie en plaetje) det weurt gefiltjerd door \"$1\"-spraok." 20 | } 21 | -------------------------------------------------------------------------------- /i18n/lt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Eitvys200", 5 | "Manvydasz", 6 | "Nokeoo", 7 | "Zygimantus" 8 | ] 9 | }, 10 | "sil-property-alias-container": "Turi tarpkalbinę nuorodą", 11 | "sil-interlanguagelink-invalidlanguagecode": "„$1“ nebuvo atpažintas kaip galiojantis kalbos kodas.", 12 | "sil-search-profile": "Pagal Kalbą", 13 | "sil-search-profile-tooltip": "Filtruoti straipsnius pagal kalbos anotaciją", 14 | "sil-search-languagefilter-label": "Filtruoti pagal kalbą", 15 | "sil-search-nolanguagefilter": "Nėra kalbos filtro" 16 | } 17 | -------------------------------------------------------------------------------- /i18n/mg.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jagwar" 5 | ] 6 | }, 7 | "sil-property-ill-alias-language": "Tenin'ny votoatiny", 8 | "sil-property-ill-alias-reference": "Tsiahy iraisan'ny teny", 9 | "sil-property-iwl-alias-language": "Fiteny interwiki", 10 | "sil-property-iwl-alias-reference": "Tsiahy interwiki", 11 | "sil-property-alias-container": "Manana rohy iraisam-piteny", 12 | "sil-search-profile": "Araka ny fiteny", 13 | "sil-search-profile-tooltip": "Hanasivana lahatsoratra araka ny filazan'ny fiteny", 14 | "sil-search-languagefilter-label": "Hanivana araka ny teny", 15 | "sil-search-nolanguagefilter": "Tsy misy sivam-piteny" 16 | } 17 | -------------------------------------------------------------------------------- /i18n/mk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Bjankuloski06" 5 | ] 6 | }, 7 | "sil-desc": "Додаток за [https://www.semantic-mediawiki.org Семантички МедијаВики] за создавање и раководење со меѓујазични врски", 8 | "sil-property-ill-alias-language": "Јазик на содржината на страницата", 9 | "sil-property-ill-alias-reference": "Меѓујазичен навод", 10 | "sil-property-iwl-alias-language": "Меѓупроектен јазик", 11 | "sil-property-iwl-alias-reference": "Навод на меѓупроектните", 12 | "sil-property-alias-container": "Има меѓујазична врска", 13 | "smw-pa-property-predefined__sil_container": "„$1“ е предодредено својство што преставува пополнувачка единицаза опишување на информации што се однесуваат на меѓујазични врски. Го даваат [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Семантичките меѓујазични врски],", 14 | "smw-pa-property-predefined__sil_ill_lang": "„$1“ е предодредено својство кое содржи прибележан јазичен код. Го даваат [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Семантичките меѓујазични врски],", 15 | "smw-pa-property-predefined__sil_ill_ref": "„$1“ е предодредено својство кое содржи произволен навод. Го даваат [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Семантичките меѓујазични врски],", 16 | "smw-pa-property-predefined-long__sil_ill_ref": "Единиците со ист навод се меѓусебно поврзани и од нив се очекува да претставуваат слична содржина на различни јазици.", 17 | "smw-pa-property-predefined__sil_iwl_lang": "„$1“ е предодредено својство кое претставува јазичен код изведен од меѓујазична врска. Го даваат [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Семантичките меѓујазични врски],", 18 | "smw-pa-property-predefined__sil_iwl_ref": "„$1“ е предодредено својство кое претставува цела страница изведена од меѓујазична врска. Го даваат [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Семантичките меѓујазични врски],", 19 | "sil-interlanguagelink-hideinterlanguagelinks": "Расчленувачката функција не може да се користи бидејќи е зададено $wgHideInterlanguageLinks.", 20 | "sil-interlanguagelink-invalidlanguagecode": "Не го препознавам „$1“ како важечки јазичен код.", 21 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Расчленувачката функција беше повикана неколку пати, но со различен јазичен код („$1“) кој треба да се избегнува, бидејќи содржината на една страница се очекува да биде на само еден јазик.", 22 | "sil-interlanguagelink-languagetargetcombination-exists": "Комбинацијата „$1“:„$2“ веќе постои за страницата „$3“, па затоа не создадов дополнители меѓујазични прибелешки.", 23 | "sil-interlanguagelist-missing-linkreference": "На расчленувачката функција ѝ недостасува важечки навод.", 24 | "sil-interlanguagelist-missing-template": "На расчленувачката функција ѝ недостасува изводна предлошка.", 25 | "sil-interlanguageparser-linkreference-error": "Расчленувачката функција имаше проблем со создавањето на насловен објект од „$1“.", 26 | "sil-search-profile": "по јазик", 27 | "sil-search-profile-tooltip": "Филтрирај ги статиите по јазични прибелешки", 28 | "sil-search-languagefilter-label": "Филтрирај по јазик", 29 | "sil-search-nolanguagefilter": "Нема јазичен филтер", 30 | "sil-categorypage-languagefilter-active": "Категоријава содржи информации (страница, поткатегорија и слика) што се филтрираат по јазикот „$1“." 31 | } 32 | -------------------------------------------------------------------------------- /i18n/mr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Sureshkhole", 5 | "V.narsikar", 6 | "अभय नातू" 7 | ] 8 | }, 9 | "sil-property-ill-alias-reference": "आंतरभाषिक संदर्भ", 10 | "sil-property-iwl-alias-language": "आंतरविकी भाषा", 11 | "sil-property-iwl-alias-reference": "आंतरविकी संदर्भ", 12 | "sil-property-alias-container": "यास आंतरभाषिक दुवे आहेत", 13 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" हा वैध भाषा संकेत म्हणून ओळखल्या गेला नाही.", 14 | "sil-search-profile": "भाषेनुसार", 15 | "sil-search-languagefilter-label": "भाषेनुसार गाळा", 16 | "sil-search-nolanguagefilter": "भाषा गाळणी नाही" 17 | } 18 | -------------------------------------------------------------------------------- /i18n/nb.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jon Harald Søby", 5 | "Orf3us" 6 | ] 7 | }, 8 | "sil-desc": "En [https://www.semantic-mediawiki.org Semantic MediaWiki]-utvidelse for å opprette og behandle språklenker", 9 | "sil-property-ill-alias-language": "Sideinnholdsspråk", 10 | "sil-property-ill-alias-reference": "Språkreferanse", 11 | "sil-property-iwl-alias-language": "Interwikispråk", 12 | "sil-property-iwl-alias-reference": "Språkreferanse", 13 | "sil-property-alias-container": "Har språklenke", 14 | "smw-pa-property-predefined__sil_container": "«$1» er en forhåndsdefinert egenskap som representerer en konteinerentitet for å beskrive språklenkerelatert informasjon og gis av utvidelsen [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 15 | "smw-pa-property-predefined__sil_ill_lang": "«$1» er en forhåndsdefinert egenskap som inneholder en annotert språkkode og gis av utvidelsen [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 16 | "smw-pa-property-predefined__sil_ill_ref": "«$1» er en forhåndsdefinert egenskap som inneholder en vilkårlig referanse og gis av utvidelsen [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 17 | "smw-pa-property-predefined-long__sil_ill_ref": "Entiteter med samme referanse lenkes og forventes å representere lignende innhold på forskjellige språk.", 18 | "smw-pa-property-predefined__sil_iwl_lang": "«$1» er en forhåndsdefinert egenskap og representerer en språkkode hentet fra en interwikilenke og gis av utvidelsen [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 19 | "smw-pa-property-predefined__sil_iwl_ref": "«$1» er en forhåndsdefinert egenskap og representerer en målside hentet fra en interwikilenke informasjon og gis av utvidelsen [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 20 | "sil-interlanguagelink-hideinterlanguagelinks": "Parserfunksjonen kan ikke brukes fordi $wgHideInterlanguageLinks er satt.", 21 | "sil-interlanguagelink-invalidlanguagecode": "«$1» ble ikke gjenkjent som en gyldig språkkode.", 22 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Parserfunksjonen ble kalt flere ganger men med forskjellig språkkode («$1») som bør unngås fordi innholdet til siden generelt sett forventes å kun være på ett språk.", 23 | "sil-interlanguagelink-languagetargetcombination-exists": "Kombinasjonen «$1»:«$2» finnes allerede for siden «$3», og derfor ble ingen flere språkannoteringer opprettet.", 24 | "sil-interlanguagelist-missing-linkreference": "Parserfunksjonen mangler en gyldig referanse.", 25 | "sil-interlanguagelist-missing-template": "Parserfunksjonen mangler en resultatmal.", 26 | "sil-interlanguageparser-linkreference-error": "Parserfunksjonen hadde et problem med å opprette et tittelobjekt fra «$1».", 27 | "sil-search-profile": "Etter språk", 28 | "sil-search-profile-tooltip": "Filtrer artikler etter språkannotering", 29 | "sil-search-languagefilter-label": "Filtrer etter språk", 30 | "sil-search-nolanguagefilter": "Intet språkfilter", 31 | "sil-categorypage-languagefilter-active": "Denne kategorien inneholder informasjon (side, underkategori og bilde) som filtreres etter språket $1." 32 | } 33 | -------------------------------------------------------------------------------- /i18n/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Esketti", 5 | "Hex", 6 | "Mainframe98", 7 | "McDutchie", 8 | "Ooswesthoesbes", 9 | "Rangekill", 10 | "Sjoerddebruin" 11 | ] 12 | }, 13 | "sil-desc": "Een [https://www.semantic-mediawiki.org Semantic MediaWiki]-uitbreiding voor het maken en beheren van interwiki-koppelingen", 14 | "sil-property-ill-alias-language": "Taal van de paginainhoud", 15 | "sil-property-ill-alias-reference": "Interwiki-referentie", 16 | "sil-property-iwl-alias-language": "Interwikitaal", 17 | "sil-property-iwl-alias-reference": "Interwiki-referentie", 18 | "sil-property-alias-container": "Heeft interwikilink", 19 | "smw-pa-property-predefined__sil_container": "“$1” is een voorgedefinieerde eigenschap die een container-entiteit vertegenwoordigt voor de beschrijving van informatie met betrekking tot koppelingen tussen talen. Deze eigenschap wordt geleverd door de uitbreiding [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlingual_Links Semantic Interlingual Links].", 20 | "smw-pa-property-predefined__sil_ill_lang": "“$1” is een voorgedefinieerde eigenschap die een geannoteerde taalcode bevat. Deze eigenschap wordt geleverd door de uitbreiding [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlingual_Links Semantic Interlingual Links].", 21 | "smw-pa-property-predefined__sil_ill_ref": "“$1” is een voorgedefinieerde eigenschap die een willekeurige referentie bevat. Deze eigenschap wordt geleverd door de uitbreiding [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlingual_Links Semantic Interlingual Links].", 22 | "smw-pa-property-predefined-long__sil_ill_ref": "Entiteiten met dezelfde referentie zijn onderling gekoppeld en worden geacht soortgelijke inhoud in verschillende talen te vertegenwoordigen.", 23 | "smw-pa-property-predefined__sil_iwl_lang": "“$1” is een voorgedefinieerde eigenschap en vertegenwoordigt een taalcode die is afgeleid van een interwiki-koppeling. Deze eigenschap wordt geleverd door de uitbreiding [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlingual_Links Semantic Interlingual Links].", 24 | "smw-pa-property-predefined__sil_iwl_ref": "“$1” is een voorgedefinieerde eigenschap en vertegenwoordigt een doelpagina die is afgeleid van een interwiki-koppeling. Deze eigenschap wordt geleverd door de uitbreiding [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlingual_Links Semantic Interlingual Links].", 25 | "sil-interlanguagelink-hideinterlanguagelinks": "De parser-functie kan niet worden gebruikt omdat $wgHideInterlanguageLinks is ingesteld.", 26 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" werd niet herkend als een geldige taalcode.", 27 | "sil-interlanguagelink-multiplecalls-different-languagecode": "De parser-functie werd meerdere keren aangeroepen, maar met een andere taalcode (“$1”). Dit moet worden vermeden omdat de inhoud van een pagina doorgaans wordt geacht in één enkele taal te zijn opgesteld.", 28 | "sil-interlanguagelink-languagetargetcombination-exists": "De combinatie “$1”:“$2” bestaat al voor de pagina “$3”. Daarom is er geen aanvullende annotatie tussen talen gemaakt.", 29 | "sil-interlanguagelist-missing-linkreference": "In de parser-functie ontbreekt een geldige referentie.", 30 | "sil-interlanguagelist-missing-template": "In de parser-functie ontbreekt een uitvoersjabloon.", 31 | "sil-interlanguageparser-linkreference-error": "De parser-functie heeft een probleem ondervonden bij het aanmaken van een titelobject uit “$1”.", 32 | "sil-search-profile": "Op Taal", 33 | "sil-search-profile-tooltip": "Artikelen filteren op taal-annotatie", 34 | "sil-search-languagefilter-label": "Filter op taal", 35 | "sil-search-nolanguagefilter": "Geen taalfilter", 36 | "sil-categorypage-languagefilter-active": "Deze categorie bevat informatie (pagina, subcategorie en afbeelding) die is gefilterd op de taal “$1”." 37 | } 38 | -------------------------------------------------------------------------------- /i18n/oc.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Cedric31" 5 | ] 6 | }, 7 | "sil-property-ill-alias-language": "Lenga del contengut de la pagina", 8 | "sil-property-ill-alias-reference": "Referéncia interlingüistica", 9 | "sil-property-iwl-alias-language": "Lenga interwiki", 10 | "sil-property-iwl-alias-reference": "Referéncia interwiki", 11 | "sil-property-alias-container": "A un ligam interlenga", 12 | "sil-search-profile": "Per lenga", 13 | "sil-search-languagefilter-label": "Filtrar per lenga" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/pam.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Leeheonjin" 5 | ] 6 | }, 7 | "sil-search-profile": "king Amanu" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Chrumps", 5 | "InternerowyGołąb" 6 | ] 7 | }, 8 | "sil-desc": "Rozszerzenie [https://www.semantic-mediawiki.org Semantic MediaWiki] służy do tworzenia i zarządzania linkami międzyjęzykowymi.", 9 | "sil-property-ill-alias-language": "Język zawartości strony", 10 | "sil-property-ill-alias-reference": "Odnośnik międzyjęzykowy", 11 | "sil-property-iwl-alias-language": "Język interwiki", 12 | "sil-property-iwl-alias-reference": "Odnośnik interwiki", 13 | "sil-property-alias-container": "Ma wielojęzykowy link", 14 | "smw-pa-property-predefined__sil_iwl_lang": "„$1” jest predefiniowaną właściwością, reprezentującą kod języka pochodzący z linku interwiki i jest dostarczana przez rozszerzenie [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 15 | "sil-interlanguagelink-hideinterlanguagelinks": "Nie można użyć funkcji parsera, ponieważ ustawiono $wgHideInterlanguageLinks.", 16 | "sil-interlanguagelink-invalidlanguagecode": "„$1” nie jest prawidłowym kodem języka.", 17 | "sil-interlanguagelist-missing-linkreference": "Funkcji parsera brakuje ważnego przypisu", 18 | "sil-interlanguagelist-missing-template": "W funkcji parsera brakuje szablonu wyjściowego.", 19 | "sil-interlanguageparser-linkreference-error": "Funkcja parsera miała problem z utworzeniem obiektu tytułowego z „$1”.", 20 | "sil-search-profile": "Według języka", 21 | "sil-search-profile-tooltip": "Filtruj artykuły na podstawie adnotacji językowych", 22 | "sil-search-languagefilter-label": "Filtruj według języka", 23 | "sil-search-nolanguagefilter": "Bez filtrowania języka", 24 | "sil-categorypage-languagefilter-active": "Ta kategoria zawiera informacje (strona, subkategoria i obraz), która jest filtrowana przez język \"$1\"." 25 | } 26 | -------------------------------------------------------------------------------- /i18n/ps.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Ahmed-Najib-Biabani-Ibrahimkhel", 5 | "شاه زمان پټان" 6 | ] 7 | }, 8 | "sil-property-ill-alias-language": "د مخ د مېنځپانگې ژبه", 9 | "sil-property-ill-alias-reference": "د ژبو خپلمنځي سرچينې", 10 | "sil-property-iwl-alias-language": "ويکي خپلمنځي ژبه", 11 | "sil-property-iwl-alias-reference": "ويکي خپلمنځي سرچينه", 12 | "sil-property-alias-container": "ژبو خپلمنځي وېبتړنې لري", 13 | "sil-search-profile": "د ژبې له مخې", 14 | "sil-search-languagefilter-label": "چاڼگر د ژبې له مخې", 15 | "sil-search-nolanguagefilter": "ژب چاڼگر نشته" 16 | } 17 | -------------------------------------------------------------------------------- /i18n/pt-br.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Eduardo Addad de Oliveira", 5 | "Eduardoaddad", 6 | "Jaideraf", 7 | "Trigonometria87", 8 | "jaideraf" 9 | ] 10 | }, 11 | "sil-desc": "Uma extensão do [https://semantic-mediawiki.org Semantic MediaWiki] para criar e gerenciar links interlinguísticos", 12 | "sil-property-ill-alias-language": "Idioma do conteúdo da página", 13 | "sil-property-ill-alias-reference": "Referência interlinguística", 14 | "sil-property-iwl-alias-language": "Idioma interlíngua", 15 | "sil-property-iwl-alias-reference": "Referência interlíngua", 16 | "sil-property-alias-container": "Tem ligações interlinguísticos", 17 | "smw-pa-property-predefined__sil_container": "\"$1\" é uma propriedade predefinida que representa uma entidade contêiner que descreve informações de links interlínguas e é fornecida pela extensão [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 18 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" é uma propriedade predefinida que contém um código de linguagem anotado e é fornecida pela extensão [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 19 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\" é uma propriedade predefinida que contém uma referência arbitrária e é fornecida pela extensão [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 20 | "smw-pa-property-predefined-long__sil_ill_ref": "Entidades com a mesma referência recebem um interlink e são esperadas que representem conteúdo em línguas diferentes.", 21 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" é uma propriedade predefinida e representa um código de linguagem derivado de uma ligação interwiki e é fornecida pela extensão [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 22 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" é uma propriedade predefinida e representa uma página alvo derivada de uma ligação interwiki e é fornecida pela extensão [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 23 | "sil-interlanguagelink-hideinterlanguagelinks": "A função não pode ser utilizada porque a configuração $wgHideInterlanguageLinks está ativada.", 24 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" não foi reconhecido como um código de idioma válido.", 25 | "sil-interlanguagelink-multiplecalls-different-languagecode": "A função do analisador sintático foi chamada várias vezes mas com um código de língua diferente (\"$1\"), o que se deve evitar porque em geral é esperado que o conteúdo de uma página seja representado por uma única língua.", 26 | "sil-interlanguagelink-languagetargetcombination-exists": "A combinação \"$1\":\"$2\" já existe para a página \"$3\", assim, nenhuma marcação adicional para o idioma foi criada.", 27 | "sil-interlanguagelist-missing-linkreference": "Está faltando uma referência válida para a função.", 28 | "sil-interlanguagelist-missing-template": "Está faltando uma predefinição de saída para a função.", 29 | "sil-interlanguageparser-linkreference-error": "A função teve um problema ao criar um objeto de título a partir de \"$1\".", 30 | "sil-search-profile": "Por idioma", 31 | "sil-search-profile-tooltip": "Filtrar páginas por marcação de idioma", 32 | "sil-search-languagefilter-label": "Filtrar por idioma", 33 | "sil-search-nolanguagefilter": "Sem filtro de idioma", 34 | "sil-categorypage-languagefilter-active": "Esta categoria contém informações (página, subcategoria e imagem) que são filtradas pelo idioma \"$1\"." 35 | } 36 | -------------------------------------------------------------------------------- /i18n/pt.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Hamilton Abreu", 5 | "Macofe", 6 | "Vitorvicentevalente", 7 | "jaideraf" 8 | ] 9 | }, 10 | "sil-desc": "Uma extensão do [https://www.semantic-mediawiki.org MediaWiki Semântico] para criar e gerir hiperligações interlínguas", 11 | "sil-property-ill-alias-language": "Língua do conteúdo da página", 12 | "sil-property-ill-alias-reference": "Referência interlínguas", 13 | "sil-property-iwl-alias-language": "Língua interwikis", 14 | "sil-property-iwl-alias-reference": "Referência interwikis", 15 | "sil-property-alias-container": "Tem hiperligação interlínguas", 16 | "smw-pa-property-predefined__sil_container": "\"$1\" é uma propriedade predefinida que representa uma entidade de encapsulamento para descrever informações relacionadas com links interlínguas e é fornecida pela extensão [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 17 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" é uma propriedade predefinida que contém um código de língua anotado e é fornecida pela extensão [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 18 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\" é uma propriedade predefinida que contém uma referência arbitrária e é fornecida pela extensão [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 19 | "smw-pa-property-predefined-long__sil_ill_ref": "Entidades com a mesma referência estão interligadas e é esperado que representem conteúdo semelhante em línguas diferentes.", 20 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" é uma propriedade predefinida e representa um código de língua derivado de um link interwikis e é fornecida pela extensão [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 21 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" é uma propriedade predefinida e representa uma página de destino derivada de um link interwikis e é fornecida pela extensão [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 22 | "sil-interlanguagelink-hideinterlanguagelinks": "A função não pode ser utilizada porque a configuração $wgHideInterlanguageLinks está ativada.", 23 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" não foi reconhecido como um código de língua válido.", 24 | "sil-interlanguagelink-multiplecalls-different-languagecode": "A função do analisador sintático foi chamada várias vezes mas com um código de língua diferente (\"$1\"), o que se deve evitar porque em geral é esperado que o conteúdo de uma página seja representado por uma única língua.", 25 | "sil-interlanguagelink-languagetargetcombination-exists": "A combinação \"$1\":\"$2\" já existe para a página \"$3\" portanto não foi criada nenhuma anotação interlínguas adicional.", 26 | "sil-interlanguagelist-missing-linkreference": "Está em falta uma referência válida para a função.", 27 | "sil-interlanguagelist-missing-template": "Está em falta uma predefinição de saída para a função.", 28 | "sil-interlanguageparser-linkreference-error": "A função teve um problema ao criar um objeto de título a partir de \"$1\".", 29 | "sil-search-profile": "por língua", 30 | "sil-search-profile-tooltip": "Filtrar artigos por anotação de língua", 31 | "sil-search-languagefilter-label": "Filtrar por língua", 32 | "sil-search-nolanguagefilter": "Sem filtro de língua", 33 | "sil-categorypage-languagefilter-active": "Esta categoria contém informação (página, subcategoria e imagem) que está filtrada pela língua \"$1\"." 34 | } 35 | -------------------------------------------------------------------------------- /i18n/qqq.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Kghbln", 5 | "Purodha", 6 | "Siebrand", 7 | "Umherirrender", 8 | "mwjames" 9 | ] 10 | }, 11 | "sil-desc": "{{desc|name=Semantic Interlanguage Links|url=https://www.mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links}}\nAn extension to deploy language links effortless using Semantic MedaWiki.", 12 | "sil-property-ill-alias-language": "This is the name of a [https://semantic-mediawiki.org/wiki/Property property] as defined by [https://semantic-mediawiki.org/ Semantic MediaWiki].\n{{Doc-smw-sp}}", 13 | "sil-property-ill-alias-reference": "This is the name of a [https://semantic-mediawiki.org/wiki/Property property] as defined by [https://semantic-mediawiki.org/ Semantic MediaWiki].\n{{Doc-smw-sp}}", 14 | "sil-property-iwl-alias-language": "This is the name of a [https://semantic-mediawiki.org/wiki/Property property] as defined by [https://semantic-mediawiki.org/ Semantic MediaWiki].\n{{Doc-smw-sp}}", 15 | "sil-property-iwl-alias-reference": "This is the name of a [https://semantic-mediawiki.org/wiki/Property property] as defined by [https://semantic-mediawiki.org/ Semantic MediaWiki].\n{{Doc-smw-sp}}", 16 | "sil-property-alias-container": "This is the name of a [https://semantic-mediawiki.org/wiki/Property property] as defined by [https://semantic-mediawiki.org/ Semantic MediaWiki].\n{{Doc-smw-sp}}", 17 | "sil-interlanguagelink-hideinterlanguagelinks": "An error message caused by the INTERLANGUAGELINK parser function due to the wgHideInterlanguageLinkss setting.", 18 | "sil-interlanguagelink-invalidlanguagecode": "An error message caused by the INTERLANGUAGELINK parser function.", 19 | "sil-interlanguagelink-multiplecalls-different-languagecode": "An error message caused by the #interlanguagelink parser function.\n\nParameter:\n* $1 holds the language code", 20 | "sil-interlanguagelink-languagetargetcombination-exists": "An error message caused by the INTERLANGUAGELINK parser function.", 21 | "sil-interlanguagelist-missing-linkreference": "An error message caused by the INTERLANGUAGELIST parser function.", 22 | "sil-interlanguagelist-missing-template": "An error message caused by the INTERLANGUAGELIST parser function.", 23 | "sil-interlanguageparser-linkreference-error": "An error message caused by a parser function.\n\nStyle hint:
\nThis is a very technical message that is likely not fully understood by mundane users. It will assumably be the wiki admin trying to get things rolling. This is a special interest extension probably a bit comparable to the translate extension requiring some expertise using it.", 24 | "sil-search-profile": "A label displayed on the Special:Search page.", 25 | "sil-search-profile-tooltip": "A label displayed on the Special:Search page.", 26 | "sil-search-languagefilter-label": "A label displayed on the Special:Search page.", 27 | "sil-search-nolanguagefilter": "A label displayed on the Special:Search page.", 28 | "sil-categorypage-languagefilter-active": "A message shown on the category page. Parameters:\n* $1 is the language of the page" 29 | } 30 | -------------------------------------------------------------------------------- /i18n/roa-tara.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Joetaras" 5 | ] 6 | }, 7 | "sil-desc": "'N'estenzione [https://www.semantic-mediawiki.org MediaUicchi Semandeche] pe ccrejà e gestì le collegaminde inderuicchi", 8 | "sil-property-ill-alias-language": "Lènga d'a pàgene de condenute", 9 | "sil-property-ill-alias-reference": "Referimende inderlènghe", 10 | "sil-property-iwl-alias-language": "Lènghe inderuicchi", 11 | "sil-property-iwl-alias-reference": "Referimende a le inderuicchi", 12 | "sil-property-alias-container": "Tène collegaminde inder lènghe", 13 | "smw-pa-property-predefined__sil_container": "\"$1\" jè 'na probbietà predefinite ca rappresende 'n'endità condenitore pe descrivere 'u collegamende inderlènghe e le 'mbormaziune associate e jè date da l'estenzione [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Collegaminde a le Interlènghe Semandeche].", 14 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\" jè 'na probbietà predefinite ca tène 'nu codece de lènghe annotate e jè date da l'estenzione [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Collegaminde a le Interlènghe Semandeche].", 15 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\" jè 'na probbietà predefinite ca tène 'nu referimende arbitrarie e jè date da l'estenzione [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Collegaminde a le Interlènghe Semandeche].", 16 | "smw-pa-property-predefined-long__sil_ill_ref": "Endità cu 'u stesse referimende sò collegate e s'aspettane de fà 'ndrucà condenute simile jndr'à lènghe diverse.", 17 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" jè 'na probbietà predefinite ca rappresende 'nu codece de lènghe derivateda 'nu collegamende inderlènghe e jè date da l'estenzione [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Collegaminde a le Interlènghe Semandeche].", 18 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" jè 'na probbietà predefinite ca rappresende 'na pàgene de destinazione derivate da 'nu collegamende inderlènghe e jè date da l'estenzione [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Collegaminde a le Interlènghe Semandeche].", 19 | "sil-interlanguagelink-hideinterlanguagelinks": "'A funzione analizzatrice non ge pò essere ausate purcé jè 'mbostate $wgHideInterlanguageLinks.", 20 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" non g'ha state acchiate cumme 'nu codece de lènghe valide.", 21 | "sil-interlanguagelink-multiplecalls-different-languagecode": "'A funzione analizzatrice ha state chiamate cchiù vote ma cu codece de lènghe diverse (\"$1\") ca adda essere evitate cumme condenute de 'na pàgene jè generalmende attese de essere rappresendate da 'na lènghe sulamende.", 22 | "sil-interlanguagelink-languagetargetcombination-exists": "'A combinazione \"$1\":\"$2\" ggià esiste pa pàgene \"$3\" allore nisciuna annotzione inderlènghe ha state ccrejate.", 23 | "sil-interlanguagelist-missing-linkreference": "'A funzione analizzatrice non ge ste iacchie 'nu referimende valide.", 24 | "sil-interlanguagelist-missing-template": "'A funzione analizzatrice non ge ste iacchie 'nu modelle pu resultate.", 25 | "sil-interlanguageparser-linkreference-error": "'A funzione analizzatrice ave 'nu probbleme a ccrejà 'u titole da \"$1\".", 26 | "sil-search-profile": "Pe lènghe", 27 | "sil-search-profile-tooltip": "Filtre le vôsce pe annotazione d'a lènghe", 28 | "sil-search-languagefilter-label": "Filtre pe lènghe", 29 | "sil-search-nolanguagefilter": "Nisciune filtre de lènghe", 30 | "sil-categorypage-languagefilter-active": "Sta categorije tène 'mbormaziune (pàgene, sottocategorije e immaggine) ca jè filtrate da 'a lènghe \"$1\"." 31 | } 32 | -------------------------------------------------------------------------------- /i18n/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Alexandr Efremov", 5 | "Dicto23456", 6 | "Kaganer", 7 | "Okras" 8 | ] 9 | }, 10 | "sil-desc": "Расширение [https://www.semantic-mediawiki.org Semantic MediaWiki] для создания и управления интервики-ссылками", 11 | "sil-property-ill-alias-language": "Язык содержания страницы", 12 | "sil-property-ill-alias-reference": "Межъязыковая ссылка", 13 | "sil-property-iwl-alias-language": "Язык интервики", 14 | "sil-property-iwl-alias-reference": "Интервики-ссылки", 15 | "sil-property-alias-container": "Есть интервики-ссылка", 16 | "smw-pa-property-predefined__sil_container": "«$1» — предварительно определено свойство, которое представляет сущность-контейнер для описания информации, связанной с межъязыковой ссылкой, и обеспечивается расширением [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 17 | "smw-pa-property-predefined__sil_ill_lang": "«$1» — это предварительно определенное свойство, содержащее аннотированный код языка, и обеспечивается расширением [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links]", 18 | "smw-pa-property-predefined__sil_ill_ref": "«$1» — это предопределённое свойство, обеспечиваемое расширением [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 19 | "smw-pa-property-predefined-long__sil_ill_ref": "Элементы с одной и той же ссылкой объединяются в одну группу, что позволяет представлять похожее содержание на разных языках.", 20 | "smw-pa-property-predefined__sil_iwl_lang": "«$1» — это предварительно определенное свойство, которое представляет код языка, который берется с интервики-ссылки, и обеспечивается расширением [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 21 | "smw-pa-property-predefined__sil_iwl_ref": "«$1» — это предварительно определенное свойство, которое представляет собой целевую страницу, которая берется с интервики-ссылки и обеспечивается расширением [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 22 | "sil-interlanguagelink-hideinterlanguagelinks": "Парсер функций нельзя использовать, потому что установлено $wgHideInterlanguageLinks.", 23 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" не был признан действительным кодом языка.", 24 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Парсер функций был вызван несколько раз но с другим кодом языка («$1»), чего надо избегать, поскольку содержимое страницы в целом должно отображаться единым языком.", 25 | "sil-interlanguagelink-languagetargetcombination-exists": "Комбинация «$1»:«$2» уже существует для страницы «$3», поэтому никакой дополнительной межъязыковой аннотации не было создано.", 26 | "sil-interlanguagelist-missing-linkreference": "Для парсера Функции отсутствует действительная ссылка.", 27 | "sil-interlanguagelist-missing-template": "Для парсера Функции отсутствует шаблон вывода.", 28 | "sil-interlanguageparser-linkreference-error": "У парсера функции произошла ошибка, при создании заголовока объекта «$1».", 29 | "sil-search-profile": "по Языку", 30 | "sil-search-profile-tooltip": "Фильтр статей по языку, Аннотация", 31 | "sil-search-languagefilter-label": "Фильтр по языку", 32 | "sil-search-nolanguagefilter": "Нет языка фильтра", 33 | "sil-categorypage-languagefilter-active": "Эта категория содержит информацию (страницы, подкатегории и изображения), которые фильтруются, когда выбран $1 язык." 34 | } 35 | -------------------------------------------------------------------------------- /i18n/sd.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Mehtab ahmed" 5 | ] 6 | }, 7 | "sil-property-ill-alias-reference": "بين اللساني حوالو", 8 | "sil-property-iwl-alias-reference": "بين الوڪي حوالو", 9 | "sil-property-alias-container": "بين الزباني ڳنڍڻا اٿس" 10 | } 11 | -------------------------------------------------------------------------------- /i18n/si.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Sandaru" 5 | ] 6 | }, 7 | "sil-property-iwl-alias-language": "අන්තර්විකි භාෂාව" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/sl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Eleassar" 5 | ] 6 | }, 7 | "sil-desc": "Razširitev za [https://www.semantic-mediawiki.org Semantični MediaWiki] za ustvarjanje in upravljanje medjezikovnih povezav", 8 | "sil-property-ill-alias-language": "Jezik vsebine strani", 9 | "sil-property-ill-alias-reference": "Medjezikovni sklic", 10 | "sil-property-iwl-alias-language": "Interviki jezik", 11 | "sil-property-iwl-alias-reference": "Interviki sklic", 12 | "sil-property-alias-container": "Ima medjezikovno povezavo", 13 | "smw-pa-property-predefined__sil_container": "»$1« je vnaprej določena lastnost, ki predstavlja vsebniško entiteto za opis informacij, povezanih z medjezikovnimi povezavami, in jo zagotavlja razširitev [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 14 | "smw-pa-property-predefined__sil_ill_lang": "»$1« je vnaprej določena lastnost, ki vsebuje označeno oznako jezika in jo zagotavlja razširitev [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantične medjezikovne povezave].", 15 | "smw-pa-property-predefined__sil_ill_ref": "»$1« je vnaprej določena lastnost, ki vsebuje poljuben sklic in jo zagotavlja razširitev [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantične medjezikovne povezave].", 16 | "smw-pa-property-predefined-long__sil_ill_ref": "Entitete z istim sklicem so medsebojno povezane in se pričakuje, da bodo predstavljale podobno vsebino v različnih jezikih.", 17 | "smw-pa-property-predefined__sil_iwl_lang": "»$1« je vnaprej določena lastnost, ki predstavlja oznako jezika, izpeljano iz interviki povezave, in jo zagotavlja razširitev [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantične medjezikovne povezave].", 18 | "smw-pa-property-predefined__sil_iwl_ref": "»$1« je vnaprej določena lastnost, ki predstavlja ciljno stran, izpeljano iz interviki povezave, in jo zagotavlja razširitev [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantične medjezikovne povezave].", 19 | "sil-interlanguagelink-hideinterlanguagelinks": "Funkcije razčlenjevalnika ni mogoče uporabiti, ker je nastavljen $wgHideInterlanguageLinks.", 20 | "sil-interlanguagelink-invalidlanguagecode": "»$1« ni bilo prepoznano kot veljavna oznaka jezika.", 21 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Funkcija razčlenjevalnika je bila klicana večkrat, vendar z drugačno oznako jezika (»$1«), ki se ji je treba izogibati, saj se na splošno pričakuje, da bo vsebina strani predstavljena z enim samim jezikom.", 22 | "sil-interlanguagelink-languagetargetcombination-exists": "Kombinacija »$1«:»$2« za stran »$3« že obstaja, zato ni bila ustvarjena nobena dodatna medjezikovna označitev.", 23 | "sil-interlanguagelist-missing-linkreference": "Funkciji razčlenjevalnika manjka veljaven sklic.", 24 | "sil-interlanguagelist-missing-template": "Funkciji razčlenjevalnika manjka izhodna predloga.", 25 | "sil-interlanguageparser-linkreference-error": "Funkcija razčlenjevalnika je naletala težavo pri ustvarjanju naslovnega objekta iz »$1«.", 26 | "sil-search-profile": "Po jeziku", 27 | "sil-search-profile-tooltip": "Omogoča filtriranje člankov po označitvi jezika", 28 | "sil-search-languagefilter-label": "Filtriraj po jeziku", 29 | "sil-search-nolanguagefilter": "Ni jezikovega filtra", 30 | "sil-categorypage-languagefilter-active": "Ta kategorija vsebuje informacije (stran, podkategorijo in sliko), ki so filtrirane po jeziku »$1«." 31 | } 32 | -------------------------------------------------------------------------------- /i18n/sv.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Jenniesarina", 5 | "Jopparn", 6 | "WikiPhoenix" 7 | ] 8 | }, 9 | "sil-property-ill-alias-language": "Språk för sidinnehåll", 10 | "sil-property-ill-alias-reference": "Interspråkreferenser", 11 | "sil-property-iwl-alias-language": "Interwikispråk", 12 | "sil-property-iwl-alias-reference": "Interwikireferens", 13 | "sil-property-alias-container": "Har interspråklänkar", 14 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" erkändes inte som giltig språkkod.", 15 | "sil-search-profile": "efter språk", 16 | "sil-search-languagefilter-label": "Filtrera efter språk", 17 | "sil-search-nolanguagefilter": "Inget språkfilter" 18 | } 19 | -------------------------------------------------------------------------------- /i18n/tg-cyrl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "ToJack" 5 | ] 6 | }, 7 | "sil-property-ill-alias-language": "Забони саҳифа", 8 | "sil-property-ill-alias-reference": "Эзоҳоти байнизабонӣ", 9 | "sil-property-iwl-alias-language": "Забони интервики", 10 | "sil-property-iwl-alias-reference": "Эзоҳоти интервики", 11 | "sil-property-alias-container": "Пайванди байнизабонӣ дорад", 12 | "sil-search-profile": "Аз рӯи забон", 13 | "sil-search-languagefilter-label": "Филтри забонҳо" 14 | } 15 | -------------------------------------------------------------------------------- /i18n/tr.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "BaRaN6161 TURK", 5 | "Hedda" 6 | ] 7 | }, 8 | "sil-desc": "Diller arası bağlantılar oluşturmak ve yönetmek için bir [https://www.semantic-mediawiki.org Semantik MediaWiki] uzantısı", 9 | "sil-property-ill-alias-language": "Sayfa içeriğinin dili", 10 | "sil-property-ill-alias-reference": "Diller arası referans", 11 | "sil-property-iwl-alias-language": "Vikiler arası dil", 12 | "sil-property-iwl-alias-reference": "Vikiler arası referans", 13 | "sil-property-alias-container": "Dil bağlantısı var", 14 | "smw-pa-property-predefined__sil_container": "\"$1\", diller arası bağlantıyla ilgili bilgileri tanımlamak için bir kapsayıcı varlığı temsil eden önceden tanımlanmış bir özelliktir ve [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantik Diller Arası Bağlantıları] uzantısı tarafından sağlanır.", 15 | "smw-pa-property-predefined__sil_ill_lang": "\"$1\", ek açıklamalı bir dil kodu içeren ve [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantik Dil Arası Bağlantıları] uzantısı tarafından sağlanan önceden tanımlanmış bir özelliktir.", 16 | "smw-pa-property-predefined__sil_ill_ref": "\"$1\", rastgele bir başvuru içeren ve [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantik Dil Arası Bağlantıları] uzantısı tarafından sağlanan önceden tanımlanmış bir özelliktir.", 17 | "smw-pa-property-predefined-long__sil_ill_ref": "Aynı referansa sahip kuruluşlar birbirleriyle bağlantılıdır ve farklı dillerde benzer içerikleri temsil etmeleri beklenmektedir.", 18 | "smw-pa-property-predefined__sil_iwl_lang": "\"$1\" önceden tanımlanmış bir özelliktir ve wiki arası bağlantısından türetilen bir dil kodunu temsil eder ve [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantik Dil Arası Bağlantıları] uzantısı tarafından sağlanır.", 19 | "smw-pa-property-predefined__sil_iwl_ref": "\"$1\" önceden tanımlanmış bir özelliktir ve wiki arası bağlantısından türetilmiş bir hedef sayfayı temsil eder ve [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantik Dil Arası Bağlantıları] uzantısı tarafından sağlanır.", 20 | "sil-interlanguagelink-hideinterlanguagelinks": "Ayrıştırıcı işlevi, $wgHideInterlanguageLinks ayarlandığından kullanılamaz.", 21 | "sil-interlanguagelink-invalidlanguagecode": "\"$1\" geçerli dil kodu olarak tanınmadı.", 22 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Ayrıştırıcı işlevi birden çok kez çağrıldı, ancak bir sayfanın içeriğinin genellikle tek bir dil ile temsil edilmesi beklendiğinden, kaçınılması gereken farklı bir dil kodu (\"$1\") ile.", 23 | "sil-interlanguagelink-languagetargetcombination-exists": "\"$1\": \"$2\" kombinasyonu, \"$3\" sayfası için zaten var, bu nedenle ek diller arası ek açıklama oluşturulmadı.", 24 | "sil-interlanguagelist-missing-linkreference": "Ayrıştırıcı işlevinde geçerli bir başvuru eksik.", 25 | "sil-interlanguagelist-missing-template": "Ayrıştırıcı işlevinde bir çıkış şablonu eksik.", 26 | "sil-interlanguageparser-linkreference-error": "Ayrıştırıcı işlevi, \"$1\" öğesinden başlık nesnesi oluşturmada bir sorunla karşılaştı.", 27 | "sil-search-profile": "Dile göre", 28 | "sil-search-profile-tooltip": "Maddeleri dil açıklamalarına göre filtreleyin", 29 | "sil-search-languagefilter-label": "Dile göre filtrele", 30 | "sil-search-nolanguagefilter": "Dil filtresi yok", 31 | "sil-categorypage-languagefilter-active": "Bu kategori, \"$1\" diline göre filtrelenen bilgileri (sayfa, alt kategori ve resim) içerir." 32 | } 33 | -------------------------------------------------------------------------------- /i18n/uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Piramidion", 5 | "Ата" 6 | ] 7 | }, 8 | "sil-desc": "Розширення [https://www.semantic-mediawiki.org Семантичної MediaWiki] для створення і керування міжмовними посиланнями", 9 | "sil-property-ill-alias-language": "Мова вмісту сторінки", 10 | "sil-property-ill-alias-reference": "Міжмовне посилання", 11 | "sil-property-iwl-alias-language": "Мова інтервікі", 12 | "sil-property-iwl-alias-reference": "Інтервікі-посилання", 13 | "sil-property-alias-container": "Має міжмовне посилання", 14 | "smw-pa-property-predefined__sil_container": "«$1» — попередньо визначена властивість, що репрезентує сутність-контейнер для опису інформації, пов'язаної з міжмовним посиланням, і забезпечується розширенням [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 15 | "smw-pa-property-predefined__sil_ill_lang": "«$1» — це попередньо визначена властивість, що містить анотований код мови, і забезпечується розширенням [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links]", 16 | "smw-pa-property-predefined__sil_ill_ref": "«$1» — це попередньо визначена властивість, що містить анотоване додаткове посилання і забезпечується розширенням [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 17 | "smw-pa-property-predefined-long__sil_ill_ref": "Сутності з одним і тим же посиланням об'єднуються і мають репрезентувати однаковий вміст різними мовами.", 18 | "smw-pa-property-predefined__sil_iwl_lang": "«$1» — це попередньо визначена властивість, яка репрезентує код мови, що походить з інтервікі-посилання, і забезпечується розширенням [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 19 | "smw-pa-property-predefined__sil_iwl_ref": "«$1» — це попередньо визначена властивість, яка репрезентує цільову сторінку, що походить з інтервікі-посилання і забезпечується розширенням [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links].", 20 | "sil-interlanguagelink-hideinterlanguagelinks": "Парсерну функцію не можна використати, тому що встановлено $wgHideInterlanguageLinks.", 21 | "sil-interlanguagelink-invalidlanguagecode": "«$1» не розпізнано як допустимий код мови.", 22 | "sil-interlanguagelink-multiplecalls-different-languagecode": "Парсерну функцію було викликано декілька разів але з іншим кодом мови («$1»), чого треба уникати, оскільки вміст сторінки загалом має відображатися єдиною мовою.", 23 | "sil-interlanguagelink-languagetargetcombination-exists": "Комбінація «$1»:«$2» уже існує для сторінки «$3», тому жодної додаткової міжмовної анотації не було створено.", 24 | "sil-interlanguagelist-missing-linkreference": "Парсерній функції бракує дійсного посилання.", 25 | "sil-interlanguagelist-missing-template": "Парсерній функції бракує шаблон виходу.", 26 | "sil-interlanguageparser-linkreference-error": "Парсерна функція мала проблему зі створенням об'єкту заголовка з «$1».", 27 | "sil-search-profile": "За мовою", 28 | "sil-search-profile-tooltip": "Фільтрувати статті за мовною анотацією", 29 | "sil-search-languagefilter-label": "Фільтр за мовою", 30 | "sil-search-nolanguagefilter": "Без мовного фільтра", 31 | "sil-categorypage-languagefilter-active": "Ця категорія містить інформацію (сторінки, підкатегорії і зображення), що відфільтрована для мови «$1»." 32 | } 33 | -------------------------------------------------------------------------------- /i18n/vo.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Malafaya" 5 | ] 6 | }, 7 | "sil-search-profile": "fa Pük" 8 | } 9 | -------------------------------------------------------------------------------- /i18n/yi.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "פוילישער" 5 | ] 6 | }, 7 | "sil-property-iwl-alias-reference": "צווישנוויקי רעפערענץ", 8 | "sil-property-alias-container": "האט אינטערשפראך לינק", 9 | "sil-interlanguagelist-missing-linkreference": "די פארזער פונקציע פעלט א גילטיקן רעפערענץ.", 10 | "sil-search-profile": "לויט דער שפראך", 11 | "sil-search-languagefilter-label": "פילטערן לויט שפראך", 12 | "sil-search-nolanguagefilter": "קיין שפראכפילטער" 13 | } 14 | -------------------------------------------------------------------------------- /i18n/zh-hans.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "LittlePaw365", 5 | "Liuxinyu970226" 6 | ] 7 | }, 8 | "sil-desc": "创建和管理跨语言链接的[https://www.semantic-mediawiki.org 语义MediaWiki]扩展", 9 | "sil-property-ill-alias-language": "页面内容语言", 10 | "sil-property-ill-alias-reference": "跨语言引用", 11 | "sil-property-iwl-alias-language": "跨wiki语言", 12 | "sil-property-iwl-alias-reference": "跨wiki引用", 13 | "sil-property-alias-container": "有跨语言链接", 14 | "smw-pa-property-predefined__sil_container": "“$1”是[https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links 语义跨语言链接]扩展提供的表示描述跨语言链接相关信息的容器实体的预定义属性。", 15 | "smw-pa-property-predefined__sil_ill_lang": "“$1”是[https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links 语义跨语言链接]扩展提供的容纳注释的语言代码的预定义属性。", 16 | "smw-pa-property-predefined__sil_ill_ref": "“$1”是[https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links 语义跨语言链接]扩展提供的容纳任意引用的预定义属性。", 17 | "smw-pa-property-predefined-long__sil_ill_ref": "有相同引用的实体会相互链接,并预期表示不同语言里的相似内容。", 18 | "smw-pa-property-predefined__sil_iwl_lang": "“$1”是[https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links 语义跨语言链接]扩展提供的表示衍生自跨wiki链接的语言代码的预定义属性。", 19 | "smw-pa-property-predefined__sil_iwl_ref": "“$1”是[https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links 语义跨语言链接]扩展提供的表示衍生自跨wiki链接的目标页面的预定义属性。", 20 | "sil-interlanguagelink-hideinterlanguagelinks": "由于$wgHideInterlanguageLinks已设置,因此无法使用解析器函数。", 21 | "sil-interlanguagelink-invalidlanguagecode": "“$1”不被识别为有效的语言代码。", 22 | "sil-interlanguagelink-multiplecalls-different-languagecode": "解析器函数被多次调用,但使用了不同的语言代码(“$1”),应该避免这种情况,因为页面内容一般应该由单一语言表示。", 23 | "sil-interlanguagelink-languagetargetcombination-exists": "页面“$3”已经存在组合“$1:$2”,因此没有创建额外的跨语言注释。", 24 | "sil-interlanguagelist-missing-linkreference": "解析器函数缺少有效的引用。", 25 | "sil-interlanguagelist-missing-template": "解析器函数缺少输出模板。", 26 | "sil-interlanguageparser-linkreference-error": "解析器函数在从“$1”创建标题对象时遇到问题。", 27 | "sil-search-profile": "按语言", 28 | "sil-search-profile-tooltip": "按语言注释筛选条目", 29 | "sil-search-languagefilter-label": "按语言筛选", 30 | "sil-search-nolanguagefilter": "没有语言筛选", 31 | "sil-categorypage-languagefilter-active": "此分类含有按“$1”语言筛选的信息(页面、子分类和图像)。" 32 | } 33 | -------------------------------------------------------------------------------- /i18n/zh-hant.json: -------------------------------------------------------------------------------- 1 | { 2 | "@metadata": { 3 | "authors": [ 4 | "Assoc", 5 | "Cwlin0416", 6 | "Deathkon", 7 | "Kly", 8 | "Lakejason0", 9 | "Liuxinyu970226" 10 | ] 11 | }, 12 | "sil-desc": "用來創建和管理跨語言連結的 [https://www.semantic-mediawiki.org Semantic MediaWiki] 擴充套件", 13 | "sil-property-ill-alias-language": "頁面內容語言", 14 | "sil-property-ill-alias-reference": "跨語言參考", 15 | "sil-property-iwl-alias-language": "跨 wiki 語言", 16 | "sil-property-iwl-alias-reference": "跨 wiki 參考", 17 | "sil-property-alias-container": "有跨語言連結", 18 | "smw-pa-property-predefined__sil_container": "「$1」是一個預定義屬性,表示用於描述中間語言鏈接相關信息的容器實體,由 [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] 擴充提供。", 19 | "smw-pa-property-predefined__sil_ill_lang": "「$1」是一個包含帶註解語言代碼的預定義屬性,由 [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] 擴充提供。", 20 | "smw-pa-property-predefined__sil_ill_ref": "「$1」是一個包含任意參照的預定義屬性,由 [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] 擴充提供。", 21 | "smw-pa-property-predefined-long__sil_ill_ref": "帶有相同參照的項目是互相關聯的,且預期代表著在不同語言下所呈現的相似含意。", 22 | "smw-pa-property-predefined__sil_iwl_lang": "「$1」是一個預定義屬性,表示用於描述從內部 wiki 所衍生出的語言代碼,由 [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] 擴充提供。", 23 | "smw-pa-property-predefined__sil_iwl_ref": "「$1」是一個預定義屬性,表示用於描述從內部 wiki 所衍生出的目標頁面,由 [https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Interlanguage_Links Semantic Interlanguage Links] 擴充提供。", 24 | "sil-interlanguagelink-hideinterlanguagelinks": "因 $wgHideInterlanguageLinks 已被設定,解析函式不能使用。", 25 | "sil-interlanguagelink-invalidlanguagecode": "「$1」不被認為是有效的語言代碼。", 26 | "sil-interlanguagelink-multiplecalls-different-languagecode": "解析函數被調用多次,但使用了一個不同的語言程式碼(“$1”),這應當避免,因為頁面內容通常由一種語言編寫。", 27 | "sil-interlanguagelink-languagetargetcombination-exists": "組合「$1」:「$2」已存在於頁面「$3」中,因此沒有創建額外的跨語言注釋。", 28 | "sil-interlanguagelist-missing-linkreference": "解析器函數缺少一個有效參照。", 29 | "sil-interlanguagelist-missing-template": "解析器函數缺少輸出模板。", 30 | "sil-interlanguageparser-linkreference-error": "解析函數從「$1」創建一個標題對象時出現問題。", 31 | "sil-search-profile": "按語言", 32 | "sil-search-profile-tooltip": "按語言注釋過濾條目", 33 | "sil-search-languagefilter-label": "按語言篩選", 34 | "sil-search-nolanguagefilter": "無語言篩選", 35 | "sil-categorypage-languagefilter-active": "此分類包含按「$1」語言過濾的資訊(頁面、子分類和圖片)。" 36 | } 37 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | tests/phpunit 18 | 19 | 20 | 21 | 22 | src 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/AnnotatedLanguageParserFunction.php: -------------------------------------------------------------------------------- 1 | interlanguageLinksLookup = $interlanguageLinksLookup; 29 | } 30 | 31 | /** 32 | * @since 1.0 33 | * 34 | * @param Title $source 35 | * @param string $template 36 | * 37 | * @return string 38 | */ 39 | public function parse( Title $source, $template ) { 40 | $source = $this->interlanguageLinksLookup->getRedirectTargetFor( $source ); 41 | 42 | if ( $source === null ) { 43 | return ''; 44 | } 45 | 46 | $languageCode = $this->interlanguageLinksLookup->findPageLanguageForTarget( $source ); 47 | 48 | if ( $languageCode === '' ) { 49 | return ''; 50 | } 51 | 52 | if ( $template === '' ) { 53 | return $languageCode; 54 | } 55 | 56 | $templateText = $this->createTemplateInclusionCode( 57 | $source, 58 | $languageCode, 59 | $template 60 | ); 61 | 62 | return [ $templateText, 'noparse' => $templateText === '', 'isHTML' => false ]; 63 | } 64 | 65 | private function createTemplateInclusionCode( $source, $languageCode, $template ) { 66 | $result = ''; 67 | $templateText = ''; 68 | $wikitext = ''; 69 | 70 | $wikitext .= "|target-link=" . $this->modifyTargetLink( $source ); 71 | $wikitext .= "|lang-code=" . Localizer::asBCP47FormattedLanguageCode( $languageCode ); 72 | $wikitext .= "|lang-name=" . MediaWikiServices::getInstance()->getLanguageNameUtils()->getLanguageName( $languageCode ); 73 | 74 | $templateText .= '{{' . $template . $wikitext . '}}'; 75 | 76 | return $templateText; 77 | } 78 | 79 | private function modifyTargetLink( $targetLink ) { 80 | if ( !$targetLink instanceof Title ) { 81 | $targetLink = Title::newFromText( $targetLink ); 82 | } 83 | 84 | return ( $targetLink->getNamespace() === NS_CATEGORY ? ':' : '' ) . $targetLink->getPrefixedText(); 85 | } 86 | 87 | } 88 | -------------------------------------------------------------------------------- /src/CacheKeyProvider.php: -------------------------------------------------------------------------------- 1 | cachePrefix = $cachePrefix; 31 | } 32 | 33 | /** 34 | * @since 1.0 35 | * 36 | * @param string $key 37 | * 38 | * @return string 39 | */ 40 | public function getSiteCacheKey( $key ) { 41 | return $this->cachePrefix . ':sil:site:' . md5( $key . self::VERSION ); 42 | } 43 | 44 | /** 45 | * @since 1.0 46 | * 47 | * @param string $key 48 | * 49 | * @return string 50 | */ 51 | public function getPageLanguageCacheBlobKey( $key = '' ) { 52 | return $this->cachePrefix . ':sil:blob:' . md5( $key . self::VERSION ); 53 | } 54 | 55 | /** 56 | * @since 1.0 57 | * 58 | * @param string $key 59 | * @param bool $stable 60 | * 61 | * @return string 62 | */ 63 | public function getPageCacheKey( $key, $stable = true ) { 64 | return $this->cachePrefix . ':sil:page:' . md5( $key . ( $stable ? '' : self::VERSION ) ); 65 | } 66 | 67 | } 68 | -------------------------------------------------------------------------------- /src/Category/LanguageFilterCategoryPage.php: -------------------------------------------------------------------------------- 1 | isCategoryFilterByLanguage = $isCategoryFilterByLanguage; 43 | } 44 | 45 | /** 46 | * @see CategoryPage::openShowCategory 47 | */ 48 | public function openShowCategory() { 49 | if ( $this->hasPageLanguageForTarget( $this->getTitle() ) ) { 50 | 51 | // If findPageLanguageForTarget returned a positive result 52 | // then Title::getPageLanguage contains the expected language 53 | // setting due to usage of the PageContentLanguage hook 54 | 55 | $html = Html::element( 56 | 'div', 57 | [ 58 | 'id' => 'sil-categorypage-languagefilter', 59 | 'style' => 'font-style:italic' 60 | ], 61 | wfMessage( 62 | 'sil-categorypage-languagefilter-active', 63 | $this->getTitle()->getPageLanguage()->getCode() )->inLanguage( $this->getTitle()->getPageLanguage() )->text() 64 | ); 65 | 66 | $this->getContext()->getOutput()->addHTML( $html ); 67 | } 68 | } 69 | 70 | /** 71 | * @since 1.0 72 | * 73 | * @param Page &$page 74 | * @param InterlanguageLinksLookup $interlanguageLinksLookup 75 | */ 76 | public function modifyCategoryView( &$page, InterlanguageLinksLookup $interlanguageLinksLookup ) { 77 | if ( $this->getTitle()->getNamespace() !== NS_CATEGORY || 78 | !$this->isCategoryFilterByLanguage || 79 | !$interlanguageLinksLookup->hasSilAnnotationFor( $this->getTitle() ) ) { 80 | return null; 81 | } 82 | 83 | $page = $this; 84 | 85 | $this->interlanguageLinksLookup = $interlanguageLinksLookup; 86 | 87 | // @note Need to attach the InterlanguageLinksLookup to the title 88 | // as it is the only way to inject a dependency by the time the 89 | // CategoryViewerByLanguage object is created 90 | $this->getTitle()->interlanguageLinksLookup = $this->interlanguageLinksLookup; 91 | } 92 | 93 | private function hasPageLanguageForTarget( Title $title ) { 94 | return $this->interlanguageLinksLookup !== null && 95 | $this->interlanguageLinksLookup->findPageLanguageForTarget( $title ) !== '' && 96 | $this->interlanguageLinksLookup->hasSilAnnotationFor( $title ); 97 | } 98 | 99 | } 100 | -------------------------------------------------------------------------------- /src/Category/LanguageFilterCategoryViewer.php: -------------------------------------------------------------------------------- 1 | '; 27 | } 28 | 29 | /** 30 | * @see CategoryViewer::addImage 31 | */ 32 | public function addImage( 33 | PageReference $page, string $sortkey, int $pageLength, bool $isRedirect = false 34 | ): void { 35 | $title = Title::castFromPageIdentity( $page ); 36 | if ( $this->canMatchCategoryLanguageToPageLanguage( $title ) ) { 37 | parent::addImage( $page, $sortkey, $pageLength, $isRedirect ); 38 | } 39 | } 40 | 41 | /** 42 | * @see CategoryViewer::addSubcategoryObject 43 | */ 44 | public function addSubcategoryObject( Category $cat, $sortkey, $pageLength ) { 45 | if ( !$this->canMatchCategoryLanguageToPageLanguage( $cat->getTitle() ) ) { 46 | return null; 47 | } 48 | 49 | parent::addSubcategoryObject( $cat, $sortkey, $pageLength ); 50 | } 51 | 52 | /** 53 | * @see CategoryViewer::addPage 54 | */ 55 | public function addPage( 56 | PageReference $page, string $sortkey, int $pageLength, bool $isRedirect = false 57 | ): void { 58 | $title = Title::castFromPageIdentity( $page ); 59 | if ( $this->canMatchCategoryLanguageToPageLanguage( $title ) ) { 60 | parent::addPage( $page, $sortkey, $pageLength, $isRedirect ); 61 | } 62 | } 63 | 64 | private function hasInterlanguageLinksLookup() { 65 | return isset( Title::castFromPageIdentity( $this->page )->interlanguageLinksLookup ); 66 | } 67 | 68 | private function canMatchCategoryLanguageToPageLanguage( $title ) { 69 | if ( !$this->hasInterlanguageLinksLookup() || !$title instanceof Title ) { 70 | return true; 71 | } 72 | 73 | $titleFromPage = Title::castFromPageIdentity( $this->page ); 74 | 75 | if ( !$titleFromPage->interlanguageLinksLookup->hasSilAnnotationFor( $title ) ) { 76 | return false; 77 | } 78 | 79 | $categoryLanguageCode = $titleFromPage->interlanguageLinksLookup->findPageLanguageForTarget( $titleFromPage ); 80 | 81 | if ( $categoryLanguageCode === null || $categoryLanguageCode === '' ) { 82 | return true; 83 | } 84 | 85 | if ( $categoryLanguageCode === $titleFromPage->interlanguageLinksLookup->findPageLanguageForTarget( $title ) ) { 86 | return true; 87 | } 88 | 89 | return false; 90 | } 91 | 92 | } 93 | -------------------------------------------------------------------------------- /src/InterlanguageLink.php: -------------------------------------------------------------------------------- 1 | languageCode = $languageCode; 37 | $this->linkReference = $linkReference instanceof Title ? $linkReference : Title::newFromText( $linkReference ); 38 | } 39 | 40 | /** 41 | * @since 1.0 42 | * 43 | * @return string 44 | */ 45 | public function getLanguageCode() { 46 | return $this->languageCode; 47 | } 48 | 49 | /** 50 | * @since 1.0 51 | * 52 | * @return Title 53 | */ 54 | public function getLinkReference() { 55 | return $this->linkReference; 56 | } 57 | 58 | /** 59 | * @since 1.0 60 | * 61 | * @return string 62 | */ 63 | public function getContainerId() { 64 | return 'ill.' . $this->getLanguageCode(); 65 | } 66 | 67 | /** 68 | * @since 1.0 69 | * 70 | * @return string 71 | */ 72 | public function getHash() { 73 | return $this->getLanguageCode() . '#' . $this->getLinkReference()->getPrefixedText(); 74 | } 75 | 76 | /** 77 | * @since 1.0 78 | * 79 | * @return DataValue 80 | */ 81 | public function newLanguageDataValue() { 82 | return DataValueFactory::getInstance()->newDataItemValue( 83 | new DIBlob( $this->getLanguageCode() ), 84 | new DIProperty( PropertyRegistry::SIL_ILL_LANG ) 85 | ); 86 | } 87 | 88 | /** 89 | * @since 1.0 90 | * 91 | * @return DataValue 92 | */ 93 | public function newLinkReferenceDataValue() { 94 | return DataValueFactory::getInstance()->newDataItemValue( 95 | DIWikiPage::newFromTitle( $this->getLinkReference() ), 96 | new DIProperty( PropertyRegistry::SIL_ILL_REF ) 97 | ); 98 | } 99 | 100 | /** 101 | * @since 1.0 102 | * 103 | * @return DIProperty 104 | */ 105 | public function newContainerProperty() { 106 | return new DIProperty( PropertyRegistry::SIL_CONTAINER ); 107 | } 108 | 109 | } 110 | -------------------------------------------------------------------------------- /src/InterlanguageListParserFunction.php: -------------------------------------------------------------------------------- 1 | interlanguageLinksLookup = $interlanguageLinksLookup; 29 | } 30 | 31 | /** 32 | * @since 1.0 33 | * 34 | * @param string $linkReference 35 | * @param string $template 36 | * 37 | * @return string 38 | */ 39 | public function parse( $linkReference, $template ) { 40 | if ( $linkReference === '' ) { 41 | return $this->createErrorMessageFor( 'sil-interlanguagelist-missing-linkreference' ); 42 | } 43 | 44 | if ( $template === '' ) { 45 | return $this->createErrorMessageFor( 'sil-interlanguagelist-missing-template' ); 46 | } 47 | 48 | $title = Title::newFromText( $linkReference ); 49 | 50 | if ( $title === null ) { 51 | return $this->createErrorMessageFor( 'sil-interlanguageparser-linkreference-error', $linkReference ); 52 | } 53 | 54 | // `null` indicates to the lookup interface to return all matches regardless 55 | // of any language code 56 | $interlanguageLink = new InterlanguageLink( 57 | null, 58 | $this->interlanguageLinksLookup->getRedirectTargetFor( $title ) 59 | ); 60 | 61 | $languageTargetLinks = $this->getLanguageTargetLinks( $interlanguageLink ); 62 | 63 | $templateText = $this->createTemplateInclusionCode( 64 | $languageTargetLinks, 65 | $template 66 | ); 67 | 68 | return [ $templateText, 'noparse' => $templateText === '', 'isHTML' => false ]; 69 | } 70 | 71 | private function getLanguageTargetLinks( InterlanguageLink $interlanguageLink ) { 72 | $languageTargetLinks = $this->interlanguageLinksLookup->queryLanguageTargetLinks( 73 | $interlanguageLink 74 | ); 75 | 76 | ksort( $languageTargetLinks ); 77 | 78 | return $languageTargetLinks; 79 | } 80 | 81 | private function createTemplateInclusionCode( array $languageTargetLinks, $template ) { 82 | $result = ''; 83 | $templateText = ''; 84 | $i = 0; 85 | $langUtils = MediaWikiServices::getInstance()->getLanguageNameUtils(); 86 | 87 | foreach ( $languageTargetLinks as $languageCode => $targetLink ) { 88 | 89 | $wikitext = ''; 90 | 91 | $wikitext .= "|#=" . $i++; 92 | $wikitext .= "|target-link=" . $this->modifyTargetLink( $targetLink ); 93 | $wikitext .= "|lang-code=" . Localizer::asBCP47FormattedLanguageCode( $languageCode ); 94 | $wikitext .= "|lang-name=" . $langUtils->getLanguageName( $languageCode ); 95 | 96 | $templateText .= '{{' . $template . $wikitext . '}}'; 97 | } 98 | 99 | return $templateText; 100 | } 101 | 102 | private function modifyTargetLink( $targetLink ) { 103 | if ( !$targetLink instanceof Title ) { 104 | $targetLink = Title::newFromText( $targetLink ); 105 | } 106 | 107 | return ( $targetLink->getNamespace() === NS_CATEGORY ? ':' : '' ) . $targetLink->getPrefixedText(); 108 | } 109 | 110 | private function createErrorMessageFor( $messageKey, $arg1 = '' ) { 111 | return '
' . wfMessage( $messageKey, $arg1 )->inContentLanguage()->text() . '
'; 112 | } 113 | 114 | } 115 | -------------------------------------------------------------------------------- /src/InterwikiLanguageLink.php: -------------------------------------------------------------------------------- 1 | interwikiLink = $interwikiLink instanceof Title ? $interwikiLink : Title::newFromText( $interwikiLink ); 34 | } 35 | 36 | /** 37 | * @since 1.0 38 | * 39 | * @return string 40 | */ 41 | public function getLanguageCode() { 42 | return $this->interwikiLink->getInterwiki(); 43 | } 44 | 45 | /** 46 | * @since 1.0 47 | * 48 | * @return Title 49 | */ 50 | public function getInterwikiReference() { 51 | return $this->interwikiLink; 52 | } 53 | 54 | /** 55 | * @since 1.0 56 | * 57 | * @return string 58 | */ 59 | public function getContainerId() { 60 | return 'iwl.' . $this->getLanguageCode(); 61 | } 62 | 63 | /** 64 | * @since 1.0 65 | * 66 | * @return string 67 | */ 68 | public function getHash() { 69 | return $this->getLanguageCode() . '#' . $this->getInterwikiReference()->getPrefixedText(); 70 | } 71 | 72 | /** 73 | * @since 1.0 74 | * 75 | * @return DataValue 76 | */ 77 | public function newLanguageDataValue() { 78 | return DataValueFactory::getInstance()->newDataItemValue( 79 | new DIBlob( $this->getLanguageCode() ), 80 | new DIProperty( PropertyRegistry::SIL_IWL_LANG ) 81 | ); 82 | } 83 | 84 | /** 85 | * @since 1.0 86 | * 87 | * @return DataValue 88 | */ 89 | public function newInterwikiReferenceDataValue() { 90 | return DataValueFactory::getInstance()->newDataItemValue( 91 | DIWikiPage::newFromTitle( $this->getInterwikiReference() ), 92 | new DIProperty( PropertyRegistry::SIL_IWL_REF ) 93 | ); 94 | } 95 | 96 | /** 97 | * @since 1.0 98 | * 99 | * @return DIProperty 100 | */ 101 | public function newContainerProperty() { 102 | return new DIProperty( PropertyRegistry::SIL_CONTAINER ); 103 | } 104 | 105 | } 106 | -------------------------------------------------------------------------------- /src/InterwikiLanguageLinkFetcher.php: -------------------------------------------------------------------------------- 1 | languageLinkAnnotator = $languageLinkAnnotator; 27 | } 28 | 29 | /** 30 | * @since 1.0 31 | * 32 | * @return ParserOutput $parserOutput 33 | */ 34 | public function fetchLanguagelinksFromParserOutput( ParserOutput $parserOutput ) { 35 | if ( $parserOutput->getLanguageLinks() === [] || $parserOutput->getLanguageLinks() === null ) { 36 | return; 37 | } 38 | 39 | foreach ( $parserOutput->getLanguageLinks() as $languageLink ) { 40 | 41 | if ( strpos( $languageLink, 'sil:' ) !== false ) { 42 | continue; 43 | } 44 | 45 | $this->addAnnotationForInterwikiLanguageLink( $languageLink ); 46 | } 47 | } 48 | 49 | private function addAnnotationForInterwikiLanguageLink( $languageLink ) { 50 | $interwikiLanguageLink = new InterwikiLanguageLink( $languageLink ); 51 | 52 | if ( $interwikiLanguageLink->getLanguageCode() === '' ) { 53 | return; 54 | } 55 | 56 | $this->languageLinkAnnotator->addAnnotationForInterwikiLanguageLink( 57 | $interwikiLanguageLink 58 | ); 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/LanguageLinkAnnotator.php: -------------------------------------------------------------------------------- 1 | parserData = $parserData; 29 | } 30 | 31 | /** 32 | * @since 1.0 33 | * 34 | * @param InterlanguageLink $interlanguageLink 35 | * 36 | * @return bool 37 | */ 38 | public function hasDifferentLanguageAnnotation( InterlanguageLink $interlanguageLink ) { 39 | $propertyValues = $this->parserData->getSemanticData()->getPropertyValues( 40 | new DIProperty( PropertyRegistry::SIL_CONTAINER ) 41 | ); 42 | 43 | foreach ( $propertyValues as $value ) { 44 | if ( $value->getSubobjectname() !== $interlanguageLink->getContainerId() ) { 45 | return true; 46 | } 47 | } 48 | 49 | return false; 50 | } 51 | 52 | /** 53 | * @since 1.3 54 | * 55 | * @return bool 56 | */ 57 | public function canAddAnnotation() { 58 | if ( method_exists( $this->parserData, 'canModifySemanticData' ) ) { 59 | return $this->parserData->canModifySemanticData(); 60 | } 61 | 62 | // SMW 3.0 63 | if ( method_exists( $this->parserData, 'canUse' ) ) { 64 | return $this->parserData->canUse(); 65 | } 66 | 67 | return true; 68 | } 69 | 70 | /** 71 | * @since 1.0 72 | * 73 | * @param InterlanguageLink $interlanguageLink 74 | */ 75 | public function addAnnotationForInterlanguageLink( InterlanguageLink $interlanguageLink ) { 76 | $subobject = new Subobject( $this->parserData->getTitle() ); 77 | $subobject->setEmptyContainerForId( $interlanguageLink->getContainerId() ); 78 | 79 | $subobject->getSemanticData()->addDataValue( 80 | $interlanguageLink->newLanguageDataValue() 81 | ); 82 | 83 | $subobject->getSemanticData()->addDataValue( 84 | $interlanguageLink->newLinkReferenceDataValue() 85 | ); 86 | 87 | $this->parserData->getSemanticData()->addPropertyObjectValue( 88 | $interlanguageLink->newContainerProperty(), 89 | $subobject->getContainer() 90 | ); 91 | 92 | $this->parserData->pushSemanticDataToParserOutput(); 93 | $this->parserData->setSemanticDataStateToParserOutputProperty(); 94 | } 95 | 96 | /** 97 | * @since 1.0 98 | * 99 | * @param InterwikiLanguageLink $interwikiLanguageLink 100 | */ 101 | public function addAnnotationForInterwikiLanguageLink( InterwikiLanguageLink $interwikiLanguageLink ) { 102 | $subobject = new Subobject( $this->parserData->getTitle() ); 103 | $subobject->setEmptyContainerForId( $interwikiLanguageLink->getContainerId() ); 104 | 105 | $subobject->getSemanticData()->addDataValue( 106 | $interwikiLanguageLink->newLanguageDataValue() 107 | ); 108 | 109 | $subobject->getSemanticData()->addDataValue( 110 | $interwikiLanguageLink->newInterwikiReferenceDataValue() 111 | ); 112 | 113 | $this->parserData->getSemanticData()->addPropertyObjectValue( 114 | $interwikiLanguageLink->newContainerProperty(), 115 | $subobject->getContainer() 116 | ); 117 | 118 | $this->parserData->pushSemanticDataToParserOutput(); 119 | $this->parserData->setSemanticDataStateToParserOutputProperty(); 120 | } 121 | 122 | } 123 | -------------------------------------------------------------------------------- /src/PageContentLanguageDbModifier.php: -------------------------------------------------------------------------------- 1 | title = $title; 60 | $this->connection = $connection; 61 | $this->linkCache = $linkCache; 62 | } 63 | 64 | /** 65 | * @since 1.3 66 | * 67 | * @param bool $isDbPageLanguage 68 | */ 69 | public function markAsPageLanguageByDB( $isDbPageLanguage ) { 70 | $this->isDbPageLanguage = $isDbPageLanguage; 71 | } 72 | 73 | /** 74 | * @since 1.3 75 | * 76 | * @param string $expectedLanguageCode 77 | */ 78 | public function updatePageLanguage( $expectedLanguageCode ) { 79 | if ( !$this->isDbPageLanguage ) { 80 | return null; 81 | } 82 | 83 | $expectedLanguageCode = strtolower( $expectedLanguageCode ); 84 | 85 | // If the pagelanguage added via Special:PageLanguage is different from 86 | // what SIL is expecting then push for a DB update 87 | if ( $this->getDbPageLanguageCode() && $this->dbPageLanguage !== $expectedLanguageCode ) { 88 | $this->doUpdate( $expectedLanguageCode, $this->dbPageLanguage ); 89 | } 90 | } 91 | 92 | /** 93 | * @see Title::getDbPageLanguageCode 94 | */ 95 | private function getDbPageLanguageCode() { 96 | if ( $this->linkCache === null ) { 97 | $this->linkCache = MediaWikiServices::getInstance()->getLinkCache(); 98 | } 99 | 100 | // check, if the page language could be saved in the database, and if so and 101 | // the value is not requested already, lookup the page language using LinkCache 102 | if ( $this->isDbPageLanguage && $this->dbPageLanguage === false ) { 103 | $this->linkCache->addLinkObj( $this->title ); 104 | $this->dbPageLanguage = $this->linkCache->getGoodLinkFieldObj( $this->title, 'lang' ); 105 | } 106 | 107 | return $this->dbPageLanguage; 108 | } 109 | 110 | /** 111 | * @see Special:PageLanguage::onSubmit 112 | */ 113 | private function doUpdate( $expectedLanguageCode, $dbPageLanguage ) { 114 | $connection = $this->connection; 115 | $title = $this->title; 116 | 117 | if ( $connection === null ) { 118 | $connection = wfGetDB( DB_PRIMARY ); 119 | } 120 | 121 | $method = __METHOD__; 122 | $connection->onTransactionCommitOrIdle( static function () use ( $connection, $expectedLanguageCode, $dbPageLanguage, $title, $method ) { 123 | $pageId = $title->getArticleID(); 124 | 125 | $connection->update( 126 | 'page', 127 | [ 128 | 'page_lang' => $expectedLanguageCode 129 | ], 130 | [ 131 | 'page_id' => $pageId, 132 | 'page_lang' => $dbPageLanguage 133 | ], 134 | $method 135 | ); 136 | } ); 137 | } 138 | 139 | } 140 | -------------------------------------------------------------------------------- /src/PageContentLanguageOnTheFlyModifier.php: -------------------------------------------------------------------------------- 1 | interlanguageLinksLookup = $interlanguageLinksLookup; 39 | $this->intermediaryCache = $intermediaryCache; 40 | } 41 | 42 | /** 43 | * @since 1.3 44 | * 45 | * @param Title $title 46 | * @param string $languageCode 47 | */ 48 | public function addToIntermediaryCache( Title $title, $languageCode ) { 49 | $this->intermediaryCache->save( $this->getHashFrom( $title ), $languageCode ); 50 | } 51 | 52 | /** 53 | * @since 1.0 54 | * 55 | * @param Title $title 56 | * @param Language|string $pageLanguage 57 | * 58 | * @return string 59 | */ 60 | public function getPageContentLanguage( Title $title, $pageLanguage ) { 61 | $hash = $this->getHashFrom( $title ); 62 | 63 | // Convert language codes from BCP 47 to lowercase to ensure that codes 64 | // are matchable against `LanguageNameUtils->getLanguageNames` for languages like 65 | // zh-Hans etc. 66 | if ( ( $cachedLanguageCode = $this->intermediaryCache->fetch( $hash ) ) ) { 67 | return strtolower( $cachedLanguageCode ); 68 | } 69 | 70 | $lookupLanguageCode = $this->interlanguageLinksLookup->findPageLanguageForTarget( $title ); 71 | 72 | if ( $lookupLanguageCode !== null && $lookupLanguageCode !== '' ) { 73 | $pageLanguage = $lookupLanguageCode; 74 | } 75 | 76 | if ( $pageLanguage instanceof \Language ) { 77 | $pageLanguage = $pageLanguage->getCode(); 78 | } 79 | 80 | $pageLanguage = strtolower( $pageLanguage ); 81 | 82 | $this->intermediaryCache->save( $hash, $pageLanguage ); 83 | 84 | return $pageLanguage; 85 | } 86 | 87 | private function getHashFrom( Title $title ) { 88 | return md5( $title->getPrefixedText() ?? '' ); 89 | } 90 | 91 | } 92 | -------------------------------------------------------------------------------- /src/PropertyRegistry.php: -------------------------------------------------------------------------------- 1 | [ 42 | 'label' => SIL_PROP_CONTAINER, 43 | 'type' => '__sob', 44 | 'alias' => [ wfMessage( 'sil-property-alias-container' )->text(), 'hasInterlanguagelink', 'Has interlanguage links' ], 45 | 'msgkey' => 'sil-property-alias-container', 46 | 'visibility' => false, 47 | 'annotableByUser' => false 48 | ], 49 | 50 | self::SIL_ILL_LANG => [ 51 | 'label' => SIL_PROP_ILL_LANG, 52 | 'type' => '_txt', 53 | 'alias' => [ wfMessage( 'sil-property-ill-alias-language' )->text() ], 54 | 'msgkey' => 'sil-property-ill-alias-language', 55 | 'visibility' => true, 56 | 'annotableByUser' => true 57 | ], 58 | 59 | self::SIL_ILL_REF => [ 60 | 'label' => SIL_PROP_ILL_REF, 61 | 'type' => '_wpg', 62 | 'alias' => [ wfMessage( 'sil-property-ill-alias-reference' )->text() ], 63 | 'msgkey' => 'sil-property-ill-alias-reference', 64 | 'visibility' => true, 65 | 'annotableByUser' => false 66 | ], 67 | 68 | self::SIL_IWL_LANG => [ 69 | 'label' => SIL_PROP_IWL_LANG, 70 | 'type' => '_txt', 71 | 'alias' => [ wfMessage( 'sil-property-iwl-alias-language' )->text() ], 72 | 'msgkey' => 'sil-property-iwl-alias-language', 73 | 'visibility' => true, 74 | 'annotableByUser' => false 75 | ], 76 | 77 | self::SIL_IWL_REF => [ 78 | 'label' => SIL_PROP_IWL_REF, 79 | 'type' => '_wpg', 80 | 'alias' => [ wfMessage( 'sil-property-iwl-alias-reference' )->text() ], 81 | 'msgkey' => 'sil-property-iwl-alias-reference', 82 | 'visibility' => true, 83 | 'annotableByUser' => false 84 | ] 85 | ]; 86 | 87 | foreach ( $propertyDefinitions as $propertyId => $definition ) { 88 | $this->addPropertyDefinitionFor( $propertyRegistry, $propertyId, $definition ); 89 | } 90 | 91 | foreach ( $propertyDefinitions as $propertyId => $definition ) { 92 | // 2.4+ 93 | if ( method_exists( $propertyRegistry, 'registerPropertyAliasByMsgKey' ) ) { 94 | $propertyRegistry->registerPropertyAliasByMsgKey( 95 | $propertyId, 96 | $definition['msgkey'] 97 | ); 98 | } 99 | } 100 | 101 | return true; 102 | } 103 | 104 | private function addPropertyDefinitionFor( $propertyRegistry, $propertyId, $definition ) { 105 | $propertyRegistry->registerProperty( 106 | $propertyId, 107 | $definition['type'], 108 | $definition['label'], 109 | $definition['visibility'], 110 | $definition['annotableByUser'] 111 | ); 112 | 113 | foreach ( $definition['alias'] as $alias ) { 114 | $propertyRegistry->registerPropertyAlias( 115 | $propertyId, 116 | $alias 117 | ); 118 | } 119 | } 120 | 121 | } 122 | -------------------------------------------------------------------------------- /src/Search/LanguageResultMatchFinder.php: -------------------------------------------------------------------------------- 1 | interlanguageLinksLookup = $interlanguageLinksLookup; 28 | } 29 | 30 | /** 31 | * @since 1.0 32 | * 33 | * @param SearchResultSet $matches 34 | * @param $languageCode 35 | * 36 | * @return MappedSearchResultSet|null 37 | */ 38 | public function matchResultsToLanguage( SearchResultSet $matches, $languageCode ) { 39 | $mappedMatches = []; 40 | 41 | while ( $searchresult = $matches->next() ) { 42 | 43 | $title = $searchresult->getTitle(); 44 | 45 | $pageLanguage = $this->interlanguageLinksLookup->findPageLanguageForTarget( $title ); 46 | 47 | if ( $pageLanguage === $languageCode && $this->interlanguageLinksLookup->hasSilAnnotationFor( $title ) ) { 48 | $mappedMatches[] = $searchresult; 49 | } 50 | } 51 | 52 | if ( $mappedMatches === [] ) { 53 | return null; 54 | } 55 | 56 | return new MappedSearchResultSet( $mappedMatches, $matches->termMatches() ); 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /src/Search/MappedSearchResultSet.php: -------------------------------------------------------------------------------- 1 | searchMatches = $searchMatches; 41 | $this->termMatches = $termMatches; 42 | $this->count = $count; 43 | } 44 | 45 | /** 46 | * @since 1.0 47 | * 48 | * @return SearchResult|bool 49 | */ 50 | public function next() { 51 | if ( $this->searchMatches === false || $this->searchMatches === [] ) { 52 | return false; 53 | } 54 | 55 | $key = key( $this->searchMatches ); 56 | $match = current( $this->searchMatches ); 57 | if ( $key !== null && $match !== false ) { 58 | next( $this->searchMatches ); 59 | if ( $match instanceof SearchResult ) { 60 | return $match; 61 | } 62 | 63 | if ( $match instanceof Title ) { 64 | return SearchResult::newFromTitle( $match ); 65 | } 66 | } 67 | 68 | return false; 69 | } 70 | 71 | /** 72 | * Return number of rows included in this result set. 73 | * 74 | * @since 1.0 75 | * 76 | * @return int|void 77 | */ 78 | public function numRows() { 79 | return count( $this->searchMatches ); 80 | } 81 | 82 | /** 83 | * Return true if results are included in this result set. 84 | * 85 | * @since 1.0 86 | * 87 | * @return bool 88 | */ 89 | public function hasResults() { 90 | return $this->numRows() > 0; 91 | } 92 | 93 | /** 94 | * @since 1.0 95 | * 96 | * @return int 97 | */ 98 | public function getTotalHits() { 99 | return $this->count; 100 | } 101 | 102 | /** 103 | * @since 1.0 104 | * 105 | * @return string[] 106 | */ 107 | public function termMatches() { 108 | return $this->termMatches; 109 | } 110 | 111 | } 112 | -------------------------------------------------------------------------------- /src/SiteLanguageLinkModifier.php: -------------------------------------------------------------------------------- 1 | titleForExternalLanguageLink = $titleForExternalLanguageLink; 34 | $this->titleToTargetLink = $titleToTargetLink; 35 | } 36 | 37 | /** 38 | * @since 1.0 39 | * 40 | * @param array &$languageLink 41 | * 42 | * @return bool 43 | */ 44 | public function modifyLanguageLink( &$languageLink ) { 45 | if ( !isset( $languageLink['text'] ) || strpos( $languageLink['text'], 'sil:' ) === false ) { 46 | return false; 47 | } 48 | 49 | [ $internalId, $languageCode, $target ] = explode( ':', $languageLink['text'], 3 ); 50 | 51 | if ( $internalId !== 'sil' ) { 52 | return false; 53 | } 54 | 55 | $languageName = MediaWikiServices::getInstance()->getLanguageNameUtils()->getLanguageName( $languageCode ); 56 | 57 | $languageLink = [ 58 | 'href' => Title::newFromText( $target )->getFullURL(), 59 | 'text' => $languageName, 60 | 'title' => $languageName, 61 | 'class' => '', 62 | 'lang' => $languageCode, 63 | 'hreflang' => $languageCode, 64 | ]; 65 | 66 | return true; 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | addPsr4( 'SIL\\Tests\\', __DIR__ . '/phpunit/Unit' ); 28 | $autoloader->addPsr4( 'SIL\\Tests\\Integration\\', __DIR__ . '/phpunit/Integration' ); 29 | unset( $autoloader ); 30 | -------------------------------------------------------------------------------- /tests/phpunit/Integration/I18nJsonFileIntegrityTest.php: -------------------------------------------------------------------------------- 1 | newJsonFileReader( $file ); 29 | 30 | $this->assertIsInt( 31 | 32 | $jsonFileReader->getModificationTime() 33 | ); 34 | 35 | $this->assertIsArray( 36 | 37 | $jsonFileReader->read() 38 | ); 39 | } 40 | 41 | public function i18nFileProvider() { 42 | $provider = []; 43 | $location = $GLOBALS['wgMessagesDirs']['SemanticInterlanguageLinks']; 44 | 45 | $bulkFileProvider = UtilityFactory::getInstance()->newBulkFileProvider( $location ); 46 | $bulkFileProvider->searchByFileExtension( 'json' ); 47 | 48 | foreach ( $bulkFileProvider->getFiles() as $file ) { 49 | $provider[] = [ $file ]; 50 | } 51 | 52 | return $provider; 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /tests/phpunit/Integration/LanguageFilterCategoryViewerIntegrationTest.php: -------------------------------------------------------------------------------- 1 | pageCreator = UtilityFactory::getInstance()->newpageCreator(); 33 | } 34 | 35 | protected function tearDown(): void { 36 | UtilityFactory::getInstance() 37 | ->newPageDeleter() 38 | ->doDeletePoolOfPages( $this->subjects ); 39 | 40 | parent::tearDown(); 41 | } 42 | 43 | public function testCategoryViewerToDisplayAll() { 44 | $category = Title::newFromText( 'CategoryViewerToDisplayAll', NS_CATEGORY ); 45 | $targetEn = Title::newFromText( 'CategoryViewerToDisplayAllTargetEn' ); 46 | $targetJa = Title::newFromText( 'CategoryViewerToDisplayAllTargetJa' ); 47 | 48 | $this->pageCreator 49 | ->createPage( $targetEn ) 50 | ->doEdit( '{{INTERLANGUAGELINK:en|Lorem ipsum}} [[Category:CategoryViewerToDisplayAll]]' ); 51 | 52 | $this->pageCreator 53 | ->createPage( $targetJa ) 54 | ->doEdit( '{{INTERLANGUAGELINK:ja|Lorem ipsum}} [[Category:CategoryViewerToDisplayAll]]' ); 55 | 56 | $this->pageCreator 57 | ->createPage( $category ); 58 | 59 | $context = new RequestContext(); 60 | $context->setTitle( $category ); 61 | 62 | $instance = Article::newFromTitle( $category, $context ); 63 | $instance->view(); 64 | 65 | $text = $instance->getContext()->getOutput()->getHTML(); 66 | 67 | $this->assertContains( 68 | 'title="CategoryViewerToDisplayAllTargetEn">CategoryViewerToDisplayAllTargetEn', 69 | $text 70 | ); 71 | 72 | $this->assertContains( 73 | 'title="CategoryViewerToDisplayAllTargetJa">CategoryViewerToDisplayAllTargetJa', 74 | $text 75 | ); 76 | 77 | $this->subjects = [ $category, $targetEn, $targetJa ]; 78 | } 79 | 80 | public function testCategoryViewerToDisplayByLanguageOnly() { 81 | $category = Title::newFromText( 'CategoryViewerByLanguage', NS_CATEGORY ); 82 | $targetEn = Title::newFromText( 'CategoryViewerByLanguageTargetEn' ); 83 | $targetJa = Title::newFromText( 'CategoryViewerByLanguageTargetJa' ); 84 | 85 | $this->pageCreator 86 | ->createPage( $targetEn ) 87 | ->doEdit( '{{INTERLANGUAGELINK:en|CategoryViewerByLanguage}} [[Category:CategoryViewerByLanguage]]' ); 88 | 89 | $this->pageCreator 90 | ->createPage( $targetJa ) 91 | ->doEdit( '{{INTERLANGUAGELINK:ja|CategoryViewerByLanguage}} [[Category:CategoryViewerByLanguage]]' ); 92 | 93 | $this->pageCreator 94 | ->createPage( $category ) 95 | ->doEdit( '{{INTERLANGUAGELINK:en|Category:CategoryViewerByLanguage}}' ); 96 | 97 | $context = new RequestContext(); 98 | $context->setTitle( $category ); 99 | 100 | $instance = Article::newFromTitle( $category, $context ); 101 | $instance->view(); 102 | 103 | $text = $instance->getContext()->getOutput()->getHTML(); 104 | 105 | $this->assertContains( 106 | 'title="CategoryViewerByLanguageTargetEn">CategoryViewerByLanguageTargetEn', 107 | $text 108 | ); 109 | 110 | $this->subjects = [ $category, $targetEn, $targetJa ]; 111 | } 112 | 113 | } 114 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/AnnotatedLanguageParserFunctionTest.php: -------------------------------------------------------------------------------- 1 | getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 20 | ->disableOriginalConstructor() 21 | ->getMock(); 22 | 23 | $this->assertInstanceOf( 24 | AnnotatedLanguageParserFunction::class, 25 | new AnnotatedLanguageParserFunction( $interlanguageLinksLookup ) 26 | ); 27 | } 28 | 29 | public function testParseOnMissingAnnotatedLanguage() { 30 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 31 | ->disableOriginalConstructor() 32 | ->getMock(); 33 | 34 | $interlanguageLinksLookup->expects( $this->once() ) 35 | ->method( 'findPageLanguageForTarget' ) 36 | ->willReturn( '' ); 37 | 38 | $interlanguageLinksLookup->expects( $this->once() ) 39 | ->method( 'getRedirectTargetFor' ) 40 | ->willReturn( \Title::newFromText( 'Foo' ) ); 41 | 42 | $instance = new AnnotatedLanguageParserFunction( 43 | $interlanguageLinksLookup 44 | ); 45 | 46 | $this->assertSame( 47 | '', 48 | $instance->parse( \Title::newFromText( 'Foo' ), 'FakeTemplate' ) 49 | ); 50 | } 51 | 52 | public function testParseOnAnnotatedLanguageWithoutTemplate() { 53 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 54 | ->disableOriginalConstructor() 55 | ->getMock(); 56 | 57 | $interlanguageLinksLookup->expects( $this->once() ) 58 | ->method( 'findPageLanguageForTarget' ) 59 | ->willReturn( 'en' ); 60 | 61 | $interlanguageLinksLookup->expects( $this->once() ) 62 | ->method( 'getRedirectTargetFor' ) 63 | ->willReturn( \Title::newFromText( 'Foo' ) ); 64 | 65 | $instance = new AnnotatedLanguageParserFunction( 66 | $interlanguageLinksLookup 67 | ); 68 | 69 | $expected = 'en'; 70 | 71 | $this->assertEquals( 72 | $expected, 73 | $instance->parse( \Title::newFromText( 'Foo' ), '' ) 74 | ); 75 | } 76 | 77 | public function testParseOnAnnotatedLanguageWithTemplate() { 78 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 79 | ->disableOriginalConstructor() 80 | ->getMock(); 81 | 82 | $interlanguageLinksLookup->expects( $this->once() ) 83 | ->method( 'findPageLanguageForTarget' ) 84 | ->willReturn( 'en' ); 85 | 86 | $interlanguageLinksLookup->expects( $this->once() ) 87 | ->method( 'getRedirectTargetFor' ) 88 | ->willReturn( \Title::newFromText( 'Foo' ) ); 89 | 90 | $instance = new AnnotatedLanguageParserFunction( 91 | $interlanguageLinksLookup 92 | ); 93 | 94 | $expected = '{{FakeTemplate|target-link=Foo|lang-code=en|lang-name=English}}'; 95 | 96 | $this->assertEquals( 97 | [ $expected, "noparse" => false, "isHTML" => false ], 98 | $instance->parse( \Title::newFromText( 'Foo' ), 'FakeTemplate' ) 99 | ); 100 | } 101 | 102 | } 103 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/CacheKeyProviderTest.php: -------------------------------------------------------------------------------- 1 | assertInstanceOf( 20 | '\SIL\CacheKeyProvider', 21 | new CacheKeyProvider( 'foo' ) 22 | ); 23 | } 24 | 25 | public function testGetSiteCacheKey() { 26 | $instance = new CacheKeyProvider( 'foo' ); 27 | 28 | $this->assertSame( 29 | $instance->getSiteCacheKey( 'foo' ), 30 | $instance->getSiteCacheKey( 'foo' ) 31 | ); 32 | } 33 | 34 | public function testGetPageLanguageCacheBlobKey() { 35 | $instance = new CacheKeyProvider( 'foo' ); 36 | 37 | $this->assertSame( 38 | $instance->getPageLanguageCacheBlobKey( 'foo' ), 39 | $instance->getPageLanguageCacheBlobKey( 'foo' ) 40 | ); 41 | } 42 | 43 | public function testGetPageCacheKey() { 44 | $instance = new CacheKeyProvider( 'foo' ); 45 | 46 | $this->assertSame( 47 | $instance->getPageCacheKey( 'foo', true ), 48 | $instance->getPageCacheKey( 'foo', true ) 49 | ); 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/InterlanguageLinkTest.php: -------------------------------------------------------------------------------- 1 | assertInstanceOf( 26 | '\SIL\InterlanguageLink', 27 | new InterlanguageLink( 'en', 'Foo' ) 28 | ); 29 | } 30 | 31 | public function testConstructorArgumentGetter() { 32 | $instance = new InterlanguageLink( 'en', 'Foo' ); 33 | 34 | $this->assertEquals( 35 | 'en', 36 | $instance->getLanguageCode() 37 | ); 38 | 39 | $this->assertInstanceOf( 40 | '\Title', 41 | $instance->getLinkReference() 42 | ); 43 | } 44 | 45 | public function testConstructDataValue() { 46 | $instance = new InterlanguageLink( 'en', 'Foo' ); 47 | 48 | $this->assertInstanceOf( 49 | '\SMWDataValue', 50 | $instance->newLanguageDataValue() 51 | ); 52 | 53 | $this->assertEquals( 54 | PropertyRegistry::SIL_ILL_LANG, 55 | $instance->newLanguageDataValue()->getProperty()->getKey() 56 | ); 57 | 58 | $this->assertInstanceOf( 59 | '\SMWDataValue', 60 | $instance->newLinkReferenceDataValue() 61 | ); 62 | 63 | $this->assertEquals( 64 | PropertyRegistry::SIL_ILL_REF, 65 | $instance->newLinkReferenceDataValue()->getProperty()->getKey() 66 | ); 67 | 68 | $this->assertInstanceOf( 69 | '\SMW\DIProperty', 70 | $instance->newContainerProperty() 71 | ); 72 | 73 | $this->assertEquals( 74 | PropertyRegistry::SIL_CONTAINER, 75 | $instance->newContainerProperty()->getKey() 76 | ); 77 | } 78 | 79 | public function testGetHash() { 80 | $instance = new InterlanguageLink( 'en', 'Foo' ); 81 | 82 | $this->assertContains( 83 | 'en#Foo', 84 | $instance->getHash() 85 | ); 86 | } 87 | 88 | public function testGetContainerId() { 89 | $instance = new InterlanguageLink( 'en', 'Foo' ); 90 | 91 | $this->assertContains( 92 | 'ill.en', 93 | $instance->getContainerId() 94 | ); 95 | } 96 | 97 | public function testGetLinkReference() { 98 | $linkReference = Title::newFromText( __METHOD__ ); 99 | 100 | $instance = new InterlanguageLink( 'en', $linkReference ); 101 | 102 | $this->assertSame( 103 | $linkReference, 104 | $instance->getLinkReference() 105 | ); 106 | 107 | $instance = new InterlanguageLink( 'en', __METHOD__ ); 108 | 109 | $this->assertEquals( 110 | $linkReference, 111 | $instance->getLinkReference() 112 | ); 113 | } 114 | 115 | } 116 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/InterwikiLanguageLinkFetcherTest.php: -------------------------------------------------------------------------------- 1 | getMockBuilder( '\SIL\LanguageLinkAnnotator' ) 21 | ->disableOriginalConstructor() 22 | ->getMock(); 23 | 24 | $this->assertInstanceOf( 25 | '\SIL\InterwikiLanguageLinkFetcher', 26 | new InterwikiLanguageLinkFetcher( $languageLinkAnnotator ) 27 | ); 28 | } 29 | 30 | public function testEmptyLanguageLinks() { 31 | $languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' ) 32 | ->disableOriginalConstructor() 33 | ->getMock(); 34 | 35 | $languageLinkAnnotator->expects( $this->never() ) 36 | ->method( 'addAnnotationForInterwikiLanguageLink' ); 37 | 38 | $parserOutput = new \ParserOutput(); 39 | $parserOutput->setLanguageLinks( [] ); 40 | 41 | $instance = new InterwikiLanguageLinkFetcher( $languageLinkAnnotator ); 42 | $instance->fetchLanguagelinksFromParserOutput( $parserOutput ); 43 | } 44 | 45 | public function testIgnoreSILLink() { 46 | $languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' ) 47 | ->disableOriginalConstructor() 48 | ->getMock(); 49 | 50 | $languageLinkAnnotator->expects( $this->never() ) 51 | ->method( 'addAnnotationForInterwikiLanguageLink' ); 52 | 53 | $parserOutput = new \ParserOutput(); 54 | $parserOutput->setLanguageLinks( [ 'sil:en:Foo' ] ); 55 | 56 | $instance = new InterwikiLanguageLinkFetcher( $languageLinkAnnotator ); 57 | $instance->fetchLanguagelinksFromParserOutput( $parserOutput ); 58 | } 59 | 60 | public function testInvalidInterwikiLink() { 61 | $languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' ) 62 | ->disableOriginalConstructor() 63 | ->getMock(); 64 | 65 | $languageLinkAnnotator->expects( $this->never() ) 66 | ->method( 'addAnnotationForInterwikiLanguageLink' ); 67 | 68 | $parserOutput = new \ParserOutput(); 69 | $parserOutput->setLanguageLinks( [ 'invalid:Foo' ] ); 70 | 71 | $instance = new InterwikiLanguageLinkFetcher( $languageLinkAnnotator ); 72 | $instance->fetchLanguagelinksFromParserOutput( $parserOutput ); 73 | } 74 | 75 | public function testValidInterwikiLink() { 76 | $parserData = $this->getMockBuilder( '\SMW\ParserData' ) 77 | ->disableOriginalConstructor() 78 | ->getMock(); 79 | 80 | $languageLinkAnnotator = $this->getMockBuilder( '\SIL\LanguageLinkAnnotator' ) 81 | ->setConstructorArgs( [ $parserData ] ) 82 | ->getMock(); 83 | 84 | $languageLinkAnnotator->expects( $this->once() ) 85 | ->method( 'addAnnotationForInterwikiLanguageLink' ); 86 | 87 | $title = $this->getMockBuilder( '\Title' ) 88 | ->disableOriginalConstructor() 89 | ->getMock(); 90 | 91 | $title->expects( $this->any() ) 92 | ->method( 'getInterwiki' ) 93 | ->willReturn( 'en' ); 94 | 95 | $parserOutput = new \ParserOutput(); 96 | $parserOutput->setLanguageLinks( [ $title ] ); 97 | 98 | $instance = new InterwikiLanguageLinkFetcher( $languageLinkAnnotator ); 99 | $instance->fetchLanguagelinksFromParserOutput( $parserOutput ); 100 | } 101 | 102 | } 103 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/InterwikiLanguageLinkTest.php: -------------------------------------------------------------------------------- 1 | getMockBuilder( '\SMW\PropertyRegistry' ) 28 | ->disableOriginalConstructor() 29 | ->getMock(); 30 | 31 | $instance = new PropertyRegistry(); 32 | $instance->register( $propertyRegistry ); 33 | } 34 | 35 | public function testCanConstruct() { 36 | $this->assertInstanceOf( 37 | '\SIL\InterwikiLanguageLink', 38 | new InterwikiLanguageLink( 'en:Foo' ) 39 | ); 40 | } 41 | 42 | public function testConstructorArgumentGetter() { 43 | $title = $this->getMockBuilder( '\Title' ) 44 | ->disableOriginalConstructor() 45 | ->getMock(); 46 | 47 | $title->expects( $this->once() ) 48 | ->method( 'getInterwiki' ) 49 | ->willReturn( 'en' ); 50 | 51 | $instance = new InterwikiLanguageLink( $title ); 52 | 53 | $this->assertEquals( 54 | 'en', 55 | $instance->getLanguageCode() 56 | ); 57 | 58 | $this->assertInstanceOf( 59 | '\Title', 60 | $instance->getInterwikiReference() 61 | ); 62 | } 63 | 64 | public function testConstructDataValue() { 65 | $title = $this->getMockBuilder( '\Title' ) 66 | ->disableOriginalConstructor() 67 | ->getMock(); 68 | 69 | $title->expects( $this->any() ) 70 | ->method( 'getInterwiki' ) 71 | ->willReturn( 'en' ); 72 | 73 | $title->expects( $this->any() ) 74 | ->method( 'getNamespace' ) 75 | ->willReturn( NS_MAIN ); 76 | 77 | $title->expects( $this->any() ) 78 | ->method( 'getDBKey' ) 79 | ->willReturn( 'Foo' ); 80 | 81 | $instance = new InterwikiLanguageLink( $title ); 82 | 83 | $this->assertInstanceOf( 84 | '\SMWDataValue', 85 | $instance->newLanguageDataValue() 86 | ); 87 | 88 | $this->assertEquals( 89 | PropertyRegistry::SIL_IWL_LANG, 90 | $instance->newLanguageDataValue()->getProperty()->getKey() 91 | ); 92 | 93 | $this->assertInstanceOf( 94 | '\SMWDataValue', 95 | $instance->newInterwikiReferenceDataValue() 96 | ); 97 | 98 | $this->assertEquals( 99 | PropertyRegistry::SIL_IWL_REF, 100 | $instance->newInterwikiReferenceDataValue()->getProperty()->getKey() 101 | ); 102 | 103 | $this->assertInstanceOf( 104 | '\SMW\DIProperty', 105 | $instance->newContainerProperty() 106 | ); 107 | 108 | $this->assertEquals( 109 | PropertyRegistry::SIL_CONTAINER, 110 | $instance->newContainerProperty()->getKey() 111 | ); 112 | } 113 | 114 | public function testGetHash() { 115 | $title = $this->getMockBuilder( '\Title' ) 116 | ->disableOriginalConstructor() 117 | ->getMock(); 118 | 119 | $title->expects( $this->any() ) 120 | ->method( 'getInterwiki' ) 121 | ->willReturn( 'en' ); 122 | 123 | $title->expects( $this->any() ) 124 | ->method( 'getPrefixedText' ) 125 | ->willReturn( 'Foo' ); 126 | 127 | $instance = new InterwikiLanguageLink( $title ); 128 | 129 | $this->assertContains( 130 | 'en#Foo', 131 | $instance->getHash() 132 | ); 133 | } 134 | 135 | public function testGetContainerId() { 136 | $title = $this->getMockBuilder( '\Title' ) 137 | ->disableOriginalConstructor() 138 | ->getMock(); 139 | 140 | $title->expects( $this->once() ) 141 | ->method( 'getInterwiki' ) 142 | ->willReturn( 'en' ); 143 | 144 | $instance = new InterwikiLanguageLink( $title ); 145 | 146 | $this->assertContains( 147 | 'iwl.en', 148 | $instance->getContainerId() 149 | ); 150 | } 151 | 152 | public function testGetInterwikiReference() { 153 | $linkReference = Title::newFromText( 'en:Foo' ); 154 | 155 | $instance = new InterwikiLanguageLink( 'en:Foo' ); 156 | 157 | $this->assertSame( 158 | $linkReference, 159 | $instance->getInterwikiReference() 160 | ); 161 | } 162 | 163 | } 164 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/PageContentLanguageDbModifierTest.php: -------------------------------------------------------------------------------- 1 | getMockBuilder( '\Title' ) 22 | ->disableOriginalConstructor() 23 | ->getMock(); 24 | 25 | $this->assertInstanceOf( 26 | '\SIL\PageContentLanguageDbModifier', 27 | new PageContentLanguageDbModifier( $title ) 28 | ); 29 | } 30 | 31 | public function testNotMarkedAsPageLanguageByDB() { 32 | $title = Title::newFromText( __METHOD__ ); 33 | 34 | $connection = $this->getMockBuilder( '\Wikimedia\Rdbms\Database' ) 35 | ->disableOriginalConstructor() 36 | ->getMockForAbstractClass(); 37 | 38 | $instance = new PageContentLanguageDbModifier( 39 | $title, 40 | $connection 41 | ); 42 | 43 | $instance->markAsPageLanguageByDB( false ); 44 | 45 | $this->assertNull( 46 | $instance->updatePageLanguage( 'en' ) 47 | ); 48 | } 49 | 50 | public function testForceUpdateOfPageLanguageOnDifferentLanguageCode() { 51 | $title = Title::newFromText( __METHOD__ ); 52 | 53 | $connection = $this->getMockBuilder( '\Wikimedia\Rdbms\Database' ) 54 | ->disableOriginalConstructor() 55 | ->onlyMethods( [ 'update' ] ) 56 | ->getMockForAbstractClass(); 57 | 58 | $connection->expects( $this->once() ) 59 | ->method( 'update' ); 60 | 61 | if ( version_compare( MW_VERSION, '1.40', '>=' ) ) { 62 | $wdb = TestingAccessWrapper::newFromObject( $connection ); 63 | $wdb->flagsHolder = new \Wikimedia\Rdbms\Database\DatabaseFlags( 0 ); 64 | } 65 | 66 | $linkCache = $this->getMockBuilder( '\LinkCache' ) 67 | ->disableOriginalConstructor() 68 | ->getMock(); 69 | 70 | $linkCache->expects( $this->once() ) 71 | ->method( 'getGoodLinkFieldObj' ) 72 | ->willReturn( 'fr' ); 73 | 74 | $instance = new PageContentLanguageDbModifier( 75 | $title, 76 | $connection, 77 | $linkCache 78 | ); 79 | 80 | $instance->markAsPageLanguageByDB( true ); 81 | $instance->updatePageLanguage( 'en' ); 82 | } 83 | 84 | public function testNoUpdateOnSameLanguageCode() { 85 | $title = Title::newFromText( __METHOD__ ); 86 | 87 | $connection = $this->getMockBuilder( '\Wikimedia\Rdbms\Database' ) 88 | ->disableOriginalConstructor() 89 | ->onlyMethods( [ 'update' ] ) 90 | ->getMockForAbstractClass(); 91 | 92 | $connection->expects( $this->never() ) 93 | ->method( 'update' ); 94 | 95 | $linkCache = $this->getMockBuilder( '\LinkCache' ) 96 | ->disableOriginalConstructor() 97 | ->getMock(); 98 | 99 | $linkCache->expects( $this->once() ) 100 | ->method( 'getGoodLinkFieldObj' ) 101 | ->willReturn( 'en' ); 102 | 103 | $instance = new PageContentLanguageDbModifier( 104 | $title, 105 | $connection, 106 | $linkCache 107 | ); 108 | 109 | $instance->markAsPageLanguageByDB( true ); 110 | $instance->updatePageLanguage( 'en' ); 111 | } 112 | 113 | } 114 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/ParserFunctionFactoryTest.php: -------------------------------------------------------------------------------- 1 | getService( 'ParserFactory' ); 26 | $this->parser = $factory->create(); 27 | } 28 | 29 | public function testCanConstruct() { 30 | $this->assertInstanceOf( 31 | '\SIL\ParserFunctionFactory', 32 | new ParserFunctionFactory() 33 | ); 34 | } 35 | 36 | public function testNewInterlanguageLinkParserFunctionDefinition() { 37 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 38 | ->disableOriginalConstructor() 39 | ->getMock(); 40 | 41 | $pageContentLanguageOnTheFlyModifier = $this->getMockBuilder( '\SIL\PageContentLanguageOnTheFlyModifier' ) 42 | ->disableOriginalConstructor() 43 | ->getMock(); 44 | 45 | $this->parser->setTitle( Title::newFromText( __METHOD__ ) ); 46 | 47 | $instance = new ParserFunctionFactory(); 48 | 49 | [ $name, $definition, $flag ] = $instance->newInterlanguageLinkParserFunctionDefinition( 50 | $interlanguageLinksLookup, 51 | $pageContentLanguageOnTheFlyModifier 52 | ); 53 | 54 | $this->assertEquals( 55 | 'interlanguagelink', 56 | $name 57 | ); 58 | 59 | $this->assertInstanceOf( 60 | '\Closure', 61 | $definition 62 | ); 63 | 64 | $text = ''; 65 | 66 | $this->assertNotEmpty( 67 | call_user_func_array( $definition, [ $this->parser, $text ] ) 68 | ); 69 | } 70 | 71 | public function testNewInterlanguageListParserFunctionDefinition() { 72 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 73 | ->disableOriginalConstructor() 74 | ->getMock(); 75 | 76 | $this->parser->setTitle( Title::newFromText( __METHOD__ ) ); 77 | 78 | $instance = new ParserFunctionFactory(); 79 | 80 | [ $name, $definition, $flag ] = $instance->newInterlanguageListParserFunctionDefinition( 81 | $interlanguageLinksLookup 82 | ); 83 | 84 | $this->assertEquals( 85 | 'interlanguagelist', 86 | $name 87 | ); 88 | 89 | $this->assertInstanceOf( 90 | '\Closure', 91 | $definition 92 | ); 93 | 94 | $text = ''; 95 | 96 | $this->assertNotEmpty( 97 | call_user_func_array( $definition, [ $this->parser, $text ] ) 98 | ); 99 | } 100 | 101 | public function testNewAnnotatedLanguageParserFunctionDefinition() { 102 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 103 | ->disableOriginalConstructor() 104 | ->getMock(); 105 | 106 | $this->parser->setTitle( Title::newFromText( __METHOD__ ) ); 107 | 108 | $instance = new ParserFunctionFactory(); 109 | 110 | [ $name, $definition, $flag ] = $instance->newAnnotatedLanguageParserFunctionDefinition( 111 | $interlanguageLinksLookup 112 | ); 113 | 114 | $this->assertEquals( 115 | 'annotatedlanguage', 116 | $name 117 | ); 118 | 119 | $text = ''; 120 | 121 | $this->assertEmpty( 122 | call_user_func_array( $definition, [ $this->parser, $text ] ) 123 | ); 124 | } 125 | 126 | } 127 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/PropertyRegistryTest.php: -------------------------------------------------------------------------------- 1 | assertInstanceOf( 22 | PropertyRegistry::class, 23 | new PropertyRegistry() 24 | ); 25 | } 26 | 27 | public function testILLRegister() { 28 | $semanticMediaWikiPropertyRegistry = SemanticMediaWikiPropertyRegistry::getInstance(); 29 | 30 | $propertyRegistry = $this->getMockBuilder( '\SMW\PropertyRegistry' ) 31 | ->disableOriginalConstructor() 32 | ->getMock(); 33 | 34 | $instance = new PropertyRegistry(); 35 | $instance->register( $propertyRegistry ); 36 | 37 | $this->assertNotEmpty( 38 | $semanticMediaWikiPropertyRegistry->findPropertyLabel( PropertyRegistry::SIL_ILL_LANG ) 39 | ); 40 | 41 | $this->assertNotEmpty( 42 | $semanticMediaWikiPropertyRegistry->findPropertyLabel( PropertyRegistry::SIL_ILL_REF ) 43 | ); 44 | 45 | $this->assertNotEmpty( 46 | $semanticMediaWikiPropertyRegistry->findPropertyLabel( PropertyRegistry::SIL_CONTAINER ) 47 | ); 48 | } 49 | 50 | public function testIWLRegister() { 51 | $semanticMediaWikiPropertyRegistry = SemanticMediaWikiPropertyRegistry::getInstance(); 52 | 53 | $propertyRegistry = $this->getMockBuilder( '\SMW\PropertyRegistry' ) 54 | ->disableOriginalConstructor() 55 | ->getMock(); 56 | 57 | $instance = new PropertyRegistry(); 58 | $instance->register( $propertyRegistry ); 59 | 60 | $this->assertNotEmpty( 61 | $semanticMediaWikiPropertyRegistry->findPropertyLabel( PropertyRegistry::SIL_IWL_LANG ) 62 | ); 63 | 64 | $this->assertNotEmpty( 65 | $semanticMediaWikiPropertyRegistry->findPropertyLabel( PropertyRegistry::SIL_IWL_REF ) 66 | ); 67 | 68 | $this->assertNotEmpty( 69 | $semanticMediaWikiPropertyRegistry->findPropertyLabel( PropertyRegistry::SIL_CONTAINER ) 70 | ); 71 | } 72 | 73 | } 74 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/Search/LanguageResultMatchFinderTest.php: -------------------------------------------------------------------------------- 1 | getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 22 | ->disableOriginalConstructor() 23 | ->getMock(); 24 | 25 | $this->assertInstanceOf( 26 | '\SIL\Search\LanguageResultMatchFinder', 27 | new LanguageResultMatchFinder( $interlanguageLinksLookup ) 28 | ); 29 | } 30 | 31 | public function testNoMatchResultsToLanguageForNonEmptySearchResultSetThatContainsNullLanguage() { 32 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 33 | ->disableOriginalConstructor() 34 | ->getMock(); 35 | 36 | $instance = new LanguageResultMatchFinder( $interlanguageLinksLookup ); 37 | 38 | $searchResultSet = $this->getMockBuilder( '\SearchResultSet' ) 39 | ->disableOriginalConstructor() 40 | ->getMock(); 41 | 42 | $this->assertNull( 43 | $instance->matchResultsToLanguage( $searchResultSet, 'en' ) 44 | ); 45 | } 46 | 47 | public function testNoMatchResultsToLanguageForValidSearchResultSetThatContainsNullLanguage() { 48 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 49 | ->disableOriginalConstructor() 50 | ->getMock(); 51 | 52 | $instance = new LanguageResultMatchFinder( $interlanguageLinksLookup ); 53 | 54 | $searchresult = $this->getMockBuilder( '\SearchResult' ) 55 | ->disableOriginalConstructor() 56 | ->getMock(); 57 | 58 | $searchresult->expects( $this->once() ) 59 | ->method( 'getTitle' ) 60 | ->willReturn( Title::newFromText( __METHOD__ ) ); 61 | 62 | $searchResultSet = $this->getMockBuilder( '\SearchResultSet' ) 63 | ->disableOriginalConstructor() 64 | ->getMock(); 65 | 66 | $searchResultSet->expects( $this->any() ) 67 | ->method( 'next' ) 68 | ->willReturnOnConsecutiveCalls( $searchresult, false ); 69 | 70 | $this->assertNull( 71 | $instance->matchResultsToLanguage( $searchResultSet, 'en' ) 72 | ); 73 | } 74 | 75 | public function testMatchResultsToLanguageForValidSearchResultSet() { 76 | $title = Title::newFromText( __METHOD__ ); 77 | 78 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 79 | ->disableOriginalConstructor() 80 | ->getMock(); 81 | 82 | $interlanguageLinksLookup->expects( $this->atLeastOnce() ) 83 | ->method( 'hasSilAnnotationFor' ) 84 | ->with( $title ) 85 | ->willReturn( true ); 86 | 87 | $interlanguageLinksLookup->expects( $this->atLeastOnce() ) 88 | ->method( 'findPageLanguageForTarget' ) 89 | ->with( $title ) 90 | ->willReturn( 'mhr' ); 91 | 92 | $instance = new LanguageResultMatchFinder( $interlanguageLinksLookup ); 93 | 94 | $searchresult = $this->getMockBuilder( '\SearchResult' ) 95 | ->disableOriginalConstructor() 96 | ->getMock(); 97 | 98 | $searchresult->expects( $this->atLeastOnce() ) 99 | ->method( 'getTitle' ) 100 | ->willReturn( $title ); 101 | 102 | $searchResultSet = $this->getMockBuilder( '\SearchResultSet' ) 103 | ->disableOriginalConstructor() 104 | ->getMock(); 105 | 106 | $searchResultSet->expects( $this->any() ) 107 | ->method( 'next' ) 108 | ->willReturnOnConsecutiveCalls( $searchresult, $searchresult, false ); 109 | 110 | $this->assertInstanceOf( 111 | '\SIL\Search\MappedSearchResultSet', 112 | $instance->matchResultsToLanguage( $searchResultSet, 'mhr' ) 113 | ); 114 | } 115 | 116 | } 117 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/Search/MappedSearchResultSetTest.php: -------------------------------------------------------------------------------- 1 | assertInstanceOf( 24 | '\SIL\Search\MappedSearchResultSet', 25 | new MappedSearchResultSet( $searchMatches, $termMatches ) 26 | ); 27 | } 28 | 29 | public function testEmptyResulSet() { 30 | $searchMatches = []; 31 | $termMatches = []; 32 | 33 | $instance = new MappedSearchResultSet( $searchMatches, $termMatches, 42 ); 34 | 35 | $this->assertSame( 36 | 0, 37 | $instance->numRows() 38 | ); 39 | 40 | $this->assertFalse( 41 | $instance->hasResults() 42 | ); 43 | 44 | $this->assertEquals( 45 | 42, 46 | $instance->getTotalHits() 47 | ); 48 | 49 | $this->assertEmpty( 50 | $instance->termMatches() 51 | ); 52 | 53 | $this->assertFalse( 54 | $instance->next() 55 | ); 56 | } 57 | 58 | public function testNextSearchResult() { 59 | $searchResult = $this->getMockBuilder( '\SearchResult' ) 60 | ->disableOriginalConstructor() 61 | ->getMock(); 62 | 63 | $fakeTitle = $this->getMockBuilder( '\Title' ) 64 | ->disableOriginalConstructor() 65 | ->getMock(); 66 | 67 | $searchMatches = [ $searchResult, $fakeTitle, 'Foo' ]; 68 | $termMatches = []; 69 | 70 | $instance = new MappedSearchResultSet( $searchMatches, $termMatches ); 71 | 72 | $this->assertEquals( 73 | $searchResult, 74 | $instance->next() 75 | ); 76 | 77 | $this->assertInstanceOf( 78 | '\SearchResult', 79 | $instance->next() 80 | ); 81 | 82 | $this->assertFalse( 83 | $instance->next() 84 | ); 85 | } 86 | 87 | } 88 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/SiteLanguageLinkModifierTest.php: -------------------------------------------------------------------------------- 1 | getMockBuilder( '\Title' ) 24 | ->disableOriginalConstructor() 25 | ->getMock(); 26 | 27 | $titleToTargetLink = $this->getMockBuilder( '\Title' ) 28 | ->disableOriginalConstructor() 29 | ->getMock(); 30 | 31 | $this->assertInstanceOf( 32 | '\SIL\SiteLanguageLinkModifier', 33 | new SiteLanguageLinkModifier( $titleForExternalLanguageLink, $titleToTargetLink ) 34 | ); 35 | } 36 | 37 | public function testModifyLanguageLinkForNoTextEntry() { 38 | $titleForExternalLanguageLink = $this->getMockBuilder( '\Title' ) 39 | ->disableOriginalConstructor() 40 | ->getMock(); 41 | 42 | $titleToTargetLink = $this->getMockBuilder( '\Title' ) 43 | ->disableOriginalConstructor() 44 | ->getMock(); 45 | 46 | $languageLink = []; 47 | 48 | $instance = new SiteLanguageLinkModifier( 49 | $titleForExternalLanguageLink, 50 | $titleToTargetLink 51 | ); 52 | 53 | $this->assertFalse( 54 | $instance->modifyLanguageLink( $languageLink ) 55 | ); 56 | 57 | $this->assertEmpty( 58 | $languageLink 59 | ); 60 | } 61 | 62 | /** 63 | * @dataProvider invalidLanguageLinkProvider 64 | */ 65 | public function testModifyLanguageLinkForInvalidSilEntry( $languageLink, $expected ) { 66 | $titleForExternalLanguageLink = $this->getMockBuilder( '\Title' ) 67 | ->disableOriginalConstructor() 68 | ->getMock(); 69 | 70 | $titleToTargetLink = $this->getMockBuilder( '\Title' ) 71 | ->disableOriginalConstructor() 72 | ->getMock(); 73 | 74 | $instance = new SiteLanguageLinkModifier( 75 | $titleForExternalLanguageLink, 76 | $titleToTargetLink 77 | ); 78 | 79 | $this->assertFalse( 80 | $instance->modifyLanguageLink( $languageLink ) 81 | ); 82 | 83 | $this->assertEquals( 84 | $expected, 85 | $languageLink 86 | ); 87 | } 88 | 89 | /** 90 | * @dataProvider validLanguageLinkProvider 91 | */ 92 | public function testModifyLanguageLinkForValidSilEntry( $languageLink, $expected ) { 93 | $titleForExternalLanguageLink = $this->getMockBuilder( '\Title' ) 94 | ->disableOriginalConstructor() 95 | ->getMock(); 96 | 97 | $titleToTargetLink = $this->getMockBuilder( '\Title' ) 98 | ->disableOriginalConstructor() 99 | ->getMock(); 100 | 101 | $instance = new SiteLanguageLinkModifier( 102 | $titleForExternalLanguageLink, 103 | $titleToTargetLink 104 | ); 105 | 106 | $this->assertTrue( 107 | $instance->modifyLanguageLink( $languageLink ) 108 | ); 109 | 110 | $this->assertContains( 111 | $expected, 112 | $languageLink 113 | ); 114 | } 115 | 116 | public function invalidLanguageLinkProvider() { 117 | $provider = []; 118 | 119 | $provider[] = [ 120 | [ 'text' => 'no:sil:entry' ], 121 | [ 'text' => 'no:sil:entry' ] 122 | ]; 123 | 124 | $provider[] = [ 125 | [ 'text' => 'Foo' ], 126 | [ 'text' => 'Foo' ] 127 | ]; 128 | 129 | return $provider; 130 | } 131 | 132 | public function validLanguageLinkProvider() { 133 | $provider = []; 134 | 135 | $provider[] = [ 136 | [ 'text' => 'sil:en:Foo' ], 137 | 'English' 138 | ]; 139 | 140 | $provider[] = [ 141 | [ 'text' => 'sil:en:vi:Foo' ], 142 | 'English' 143 | ]; 144 | 145 | $provider[] = [ 146 | [ 'text' => 'sil:ja:ja:ノート:Foo' ], 147 | '日本語' 148 | ]; 149 | 150 | return $provider; 151 | } 152 | 153 | } 154 | -------------------------------------------------------------------------------- /tests/phpunit/Unit/SiteLanguageLinksParserOutputAppenderTest.php: -------------------------------------------------------------------------------- 1 | getMockBuilder( '\ParserOutput' ) 21 | ->disableOriginalConstructor() 22 | ->getMock(); 23 | 24 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 25 | ->disableOriginalConstructor() 26 | ->getMock(); 27 | 28 | $this->assertInstanceOf( 29 | '\SIL\SiteLanguageLinksParserOutputAppender', 30 | new SiteLanguageLinksParserOutputAppender( 31 | $parserOutput, 32 | $interlanguageLinksLookup 33 | ) 34 | ); 35 | } 36 | 37 | public function testAddLanguageTargetLinksToOutput() { 38 | $interlanguageLink = new InterlanguageLink( 'en', 'Foo' ); 39 | 40 | $parserOutput = $this->getMockBuilder( '\ParserOutput' ) 41 | ->disableOriginalConstructor() 42 | ->getMock(); 43 | 44 | $parserOutput->expects( $this->once() ) 45 | ->method( 'addLanguageLink' ); 46 | 47 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 48 | ->disableOriginalConstructor() 49 | ->getMock(); 50 | 51 | $interlanguageLinksLookup->expects( $this->once() ) 52 | ->method( 'queryLanguageTargetLinks' ) 53 | ->with( $interlanguageLink ) 54 | ->willReturn( [ 'fr' => 'Bar' ] ); 55 | 56 | $instance = new SiteLanguageLinksParserOutputAppender( 57 | $parserOutput, 58 | $interlanguageLinksLookup 59 | ); 60 | 61 | $instance->tryAddLanguageTargetLinksToOutput( $interlanguageLink ); 62 | } 63 | 64 | public function testCompareLanguageTargetLinksForExistingLanguageEntry() { 65 | $interlanguageLink = new InterlanguageLink( 'en', 'Yui' ); 66 | 67 | $parserOutput = $this->getMockBuilder( '\ParserOutput' ) 68 | ->disableOriginalConstructor() 69 | ->getMock(); 70 | 71 | $parserOutput->expects( $this->never() ) 72 | ->method( 'addLanguageLink' ); 73 | 74 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 75 | ->disableOriginalConstructor() 76 | ->getMock(); 77 | 78 | $interlanguageLinksLookup->expects( $this->once() ) 79 | ->method( 'queryLanguageTargetLinks' ) 80 | ->with( $interlanguageLink ) 81 | ->willReturn( [ 'en' => \Title::newFromText( 'Foo' ) ] ); 82 | 83 | $instance = new SiteLanguageLinksParserOutputAppender( 84 | $parserOutput, 85 | $interlanguageLinksLookup 86 | ); 87 | 88 | $knownTarget = $instance->tryAddLanguageTargetLinksToOutput( 89 | $interlanguageLink 90 | ); 91 | 92 | $this->assertFalse( 93 | $knownTarget 94 | ); 95 | } 96 | 97 | public function testAddLanguageTargetLinksToOutputFromStoreForMultipleInvocation() { 98 | $interlanguageLink = new InterlanguageLink( 'en', 'Foo' ); 99 | 100 | $parserOutput = $this->getMockBuilder( '\ParserOutput' ) 101 | ->disableOriginalConstructor() 102 | ->getMock(); 103 | 104 | $parserOutput->expects( $this->once() ) 105 | ->method( 'addLanguageLink' ) 106 | ->with( 'sil:vi:Yan' ); 107 | 108 | $interlanguageLinksLookup = $this->getMockBuilder( '\SIL\InterlanguageLinksLookup' ) 109 | ->disableOriginalConstructor() 110 | ->getMock(); 111 | 112 | $interlanguageLinksLookup->expects( $this->atLEastOnce() ) 113 | ->method( 'queryLanguageTargetLinks' ) 114 | ->with( $interlanguageLink ) 115 | ->willReturn( [ 'vi' => \Title::newFromText( 'Yan' ) ] ); 116 | 117 | $instance = new SiteLanguageLinksParserOutputAppender( 118 | $parserOutput, 119 | $interlanguageLinksLookup 120 | ); 121 | 122 | $instance->tryAddLanguageTargetLinksToOutput( $interlanguageLink ); 123 | 124 | // Simualate call from a second parser call 125 | $instance->tryAddLanguageTargetLinksToOutput( $interlanguageLink ); 126 | } 127 | 128 | } 129 | -------------------------------------------------------------------------------- /tests/travis/install-semantic-interlanguage-links.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -ex 3 | 4 | BASE_PATH=$(pwd) 5 | MW_INSTALL_PATH=$BASE_PATH/../mw 6 | 7 | ## Install 8 | echo -e "Running MW root composer install build on $TRAVIS_BRANCH \n" 9 | 10 | cd $MW_INSTALL_PATH 11 | 12 | if [ "$SIL" != "" ] 13 | then 14 | composer require 'mediawiki/semantic-interlanguage-links='$SIL --update-with-dependencies 15 | else 16 | composer init --stability dev 17 | composer require mediawiki/semantic-interlanguage-links "dev-master" --dev --update-with-dependencies 18 | 19 | cd extensions 20 | cd SemanticInterlanguageLinks 21 | 22 | # Pull request number, "false" if it's not a pull request 23 | # After the install via composer an additional get fetch is carried out to 24 | # update th repository to make sure that the latests code changes are 25 | # deployed for testing 26 | if [ "$TRAVIS_PULL_REQUEST" != "false" ] 27 | then 28 | git fetch origin +refs/pull/"$TRAVIS_PULL_REQUEST"/merge: 29 | git checkout -qf FETCH_HEAD 30 | else 31 | git fetch origin "$TRAVIS_BRANCH" 32 | git checkout -qf FETCH_HEAD 33 | fi 34 | 35 | cd ../.. 36 | fi 37 | 38 | composer dump-autoload 39 | 40 | 41 | ## Configure 42 | cd $MW_INSTALL_PATH 43 | echo 'wfLoadExtension( "SemanticInterlanguageLinks" );' >> LocalSettings.php 44 | -------------------------------------------------------------------------------- /tests/travis/run-tests.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -ex 3 | 4 | BASE_PATH=$(pwd) 5 | MW_INSTALL_PATH=$BASE_PATH/../mw 6 | 7 | cd $MW_INSTALL_PATH/extensions/SemanticInterlanguageLinks 8 | 9 | if [ "$TYPE" == "coverage" ] 10 | then 11 | composer phpunit -- --coverage-clover $BASE_PATH/build/coverage.clover 12 | else 13 | composer phpunit 14 | fi 15 | --------------------------------------------------------------------------------