Extend Wikidata extension to support arbitrary Wikibase instances (#2810)
Closes #1640. All Wikibase-dependent parameters, which were previously hard-coded for Wikidata, are now described in a JSON manifest. The manifest is currently constructed by hand, but, in the future, will hopefully be published by each Wikibase instance at a standard location. * setup the manifest framework * add dependency mechanism to scrutinizers & update tests * add json creators to constraint entities * adapt the backend (units tests are to be updated) * remove the call to prepareDependencies() in the constructor * update code according to review feedback * update scrutinizers tests * fix typo & update ConstraintsV1 * log if a scrutinizer is skipped * update versioning handling in the backend * correct the order of "actual" and "expected" for assertEquals method * use regex to check manifest versions * 1. add wikibase-manager.js, wikibase-dialog.js, etc. 2. move dialog/schema-alignment-dialog.js -> schema-alignment.js 3. remove unused schema-alignment-dialog.html 4. change most mentions of "Wikidata" to "Wikibase" * support saving cookies for different Wikibases & fix LoginCommandTest * fix schema related tests * removed unused WikibaseCredentials * include MediaWiki API endpoint in the schema * fetch language codes for different Wikibases * fix lgtm-bot alerts * keep a connection map (MediaWiki API endpoint => Connection) in ConnectionManager * simplify the constraint configurations of the manifest and remove lots of unnecessary code. * add slash to the end of mediawiki.root * add manifest schema and use ajv to validate the manifest * remove JSONP support (Wikibase manifest host should support CORS) * save manifests on manifest update * add unit tests for Manifest * include the exception in logger.error() method to make it easier to debug * include the message of ManifestException when calling respondError * test multiple connections * test no manifest & test invalid manifest * adapt manage-account-dialog.js to support multiple Wikibase connections * update instance/subclass of related translations * beautify import-schema-dialog.html * use "${lang}" variable in the reconciliation service endpoint of the manifest * adapt schema-alignment.js after introducing "${lang}" variable in the reconciliation service endpoint * use WikibaseManager.getSelectedWikibaseApi() in SchemaAlignment._getPropertyType * replace more mentions of "Wikidata" to "Wikibase" * use WikibaseManager.getSelectedWikibaseApi() in previewrenderer.js * support fetching language codes of different Wikibases in the frontend * skip EditInspector if missing 'property_constraint_pid' in the manifest * improve unit tests for fetching lang codes * skip scrutinizers depending on fetcher if 'property_constraint_pid' is missing in the manifest * make sure the schema alignment panel is set up before rendering * fix preview bug * add getters of "instance of" and "subclass of" to the Manifest interface and use them in NewItemScrutinizer * fix hardcode for Wikidata in WbItemVariable * rename 'entity_prefix' to 'site_iri' and move it from 'manifest.wikibase.properties' to 'manifest.wikibase' * include oauth configurations in the manifest & support logging in with owner-only consumer for Wikibases with the OAuth extension * correct schema fallback logic * select default wikibase according to the saved schema * include maxlag in the manifest * [backend] move maxlag setting from preferences to request parameter * support setting maxlag when uploading edits * rename "Manage Wikibase" to "Select Wikibase instance" and localize it * fix manifest updating bug * include EditGroups in the manifest * add the reconciliation service from the manifest to standard services if it's not present yet when adding a new manifest * update according to review feedback 1. use inherited color variable 2. rename 'gridwroks' to 'openrefine' 3. remove unnecessary 'async: true' 4. add 'format: url' validation to urls to the schema * rename 'wikibasePrefix' to 'siteIri'
This commit is contained in:
parent
68404abe2a
commit
7d4e182c75
@ -1,4 +1,3 @@
|
||||
|
||||
importPackage(org.openrefine.wikidata.commands);
|
||||
|
||||
/*
|
||||
@ -56,15 +55,21 @@ function init() {
|
||||
"project/scripts",
|
||||
module,
|
||||
[
|
||||
"scripts/ajv.min.js",
|
||||
"scripts/wikidata-manifest-v1.0.js",
|
||||
"scripts/wikibase-manifest-schema-v1.js",
|
||||
"scripts/wikibase-manager.js",
|
||||
"scripts/menu-bar-extension.js",
|
||||
"scripts/warningsrenderer.js",
|
||||
"scripts/langsuggest.js",
|
||||
"scripts/bettersuggest.js",
|
||||
"scripts/previewrenderer.js",
|
||||
"scripts/dialogs/schema-alignment-dialog.js",
|
||||
"scripts/schema-alignment.js",
|
||||
"scripts/wikidata-extension-manager.js",
|
||||
"scripts/dialogs/manage-account-dialog.js",
|
||||
"scripts/dialogs/perform-edits-dialog.js",
|
||||
"scripts/dialogs/import-schema-dialog.js",
|
||||
"scripts/dialogs/wikibase-dialog.js",
|
||||
"scripts/jquery.uls.data.js",
|
||||
]);
|
||||
|
||||
@ -72,10 +77,13 @@ function init() {
|
||||
"project/styles",
|
||||
module,
|
||||
[
|
||||
"styles/dialogs/schema-alignment-dialog.css",
|
||||
"styles/theme.less",
|
||||
"styles/schema-alignment.less",
|
||||
"styles/dialogs/manage-account-dialog.less",
|
||||
"styles/dialogs/import-schema-dialog.less",
|
||||
"styles/dialogs/perform-edits.less",
|
||||
"styles/dialogs/wikibase-dialog.less",
|
||||
"styles/dialogs/add-wikibase-dialog.less"
|
||||
]);
|
||||
|
||||
}
|
||||
|
BIN
extensions/wikidata/module/images/Wikibase_logo.png
Normal file
BIN
extensions/wikidata/module/images/Wikibase_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 80 KiB |
BIN
extensions/wikidata/module/images/close-map.png
Normal file
BIN
extensions/wikidata/module/images/close-map.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1022 B |
@ -1,50 +1,50 @@
|
||||
{
|
||||
"wikidata-extension/menu-label": "উইকিউপাত্ত",
|
||||
"wikidata-extension/edit-wikidata-schema": "উইকিউপাত্ত স্কিমা সম্পাদনা করুন",
|
||||
"wikidata-extension/import-wikidata-schema": "স্কিমা আমদানি করুন",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "উইকিউপাত্তে সম্পাদনা আপলোড করুন",
|
||||
"wikidata-extension/export-to-qs": "ক্যুইকস্টেটমেন্টসে রপ্তানি করুন",
|
||||
"wikidata-extension/export-schema": "স্কিমা রপ্তানি করুন",
|
||||
"wikidata-extension/export-wikidata-schema": "উইকিউপাত্ত স্কিমা রপ্তানি করুন",
|
||||
"wikidata-extension/quickstatements-export-name": "ক্যুইকস্টেটমেন্টস",
|
||||
"wikidata-schema/schema-tab-header": "স্কিমা",
|
||||
"wikidata-schema/warnings-tab-header": "সমস্যা",
|
||||
"wikidata-schema/edits-preview-tab-header": "প্রাকদর্শন",
|
||||
"wikidata-schema/statements-header": "বিবৃতি",
|
||||
"wikidata-schema/empty-statements": "কোন বিবৃতি যোগ করা হয়নি",
|
||||
"wikidata-schema/add-item-button": "আইটেম যোগ করুন",
|
||||
"wikidata-schema/remove": "অপসরণ করুন",
|
||||
"wikidata-schema/add-statement": "বিবৃতি যোগ করুন",
|
||||
"wikidata-schema/add-value": "মান যোগ করুন",
|
||||
"wikidata-schema/add-qualifier": "বাছাই যোগ করুন",
|
||||
"wikidata-schema/copy-reference": "অনুলিপি করুন",
|
||||
"wikidata-schema/reference-copied": "অনুলিপি করা হয়েছে",
|
||||
"wikidata-schema/add-reference": "তথ্যসূত্র যোগ করুন",
|
||||
"wikidata-schema/add-reference-snak": "যোগ করুন",
|
||||
"wikidata-schema/property-placeholder": "বৈশিষ্ট্য",
|
||||
"wikidata-schema/nb-references": " তথ্যসূত্র",
|
||||
"wikidata-schema/remove-column": "স্তম্ভ অপসরণ করুন",
|
||||
"wikidata-schema/label": "লেবেল",
|
||||
"wikidata-schema/description": "বিবরণ",
|
||||
"wikidata-schema/amount": "পরিমাণ",
|
||||
"wikidata-schema/unit": "একক",
|
||||
"wikidata-schema/commons-media": "ফাইলের নাম",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "আপনার স্কিমা অসম্পূর্ণ, সমস্যাগুলি দেখতে সেটি ঠিক করুন।",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "আপনার স্কিমা অসম্পূর্ণ, প্রাকদর্শন করতে সেটি ঠিক করুন।",
|
||||
"wikidata-schema/discard-button": "পরিবর্তন বাতিল করুন",
|
||||
"wikidata-schema/save-button": "স্কিমা সংরক্ষণ করুন",
|
||||
"wikidata-schema/close-button": "বন্ধ করুন",
|
||||
"wikidata-schema/unsaved-changes-alt": "আপনি আপনার উইকিউপাত্ত স্কিমায় অসংরক্ষিত পরিবর্তন করেছেন।",
|
||||
"wikidata-schema/save-schema-alt": "আপনার স্কিমা ওপেনরিফাইনের সংরক্ষণ করুন। পরিবর্তনগুলি এখনো উইকিউপাত্তে আপলোড করা হয়নি।",
|
||||
"wikidata-schema/discard-schema-changes-alt": "স্কিমার পরিবর্তনগুলি বাতিল করুন।",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "আপনার স্কিমা অসম্পূর্ণ, তাই এখনো সংরক্ষণ করা যাচ্ছে না।",
|
||||
"wikidata-schema/unsaved-warning": "আপনি আপনার উইকিউপাত্ত স্কিমায় অসংরক্ষিত পরিবর্তন করেছেন। তাও বন্ধ করতে চান?",
|
||||
"wikidata-preview/new-id": "নতুন আইটেম",
|
||||
"wikidata-account/dialog-header": "উইকিউপাত্ত অ্যাকাউন্ট",
|
||||
"wikidata-account/explain-log-in": "<a href=\"https://www.wikidata.org/\" target=\"_blank\">উইকিউপাত্তে</a> প্রবেশ করলে সরাসরি ওপেনরিফাইন থেকে আপনাকে সম্পাদনা আপলোড করতে দেওয়া হবে।",
|
||||
"wikidata-account/username-label": "ব্যবহারকারী নাম:",
|
||||
"wikidata-account/password-label": "পাসওয়ার্ড:",
|
||||
"wikidata-account/close": "বন্ধ করুন",
|
||||
"wikidata-account/log-in": "প্রবেশ করুন",
|
||||
"wikidata-account/log-out": "প্রস্থান করুন"
|
||||
"wikibase-extension/menu-label": "উইকিউপাত্ত",
|
||||
"wikibase-extension/edit-wikibase-schema": "উইকিউপাত্ত স্কিমা সম্পাদনা করুন",
|
||||
"wikibase-extension/import-wikibase-schema": "স্কিমা আমদানি করুন",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "উইকিউপাত্তে সম্পাদনা আপলোড করুন",
|
||||
"wikibase-extension/export-to-qs": "ক্যুইকস্টেটমেন্টসে রপ্তানি করুন",
|
||||
"wikibase-extension/export-schema": "স্কিমা রপ্তানি করুন",
|
||||
"wikibase-extension/export-wikibase-schema": "উইকিউপাত্ত স্কিমা রপ্তানি করুন",
|
||||
"wikibase-extension/quickstatements-export-name": "ক্যুইকস্টেটমেন্টস",
|
||||
"wikibase-schema/schema-tab-header": "স্কিমা",
|
||||
"wikibase-schema/warnings-tab-header": "সমস্যা",
|
||||
"wikibase-schema/edits-preview-tab-header": "প্রাকদর্শন",
|
||||
"wikibase-schema/statements-header": "বিবৃতি",
|
||||
"wikibase-schema/empty-statements": "কোন বিবৃতি যোগ করা হয়নি",
|
||||
"wikibase-schema/add-item-button": "আইটেম যোগ করুন",
|
||||
"wikibase-schema/remove": "অপসরণ করুন",
|
||||
"wikibase-schema/add-statement": "বিবৃতি যোগ করুন",
|
||||
"wikibase-schema/add-value": "মান যোগ করুন",
|
||||
"wikibase-schema/add-qualifier": "বাছাই যোগ করুন",
|
||||
"wikibase-schema/copy-reference": "অনুলিপি করুন",
|
||||
"wikibase-schema/reference-copied": "অনুলিপি করা হয়েছে",
|
||||
"wikibase-schema/add-reference": "তথ্যসূত্র যোগ করুন",
|
||||
"wikibase-schema/add-reference-snak": "যোগ করুন",
|
||||
"wikibase-schema/property-placeholder": "বৈশিষ্ট্য",
|
||||
"wikibase-schema/nb-references": " তথ্যসূত্র",
|
||||
"wikibase-schema/remove-column": "স্তম্ভ অপসরণ করুন",
|
||||
"wikibase-schema/label": "লেবেল",
|
||||
"wikibase-schema/description": "বিবরণ",
|
||||
"wikibase-schema/amount": "পরিমাণ",
|
||||
"wikibase-schema/unit": "একক",
|
||||
"wikibase-schema/commons-media": "ফাইলের নাম",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "আপনার স্কিমা অসম্পূর্ণ, সমস্যাগুলি দেখতে সেটি ঠিক করুন।",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "আপনার স্কিমা অসম্পূর্ণ, প্রাকদর্শন করতে সেটি ঠিক করুন।",
|
||||
"wikibase-schema/discard-button": "পরিবর্তন বাতিল করুন",
|
||||
"wikibase-schema/save-button": "স্কিমা সংরক্ষণ করুন",
|
||||
"wikibase-schema/close-button": "বন্ধ করুন",
|
||||
"wikibase-schema/unsaved-changes-alt": "আপনি আপনার উইকিউপাত্ত স্কিমায় অসংরক্ষিত পরিবর্তন করেছেন।",
|
||||
"wikibase-schema/save-schema-alt": "আপনার স্কিমা ওপেনরিফাইনের সংরক্ষণ করুন। পরিবর্তনগুলি এখনো উইকিউপাত্তে আপলোড করা হয়নি।",
|
||||
"wikibase-schema/discard-schema-changes-alt": "স্কিমার পরিবর্তনগুলি বাতিল করুন।",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "আপনার স্কিমা অসম্পূর্ণ, তাই এখনো সংরক্ষণ করা যাচ্ছে না।",
|
||||
"wikibase-schema/unsaved-warning": "আপনি আপনার উইকিউপাত্ত স্কিমায় অসংরক্ষিত পরিবর্তন করেছেন। তাও বন্ধ করতে চান?",
|
||||
"wikibase-preview/new-id": "নতুন আইটেম",
|
||||
"wikibase-account/dialog-header": "উইকিউপাত্ত অ্যাকাউন্ট",
|
||||
"wikibase-account/explain-log-in": "<a href=\"https://www.wikidata.org/\" target=\"_blank\">উইকিউপাত্তে</a> প্রবেশ করলে সরাসরি ওপেনরিফাইন থেকে আপনাকে সম্পাদনা আপলোড করতে দেওয়া হবে।",
|
||||
"wikibase-account/username-label": "ব্যবহারকারী নাম:",
|
||||
"wikibase-account/password-label": "পাসওয়ার্ড:",
|
||||
"wikibase-account/close": "বন্ধ করুন",
|
||||
"wikibase-account/log-in": "প্রবেশ করুন",
|
||||
"wikibase-account/log-out": "প্রস্থান করুন"
|
||||
}
|
||||
|
@ -1,108 +1,126 @@
|
||||
{
|
||||
"wikidata-extension/menu-label": "Wikidata",
|
||||
"wikidata-extension/edit-wikidata-schema": "Edit Wikidata schema",
|
||||
"wikidata-extension/import-wikidata-schema": "Import schema",
|
||||
"wikidata-extension/manage-wikidata-account": "Manage Wikidata account",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Upload edits to Wikidata",
|
||||
"wikidata-extension/export-to-qs": "Export to QuickStatements",
|
||||
"wikidata-extension/qs-file": "QuickStatements file",
|
||||
"wikidata-extension/wikidata-edits": "Wikidata edits…",
|
||||
"wikidata-extension/export-schema": "Export schema",
|
||||
"wikidata-extension/export-wikidata-schema": "Export Wikidata schema",
|
||||
"wikidata-extension/wikidata-schema": "Wikidata schema",
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-schema/dialog-header": "Align to Wikidata",
|
||||
"wikidata-schema/dialog-explanation": "The Wikidata schema below specifies how your tabular data will be transformed into Wikidata edits. You can drag and drop the column names below in most input boxes: for each row, edits will be generated with the values in these columns.",
|
||||
"wikidata-schema/preview-explanation": "This tab shows the first edits (out of {nb_edits}) that will be made once you upload the changes to Wikidata. You can use facets to inspect the edits on particular items.",
|
||||
"wikidata-schema/schema-tab-header": "Schema",
|
||||
"wikidata-schema/warnings-tab-header": "Issues",
|
||||
"wikidata-schema/edits-preview-tab-header": "Preview",
|
||||
"wikidata-schema/statements-header": "Statements",
|
||||
"wikidata-schema/terms-header": "Terms",
|
||||
"wikidata-schema/empty-statements": "no statements added",
|
||||
"wikidata-schema/empty-terms": "no labels, descriptions or aliases added",
|
||||
"wikidata-schema/add-item-button": "add item",
|
||||
"wikidata-schema/add-term": "add term",
|
||||
"wikidata-schema/remove": "remove",
|
||||
"wikidata-schema/add-statement": "add statement",
|
||||
"wikidata-schema/add-value": "add value",
|
||||
"wikidata-schema/add-qualifier": "add qualifier",
|
||||
"wikidata-schema/copy-reference": "copy",
|
||||
"wikidata-schema/paste-reference": "paste reference",
|
||||
"wikidata-schema/reference-copied": "copied",
|
||||
"wikidata-schema/add-reference": "add reference",
|
||||
"wikidata-schema/add-reference-snak": "add",
|
||||
"wikidata-schema/property-placeholder": "property",
|
||||
"wikidata-schema/nb-references": " references",
|
||||
"wikidata-schema/remove-column": "remove column",
|
||||
"wikidata-schema/label": "Label",
|
||||
"wikidata-schema/label-if-new": "Label (do not override)",
|
||||
"wikidata-schema/label-override": "Label (override if present)",
|
||||
"wikidata-schema/description": "Description",
|
||||
"wikidata-schema/description-if-new": "Description (do not override)",
|
||||
"wikidata-schema/description-override": "Description (override if present)",
|
||||
"wikidata-schema/override-term": "override if present",
|
||||
"wikidata-schema/alias": "Alias",
|
||||
"wikidata-schema/item-or-reconciled-column": "type item or drag reconciled column here",
|
||||
"wikidata-schema/amount": "amount",
|
||||
"wikidata-schema/unit": "unit",
|
||||
"wikidata-schema/full-url": "full URL including the protocol",
|
||||
"wikidata-schema/tabular-data-with-prefix": "filename starting with \"Data:\"",
|
||||
"wikidata-schema/commons-media": "filename",
|
||||
"wikidata-schema/math-expression": "mathematical expression",
|
||||
"wikidata-schema/geoshape-with-prefix": "filename starting with \"Data:\"",
|
||||
"wikidata-schema/datatype-not-supported-yet": "This datatype is not supported yet, sorry.",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "Your schema is incomplete, fix it to see the issues.",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "Your schema is incomplete, fix it to see the preview.",
|
||||
"wikidata-schema/discard-button": "Discard changes",
|
||||
"wikidata-schema/save-button": "Save schema",
|
||||
"wikidata-schema/close-button": "Close",
|
||||
"wikidata-schema/unsaved-changes-alt": "You have made unsaved changes to your Wikidata schema.",
|
||||
"wikidata-schema/save-schema-alt": "Save the schema to OpenRefine. The changes will not be uploaded to Wikidata yet.",
|
||||
"wikidata-schema/discard-schema-changes-alt": "Discard the changes made to the schema.",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "Your schema is incomplete so it cannot be saved yet.",
|
||||
"wikidata-schema/unsaved-warning": "You have made unsaved changes to your Wikidata schema. Close anyway?",
|
||||
"wikidata-preview/new-id": "new item",
|
||||
"wikidata-account/dialog-header": "Wikidata account",
|
||||
"wikidata-account/explain-log-in": "Logging in to <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> lets you to upload edits directly from OpenRefine.",
|
||||
"wikidata-account/explain-owner-only-consumer-wiki": "See this <a href=\"https://github.com/OpenRefine/OpenRefine/wiki/Wikidata-owner-only-consumer\" target=\"_blank\">wiki</a> to get your owner-only consumer if you don't have one.",
|
||||
"wikidata-account/explain-password-login": "You can also <a>log in with your username/password.</a>",
|
||||
"wikidata-account/explain-owner-only-consumer-login": "You can also <a>login with your owner-only consumer.</a>",
|
||||
"wikidata-account/invalid-credentials": "Invalid credentials",
|
||||
"wikidata-account/username-label": "Username:",
|
||||
"wikidata-account/username-placeholder": "username",
|
||||
"wikidata-account/password-label": "Password:",
|
||||
"wikidata-account/password-placeholder": "password",
|
||||
"wikidata-account/consumer-token-label": "Consumer token:",
|
||||
"wikidata-account/consumer-token-placeholder": "consumer token",
|
||||
"wikidata-account/consumer-secret-label": "Consumer secret:",
|
||||
"wikidata-account/consumer-secret-placeholder": "consumer secret",
|
||||
"wikidata-account/access-token-label": "Access token:",
|
||||
"wikidata-account/access-token-placeholder": "access token",
|
||||
"wikidata-account/access-secret-label": "Access secret:",
|
||||
"wikidata-account/access-secret-placeholder": "access secret",
|
||||
"wikidata-account/remember-me": "Remember me",
|
||||
"wikidata-account/password-remember-me-title": "Your password won't be stored. Don't check this if your computer is public.",
|
||||
"wikidata-account/owner-only-consumer-remember-me-title": "Consumer credentials are stored unencrypted in cookies. Don't check this if your computer is public.",
|
||||
"wikidata-account/close": "Close",
|
||||
"wikidata-account/log-in": "Log in",
|
||||
"wikidata-account/logged-in-as": "You are logged in as:",
|
||||
"wikidata-account/log-out": "Log out",
|
||||
"wikidata-account/connecting-to-wikidata": "Connecting to Wikidata…",
|
||||
"perform-wikidata-edits/dialog-header": "Upload edits to Wikidata",
|
||||
"perform-wikidata-edits/review-your-edits": "You are about to upload {nb_edits} edits to Wikidata. Please check them carefully. Large edit batches should be submitted for <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">bot review</a> first.",
|
||||
"perform-wikidata-edits/logged-in-as": "You are logged in as",
|
||||
"perform-wikidata-edits/edit-summary-label": "Edit summary:",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "a few words to describe your edits",
|
||||
"perform-wikidata-edits/perform-edits": "Upload edits",
|
||||
"perform-wikidata-edits/cancel": "Cancel",
|
||||
"perform-wikidata-edits/analyzing-edits": "Analyzing your edits…",
|
||||
"import-wikibase-schema/dialog-header": "Import Wikidata schema",
|
||||
"wikibase-extension/menu-label": "Wikidata",
|
||||
"wikibase-extension/select-wikibase-instance": "Select Wikibase instance",
|
||||
"wikibase-extension/edit-wikibase-schema": "Edit Wikibase schema",
|
||||
"wikibase-extension/import-wikibase-schema": "Import schema",
|
||||
"wikibase-extension/manage-wikibase-account": "Manage Wikibase account",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Upload edits to Wikibase",
|
||||
"wikibase-extension/export-to-qs": "Export to QuickStatements",
|
||||
"wikibase-extension/qs-file": "QuickStatements file",
|
||||
"wikibase-extension/wikibase-edits": "Wikibase edits…",
|
||||
"wikibase-extension/export-schema": "Export schema",
|
||||
"wikibase-extension/export-wikibase-schema": "Export Wikibase schema",
|
||||
"wikibase-extension/wikibase-schema": "Wikibase schema",
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-management/dialog-header": "Select Wikibase instance",
|
||||
"wikibase-management/explain-select-wikibase": "Click on an item below to select it as the target Wikibase to work against. This will clear any existing schema. After switching to the target Wikibase, you should reconcile your data against it before editing the schema.",
|
||||
"wikibase-management/current-selected-wikibase": "Current selected Wikibase: <a href=\"$1\" target=\"_blank\">$2</a>",
|
||||
"wikibase-management/add-wikibase": "Add Wikibase",
|
||||
"wikibase-management/close": "Close",
|
||||
"wikibase-management/contact-service": "Contacting manifest service",
|
||||
"wikibase-management/error-contact": "Error contacting manifest service",
|
||||
"wikibase-addition/dialog-header": "Add Wikibase manifest",
|
||||
"wikibase-addition/explain-add-manifest": "The manifest should specify a reconciliation service linked to the Wikibase, the reconciliation service will be added to OpenRefine if not added yet.",
|
||||
"wikibase-addition/explain-add-manifest-via-url": "Enter the Wikibase manifest's URL (recommended, this is helpful for keeping track of the latest manifest):",
|
||||
"wikibase-addition/explain-paste-manifest": "Or paste the manifest JSON text directly (manifests for some public Wikibases can be found <a href=\"https://github.com/afkbrb/wikibase-manifest\" target=\"_blank\">here</a>, you can also write one yourself according to this <a href=\"https://github.com/OpenRefine/OpenRefine/wiki/Write-a-Wikibase-manifest\" target=\"_blank\">tutorial</a>):",
|
||||
"wikibase-addition/add-wikibase": "Add Wikibase",
|
||||
"wikibase-addition/cancel": "Cancel",
|
||||
"wikibase-addition/invalid-manifest": "Invalid Wikibase manifest.",
|
||||
"wikibase-schema/dialog-header": "Align to Wikibase",
|
||||
"wikibase-schema/dialog-explanation": "You are currently working against <a href=\"$1\" target=\"_blank\">$2</a>. You should have your data reconciled to reconciliation services linked to $2 (such as <a href=\"$3\" target=\"_blank\">$3</a>) first. The schema below specifies how your tabular data will be transformed into $2 edits. You can drag and drop the column names below in most input boxes: for each row, edits will be generated with the values in these columns.",
|
||||
"wikibase-schema/preview-explanation": "This tab shows the first edits (out of $1) that will be made once you upload the changes to <a href=\"$2\" target=\"_blank\">$3</a>. You can use facets to inspect the edits on particular items.",
|
||||
"wikibase-schema/schema-tab-header": "Schema",
|
||||
"wikibase-schema/warnings-tab-header": "Issues",
|
||||
"wikibase-schema/edits-preview-tab-header": "Preview",
|
||||
"wikibase-schema/statements-header": "Statements",
|
||||
"wikibase-schema/terms-header": "Terms",
|
||||
"wikibase-schema/empty-statements": "no statements added",
|
||||
"wikibase-schema/empty-terms": "no labels, descriptions or aliases added",
|
||||
"wikibase-schema/add-item-button": "add item",
|
||||
"wikibase-schema/add-term": "add term",
|
||||
"wikibase-schema/remove": "remove",
|
||||
"wikibase-schema/add-statement": "add statement",
|
||||
"wikibase-schema/add-value": "add value",
|
||||
"wikibase-schema/add-qualifier": "add qualifier",
|
||||
"wikibase-schema/copy-reference": "copy",
|
||||
"wikibase-schema/paste-reference": "paste reference",
|
||||
"wikibase-schema/reference-copied": "copied",
|
||||
"wikibase-schema/add-reference": "add reference",
|
||||
"wikibase-schema/add-reference-snak": "add",
|
||||
"wikibase-schema/property-placeholder": "property",
|
||||
"wikibase-schema/nb-references": " references",
|
||||
"wikibase-schema/remove-column": "remove column",
|
||||
"wikibase-schema/label": "Label",
|
||||
"wikibase-schema/label-if-new": "Label (do not override)",
|
||||
"wikibase-schema/label-override": "Label (override if present)",
|
||||
"wikibase-schema/description": "Description",
|
||||
"wikibase-schema/description-if-new": "Description (do not override)",
|
||||
"wikibase-schema/description-override": "Description (override if present)",
|
||||
"wikibase-schema/override-term": "override if present",
|
||||
"wikibase-schema/alias": "Alias",
|
||||
"wikibase-schema/item-or-reconciled-column": "type item or drag reconciled column here",
|
||||
"wikibase-schema/amount": "amount",
|
||||
"wikibase-schema/unit": "unit",
|
||||
"wikibase-schema/full-url": "full URL including the protocol",
|
||||
"wikibase-schema/tabular-data-with-prefix": "filename starting with \"Data:\"",
|
||||
"wikibase-schema/commons-media": "filename",
|
||||
"wikibase-schema/math-expression": "mathematical expression",
|
||||
"wikibase-schema/geoshape-with-prefix": "filename starting with \"Data:\"",
|
||||
"wikibase-schema/datatype-not-supported-yet": "This datatype is not supported yet, sorry.",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "Your schema is incomplete, fix it to see the issues.",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "Your schema is incomplete, fix it to see the preview.",
|
||||
"wikibase-schema/discard-button": "Discard changes",
|
||||
"wikibase-schema/save-button": "Save schema",
|
||||
"wikibase-schema/close-button": "Close",
|
||||
"wikibase-schema/unsaved-changes-alt": "You have made unsaved changes to your Wikibase schema.",
|
||||
"wikibase-schema/save-schema-alt": "Save the schema to OpenRefine. The changes will not be uploaded to Wikibase yet.",
|
||||
"wikibase-schema/discard-schema-changes-alt": "Discard the changes made to the schema.",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "Your schema is incomplete so it cannot be saved yet.",
|
||||
"wikibase-schema/unsaved-warning": "You have made unsaved changes to your Wikibase schema. Close anyway?",
|
||||
"wikibase-preview/new-id": "new item",
|
||||
"wikibase-account/dialog-header": "$1 account",
|
||||
"wikibase-account/explain-log-in": "Logging in to <a href=\"$1\" target=\"_blank\">$2</a> lets you to upload edits directly from OpenRefine.",
|
||||
"wikibase-account/explain-owner-only-consumer-wiki": "You need to register an owner-only consumer <a href=\"$1\" target=\"_blank\">here</a> first if you don't have one. See this <a href=\"https://github.com/OpenRefine/OpenRefine/wiki/Wikidata-owner-only-consumer\" target=\"_blank\">wiki</a> to learn how to get one.",
|
||||
"wikibase-account/explain-password-login": "You can also <a>login with your username/password.</a>",
|
||||
"wikibase-account/explain-owner-only-consumer-login": "You can also <a>login with your owner-only consumer.</a>",
|
||||
"wikibase-account/invalid-credentials": "Invalid credentials",
|
||||
"wikibase-account/username-label": "Username:",
|
||||
"wikibase-account/username-placeholder": "username",
|
||||
"wikibase-account/password-label": "Password:",
|
||||
"wikibase-account/password-placeholder": "password",
|
||||
"wikibase-account/consumer-token-label": "Consumer token:",
|
||||
"wikibase-account/consumer-token-placeholder": "consumer token",
|
||||
"wikibase-account/consumer-secret-label": "Consumer secret:",
|
||||
"wikibase-account/consumer-secret-placeholder": "consumer secret",
|
||||
"wikibase-account/access-token-label": "Access token:",
|
||||
"wikibase-account/access-token-placeholder": "access token",
|
||||
"wikibase-account/access-secret-label": "Access secret:",
|
||||
"wikibase-account/access-secret-placeholder": "access secret",
|
||||
"wikibase-account/remember-me": "Remember me",
|
||||
"wikibase-account/password-remember-me-title": "Your password won't be stored. Don't check this if your computer is public.",
|
||||
"wikibase-account/owner-only-consumer-remember-me-title": "Consumer credentials are stored unencrypted in cookies. Don't check this if your computer is public.",
|
||||
"wikibase-account/close": "Close",
|
||||
"wikibase-account/log-in": "Log in",
|
||||
"wikibase-account/logged-in-as": "You are logged in as:",
|
||||
"wikibase-account/log-out": "Log out",
|
||||
"wikibase-account/connecting-to-wikibase": "Connecting to Wikibase…",
|
||||
"perform-wikibase-edits/dialog-header": "Upload edits to $1",
|
||||
"perform-wikibase-edits/review-your-edits": "You are about to upload $1 edits to <a href=\"$2\" target=\"_blank\">$3</a>. Please check them carefully. Large edit batches should be submitted for <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">bot review</a> first.",
|
||||
"perform-wikibase-edits/logged-in-as": "You are logged in as",
|
||||
"perform-wikibase-edits/edit-summary-label": "summary",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "a few words to describe your edits",
|
||||
"perform-wikibase-edits/maxlag-label": "maxlag",
|
||||
"perform-wikibase-edits/explain-maxlag": "Must be a positive integer. Leave this to the default value unless you know <a href=\"https://www.mediawiki.org/wiki/Manual:Maxlag_parameter\" target=\"_blank\">how maxlag works</a>.",
|
||||
"perform-wikibase-edits/maxlag-validation": "maxlag must be a positive integer",
|
||||
"perform-wikibase-edits/perform-edits": "Upload edits",
|
||||
"perform-wikibase-edits/cancel": "Cancel",
|
||||
"perform-wikibase-edits/analyzing-edits": "Analyzing your edits…",
|
||||
"import-wikibase-schema/dialog-header": "Import Wikibase schema",
|
||||
"import-wikibase-schema/file-label": "From JSON file: ",
|
||||
"import-wikibase-schema/schema-label": "Or from JSON text:",
|
||||
"import-wikibase-schema/invalid-schema": "Invalid Wikibase schema.",
|
||||
"import-wikibase-schema/import": "Import",
|
||||
"warnings-messages/new-item-created/title": "This edit batch will create new Wikidata items.",
|
||||
"warnings-messages/new-item-created/title": "This edit batch will create new {wikibase_name} items.",
|
||||
"warnings-messages/new-item-created/body": "Please make sure that these items do not exist yet and are <a href=\"https://www.wikidata.org/wiki/Wikidata:Notability\" target=\"_blank\">suitable for inclusion in Wikidata</a>.",
|
||||
"warnings-messages/new-item-without-labels-or-aliases/title": "New items created without any label or alias.",
|
||||
"warnings-messages/new-item-without-labels-or-aliases/body": "You should at least provide one label for new items such as {example_entity}, so that others can understand what the item is about.",
|
||||
@ -110,12 +128,12 @@
|
||||
"warnings-messages/new-item-without-descriptions/body": "Adding descriptions on new items such as {example_entity} will make it easier to disambiguate the items from namesakes.",
|
||||
"warnings-messages/new-item-with-deleted-statements/title": "Deleting statements on new items.",
|
||||
"warnings-messages/new-item-with-deleted-statements/body": "There is probably something wrong in your schema or project.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/title": "New items created without any type.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/body": "You should provide an \"instance of\" (P31) or \"subclass of\" (P279) statement for each item that you create, such as {example_entity}.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/title": "New items created without any type.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/body": "You should provide an \"instance of\" (P31 for Wikidata) or \"subclass of\" (P279 for Wikidata) statement for each item that you create, such as {example_entity}.",
|
||||
"warnings-messages/add-statements-with-invalid-format/title": "{property_entity} statements with invalid format.",
|
||||
"warnings-messages/add-statements-with-invalid-format/body": "Values for this property are expected to match the regular expression <span class=\"wb-issue-preformat\">{regex}</span>, which is not the case for <span class=\"wb-issue-preformat\">{example_value}</span> added on {example_item_entity}.",
|
||||
"warnings-messages/remove-statements-with-invalid-format/title": "Removed statements with invalid format.",
|
||||
"warnings-messages/remove-statements-with-invalid-format/body": "If these statements currently exist on Wikidata, this will solve constraint violations.",
|
||||
"warnings-messages/remove-statements-with-invalid-format/body": "If these statements currently exist on {wikibase_name}, this will solve constraint violations.",
|
||||
"warnings-messages/missing-inverse-statements/title": "Inverse statements missing for {added_property_entity}.",
|
||||
"warnings-messages/missing-inverse-statements/body": "Any {added_property_entity} statement such as the one from {source_entity} to {target_entity} should also be added in reverse with {inverse_property_entity}: in this case, {target_entity} {inverse_property_entity} {source_entity}.",
|
||||
"warnings-messages/having-conflicts-with-statements/title": "{property_entity} conflicts with statement {added_property_entity}.",
|
||||
@ -143,19 +161,19 @@
|
||||
"warnings-messages/no-edit-generated/title": "No edit was generated.",
|
||||
"warnings-messages/no-edit-generated/body": "There might be something wrong with your schema.",
|
||||
"warnings-messages/no-issue-detected/title": "No issue was detected in your edits.",
|
||||
"warnings-messages/no-issue-detected/body": "Note that OpenRefine cannot detect all the types of problems Wikidata edits can have.",
|
||||
"warnings-messages/no-issue-detected/body": "Note that OpenRefine cannot detect all the types of problems Wikibase edits can have.",
|
||||
"warnings-messages/multi-valued-property-is-required-for-new-item/title": "{property_entity} should have more than one statement on new items.",
|
||||
"warnings-messages/multi-valued-property-is-required-for-new-item/body": "This property is expected to have more than one statement on each item but it has single statement, for instance on {example_entity}.",
|
||||
"warnings-messages/multi-valued-property-is-required-for-existing-item/title": "{property_entity} should have more than one statement on existing items.",
|
||||
"warnings-messages/multi-valued-property-is-required-for-existing-item/body": "This property is expected to have more than one statement on each item but it has single statement, for instance on {example_entity}. If the item already has statements with this property in Wikidata, then this warning can be ignored.",
|
||||
"warnings-messages/multi-valued-property-is-required-for-existing-item/body": "This property is expected to have more than one statement on each item but it has single statement, for instance on {example_entity}. If the item already has statements with this property in {wikibase_name}, then this warning can be ignored.",
|
||||
"warnings-messages/new-item-requires-property-to-have-certain-values/title": "{property_entity} requires property {added_property_entity} to have certain values.",
|
||||
"warnings-messages/new-item-requires-property-to-have-certain-values/body": "Property {added_property_entity} doesn't have appropriate values such as on item {example_entity}.",
|
||||
"warnings-messages/new-item-requires-certain-other-statement/title": "{property_entity} requires statement with property {added_property_entity}.",
|
||||
"warnings-messages/new-item-requires-certain-other-statement/body": "This property is expected to have another statement with property {added_property_entity} such as on item {example_entity}.",
|
||||
"warnings-messages/existing-item-requires-property-to-have-certain-values/title": "{property_entity} requires property {added_property_entity} to have certain values.",
|
||||
"warnings-messages/existing-item-requires-property-to-have-certain-values/body": "Property {added_property_entity} doesn't have appropriate values such as on item {example_entity}. If the item already has statements with property {added_property_entity} and with appropriate values in Wikidata, then this warning can be ignored.",
|
||||
"warnings-messages/existing-item-requires-property-to-have-certain-values/body": "Property {added_property_entity} doesn't have appropriate values such as on item {example_entity}. If the item already has statements with property {added_property_entity} and with appropriate values in {wikibase_name}, then this warning can be ignored.",
|
||||
"warnings-messages/existing-item-requires-certain-other-statement/title": "{property_entity} requires statement with property {added_property_entity}.",
|
||||
"warnings-messages/existing-item-requires-certain-other-statement/body": "This property is expected to have another statement with property {added_property_entity} such as on item {example_entity}. If the item already has statements with property {added_property_entity} in Wikidata, then this warning can be ignored.",
|
||||
"warnings-messages/existing-item-requires-certain-other-statement/body": "This property is expected to have another statement with property {added_property_entity} such as on item {example_entity}. If the item already has statements with property {added_property_entity} in {wikibase_name}, then this warning can be ignored.",
|
||||
"warnings-messages/values-should-not-be-used-as-qualifier/title": "Invalid value for qualifier {qualifier_entity} on statement {statement_entity}",
|
||||
"warnings-messages/values-should-not-be-used-as-qualifier/body": "On items such as {example_entity}, an invalid value for qualifier {qualifier_entity} was supplied on statement {statement_entity}.",
|
||||
"warnings-messages/no-references-provided/title": "{property_entity} requires at least one reference.",
|
||||
@ -171,7 +189,7 @@
|
||||
"warnings-messages/non-printable-characters/title": "Non-printable characters in strings.",
|
||||
"warnings-messages/non-printable-characters/body": "Strings such as <span class=\"wb-issue-preformat\">{example_string}</span> contain non-printable characters.",
|
||||
"warnings-messages/invalid-identifier-space/title": "Invalid identifier space for reconciled cells.",
|
||||
"warnings-messages/invalid-identifier-space/body": "Some reconciled cells such as <span class=\"wb-issue-preformat\">{example_cell}</span> were ignored because they are not reconciled to Wikidata.",
|
||||
"warnings-messages/invalid-identifier-space/body": "Some reconciled cells such as <span class=\"wb-issue-preformat\">{example_cell}</span> were ignored because they are not reconciled to {wikibase_name}.",
|
||||
"warnings-messages/ignored-language/title": "Invalid language identifiers.",
|
||||
"warnings-messages/ignored-language/body": "Some language identifiers are invalid, such as <span class=\"wb-issue-preformat\">{example_value}</span>. See the <a href=\"https://www.wikidata.org/wiki/Wikidata:Tools/OpenRefine/Editing/Schema_alignment#Languages\" target=\"_blank\">allowed values</a>.",
|
||||
"warnings-messages/ignored-date/title": "Invalid date formats.",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"perform-wikidata-edits/analyzing-edits": "Analysing your edits…",
|
||||
"perform-wikibase-edits/analyzing-edits": "Analysing your edits…",
|
||||
"warnings-messages/item-description-begin-with-article/body": "Description ({lang}) such as <span class=\"wb-issue-preformat\">{description}</span> on {example_entity} begins with article \"{article}\". Descriptions should not normally begin with initial articles (\"a\", \"an\", \"the\"). See the <a href=\"https://www.wikidata.org/wiki/Help:Description#No_initial_articles_(a,_an,_the)\" target=\"_blank\">manual</a> for more information.",
|
||||
"warnings-messages/item-description-begin-with-article/title": "Description begins with article (\"a\", \"an\" or \"the\")",
|
||||
"warnings-messages/item-description-begin-with-uppercase/body": "Description ({lang}) such as <span class=\"wb-issue-preformat\">{description}</span> on {example_entity} begins with uppercase letter \"{uppercase_letter}\". Descriptions begin with a lowercase letter except when uppercase would normally be required or expected. See the <a href=\"https://www.wikidata.org/wiki/Help:Description#Capitalization\" target=\"_blank\">manual</a> for more information.",
|
||||
@ -72,8 +72,8 @@
|
||||
"warnings-messages/remove-statements-with-invalid-format/title": "Removed statements with invalid format.",
|
||||
"warnings-messages/add-statements-with-invalid-format/body": "Values for this property are expected to match the regular expression <span class=\"wb-issue-preformat\">{regex}</span>, which is not the case for <span class=\"wb-issue-preformat\">{example_value}</span> added on {example_item_entity}.",
|
||||
"warnings-messages/add-statements-with-invalid-format/title": "{property_entity} statements with invalid format.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/body": "You should provide an \"instance of\" (P31) or \"subclass of\" (P279) statement for each item that you create, such as {example_entity}.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/title": "New items created without any type.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/body": "You should provide an \"instance of\" (P31) or \"subclass of\" (P279) statement for each item that you create, such as {example_entity}.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/title": "New items created without any type.",
|
||||
"warnings-messages/new-item-with-deleted-statements/body": "There is probably something wrong in your schema or project.",
|
||||
"warnings-messages/new-item-with-deleted-statements/title": "Deleting statements on new items.",
|
||||
"warnings-messages/new-item-without-descriptions/body": "Adding descriptions on new items such as {example_entity} will make it easier to disambiguate the items from namesakes.",
|
||||
@ -87,99 +87,99 @@
|
||||
"import-wikibase-schema/schema-label": "Or from JSON text:",
|
||||
"import-wikibase-schema/file-label": "From JSON file: ",
|
||||
"import-wikibase-schema/dialog-header": "Import Wikidata schema",
|
||||
"perform-wikidata-edits/cancel": "Cancel",
|
||||
"perform-wikidata-edits/perform-edits": "Upload edits",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "a few words to describe your edits",
|
||||
"perform-wikidata-edits/edit-summary-label": "Edit summary:",
|
||||
"perform-wikidata-edits/logged-in-as": "You are logged in as",
|
||||
"perform-wikidata-edits/review-your-edits": "You are about to upload {nb_edits} edits to Wikidata. Please check them carefully. Large edit batches should be submitted for <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">bot review</a> first.",
|
||||
"perform-wikidata-edits/dialog-header": "Upload edits to Wikidata",
|
||||
"wikidata-account/connecting-to-wikidata": "Connecting to Wikidata…",
|
||||
"wikidata-account/dialog-header": "Wikidata account",
|
||||
"wikidata-account/explain-log-in": "Logging in to <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> lets you to upload edits directly from OpenRefine.",
|
||||
"wikidata-account/explain-owner-only-consumer-wiki": "See this <a href=\"https://github.com/OpenRefine/OpenRefine/wiki/Wikidata-owner-only-consumer\" target=\"_blank\">wiki</a> to get your owner-only consumer if you don't have one.",
|
||||
"wikidata-account/explain-password-login": "You can also <a>login with your username/password.</a>",
|
||||
"wikidata-account/explain-owner-only-consumer-login": "You can also <a>login with your owner-only consumer.</a>",
|
||||
"wikidata-account/invalid-credentials": "Invalid credentials",
|
||||
"wikidata-account/username-label": "Username:",
|
||||
"wikidata-account/username-placeholder": "username",
|
||||
"wikidata-account/password-label": "Password:",
|
||||
"wikidata-account/password-placeholder": "password",
|
||||
"wikidata-account/consumer-token-label": "Consumer token:",
|
||||
"wikidata-account/consumer-token-placeholder": "consumer token",
|
||||
"wikidata-account/consumer-secret-label": "Consumer secret:",
|
||||
"wikidata-account/consumer-secret-placeholder": "consumer secret",
|
||||
"wikidata-account/access-token-label": "Access token:",
|
||||
"wikidata-account/access-token-placeholder": "access token",
|
||||
"wikidata-account/access-secret-label": "Access secret:",
|
||||
"wikidata-account/access-secret-placeholder": "access secret",
|
||||
"wikidata-account/remember-me": "Remember me",
|
||||
"wikidata-account/password-remember-me-title": "Your password won't be stored. Don't check this if your computer is public.",
|
||||
"wikidata-account/owner-only-consumer-remember-me-title": "Consumer credentials are stored unencrypted in cookies. Don't check this if your computer is public.",
|
||||
"wikidata-account/close": "Close",
|
||||
"wikidata-account/log-in": "Log in",
|
||||
"wikidata-account/logged-in-as": "You are logged in as:",
|
||||
"wikidata-account/log-out": "Log out",
|
||||
"wikidata-preview/new-id": "new item",
|
||||
"wikidata-schema/unsaved-warning": "You have made unsaved changes to your Wikidata schema. Close anyway?",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "Your schema is incomplete so it cannot be saved yet.",
|
||||
"wikidata-schema/discard-schema-changes-alt": "Discard the changes made to the schema.",
|
||||
"wikidata-schema/save-schema-alt": "Save the schema to OpenRefine. The changes will not be uploaded to Wikidata yet.",
|
||||
"wikidata-schema/unsaved-changes-alt": "You have made unsaved changes to your Wikidata schema.",
|
||||
"wikidata-schema/close-button": "Close",
|
||||
"wikidata-schema/save-button": "Save schema",
|
||||
"wikidata-schema/discard-button": "Discard changes",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "Your schema is incomplete, fix it to see the preview.",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "Your schema is incomplete, fix it to see the issues.",
|
||||
"wikidata-schema/datatype-not-supported-yet": "This datatype is not supported yet, sorry.",
|
||||
"wikidata-schema/geoshape-with-prefix": "filename starting with \"Data:\"",
|
||||
"wikidata-schema/math-expression": "mathematical expression",
|
||||
"wikidata-schema/commons-media": "filename",
|
||||
"wikidata-schema/tabular-data-with-prefix": "filename starting with \"Data:\"",
|
||||
"wikidata-schema/full-url": "full URL including the protocol",
|
||||
"wikidata-schema/unit": "unit",
|
||||
"wikidata-schema/amount": "amount",
|
||||
"wikidata-schema/item-or-reconciled-column": "type item or drag reconciled column here",
|
||||
"wikidata-schema/alias": "Alias",
|
||||
"wikidata-schema/override-term": "override if present",
|
||||
"wikidata-schema/description-override": "Description (override if present)",
|
||||
"wikidata-schema/description-if-new": "Description (do not override)",
|
||||
"wikidata-schema/description": "Description",
|
||||
"wikidata-schema/label-override": "Label (override if present)",
|
||||
"wikidata-schema/label-if-new": "Label (do not override)",
|
||||
"wikidata-schema/label": "Label",
|
||||
"wikidata-schema/remove-column": "remove column",
|
||||
"wikidata-schema/nb-references": " references",
|
||||
"wikidata-schema/property-placeholder": "property",
|
||||
"wikidata-schema/add-reference-snak": "add",
|
||||
"wikidata-schema/add-reference": "add reference",
|
||||
"wikidata-schema/reference-copied": "copied",
|
||||
"wikidata-schema/paste-reference": "paste reference",
|
||||
"wikidata-schema/copy-reference": "copy",
|
||||
"wikidata-schema/add-qualifier": "add qualifier",
|
||||
"wikidata-schema/add-value": "add value",
|
||||
"wikidata-schema/add-statement": "add statement",
|
||||
"wikidata-schema/remove": "remove",
|
||||
"wikidata-schema/add-term": "add term",
|
||||
"wikidata-schema/add-item-button": "add item",
|
||||
"wikidata-schema/empty-terms": "no labels, descriptions or aliases added",
|
||||
"wikidata-schema/empty-statements": "no statements added",
|
||||
"wikidata-schema/terms-header": "Terms",
|
||||
"wikidata-schema/statements-header": "Statements",
|
||||
"wikidata-schema/edits-preview-tab-header": "Preview",
|
||||
"wikidata-schema/warnings-tab-header": "Issues",
|
||||
"wikidata-schema/schema-tab-header": "Schema",
|
||||
"wikidata-schema/preview-explanation": "This tab shows the first edits (out of {nb_edits}) that will be made once you upload the changes to Wikidata. You can use facets to inspect the edits on particular items.",
|
||||
"wikidata-schema/dialog-explanation": "The Wikidata schema below specifies how your tabular data will be transformed into Wikidata edits. You can drag and drop the column names below in most input boxes: for each row, edits will be generated with the values in these columns.",
|
||||
"wikidata-schema/dialog-header": "Align to Wikidata",
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-extension/wikidata-schema": "Wikidata schema",
|
||||
"wikidata-extension/export-wikidata-schema": "Export Wikidata schema",
|
||||
"wikidata-extension/export-schema": "Export schema",
|
||||
"wikidata-extension/export-to-qs": "QuickStatements file...",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Wikidata edits...",
|
||||
"wikidata-extension/manage-wikidata-account": "Manage Wikidata account",
|
||||
"wikidata-extension/import-wikidata-schema": "Import schema",
|
||||
"wikidata-extension/edit-wikidata-schema": "Edit Wikidata schema",
|
||||
"wikidata-extension/menu-label": "Wikidata"
|
||||
"perform-wikibase-edits/cancel": "Cancel",
|
||||
"perform-wikibase-edits/perform-edits": "Upload edits",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "a few words to describe your edits",
|
||||
"perform-wikibase-edits/edit-summary-label": "Edit summary:",
|
||||
"perform-wikibase-edits/logged-in-as": "You are logged in as",
|
||||
"perform-wikibase-edits/review-your-edits": "You are about to upload {nb_edits} edits to Wikidata. Please check them carefully. Large edit batches should be submitted for <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">bot review</a> first.",
|
||||
"perform-wikibase-edits/dialog-header": "Upload edits to Wikidata",
|
||||
"wikibase-account/connecting-to-wikibase": "Connecting to Wikidata…",
|
||||
"wikibase-account/dialog-header": "Wikidata account",
|
||||
"wikibase-account/explain-log-in": "Logging in to <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> lets you to upload edits directly from OpenRefine.",
|
||||
"wikibase-account/explain-owner-only-consumer-wiki": "See this <a href=\"https://github.com/OpenRefine/OpenRefine/wiki/Wikidata-owner-only-consumer\" target=\"_blank\">wiki</a> to get your owner-only consumer if you don't have one.",
|
||||
"wikibase-account/explain-password-login": "You can also <a>login with your username/password.</a>",
|
||||
"wikibase-account/explain-owner-only-consumer-login": "You can also <a>login with your owner-only consumer.</a>",
|
||||
"wikibase-account/invalid-credentials": "Invalid credentials",
|
||||
"wikibase-account/username-label": "Username:",
|
||||
"wikibase-account/username-placeholder": "username",
|
||||
"wikibase-account/password-label": "Password:",
|
||||
"wikibase-account/password-placeholder": "password",
|
||||
"wikibase-account/consumer-token-label": "Consumer token:",
|
||||
"wikibase-account/consumer-token-placeholder": "consumer token",
|
||||
"wikibase-account/consumer-secret-label": "Consumer secret:",
|
||||
"wikibase-account/consumer-secret-placeholder": "consumer secret",
|
||||
"wikibase-account/access-token-label": "Access token:",
|
||||
"wikibase-account/access-token-placeholder": "access token",
|
||||
"wikibase-account/access-secret-label": "Access secret:",
|
||||
"wikibase-account/access-secret-placeholder": "access secret",
|
||||
"wikibase-account/remember-me": "Remember me",
|
||||
"wikibase-account/password-remember-me-title": "Your password won't be stored. Don't check this if your computer is public.",
|
||||
"wikibase-account/owner-only-consumer-remember-me-title": "Consumer credentials are stored unencrypted in cookies. Don't check this if your computer is public.",
|
||||
"wikibase-account/close": "Close",
|
||||
"wikibase-account/log-in": "Log in",
|
||||
"wikibase-account/logged-in-as": "You are logged in as:",
|
||||
"wikibase-account/log-out": "Log out",
|
||||
"wikibase-preview/new-id": "new item",
|
||||
"wikibase-schema/unsaved-warning": "You have made unsaved changes to your Wikidata schema. Close anyway?",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "Your schema is incomplete so it cannot be saved yet.",
|
||||
"wikibase-schema/discard-schema-changes-alt": "Discard the changes made to the schema.",
|
||||
"wikibase-schema/save-schema-alt": "Save the schema to OpenRefine. The changes will not be uploaded to Wikidata yet.",
|
||||
"wikibase-schema/unsaved-changes-alt": "You have made unsaved changes to your Wikidata schema.",
|
||||
"wikibase-schema/close-button": "Close",
|
||||
"wikibase-schema/save-button": "Save schema",
|
||||
"wikibase-schema/discard-button": "Discard changes",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "Your schema is incomplete, fix it to see the preview.",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "Your schema is incomplete, fix it to see the issues.",
|
||||
"wikibase-schema/datatype-not-supported-yet": "This datatype is not supported yet, sorry.",
|
||||
"wikibase-schema/geoshape-with-prefix": "filename starting with \"Data:\"",
|
||||
"wikibase-schema/math-expression": "mathematical expression",
|
||||
"wikibase-schema/commons-media": "filename",
|
||||
"wikibase-schema/tabular-data-with-prefix": "filename starting with \"Data:\"",
|
||||
"wikibase-schema/full-url": "full URL including the protocol",
|
||||
"wikibase-schema/unit": "unit",
|
||||
"wikibase-schema/amount": "amount",
|
||||
"wikibase-schema/item-or-reconciled-column": "type item or drag reconciled column here",
|
||||
"wikibase-schema/alias": "Alias",
|
||||
"wikibase-schema/override-term": "override if present",
|
||||
"wikibase-schema/description-override": "Description (override if present)",
|
||||
"wikibase-schema/description-if-new": "Description (do not override)",
|
||||
"wikibase-schema/description": "Description",
|
||||
"wikibase-schema/label-override": "Label (override if present)",
|
||||
"wikibase-schema/label-if-new": "Label (do not override)",
|
||||
"wikibase-schema/label": "Label",
|
||||
"wikibase-schema/remove-column": "remove column",
|
||||
"wikibase-schema/nb-references": " references",
|
||||
"wikibase-schema/property-placeholder": "property",
|
||||
"wikibase-schema/add-reference-snak": "add",
|
||||
"wikibase-schema/add-reference": "add reference",
|
||||
"wikibase-schema/reference-copied": "copied",
|
||||
"wikibase-schema/paste-reference": "paste reference",
|
||||
"wikibase-schema/copy-reference": "copy",
|
||||
"wikibase-schema/add-qualifier": "add qualifier",
|
||||
"wikibase-schema/add-value": "add value",
|
||||
"wikibase-schema/add-statement": "add statement",
|
||||
"wikibase-schema/remove": "remove",
|
||||
"wikibase-schema/add-term": "add term",
|
||||
"wikibase-schema/add-item-button": "add item",
|
||||
"wikibase-schema/empty-terms": "no labels, descriptions or aliases added",
|
||||
"wikibase-schema/empty-statements": "no statements added",
|
||||
"wikibase-schema/terms-header": "Terms",
|
||||
"wikibase-schema/statements-header": "Statements",
|
||||
"wikibase-schema/edits-preview-tab-header": "Preview",
|
||||
"wikibase-schema/warnings-tab-header": "Issues",
|
||||
"wikibase-schema/schema-tab-header": "Schema",
|
||||
"wikibase-schema/preview-explanation": "This tab shows the first edits (out of {nb_edits}) that will be made once you upload the changes to Wikidata. You can use facets to inspect the edits on particular items.",
|
||||
"wikibase-schema/dialog-explanation": "The Wikidata schema below specifies how your tabular data will be transformed into Wikidata edits. You can drag and drop the column names below in most input boxes: for each row, edits will be generated with the values in these columns.",
|
||||
"wikibase-schema/dialog-header": "Align to Wikidata",
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-extension/wikibase-schema": "Wikidata schema",
|
||||
"wikibase-extension/export-wikibase-schema": "Export Wikidata schema",
|
||||
"wikibase-extension/export-schema": "Export schema",
|
||||
"wikibase-extension/export-to-qs": "QuickStatements file...",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Wikidata edits...",
|
||||
"wikibase-extension/manage-wikibase-account": "Manage Wikidata account",
|
||||
"wikibase-extension/import-wikibase-schema": "Import schema",
|
||||
"wikibase-extension/edit-wikibase-schema": "Edit Wikidata schema",
|
||||
"wikibase-extension/menu-label": "Wikidata"
|
||||
}
|
||||
|
@ -68,8 +68,8 @@
|
||||
"warnings-messages/remove-statements-with-invalid-format/title": "Se quitaron declaraciones con formato incorrecto.",
|
||||
"warnings-messages/add-statements-with-invalid-format/body": "Los valores de esta propiedad deben encajar con la expresión regular <span class=\"wb-issue-preformat\">{regex}</span>, lo cual no sucede en <span class=\"wb-issue-preformat\">{example_value}</span>, que se añadió en {example_item_entity}.",
|
||||
"warnings-messages/add-statements-with-invalid-format/title": "Hay declaraciones en {property_entity} con formato incorrecto.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/body": "Debería proporcionar una declaración «ejemplar de» (P31) o «subclase de» (P279) por cada elemento que cree, como {example_entity}.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/title": "Se crearon elementos nuevos sin ningún tipo.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/body": "Debería proporcionar una declaración «ejemplar de» (P31) o «subclase de» (P279) por cada elemento que cree, como {example_entity}.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/title": "Se crearon elementos nuevos sin ningún tipo.",
|
||||
"warnings-messages/new-item-with-deleted-statements/body": "Posiblemente hay un problema en el esquema o en el proyecto.",
|
||||
"warnings-messages/new-item-with-deleted-statements/title": "Se eliminarán declaraciones en elementos nuevos.",
|
||||
"warnings-messages/new-item-without-descriptions/body": "Añadir descripciones para los elementos nuevos como {example_entity} facilitará la desambiguación entre elementos con el mismo nombre.",
|
||||
@ -83,102 +83,102 @@
|
||||
"import-wikibase-schema/schema-label": "O desde texto JSON:",
|
||||
"import-wikibase-schema/file-label": "Desde archivo JSON: ",
|
||||
"import-wikibase-schema/dialog-header": "Importar esquema de Wikidata",
|
||||
"perform-wikidata-edits/analyzing-edits": "Analizando sus ediciones…",
|
||||
"perform-wikidata-edits/cancel": "Cancelar",
|
||||
"perform-wikidata-edits/perform-edits": "Cargar ediciones",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "describa sus ediciones en unas pocas palabras",
|
||||
"perform-wikidata-edits/edit-summary-label": "Resumen de edición:",
|
||||
"perform-wikidata-edits/logged-in-as": "Ha accedido como",
|
||||
"perform-wikidata-edits/review-your-edits": "Está a punto de cargar {nb_edits} ediciones en Wikidata. Revíselas con cuidado. Antes de enviar lotes de ediciones grandes, <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">pida la revisión de robots</a>.",
|
||||
"perform-wikidata-edits/dialog-header": "Cargar ediciones en Wikidata",
|
||||
"wikidata-account/connecting-to-wikidata": "Conectando con Wikidata…",
|
||||
"wikidata-account/log-out": "Salir",
|
||||
"wikidata-account/logged-in-as": "Ha accedido como:",
|
||||
"wikidata-account/log-in": "Acceder",
|
||||
"wikidata-account/close": "Cerrar",
|
||||
"wikidata-account/owner-only-consumer-remember-me-title": "Los datos de acceso del cliente se almacenan sin cifrar en «cookies». No active la opción si el equipo es público.",
|
||||
"wikidata-account/password-remember-me-title": "No se almacenará su contraseña. No active la opción si el equipo es público.",
|
||||
"wikidata-account/remember-me": "Recordarme",
|
||||
"wikidata-account/access-secret-placeholder": "secreto de acceso",
|
||||
"wikidata-account/access-secret-label": "Secreto de acceso:",
|
||||
"wikidata-account/access-token-placeholder": "ficha de acceso",
|
||||
"wikidata-account/access-token-label": "Ficha de acceso:",
|
||||
"wikidata-account/consumer-secret-placeholder": "secreto de consumidor",
|
||||
"wikidata-account/consumer-secret-label": "Secreto de consumidor:",
|
||||
"wikidata-account/consumer-token-placeholder": "ficha de consumidor",
|
||||
"wikidata-account/consumer-token-label": "Ficha de consumidor:",
|
||||
"wikidata-account/password-placeholder": "contraseña",
|
||||
"wikidata-account/password-label": "Contraseña:",
|
||||
"wikidata-account/username-placeholder": "nombre de usuario",
|
||||
"wikidata-account/username-label": "Nombre de usuario:",
|
||||
"wikidata-account/invalid-credentials": "Datos de acceso no válidos",
|
||||
"wikidata-account/explain-owner-only-consumer-login": "También puede <a>acceder con su consumidor de propietario solo</a>.",
|
||||
"wikidata-account/explain-password-login": "También puede <a>acceder con su usuario y contraseña</a>.",
|
||||
"wikidata-account/explain-owner-only-consumer-wiki": "Consulte esta <a href=\"https://github.com/OpenRefine/OpenRefine/wiki/Wikidata-owner-only-consumer\" target=\"_blank\">página de wiki</a> para conseguir su consumidor de propietario solo, si aún no tiene uno.",
|
||||
"wikidata-account/explain-log-in": "Acceder a <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> le permite cargar sus ediciones directamente desde OpenRefine.",
|
||||
"wikidata-account/dialog-header": "Cuenta de Wikidata",
|
||||
"wikidata-preview/new-id": "elemento nuevo",
|
||||
"wikidata-schema/unsaved-warning": "Ha efectuado cambios en el esquema de Wikidata que no se han guardado. ¿Quiere salir igualmente?",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "El esquema está incompleto y no puede guardarse todavía.",
|
||||
"wikidata-schema/discard-schema-changes-alt": "Descartar cambios efectuados en este esquema.",
|
||||
"wikidata-schema/save-schema-alt": "Guarde el esquema en OpenRefine. Esto no cargará aún los cambios en Wikidata.",
|
||||
"wikidata-schema/unsaved-changes-alt": "Ha efectuado cambios en el esquema de Wikidata que no se han guardado.",
|
||||
"wikidata-schema/close-button": "Cerrar",
|
||||
"wikidata-schema/save-button": "Guardar esquema",
|
||||
"wikidata-schema/discard-button": "Descartar cambios",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "El esquema está incompleto. Corríjalo para ver la previsualización.",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "El esquema está incompleto. Corríjalo para ver los problemas.",
|
||||
"wikidata-schema/datatype-not-supported-yet": "Aún no se admite este tipo de dato.",
|
||||
"wikidata-schema/geoshape-with-prefix": "nombre de archivo que comienza por «Data:»",
|
||||
"wikidata-schema/math-expression": "expresión matemática",
|
||||
"wikidata-schema/commons-media": "nombre de archivo",
|
||||
"wikidata-schema/tabular-data-with-prefix": "nombre de archivo que comienza por «Data:»",
|
||||
"wikidata-schema/full-url": "URL completo, el protocolo incluido",
|
||||
"wikidata-schema/unit": "unidad",
|
||||
"wikidata-schema/amount": "cantidad",
|
||||
"wikidata-schema/item-or-reconciled-column": "digite un elemento o arrastre una columna cotejada aquí",
|
||||
"wikidata-schema/alias": "Alias",
|
||||
"wikidata-schema/override-term": "anular si existe",
|
||||
"wikidata-schema/description-override": "Descripción (anular si existe)",
|
||||
"wikidata-schema/description-if-new": "Descripción (no anular)",
|
||||
"wikidata-schema/description": "Descripción",
|
||||
"wikidata-schema/label-override": "Etiqueta (anular si existe)",
|
||||
"wikidata-schema/label-if-new": "Etiqueta (no anular)",
|
||||
"wikidata-schema/empty-terms": "no se añadió ninguna etiqueta, descripción ni alias",
|
||||
"wikidata-schema/label": "Etiqueta",
|
||||
"wikidata-schema/remove-column": "quitar columna",
|
||||
"wikidata-schema/nb-references": " referencias",
|
||||
"wikidata-schema/property-placeholder": "propiedad",
|
||||
"wikidata-schema/add-reference-snak": "añadir",
|
||||
"wikidata-schema/add-reference": "añadir referencia",
|
||||
"wikidata-schema/reference-copied": "copiado",
|
||||
"wikidata-schema/paste-reference": "pegar referencia",
|
||||
"wikidata-schema/copy-reference": "copiar",
|
||||
"wikidata-schema/add-qualifier": "añadir calificativo",
|
||||
"wikidata-schema/add-value": "añadir valor",
|
||||
"wikidata-schema/add-statement": "añadir declaración",
|
||||
"wikidata-schema/remove": "quitar",
|
||||
"wikidata-schema/add-term": "añadir término",
|
||||
"wikidata-schema/add-item-button": "añadir elemento",
|
||||
"wikidata-schema/empty-statements": "no se añadió ninguna declaración",
|
||||
"wikidata-schema/terms-header": "Términos",
|
||||
"wikidata-schema/statements-header": "Declaraciones",
|
||||
"wikidata-schema/edits-preview-tab-header": "Previsualización",
|
||||
"wikidata-schema/warnings-tab-header": "Problemas",
|
||||
"wikidata-schema/schema-tab-header": "Esquema",
|
||||
"wikidata-schema/preview-explanation": "Esta pestaña muestra las primeras ediciones (de un total de {nb_edits}) que se realizarán una vez que cargue los cambios en Wikidata. Puede emplear facetas para inspeccionar las ediciones en elementos concretos.",
|
||||
"wikidata-schema/dialog-explanation": "El esquema de Wikidata siguiente especifica la manera en que sus datos tabulares se transformarán en ediciones a Wikidata. Puede arrastrar y colocar los nombres de las columnas de más abajo sobre la mayoría de los cuadros de entrada: por cada fila, las ediciones se generarán con los valores en esas columnas.",
|
||||
"wikidata-schema/dialog-header": "Alinear a Wikidata",
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-extension/wikidata-schema": "Esquema de Wikidata",
|
||||
"wikidata-extension/export-wikidata-schema": "Exportar esquema de Wikidata",
|
||||
"wikidata-extension/export-schema": "Exportar esquema",
|
||||
"wikidata-extension/wikidata-edits": "Ediciones a Wikidata…",
|
||||
"wikidata-extension/qs-file": "Archivo de QuickStatements",
|
||||
"wikidata-extension/export-to-qs": "Exportar a QuickStatements",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Cargar ediciones en Wikidata",
|
||||
"wikidata-extension/manage-wikidata-account": "Gestionar cuenta de Wikidata",
|
||||
"wikidata-extension/import-wikidata-schema": "Importar esquema",
|
||||
"wikidata-extension/edit-wikidata-schema": "Editar esquema de Wikidata",
|
||||
"wikidata-extension/menu-label": "Wikidata"
|
||||
"perform-wikibase-edits/analyzing-edits": "Analizando sus ediciones…",
|
||||
"perform-wikibase-edits/cancel": "Cancelar",
|
||||
"perform-wikibase-edits/perform-edits": "Cargar ediciones",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "describa sus ediciones en unas pocas palabras",
|
||||
"perform-wikibase-edits/edit-summary-label": "Resumen de edición:",
|
||||
"perform-wikibase-edits/logged-in-as": "Ha accedido como",
|
||||
"perform-wikibase-edits/review-your-edits": "Está a punto de cargar {nb_edits} ediciones en Wikidata. Revíselas con cuidado. Antes de enviar lotes de ediciones grandes, <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">pida la revisión de robots</a>.",
|
||||
"perform-wikibase-edits/dialog-header": "Cargar ediciones en Wikidata",
|
||||
"wikibase-account/connecting-to-wikibase": "Conectando con Wikidata…",
|
||||
"wikibase-account/log-out": "Salir",
|
||||
"wikibase-account/logged-in-as": "Ha accedido como:",
|
||||
"wikibase-account/log-in": "Acceder",
|
||||
"wikibase-account/close": "Cerrar",
|
||||
"wikibase-account/owner-only-consumer-remember-me-title": "Los datos de acceso del cliente se almacenan sin cifrar en «cookies». No active la opción si el equipo es público.",
|
||||
"wikibase-account/password-remember-me-title": "No se almacenará su contraseña. No active la opción si el equipo es público.",
|
||||
"wikibase-account/remember-me": "Recordarme",
|
||||
"wikibase-account/access-secret-placeholder": "secreto de acceso",
|
||||
"wikibase-account/access-secret-label": "Secreto de acceso:",
|
||||
"wikibase-account/access-token-placeholder": "ficha de acceso",
|
||||
"wikibase-account/access-token-label": "Ficha de acceso:",
|
||||
"wikibase-account/consumer-secret-placeholder": "secreto de consumidor",
|
||||
"wikibase-account/consumer-secret-label": "Secreto de consumidor:",
|
||||
"wikibase-account/consumer-token-placeholder": "ficha de consumidor",
|
||||
"wikibase-account/consumer-token-label": "Ficha de consumidor:",
|
||||
"wikibase-account/password-placeholder": "contraseña",
|
||||
"wikibase-account/password-label": "Contraseña:",
|
||||
"wikibase-account/username-placeholder": "nombre de usuario",
|
||||
"wikibase-account/username-label": "Nombre de usuario:",
|
||||
"wikibase-account/invalid-credentials": "Datos de acceso no válidos",
|
||||
"wikibase-account/explain-owner-only-consumer-login": "También puede <a>acceder con su consumidor de propietario solo</a>.",
|
||||
"wikibase-account/explain-password-login": "También puede <a>acceder con su usuario y contraseña</a>.",
|
||||
"wikibase-account/explain-owner-only-consumer-wiki": "Consulte esta <a href=\"https://github.com/OpenRefine/OpenRefine/wiki/Wikidata-owner-only-consumer\" target=\"_blank\">página de wiki</a> para conseguir su consumidor de propietario solo, si aún no tiene uno.",
|
||||
"wikibase-account/explain-log-in": "Acceder a <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> le permite cargar sus ediciones directamente desde OpenRefine.",
|
||||
"wikibase-account/dialog-header": "Cuenta de Wikidata",
|
||||
"wikibase-preview/new-id": "elemento nuevo",
|
||||
"wikibase-schema/unsaved-warning": "Ha efectuado cambios en el esquema de Wikidata que no se han guardado. ¿Quiere salir igualmente?",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "El esquema está incompleto y no puede guardarse todavía.",
|
||||
"wikibase-schema/discard-schema-changes-alt": "Descartar cambios efectuados en este esquema.",
|
||||
"wikibase-schema/save-schema-alt": "Guarde el esquema en OpenRefine. Esto no cargará aún los cambios en Wikidata.",
|
||||
"wikibase-schema/unsaved-changes-alt": "Ha efectuado cambios en el esquema de Wikidata que no se han guardado.",
|
||||
"wikibase-schema/close-button": "Cerrar",
|
||||
"wikibase-schema/save-button": "Guardar esquema",
|
||||
"wikibase-schema/discard-button": "Descartar cambios",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "El esquema está incompleto. Corríjalo para ver la previsualización.",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "El esquema está incompleto. Corríjalo para ver los problemas.",
|
||||
"wikibase-schema/datatype-not-supported-yet": "Aún no se admite este tipo de dato.",
|
||||
"wikibase-schema/geoshape-with-prefix": "nombre de archivo que comienza por «Data:»",
|
||||
"wikibase-schema/math-expression": "expresión matemática",
|
||||
"wikibase-schema/commons-media": "nombre de archivo",
|
||||
"wikibase-schema/tabular-data-with-prefix": "nombre de archivo que comienza por «Data:»",
|
||||
"wikibase-schema/full-url": "URL completo, el protocolo incluido",
|
||||
"wikibase-schema/unit": "unidad",
|
||||
"wikibase-schema/amount": "cantidad",
|
||||
"wikibase-schema/item-or-reconciled-column": "digite un elemento o arrastre una columna cotejada aquí",
|
||||
"wikibase-schema/alias": "Alias",
|
||||
"wikibase-schema/override-term": "anular si existe",
|
||||
"wikibase-schema/description-override": "Descripción (anular si existe)",
|
||||
"wikibase-schema/description-if-new": "Descripción (no anular)",
|
||||
"wikibase-schema/description": "Descripción",
|
||||
"wikibase-schema/label-override": "Etiqueta (anular si existe)",
|
||||
"wikibase-schema/label-if-new": "Etiqueta (no anular)",
|
||||
"wikibase-schema/empty-terms": "no se añadió ninguna etiqueta, descripción ni alias",
|
||||
"wikibase-schema/label": "Etiqueta",
|
||||
"wikibase-schema/remove-column": "quitar columna",
|
||||
"wikibase-schema/nb-references": " referencias",
|
||||
"wikibase-schema/property-placeholder": "propiedad",
|
||||
"wikibase-schema/add-reference-snak": "añadir",
|
||||
"wikibase-schema/add-reference": "añadir referencia",
|
||||
"wikibase-schema/reference-copied": "copiado",
|
||||
"wikibase-schema/paste-reference": "pegar referencia",
|
||||
"wikibase-schema/copy-reference": "copiar",
|
||||
"wikibase-schema/add-qualifier": "añadir calificativo",
|
||||
"wikibase-schema/add-value": "añadir valor",
|
||||
"wikibase-schema/add-statement": "añadir declaración",
|
||||
"wikibase-schema/remove": "quitar",
|
||||
"wikibase-schema/add-term": "añadir término",
|
||||
"wikibase-schema/add-item-button": "añadir elemento",
|
||||
"wikibase-schema/empty-statements": "no se añadió ninguna declaración",
|
||||
"wikibase-schema/terms-header": "Términos",
|
||||
"wikibase-schema/statements-header": "Declaraciones",
|
||||
"wikibase-schema/edits-preview-tab-header": "Previsualización",
|
||||
"wikibase-schema/warnings-tab-header": "Problemas",
|
||||
"wikibase-schema/schema-tab-header": "Esquema",
|
||||
"wikibase-schema/preview-explanation": "Esta pestaña muestra las primeras ediciones (de un total de {nb_edits}) que se realizarán una vez que cargue los cambios en Wikidata. Puede emplear facetas para inspeccionar las ediciones en elementos concretos.",
|
||||
"wikibase-schema/dialog-explanation": "El esquema de Wikidata siguiente especifica la manera en que sus datos tabulares se transformarán en ediciones a Wikidata. Puede arrastrar y colocar los nombres de las columnas de más abajo sobre la mayoría de los cuadros de entrada: por cada fila, las ediciones se generarán con los valores en esas columnas.",
|
||||
"wikibase-schema/dialog-header": "Alinear a Wikidata",
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-extension/wikibase-schema": "Esquema de Wikidata",
|
||||
"wikibase-extension/export-wikibase-schema": "Exportar esquema de Wikidata",
|
||||
"wikibase-extension/export-schema": "Exportar esquema",
|
||||
"wikibase-extension/wikibase-edits": "Ediciones a Wikidata…",
|
||||
"wikibase-extension/qs-file": "Archivo de QuickStatements",
|
||||
"wikibase-extension/export-to-qs": "Exportar a QuickStatements",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Cargar ediciones en Wikidata",
|
||||
"wikibase-extension/manage-wikibase-account": "Gestionar cuenta de Wikidata",
|
||||
"wikibase-extension/import-wikibase-schema": "Importar esquema",
|
||||
"wikibase-extension/edit-wikibase-schema": "Editar esquema de Wikidata",
|
||||
"wikibase-extension/menu-label": "Wikidata"
|
||||
}
|
||||
|
@ -1,51 +1,51 @@
|
||||
{
|
||||
"wikidata-schema/unit": "yksikkö",
|
||||
"wikidata-schema/amount": "määrä",
|
||||
"wikidata-schema/item-or-reconciled-column": "kirjoita kohteen nimi tai raahaa yhdistetty sarake",
|
||||
"wikidata-schema/alias": "Alias",
|
||||
"wikidata-schema/override-term": "tallenna olemassaolevan päälle",
|
||||
"wikidata-schema/description-override": "Kuvaus (tallenna olemassaolevan päällä)",
|
||||
"wikidata-schema/description-if-new": "Kuvaus (älä tallenna olemassaolevan päälle)",
|
||||
"wikidata-schema/description": "Kuvaus",
|
||||
"wikidata-schema/label-override": "Nimi (tallenna olemassaolevan päälle)",
|
||||
"wikidata-schema/label-if-new": "Nimi (älä tallenna olemassaolevan päälle)",
|
||||
"wikidata-schema/label": "Nimi",
|
||||
"wikidata-schema/remove-column": "poista sarake",
|
||||
"wikidata-schema/nb-references": " lähdeviitettä",
|
||||
"wikidata-schema/property-placeholder": "ominaisuus",
|
||||
"wikidata-schema/add-reference-snak": "lisää",
|
||||
"wikidata-schema/add-reference": "lisää lähdeviite",
|
||||
"wikidata-schema/reference-copied": "kopioitu",
|
||||
"wikidata-schema/empty-statements": "ei lisättyjä esityksiä",
|
||||
"wikidata-schema/copy-reference": "kopioi",
|
||||
"wikidata-schema/paste-reference": "liitä lähdeviite",
|
||||
"wikidata-schema/add-qualifier": "lisää tarkenne",
|
||||
"wikidata-schema/add-value": "lisää arvo",
|
||||
"wikidata-schema/add-statement": "lisää esitys",
|
||||
"wikidata-schema/remove": "poista",
|
||||
"wikidata-schema/add-term": "lisää termi",
|
||||
"wikidata-schema/add-item-button": "lisää kohde",
|
||||
"wikidata-schema/empty-terms": "ei lisättyjä nimiä, kuvauksia tai aliaksia",
|
||||
"wikidata-schema/terms-header": "Termit",
|
||||
"wikidata-schema/statements-header": "Esitykset",
|
||||
"wikidata-schema/edits-preview-tab-header": "Esikatselu",
|
||||
"wikidata-schema/warnings-tab-header": "Ongelmat",
|
||||
"wikidata-schema/schema-tab-header": "Skeema",
|
||||
"wikidata-schema/preview-explanation": "Tässä välilehdessä näytetään ensimmäiset muokkaukset (yhteensä {nb_edits} muokkauksesta), jotka tehdään, kun lataat muutokset Wikidataan. Fasetteja käyttämällä voit tutkia osajoukkoa muokkauksista.",
|
||||
"wikidata-schema/dialog-explanation": "Alla näkyvä Wikidata-skeema määrittelee, kuinka taulukkosi tiedot muuntuvat Wikidatan muokkauksiksi. Voit raahata ja pudottaa sarakkeiden nimiä lähes kaikkiin syöttöruutuihin. Wikidataan tallennetaan sarakkeen arvo jokaista riviä kohti.",
|
||||
"wikidata-extension/edit-wikidata-schema": "Muokkaa Wikidata-skeemaa",
|
||||
"wikidata-schema/dialog-header": "Sovita Wikidataan",
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-extension/wikidata-schema": "Wikidata-skeema",
|
||||
"wikidata-extension/export-wikidata-schema": "Vie Wikidata-skeema",
|
||||
"wikidata-extension/export-schema": "Vie skeema",
|
||||
"wikidata-extension/wikidata-edits": "Wikidata-muokkaukset…",
|
||||
"wikidata-extension/qs-file": "QuickStatements -tiedosto",
|
||||
"wikidata-extension/export-to-qs": "Vie QuickStatementsiin",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Lataa muokkaukset Wikidataan",
|
||||
"wikidata-extension/manage-wikidata-account": "Hallinnoi Wikidatan käyttäjätiliä",
|
||||
"wikidata-extension/import-wikidata-schema": "Tuo skeema",
|
||||
"wikidata-extension/menu-label": "Wikidata",
|
||||
"wikibase-schema/unit": "yksikkö",
|
||||
"wikibase-schema/amount": "määrä",
|
||||
"wikibase-schema/item-or-reconciled-column": "kirjoita kohteen nimi tai raahaa yhdistetty sarake",
|
||||
"wikibase-schema/alias": "Alias",
|
||||
"wikibase-schema/override-term": "tallenna olemassaolevan päälle",
|
||||
"wikibase-schema/description-override": "Kuvaus (tallenna olemassaolevan päällä)",
|
||||
"wikibase-schema/description-if-new": "Kuvaus (älä tallenna olemassaolevan päälle)",
|
||||
"wikibase-schema/description": "Kuvaus",
|
||||
"wikibase-schema/label-override": "Nimi (tallenna olemassaolevan päälle)",
|
||||
"wikibase-schema/label-if-new": "Nimi (älä tallenna olemassaolevan päälle)",
|
||||
"wikibase-schema/label": "Nimi",
|
||||
"wikibase-schema/remove-column": "poista sarake",
|
||||
"wikibase-schema/nb-references": " lähdeviitettä",
|
||||
"wikibase-schema/property-placeholder": "ominaisuus",
|
||||
"wikibase-schema/add-reference-snak": "lisää",
|
||||
"wikibase-schema/add-reference": "lisää lähdeviite",
|
||||
"wikibase-schema/reference-copied": "kopioitu",
|
||||
"wikibase-schema/empty-statements": "ei lisättyjä esityksiä",
|
||||
"wikibase-schema/copy-reference": "kopioi",
|
||||
"wikibase-schema/paste-reference": "liitä lähdeviite",
|
||||
"wikibase-schema/add-qualifier": "lisää tarkenne",
|
||||
"wikibase-schema/add-value": "lisää arvo",
|
||||
"wikibase-schema/add-statement": "lisää esitys",
|
||||
"wikibase-schema/remove": "poista",
|
||||
"wikibase-schema/add-term": "lisää termi",
|
||||
"wikibase-schema/add-item-button": "lisää kohde",
|
||||
"wikibase-schema/empty-terms": "ei lisättyjä nimiä, kuvauksia tai aliaksia",
|
||||
"wikibase-schema/terms-header": "Termit",
|
||||
"wikibase-schema/statements-header": "Esitykset",
|
||||
"wikibase-schema/edits-preview-tab-header": "Esikatselu",
|
||||
"wikibase-schema/warnings-tab-header": "Ongelmat",
|
||||
"wikibase-schema/schema-tab-header": "Skeema",
|
||||
"wikibase-schema/preview-explanation": "Tässä välilehdessä näytetään ensimmäiset muokkaukset (yhteensä {nb_edits} muokkauksesta), jotka tehdään, kun lataat muutokset Wikidataan. Fasetteja käyttämällä voit tutkia osajoukkoa muokkauksista.",
|
||||
"wikibase-schema/dialog-explanation": "Alla näkyvä Wikidata-skeema määrittelee, kuinka taulukkosi tiedot muuntuvat Wikidatan muokkauksiksi. Voit raahata ja pudottaa sarakkeiden nimiä lähes kaikkiin syöttöruutuihin. Wikidataan tallennetaan sarakkeen arvo jokaista riviä kohti.",
|
||||
"wikibase-extension/edit-wikibase-schema": "Muokkaa Wikidata-skeemaa",
|
||||
"wikibase-schema/dialog-header": "Sovita Wikidataan",
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-extension/wikibase-schema": "Wikidata-skeema",
|
||||
"wikibase-extension/export-wikibase-schema": "Vie Wikidata-skeema",
|
||||
"wikibase-extension/export-schema": "Vie skeema",
|
||||
"wikibase-extension/wikibase-edits": "Wikidata-muokkaukset…",
|
||||
"wikibase-extension/qs-file": "QuickStatements -tiedosto",
|
||||
"wikibase-extension/export-to-qs": "Vie QuickStatementsiin",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Lataa muokkaukset Wikidataan",
|
||||
"wikibase-extension/manage-wikibase-account": "Hallinnoi Wikidatan käyttäjätiliä",
|
||||
"wikibase-extension/import-wikibase-schema": "Tuo skeema",
|
||||
"wikibase-extension/menu-label": "Wikidata",
|
||||
"warnings-messages/new-item-without-descriptions/title": "Uusia kohteita luotiin ilman kuvauksia.",
|
||||
"warnings-messages/new-item-without-labels-or-aliases/body": "Anna kohteelle vähintään yksi nimi, kuten {example_entity}, jotta muut ymmärtävät, mitä kohde esittää.",
|
||||
"warnings-messages/new-item-without-labels-or-aliases/title": "Uusia kohteita luotiin ilman nimeä tai aliasta.",
|
||||
@ -55,45 +55,45 @@
|
||||
"import-wikibase-schema/schema-label": "Tai JSON-tekstistä:",
|
||||
"import-wikibase-schema/file-label": "JSON-tiedostosta: ",
|
||||
"import-wikibase-schema/dialog-header": "Tuo Wikidata-skeema",
|
||||
"perform-wikidata-edits/analyzing-edits": "Analysoidaan muokkauksiasi…",
|
||||
"perform-wikidata-edits/cancel": "Peru",
|
||||
"perform-wikidata-edits/perform-edits": "Lataa muokkaukset",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "kerro muutama sana muokkauksistasi",
|
||||
"perform-wikidata-edits/edit-summary-label": "Muokkausyhteenveto:",
|
||||
"perform-wikidata-edits/logged-in-as": "Olet kirjautuneena nimellä",
|
||||
"perform-wikidata-edits/dialog-header": "Lataa muokkaukset Wikidataan",
|
||||
"wikidata-account/connecting-to-wikidata": "Yhdistetään Wikidataan…",
|
||||
"wikidata-account/log-out": "Kirjaudu ulos",
|
||||
"wikidata-account/logged-in-as": "Olet kirjautuneena nimellä:",
|
||||
"wikidata-account/log-in": "Kirjaudu",
|
||||
"wikidata-account/close": "Sulje",
|
||||
"wikidata-account/password-remember-me-title": "Salasanaasi ei tallenneta. Älä ruksi tätä jos käytät julkista tietokonetta.",
|
||||
"wikidata-account/remember-me": "Muista minut",
|
||||
"wikidata-account/consumer-token-placeholder": "käyttäjän suojausavain",
|
||||
"wikidata-account/consumer-token-label": "Käyttäjän suojausavain:",
|
||||
"wikidata-account/password-placeholder": "salasana",
|
||||
"wikidata-account/password-label": "Salasana:",
|
||||
"wikidata-account/username-placeholder": "käyttäjänimi",
|
||||
"wikidata-account/username-label": "Käyttäjänimi:",
|
||||
"wikidata-account/invalid-credentials": "Käyttäjätiedot eivät kelpaa",
|
||||
"wikidata-account/explain-password-login": "Voit <a>kirjautua käyttäjätunnuksellasi ja salasanallasi.</a>",
|
||||
"wikidata-account/explain-log-in": "Kun kirjaudut <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidataan</a>, voit ladata muokkaukset suoraan OpenRefinesta.",
|
||||
"wikidata-account/dialog-header": "Wikidata-käyttäjätili",
|
||||
"wikidata-preview/new-id": "uusi kohde",
|
||||
"wikidata-schema/unsaved-warning": "Olet tehnyt tallentamattomia muutoksia Wikidata-skeemaan. Suljetaanko silti?",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "Skeemasi on keskeneräinen, eikä sitä voi vielä tallentaa.",
|
||||
"wikidata-schema/discard-schema-changes-alt": "Hylkää skeemaan tehdyt muutokset.",
|
||||
"wikidata-schema/save-schema-alt": "Tallenna skeema OpenRefineen. Muutoksia ei vielä ladata Wikidataan.",
|
||||
"wikidata-schema/unsaved-changes-alt": "Olet tehnyt tallentamattomia muutoksia Wikidata-skeemaan.",
|
||||
"wikidata-schema/close-button": "Sulje",
|
||||
"wikidata-schema/save-button": "Tallenna skeema",
|
||||
"wikidata-schema/discard-button": "Hylkää muutokset",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "Skeemasi on keskeneräinen, täydentämällä näet esikatselun.",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "Skeemasi on keskeneräinen, täydentämällä saat nähtäväksi ongelmakohdat.",
|
||||
"wikidata-schema/datatype-not-supported-yet": "Tätä tietotyyppiä ei valitettavasti vielä tueta.",
|
||||
"wikidata-schema/geoshape-with-prefix": "tiedoston nimi (sisältäen \"Data:\")",
|
||||
"wikidata-schema/math-expression": "matemaattinen lauseke",
|
||||
"wikidata-schema/commons-media": "tiedoston nimi",
|
||||
"wikidata-schema/tabular-data-with-prefix": "tiedoston nimi (sisältäen \"Data:\")",
|
||||
"wikidata-schema/full-url": "täydellinen URL (sisältäen esim. http:// tai https:// tms.)"
|
||||
"perform-wikibase-edits/analyzing-edits": "Analysoidaan muokkauksiasi…",
|
||||
"perform-wikibase-edits/cancel": "Peru",
|
||||
"perform-wikibase-edits/perform-edits": "Lataa muokkaukset",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "kerro muutama sana muokkauksistasi",
|
||||
"perform-wikibase-edits/edit-summary-label": "Muokkausyhteenveto:",
|
||||
"perform-wikibase-edits/logged-in-as": "Olet kirjautuneena nimellä",
|
||||
"perform-wikibase-edits/dialog-header": "Lataa muokkaukset Wikidataan",
|
||||
"wikibase-account/connecting-to-wikibase": "Yhdistetään Wikidataan…",
|
||||
"wikibase-account/log-out": "Kirjaudu ulos",
|
||||
"wikibase-account/logged-in-as": "Olet kirjautuneena nimellä:",
|
||||
"wikibase-account/log-in": "Kirjaudu",
|
||||
"wikibase-account/close": "Sulje",
|
||||
"wikibase-account/password-remember-me-title": "Salasanaasi ei tallenneta. Älä ruksi tätä jos käytät julkista tietokonetta.",
|
||||
"wikibase-account/remember-me": "Muista minut",
|
||||
"wikibase-account/consumer-token-placeholder": "käyttäjän suojausavain",
|
||||
"wikibase-account/consumer-token-label": "Käyttäjän suojausavain:",
|
||||
"wikibase-account/password-placeholder": "salasana",
|
||||
"wikibase-account/password-label": "Salasana:",
|
||||
"wikibase-account/username-placeholder": "käyttäjänimi",
|
||||
"wikibase-account/username-label": "Käyttäjänimi:",
|
||||
"wikibase-account/invalid-credentials": "Käyttäjätiedot eivät kelpaa",
|
||||
"wikibase-account/explain-password-login": "Voit <a>kirjautua käyttäjätunnuksellasi ja salasanallasi.</a>",
|
||||
"wikibase-account/explain-log-in": "Kun kirjaudut <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidataan</a>, voit ladata muokkaukset suoraan OpenRefinesta.",
|
||||
"wikibase-account/dialog-header": "Wikidata-käyttäjätili",
|
||||
"wikibase-preview/new-id": "uusi kohde",
|
||||
"wikibase-schema/unsaved-warning": "Olet tehnyt tallentamattomia muutoksia Wikidata-skeemaan. Suljetaanko silti?",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "Skeemasi on keskeneräinen, eikä sitä voi vielä tallentaa.",
|
||||
"wikibase-schema/discard-schema-changes-alt": "Hylkää skeemaan tehdyt muutokset.",
|
||||
"wikibase-schema/save-schema-alt": "Tallenna skeema OpenRefineen. Muutoksia ei vielä ladata Wikidataan.",
|
||||
"wikibase-schema/unsaved-changes-alt": "Olet tehnyt tallentamattomia muutoksia Wikidata-skeemaan.",
|
||||
"wikibase-schema/close-button": "Sulje",
|
||||
"wikibase-schema/save-button": "Tallenna skeema",
|
||||
"wikibase-schema/discard-button": "Hylkää muutokset",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "Skeemasi on keskeneräinen, täydentämällä näet esikatselun.",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "Skeemasi on keskeneräinen, täydentämällä saat nähtäväksi ongelmakohdat.",
|
||||
"wikibase-schema/datatype-not-supported-yet": "Tätä tietotyyppiä ei valitettavasti vielä tueta.",
|
||||
"wikibase-schema/geoshape-with-prefix": "tiedoston nimi (sisältäen \"Data:\")",
|
||||
"wikibase-schema/math-expression": "matemaattinen lauseke",
|
||||
"wikibase-schema/commons-media": "tiedoston nimi",
|
||||
"wikibase-schema/tabular-data-with-prefix": "tiedoston nimi (sisältäen \"Data:\")",
|
||||
"wikibase-schema/full-url": "täydellinen URL (sisältäen esim. http:// tai https:// tms.)"
|
||||
}
|
||||
|
@ -1,78 +1,78 @@
|
||||
{
|
||||
"wikidata-extension/menu-label": "Wikidata",
|
||||
"wikidata-extension/edit-wikidata-schema": "Modifier le schéma Wikidata",
|
||||
"wikidata-extension/manage-wikidata-account": "Gérer le compte Wikidata",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Publier les modifications sur Wikidata",
|
||||
"wikidata-extension/export-to-qs": "Exporter vers QuickStatements",
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-schema/dialog-header": "Aligner à Wikidata",
|
||||
"wikidata-schema/dialog-explanation": "Le schéma Wikidata ci-dessous spécifie comment vos données sont transformées en modifications sur Wikidata. Vous pouvez glisser-déposer les noms des colonnes ci-dessous dans la plupart des champs: pour chaque ligne, des modifications seront générées avec les valeurs dans ces colonnes.",
|
||||
"wikidata-schema/preview-explanation": "Cet onglet affiche les premières modifications (sur {nb_edits} modifications au total) qui seront effectuées quand vous publierez les données sur Wikidata. Vous pouvez utiliser les facettes pour inspecter les changements sur des éléments particuliers.",
|
||||
"wikidata-schema/schema-tab-header": "Schéma",
|
||||
"wikidata-schema/warnings-tab-header": "Problèmes",
|
||||
"wikidata-schema/edits-preview-tab-header": "Prévisualisation",
|
||||
"wikidata-schema/statements-header": "Déclarations",
|
||||
"wikidata-schema/terms-header": "Termes",
|
||||
"wikidata-schema/empty-terms": "pas de libellés, descriptions ou alias ajoutés",
|
||||
"wikidata-schema/add-item-button": "ajouter un élément",
|
||||
"wikidata-schema/add-term": "ajouter un terme",
|
||||
"wikidata-schema/remove": "supprimer",
|
||||
"wikidata-schema/add-statement": "ajouter une déclaration",
|
||||
"wikidata-schema/add-value": "ajouter une valeur",
|
||||
"wikidata-schema/add-qualifier": "ajouter un qualificatif",
|
||||
"wikidata-schema/copy-reference": "copier",
|
||||
"wikidata-schema/paste-reference": "coller une référence",
|
||||
"wikidata-schema/reference-copied": "copiée",
|
||||
"wikidata-schema/add-reference": "ajouter une référence",
|
||||
"wikidata-schema/add-reference-snak": "ajouter",
|
||||
"wikidata-schema/property-placeholder": "propriété",
|
||||
"wikidata-schema/nb-references": " références",
|
||||
"wikidata-schema/remove-column": "supprimer la colonne",
|
||||
"wikidata-schema/label-if-new": "Libellé (sans écraser)",
|
||||
"wikidata-schema/label-override": "Libellé (écrase si déjà présent)",
|
||||
"wikidata-schema/description": "Description",
|
||||
"wikidata-schema/description-if-new": "Description (sans écraser)",
|
||||
"wikidata-schema/description-override": "Description (écrase si déjà présent)",
|
||||
"wikidata-schema/override-term": "Écrase si déjà présent",
|
||||
"wikidata-schema/alias": "Alias",
|
||||
"wikidata-schema/item-or-reconciled-column": "entrer un élément ou déposer une colonne réconciliée ici",
|
||||
"wikidata-schema/amount": "quantité",
|
||||
"wikidata-schema/unit": "unité",
|
||||
"wikidata-schema/full-url": "URL complète avec protocole",
|
||||
"wikidata-schema/tabular-data-with-prefix": "nom de fichier débutant par \"Data:\"",
|
||||
"wikidata-schema/commons-media": "nom de fichier",
|
||||
"wikidata-schema/math-expression": "expression mathématique",
|
||||
"wikidata-schema/geoshape-with-prefix": "nom de fichier commençant par \"Data:\"",
|
||||
"wikidata-schema/datatype-not-supported-yet": "Ce type de données n'est pas encore supporté, désolé.",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "Votre schéma est incomplet, complétez-le pour voir les problèmes.",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "Votre schéma est incomplet, complétez-le pour la prévisualisation.",
|
||||
"wikidata-schema/discard-button": "Annuler les modifications",
|
||||
"wikidata-schema/save-button": "Enregistrer le schéma",
|
||||
"wikidata-schema/close-button": "Fermer",
|
||||
"wikidata-schema/unsaved-changes-alt": "Des changements sur le schéma Wikidata n'ont pas été enregistrés.",
|
||||
"wikidata-schema/save-schema-alt": "Sauvegarder le schéma dans OpenRefine. Cela n'enverra pas de données sur Wikidata.",
|
||||
"wikidata-schema/discard-schema-changes-alt": "Abandonner les modifications sur le schéma.",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "Votre schéma est incomplet, il ne peut donc pas encore être enregistré.",
|
||||
"wikidata-schema/unsaved-warning": "Les changements sur le schéma Wikidata n'ont pas été sauvegardés. Souhaitez-vous tout de même fermer ?",
|
||||
"wikidata-schema/empty-statements": "aucune déclaration ajoutée",
|
||||
"wikidata-preview/new-id": "nouvel élément",
|
||||
"wikidata-account/dialog-header": "compte Wikidata",
|
||||
"wikidata-account/explain-log-in": "Se connecter à <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> vous permet de publier vos données sur Wikidata depuis OpenRefine.",
|
||||
"wikidata-account/username-label": "Nom d'utilisateur :",
|
||||
"wikidata-account/password-label": "Mot de passe :",
|
||||
"wikidata-account/close": "Fermer",
|
||||
"wikidata-account/log-in": "Se connecter",
|
||||
"wikidata-account/logged-in-as": "Vous êtes connecté·e en tant que :",
|
||||
"wikidata-account/log-out": "Se déconnecter",
|
||||
"wikidata-account/connecting-to-wikidata": "Connexion à Wikidata…",
|
||||
"perform-wikidata-edits/dialog-header": "Envoyer les modifications sur Wikidata",
|
||||
"perform-wikidata-edits/review-your-edits": "Vous êtes sur le point d'envoyer {nb_edits} modifications à Wikidata. Veuillez les vérifier avec soin. Les modifications à grande échelle devraient être <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">approuvées par la communauté</a>.",
|
||||
"perform-wikidata-edits/logged-in-as": "Vous êtes connecté·e en tant que",
|
||||
"perform-wikidata-edits/edit-summary-label": "Résumé de modification :",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "décrivez vos modifications en quelques mots",
|
||||
"perform-wikidata-edits/perform-edits": "Envoyer les modifications",
|
||||
"perform-wikidata-edits/cancel": "Annuler",
|
||||
"perform-wikidata-edits/analyzing-edits": "Analyse de vos modifications…",
|
||||
"wikibase-extension/menu-label": "Wikidata",
|
||||
"wikibase-extension/edit-wikibase-schema": "Modifier le schéma Wikidata",
|
||||
"wikibase-extension/manage-wikibase-account": "Gérer le compte Wikidata",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Publier les modifications sur Wikidata",
|
||||
"wikibase-extension/export-to-qs": "Exporter vers QuickStatements",
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-schema/dialog-header": "Aligner à Wikidata",
|
||||
"wikibase-schema/dialog-explanation": "Le schéma Wikidata ci-dessous spécifie comment vos données sont transformées en modifications sur Wikidata. Vous pouvez glisser-déposer les noms des colonnes ci-dessous dans la plupart des champs: pour chaque ligne, des modifications seront générées avec les valeurs dans ces colonnes.",
|
||||
"wikibase-schema/preview-explanation": "Cet onglet affiche les premières modifications (sur {nb_edits} modifications au total) qui seront effectuées quand vous publierez les données sur Wikidata. Vous pouvez utiliser les facettes pour inspecter les changements sur des éléments particuliers.",
|
||||
"wikibase-schema/schema-tab-header": "Schéma",
|
||||
"wikibase-schema/warnings-tab-header": "Problèmes",
|
||||
"wikibase-schema/edits-preview-tab-header": "Prévisualisation",
|
||||
"wikibase-schema/statements-header": "Déclarations",
|
||||
"wikibase-schema/terms-header": "Termes",
|
||||
"wikibase-schema/empty-terms": "pas de libellés, descriptions ou alias ajoutés",
|
||||
"wikibase-schema/add-item-button": "ajouter un élément",
|
||||
"wikibase-schema/add-term": "ajouter un terme",
|
||||
"wikibase-schema/remove": "supprimer",
|
||||
"wikibase-schema/add-statement": "ajouter une déclaration",
|
||||
"wikibase-schema/add-value": "ajouter une valeur",
|
||||
"wikibase-schema/add-qualifier": "ajouter un qualificatif",
|
||||
"wikibase-schema/copy-reference": "copier",
|
||||
"wikibase-schema/paste-reference": "coller une référence",
|
||||
"wikibase-schema/reference-copied": "copiée",
|
||||
"wikibase-schema/add-reference": "ajouter une référence",
|
||||
"wikibase-schema/add-reference-snak": "ajouter",
|
||||
"wikibase-schema/property-placeholder": "propriété",
|
||||
"wikibase-schema/nb-references": " références",
|
||||
"wikibase-schema/remove-column": "supprimer la colonne",
|
||||
"wikibase-schema/label-if-new": "Libellé (sans écraser)",
|
||||
"wikibase-schema/label-override": "Libellé (écrase si déjà présent)",
|
||||
"wikibase-schema/description": "Description",
|
||||
"wikibase-schema/description-if-new": "Description (sans écraser)",
|
||||
"wikibase-schema/description-override": "Description (écrase si déjà présent)",
|
||||
"wikibase-schema/override-term": "Écrase si déjà présent",
|
||||
"wikibase-schema/alias": "Alias",
|
||||
"wikibase-schema/item-or-reconciled-column": "entrer un élément ou déposer une colonne réconciliée ici",
|
||||
"wikibase-schema/amount": "quantité",
|
||||
"wikibase-schema/unit": "unité",
|
||||
"wikibase-schema/full-url": "URL complète avec protocole",
|
||||
"wikibase-schema/tabular-data-with-prefix": "nom de fichier débutant par \"Data:\"",
|
||||
"wikibase-schema/commons-media": "nom de fichier",
|
||||
"wikibase-schema/math-expression": "expression mathématique",
|
||||
"wikibase-schema/geoshape-with-prefix": "nom de fichier commençant par \"Data:\"",
|
||||
"wikibase-schema/datatype-not-supported-yet": "Ce type de données n'est pas encore supporté, désolé.",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "Votre schéma est incomplet, complétez-le pour voir les problèmes.",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "Votre schéma est incomplet, complétez-le pour la prévisualisation.",
|
||||
"wikibase-schema/discard-button": "Annuler les modifications",
|
||||
"wikibase-schema/save-button": "Enregistrer le schéma",
|
||||
"wikibase-schema/close-button": "Fermer",
|
||||
"wikibase-schema/unsaved-changes-alt": "Des changements sur le schéma Wikidata n'ont pas été enregistrés.",
|
||||
"wikibase-schema/save-schema-alt": "Sauvegarder le schéma dans OpenRefine. Cela n'enverra pas de données sur Wikidata.",
|
||||
"wikibase-schema/discard-schema-changes-alt": "Abandonner les modifications sur le schéma.",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "Votre schéma est incomplet, il ne peut donc pas encore être enregistré.",
|
||||
"wikibase-schema/unsaved-warning": "Les changements sur le schéma Wikidata n'ont pas été sauvegardés. Souhaitez-vous tout de même fermer ?",
|
||||
"wikibase-schema/empty-statements": "aucune déclaration ajoutée",
|
||||
"wikibase-preview/new-id": "nouvel élément",
|
||||
"wikibase-account/dialog-header": "compte Wikidata",
|
||||
"wikibase-account/explain-log-in": "Se connecter à <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> vous permet de publier vos données sur Wikidata depuis OpenRefine.",
|
||||
"wikibase-account/username-label": "Nom d'utilisateur :",
|
||||
"wikibase-account/password-label": "Mot de passe :",
|
||||
"wikibase-account/close": "Fermer",
|
||||
"wikibase-account/log-in": "Se connecter",
|
||||
"wikibase-account/logged-in-as": "Vous êtes connecté·e en tant que :",
|
||||
"wikibase-account/log-out": "Se déconnecter",
|
||||
"wikibase-account/connecting-to-wikibase": "Connexion à Wikidata…",
|
||||
"perform-wikibase-edits/dialog-header": "Envoyer les modifications sur Wikidata",
|
||||
"perform-wikibase-edits/review-your-edits": "Vous êtes sur le point d'envoyer {nb_edits} modifications à Wikidata. Veuillez les vérifier avec soin. Les modifications à grande échelle devraient être <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">approuvées par la communauté</a>.",
|
||||
"perform-wikibase-edits/logged-in-as": "Vous êtes connecté·e en tant que",
|
||||
"perform-wikibase-edits/edit-summary-label": "Résumé de modification :",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "décrivez vos modifications en quelques mots",
|
||||
"perform-wikibase-edits/perform-edits": "Envoyer les modifications",
|
||||
"perform-wikibase-edits/cancel": "Annuler",
|
||||
"perform-wikibase-edits/analyzing-edits": "Analyse de vos modifications…",
|
||||
"warnings-messages/new-item-created/title": "Ce groupe de modifications va créer de nouveaux éléments Wikidata.",
|
||||
"warnings-messages/new-item-created/body": "Assurez-vous que ces éléments n'existent pas déjà et qu'ils sont <a href=\"https://www.wikidata.org/wiki/Wikidata:Notability\" target=\"_blank\">acceptables pour être inclus dans Wikidata</a>.",
|
||||
"warnings-messages/new-item-without-labels-or-aliases/title": "Nouveaux éléments créés sans libellé ou alias.",
|
||||
@ -81,8 +81,8 @@
|
||||
"warnings-messages/new-item-without-descriptions/body": "Ajouter des descriptinos sur les nouveaux éléments tels que {example_entity} aidera à les distinguer d'homonymes.",
|
||||
"warnings-messages/new-item-with-deleted-statements/title": "Suppression de déclarations sur des nouveaux éléments.",
|
||||
"warnings-messages/new-item-with-deleted-statements/body": "Cela vient probablement d'une erreur dans votre schéma ou projet.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/title": "Nouveaux éléments créés sans aucune classe.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/body": "Il est préférable d'ajouter une déclaration \"nature de l'élément\" (P31) ou \"sous-classe de\" (P279) pour chaque nouvel élément que vous créez, comme {example_entity} par exemple.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/title": "Nouveaux éléments créés sans aucune classe.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/body": "Il est préférable d'ajouter une déclaration \"nature de l'élément\" (P31) ou \"sous-classe de\" (P279) pour chaque nouvel élément que vous créez, comme {example_entity} par exemple.",
|
||||
"warnings-messages/add-statements-with-invalid-format/title": "Déclarations {property_entity} avec un format invalide.",
|
||||
"warnings-messages/add-statements-with-invalid-format/body": "Les valeurs pour cette propriété devraient correspondre à l'expression régulière <span class=\"wb-issue-preformat\">{regex}</span>, ce qui n'est pas le cas de <span class=\"wb-issue-preformat\">{example_value}</span> ajouté sur {example_item_entity}.",
|
||||
"warnings-messages/remove-statements-with-invalid-format/title": "Déclarations avec un format invalide supprimées.",
|
||||
@ -143,21 +143,21 @@
|
||||
"warnings-messages/no-unit-provided/body": "Des valeurs telles que <span class=\"wb-issue-preformat\">{example_value}</span> sur {example_item_entity} devraient avoir des unités.",
|
||||
"warnings-messages/invalid-entity-type/title": "{property_entity} utilisée sur des éléments",
|
||||
"warnings-messages/invalid-entity-type/body": "Les utilisations de {property_entity} sur des éléments tels que {example_entity} sont invalides.",
|
||||
"wikidata-extension/import-wikidata-schema": "Importer un schéma",
|
||||
"wikidata-extension/export-schema": "Exporter le schéma",
|
||||
"wikidata-extension/export-wikidata-schema": "Exporter le schéma Wikidata",
|
||||
"wikibase-extension/import-wikibase-schema": "Importer un schéma",
|
||||
"wikibase-extension/export-schema": "Exporter le schéma",
|
||||
"wikibase-extension/export-wikibase-schema": "Exporter le schéma Wikidata",
|
||||
"import-wikibase-schema/dialog-header": "Importer un schéma Wikidata",
|
||||
"import-wikibase-schema/file-label": "A partir du fichier JSON : ",
|
||||
"import-wikibase-schema/schema-label": "Ou à partir d'un texte JSON :",
|
||||
"import-wikibase-schema/invalid-schema": "Schéma Wikibase non valide.",
|
||||
"import-wikibase-schema/import": "Importer",
|
||||
"wikidata-extension/qs-file": "Fichier QuickStatements",
|
||||
"wikibase-extension/qs-file": "Fichier QuickStatements",
|
||||
"warnings-messages/item-description-identical-with-label/title": "Description et libellé sont identiques",
|
||||
"warnings-messages/item-description-too-long/body": "La description ({lang}) <span class=\"wb-issue-preformat\">{description></span> sur {example_entity} est trop longue. Sa longueur est {length} caractères, la limite étant {max_length}. Les descriptions ne sont pas des phrases entières, mais plutôt des paraphrases succintes de deux à douze mots. Consultez le <a href=\"https://www.wikidata.org/wiki/Help:Description#Length\" target=\"_blank\">manuel</a> pour plus d'informations.",
|
||||
"warnings-messages/item-description-too-long/title": "Description trop longue",
|
||||
"warnings-messages/early-gregorian-date/body": "Les dates plus anciennes qu'Octobre 1582 (telles qu'en l'an {example_year}) ne sont probablement pas exprimées en calendrier Grégorien. Consultez le <a href=\"https://www.wikidata.org/wiki/Wikidata:Tools/OpenRefine/Editing/Schema_alignment#Dates\" target=\"_blank\">manuel</a> pour spécifier le calendrier approprié pour vos dates.",
|
||||
"warnings-messages/early-gregorian-date/title": "Dates anciennes en calendrier Grégorien",
|
||||
"wikidata-schema/label": "Libellé",
|
||||
"wikidata-extension/wikidata-schema": "Schéma Wikidata",
|
||||
"wikidata-extension/wikidata-edits": "Contributions Wikidata…"
|
||||
"wikibase-schema/label": "Libellé",
|
||||
"wikibase-extension/wikibase-schema": "Schéma Wikidata",
|
||||
"wikibase-extension/wikibase-edits": "Contributions Wikidata…"
|
||||
}
|
||||
|
@ -1,74 +1,74 @@
|
||||
{
|
||||
"wikidata-extension/edit-wikidata-schema": "Modifica lo schema per Wikidata",
|
||||
"wikidata-extension/manage-wikidata-account": "Gestisci il tuo account su Wikidata",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Carica le tue modifiche su Wikidata",
|
||||
"wikidata-extension/export-to-qs": "Esporta verso QuickStatements",
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-extension/menu-label": "Wikidata",
|
||||
"wikidata-schema/dialog-explanation": "Lo schema per Wikidata ti permette di trasformare i dati nella tua tabella in modifiche pronte per Wikidata. Puoi trascinare i nomi delle colonne nei box di testo appropriati: in questo modo, per ogni riga verranno generate delle modifiche su Wikidata con i valori presenti.",
|
||||
"wikidata-schema/preview-explanation": "Questa pagina mostra solo i primi risultati (su {nb_edits}) delle modifiche che verranno effettuate su Wikidata. Puoi usare le faccette per controllare le singole modifiche sugli elementi.",
|
||||
"wikidata-schema/schema-tab-header": "Schema",
|
||||
"wikidata-schema/warnings-tab-header": "Problemi",
|
||||
"wikidata-schema/edits-preview-tab-header": "Anteprima",
|
||||
"wikidata-schema/statements-header": "Dichiarazioni",
|
||||
"wikidata-schema/terms-header": "Termini",
|
||||
"wikidata-schema/empty-statements": "Nessuna dichiarazione generata",
|
||||
"wikidata-schema/empty-terms": "Nessuna etichetta, descrizione o alias aggiunto",
|
||||
"wikidata-schema/add-item-button": "aggiungi elemento",
|
||||
"wikidata-schema/add-term": "aggiungi termine",
|
||||
"wikidata-schema/remove": "rimuovi",
|
||||
"wikidata-schema/add-statement": "aggiungi dichiarazione",
|
||||
"wikidata-schema/add-value": "aggiungi valore",
|
||||
"wikidata-schema/add-qualifier": "aggiungi qualificatore",
|
||||
"wikidata-schema/add-reference": "aggiungi fonte",
|
||||
"wikidata-schema/add-reference-snak": "aggiungi",
|
||||
"wikidata-schema/property-placeholder": "proprietà",
|
||||
"wikidata-schema/nb-references": " note",
|
||||
"wikidata-schema/remove-column": "rimuovi colonna",
|
||||
"wikidata-schema/label": "Etichetta",
|
||||
"wikidata-schema/description": "Descrizione",
|
||||
"wikidata-schema/alias": "Alias",
|
||||
"wikidata-schema/item-or-reconciled-column": "digita l'elemento o trascina una colonna riconciliata",
|
||||
"wikidata-schema/amount": "quantità",
|
||||
"wikidata-schema/unit": "unità",
|
||||
"wikidata-schema/full-url": "URL completo (compreso http:// o https://)",
|
||||
"wikidata-schema/tabular-data-with-prefix": "nome del file (compreso \"Data:\")",
|
||||
"wikidata-schema/commons-media": "nome del file",
|
||||
"wikidata-schema/math-expression": "espressione matematica",
|
||||
"wikidata-schema/geoshape-with-prefix": "nome del file (compreso \"Data:\")",
|
||||
"wikidata-schema/datatype-not-supported-yet": "Ci dispiace, questo tipo di dato non è ancora supportato.",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "Il tuo schema è incompleto, per favore correggilo per vedere gli errori.",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "Il tuo schema è incompleto, per favore correggilo per vedere l'anteprima.",
|
||||
"wikidata-schema/discard-button": "Non salvare le modifiche",
|
||||
"wikidata-schema/save-button": "Salva lo schema",
|
||||
"wikidata-schema/close-button": "Chiudi",
|
||||
"wikidata-schema/unsaved-changes-alt": "Non hai salvato alcune modifiche al tuo schema Wikidata.",
|
||||
"wikidata-schema/save-schema-alt": "Salva lo schema. Non verrà ancora effettuata alcuna modifica su Wikidata.",
|
||||
"wikidata-schema/dialog-header": "Confronta con Wikidata",
|
||||
"wikidata-schema/discard-schema-changes-alt": "Annulla le modifiche che hai apportato allo schema.",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "Il tuo schema è incompleto e non può essere ancora salvato.",
|
||||
"wikidata-schema/unsaved-warning": "Non hai ancora salvato le tue modifiche al tuo schema. Vuoi chiudere lo stesso?",
|
||||
"wikidata-preview/new-id": "nuovo elemento",
|
||||
"wikidata-account/dialog-header": "account su Wikidata",
|
||||
"wikidata-account/explain-log-in": "Accedere a <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> ti permette di caricare i tuoi edit direttamente tramite OpenRefine.",
|
||||
"wikidata-account/username-label": "Nome utente:",
|
||||
"wikidata-account/password-label": "Password:",
|
||||
"wikidata-account/close": "Chiudi",
|
||||
"wikidata-account/log-in": "Entra",
|
||||
"wikidata-account/logged-in-as": "Sei registrato come:",
|
||||
"wikidata-account/log-out": "Scollegati",
|
||||
"wikidata-account/connecting-to-wikidata": "Connessione a Wikidata in corso…",
|
||||
"perform-wikidata-edits/dialog-header": "Carica le tue modifiche su Wikidata",
|
||||
"perform-wikidata-edits/review-your-edits": "Stai per caricare {nb_edits} modifiche su Wikidata. Per favore, controllale per bene. Ricorda che grossi caricamenti di dati devono <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">essere validati</a> prima del caricamento.",
|
||||
"perform-wikidata-edits/logged-in-as": "Sei registrato come",
|
||||
"perform-wikidata-edits/edit-summary-label": "Oggetto delle modifiche:",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "qualche parola per descrivere le tue modifiche",
|
||||
"wikidata-extension/import-wikidata-schema": "Importa schema",
|
||||
"wikidata-extension/export-schema": "Esporta schema",
|
||||
"wikidata-extension/export-wikidata-schema": "Esporta schema Wikidata",
|
||||
"perform-wikidata-edits/perform-edits": "Carica modifiche",
|
||||
"perform-wikidata-edits/cancel": "Annulla",
|
||||
"perform-wikidata-edits/analyzing-edits": "Analisi delle modifiche apportate…",
|
||||
"wikibase-extension/edit-wikibase-schema": "Modifica lo schema per Wikidata",
|
||||
"wikibase-extension/manage-wikibase-account": "Gestisci il tuo account su Wikidata",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Carica le tue modifiche su Wikidata",
|
||||
"wikibase-extension/export-to-qs": "Esporta verso QuickStatements",
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-extension/menu-label": "Wikidata",
|
||||
"wikibase-schema/dialog-explanation": "Lo schema per Wikidata ti permette di trasformare i dati nella tua tabella in modifiche pronte per Wikidata. Puoi trascinare i nomi delle colonne nei box di testo appropriati: in questo modo, per ogni riga verranno generate delle modifiche su Wikidata con i valori presenti.",
|
||||
"wikibase-schema/preview-explanation": "Questa pagina mostra solo i primi risultati (su {nb_edits}) delle modifiche che verranno effettuate su Wikidata. Puoi usare le faccette per controllare le singole modifiche sugli elementi.",
|
||||
"wikibase-schema/schema-tab-header": "Schema",
|
||||
"wikibase-schema/warnings-tab-header": "Problemi",
|
||||
"wikibase-schema/edits-preview-tab-header": "Anteprima",
|
||||
"wikibase-schema/statements-header": "Dichiarazioni",
|
||||
"wikibase-schema/terms-header": "Termini",
|
||||
"wikibase-schema/empty-statements": "Nessuna dichiarazione generata",
|
||||
"wikibase-schema/empty-terms": "Nessuna etichetta, descrizione o alias aggiunto",
|
||||
"wikibase-schema/add-item-button": "aggiungi elemento",
|
||||
"wikibase-schema/add-term": "aggiungi termine",
|
||||
"wikibase-schema/remove": "rimuovi",
|
||||
"wikibase-schema/add-statement": "aggiungi dichiarazione",
|
||||
"wikibase-schema/add-value": "aggiungi valore",
|
||||
"wikibase-schema/add-qualifier": "aggiungi qualificatore",
|
||||
"wikibase-schema/add-reference": "aggiungi fonte",
|
||||
"wikibase-schema/add-reference-snak": "aggiungi",
|
||||
"wikibase-schema/property-placeholder": "proprietà",
|
||||
"wikibase-schema/nb-references": " note",
|
||||
"wikibase-schema/remove-column": "rimuovi colonna",
|
||||
"wikibase-schema/label": "Etichetta",
|
||||
"wikibase-schema/description": "Descrizione",
|
||||
"wikibase-schema/alias": "Alias",
|
||||
"wikibase-schema/item-or-reconciled-column": "digita l'elemento o trascina una colonna riconciliata",
|
||||
"wikibase-schema/amount": "quantità",
|
||||
"wikibase-schema/unit": "unità",
|
||||
"wikibase-schema/full-url": "URL completo (compreso http:// o https://)",
|
||||
"wikibase-schema/tabular-data-with-prefix": "nome del file (compreso \"Data:\")",
|
||||
"wikibase-schema/commons-media": "nome del file",
|
||||
"wikibase-schema/math-expression": "espressione matematica",
|
||||
"wikibase-schema/geoshape-with-prefix": "nome del file (compreso \"Data:\")",
|
||||
"wikibase-schema/datatype-not-supported-yet": "Ci dispiace, questo tipo di dato non è ancora supportato.",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "Il tuo schema è incompleto, per favore correggilo per vedere gli errori.",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "Il tuo schema è incompleto, per favore correggilo per vedere l'anteprima.",
|
||||
"wikibase-schema/discard-button": "Non salvare le modifiche",
|
||||
"wikibase-schema/save-button": "Salva lo schema",
|
||||
"wikibase-schema/close-button": "Chiudi",
|
||||
"wikibase-schema/unsaved-changes-alt": "Non hai salvato alcune modifiche al tuo schema Wikidata.",
|
||||
"wikibase-schema/save-schema-alt": "Salva lo schema. Non verrà ancora effettuata alcuna modifica su Wikidata.",
|
||||
"wikibase-schema/dialog-header": "Confronta con Wikidata",
|
||||
"wikibase-schema/discard-schema-changes-alt": "Annulla le modifiche che hai apportato allo schema.",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "Il tuo schema è incompleto e non può essere ancora salvato.",
|
||||
"wikibase-schema/unsaved-warning": "Non hai ancora salvato le tue modifiche al tuo schema. Vuoi chiudere lo stesso?",
|
||||
"wikibase-preview/new-id": "nuovo elemento",
|
||||
"wikibase-account/dialog-header": "account su Wikidata",
|
||||
"wikibase-account/explain-log-in": "Accedere a <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> ti permette di caricare i tuoi edit direttamente tramite OpenRefine.",
|
||||
"wikibase-account/username-label": "Nome utente:",
|
||||
"wikibase-account/password-label": "Password:",
|
||||
"wikibase-account/close": "Chiudi",
|
||||
"wikibase-account/log-in": "Entra",
|
||||
"wikibase-account/logged-in-as": "Sei registrato come:",
|
||||
"wikibase-account/log-out": "Scollegati",
|
||||
"wikibase-account/connecting-to-wikibase": "Connessione a Wikidata in corso…",
|
||||
"perform-wikibase-edits/dialog-header": "Carica le tue modifiche su Wikidata",
|
||||
"perform-wikibase-edits/review-your-edits": "Stai per caricare {nb_edits} modifiche su Wikidata. Per favore, controllale per bene. Ricorda che grossi caricamenti di dati devono <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">essere validati</a> prima del caricamento.",
|
||||
"perform-wikibase-edits/logged-in-as": "Sei registrato come",
|
||||
"perform-wikibase-edits/edit-summary-label": "Oggetto delle modifiche:",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "qualche parola per descrivere le tue modifiche",
|
||||
"wikibase-extension/import-wikibase-schema": "Importa schema",
|
||||
"wikibase-extension/export-schema": "Esporta schema",
|
||||
"wikibase-extension/export-wikibase-schema": "Esporta schema Wikidata",
|
||||
"perform-wikibase-edits/perform-edits": "Carica modifiche",
|
||||
"perform-wikibase-edits/cancel": "Annulla",
|
||||
"perform-wikibase-edits/analyzing-edits": "Analisi delle modifiche apportate…",
|
||||
"import-wikibase-schema/dialog-header": "Importa schema di Wikidata",
|
||||
"import-wikibase-schema/file-label": "Da file JSON: ",
|
||||
"import-wikibase-schema/schema-label": "O da testo JSON:",
|
||||
@ -82,8 +82,8 @@
|
||||
"warnings-messages/new-item-without-descriptions/body": "Per favore, aggiungi una descrizione ai nuovi elementi (per esempio {example_entity}), in modo tale che gli altri possano capire a cosa questo faccia riferimento.",
|
||||
"warnings-messages/new-item-with-deleted-statements/title": "Sto cancellando dichiarazioni sui nuovi elementi.",
|
||||
"warnings-messages/new-item-with-deleted-statements/body": "C'è un problema con il tuo schema o con il tuo progetto.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/title": "Nuovi elementi creati senza alcuna dichiarazione.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/body": "Per favore, aggiungi una dichiarazione del tipo \"istanza di\" (P31) o \"sottoclasse di\" (P279) per ogni elemento che crei, come per esempio {example_entity}.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/title": "Nuovi elementi creati senza alcuna dichiarazione.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/body": "Per favore, aggiungi una dichiarazione del tipo \"istanza di\" (P31) o \"sottoclasse di\" (P279) per ogni elemento che crei, come per esempio {example_entity}.",
|
||||
"warnings-messages/add-statements-with-invalid-format/title": "Dichiarazioni {property_entity} con formato invalido.",
|
||||
"warnings-messages/add-statements-with-invalid-format/body": "I valori di questa proprietà dovrebbero rispettare l'espressione regolare <span class=\"wb-issue-preformat\">{regex}</span>, mentre <span class=\"wb-issue-preformat\">{example_value}</span> aggiunto a {example_item_entity} non lo rispetta.",
|
||||
"warnings-messages/remove-statements-with-invalid-format/title": "Rimosse dichiarazioni con formato invalido.",
|
||||
@ -144,14 +144,14 @@
|
||||
"warnings-messages/no-unit-provided/body": "Valori come <span class=\"wb-issue-preformat\">{example_value}</span> (aggiunto in {example_item_entity}) dovrebbero avere un'unità di misura corrispondente.",
|
||||
"warnings-messages/invalid-entity-type/title": "{property_entity} usata negli elementi",
|
||||
"warnings-messages/invalid-entity-type/body": "L'uso di {property_entity} in elementi come {example_entity} non è valido.",
|
||||
"wikidata-schema/copy-reference": "copia",
|
||||
"wikidata-schema/paste-reference": "incolla fonte",
|
||||
"wikidata-schema/reference-copied": "copiato",
|
||||
"wikidata-schema/label-if-new": "Etichetta (non sovrascrivere)",
|
||||
"wikidata-schema/label-override": "Etichetta (sovrascrivi, se esistente)",
|
||||
"wikidata-schema/description-if-new": "Descrizione (non sovrascrivere)",
|
||||
"wikidata-schema/description-override": "Descrizione (sovrascrivi, se esistente)",
|
||||
"wikidata-schema/override-term": "sovrascrivi, se esistente",
|
||||
"wikibase-schema/copy-reference": "copia",
|
||||
"wikibase-schema/paste-reference": "incolla fonte",
|
||||
"wikibase-schema/reference-copied": "copiato",
|
||||
"wikibase-schema/label-if-new": "Etichetta (non sovrascrivere)",
|
||||
"wikibase-schema/label-override": "Etichetta (sovrascrivi, se esistente)",
|
||||
"wikibase-schema/description-if-new": "Descrizione (non sovrascrivere)",
|
||||
"wikibase-schema/description-override": "Descrizione (sovrascrivi, se esistente)",
|
||||
"wikibase-schema/override-term": "sovrascrivi, se esistente",
|
||||
"warnings-messages/early-gregorian-date/title": "Date antiche in calendario gregoriano",
|
||||
"warnings-messages/early-gregorian-date/body": "È improbabile che le date precedenti all'ottobre 1582 (ad esempio, {example_year}) siano espresse utilizzando il calendario gregoriano. Per specificare il calendario appropriato per le date, consulta il <a href=\"https://www.wikidata.org/wiki/Wikidata:Tools/OpenRefine/Editing/Schema_alignment#Dates\" target=\"_blank\">manual</a>."
|
||||
}
|
||||
|
@ -1,75 +1,75 @@
|
||||
{
|
||||
"wikidata-extension/menu-label": "Wikidata",
|
||||
"wikidata-extension/edit-wikidata-schema": "Wikidataスキーマを編集",
|
||||
"wikidata-extension/manage-wikidata-account": "Wikidataアカウントの管理",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Wikidata編集をアップロード",
|
||||
"wikidata-extension/wikidata-edits": "Wikidata編集…",
|
||||
"wikidata-extension/export-to-qs": "クイックステートメントへ出力",
|
||||
"wikidata-extension/qs-file": "クイックステートメント・ファイル",
|
||||
"wikidata-extension/quickstatements-export-name": "クイックステートメント",
|
||||
"wikidata-extension/import-wikidata-schema": "スキーマのインポート",
|
||||
"wikidata-extension/export-schema": "スキーマのエクスポート",
|
||||
"wikidata-schema/dialog-header": "Wikidataにアライン",
|
||||
"wikidata-schema/dialog-explanation": "以下のスキーマは、あなたの表データをどのようにWikidataの編集項目に変換するかを指定します。カラム名を入力boxにドラッグできます。各行が一つづつ項目に変換されます。",
|
||||
"wikidata-schema/preview-explanation": "このタブは、アップロードされる({nb_edits}のうち)最初の編集項目を表示します。ファセットを使って点検できます。",
|
||||
"wikidata-schema/schema-tab-header": "スキーマ",
|
||||
"wikidata-schema/warnings-tab-header": "項目",
|
||||
"wikidata-schema/edits-preview-tab-header": "プレビュー",
|
||||
"wikidata-schema/statements-header": "ステートメント",
|
||||
"wikidata-schema/terms-header": "用語(Term)",
|
||||
"wikidata-schema/empty-statements": "ステートメントがありません",
|
||||
"wikidata-schema/empty-terms": "ラベルもdescriptions も別名もありません",
|
||||
"wikidata-schema/add-item-button": "項目追加",
|
||||
"wikidata-schema/add-term": "Termの追加",
|
||||
"wikidata-schema/remove": "削除",
|
||||
"wikidata-schema/add-statement": "ステートメント追加",
|
||||
"wikidata-schema/add-value": "値の追加",
|
||||
"wikidata-schema/add-qualifier": "修飾子追加",
|
||||
"wikidata-schema/add-reference": "参照の追加",
|
||||
"wikidata-schema/add-reference-snak": "追加",
|
||||
"wikidata-schema/property-placeholder": "属性",
|
||||
"wikidata-schema/nb-references": " 参照",
|
||||
"wikidata-schema/remove-column": "カラムの削除",
|
||||
"wikidata-schema/label": "ラベル",
|
||||
"wikidata-schema/description": "Description(説明)",
|
||||
"wikidata-schema/alias": "別名",
|
||||
"wikidata-schema/item-or-reconciled-column": "項目を入力するか、上のカラムをドラッグしてください",
|
||||
"wikidata-schema/amount": "量",
|
||||
"wikidata-schema/unit": "単位",
|
||||
"wikidata-schema/full-url": "完全URL",
|
||||
"wikidata-schema/tabular-data-with-prefix": "\"Data:\"で始まるファイル名",
|
||||
"wikidata-schema/commons-media": "ファイル名",
|
||||
"wikidata-schema/math-expression": "数学的表現",
|
||||
"wikidata-schema/geoshape-with-prefix": "\"Data:\"で始まるファイル名",
|
||||
"wikidata-schema/datatype-not-supported-yet": "このデータ型は未対応です.",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "スキーマが不完全です。修正してください.",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "スキーマが不完全です。修正してください.",
|
||||
"wikidata-schema/discard-button": "変更を破棄",
|
||||
"wikidata-schema/save-button": "スキーマを保存",
|
||||
"wikidata-schema/close-button": "閉じる",
|
||||
"wikidata-schema/unsaved-changes-alt": "スキーマの変更は保存されていません.",
|
||||
"wikidata-schema/save-schema-alt": "スキーマをローカルのOpenRefineに保存。Wikidataには送信されません.",
|
||||
"wikidata-schema/discard-schema-changes-alt": "スキーマの変更を破棄.",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "スキーマが不完全なので保存できません.",
|
||||
"wikidata-schema/unsaved-warning": "スキーマの変更を保存できていませんが、とにかく終了しますか?",
|
||||
"wikidata-preview/new-id": "新しい項目",
|
||||
"wikidata-account/dialog-header": "Wikidataアカウント",
|
||||
"wikidata-account/explain-log-in": "OpenRefineから直接データをアップロードするため、<a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a>にログインする.",
|
||||
"wikidata-account/username-label": "ユーザー名:",
|
||||
"wikidata-account/password-label": "パスワード:",
|
||||
"wikidata-account/close": "閉じる",
|
||||
"wikidata-account/log-in": "ログイン",
|
||||
"wikidata-account/logged-in-as": "ログイン名:",
|
||||
"wikidata-account/log-out": "ログアウト",
|
||||
"wikidata-account/connecting-to-wikidata": "Wikidataに接続中…",
|
||||
"perform-wikidata-edits/dialog-header": "Wikidataに編集をアップロードする",
|
||||
"perform-wikidata-edits/review-your-edits": "Wikidataに{nb_edits}項目をアップロードします。大量アップロードは<a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">bot review</a>を試みてください。",
|
||||
"perform-wikidata-edits/logged-in-as": "ログイン名:",
|
||||
"perform-wikidata-edits/edit-summary-label": "編集サマリー:",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "編集項目について",
|
||||
"perform-wikidata-edits/perform-edits": "編集項目のアップロード",
|
||||
"perform-wikidata-edits/cancel": "中止",
|
||||
"perform-wikidata-edits/analyzing-edits": "編集項目を分析中…",
|
||||
"wikibase-extension/menu-label": "Wikidata",
|
||||
"wikibase-extension/edit-wikibase-schema": "Wikidataスキーマを編集",
|
||||
"wikibase-extension/manage-wikibase-account": "Wikidataアカウントの管理",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Wikidata編集をアップロード",
|
||||
"wikibase-extension/wikibase-edits": "Wikidata編集…",
|
||||
"wikibase-extension/export-to-qs": "クイックステートメントへ出力",
|
||||
"wikibase-extension/qs-file": "クイックステートメント・ファイル",
|
||||
"wikibase-extension/quickstatements-export-name": "クイックステートメント",
|
||||
"wikibase-extension/import-wikibase-schema": "スキーマのインポート",
|
||||
"wikibase-extension/export-schema": "スキーマのエクスポート",
|
||||
"wikibase-schema/dialog-header": "Wikidataにアライン",
|
||||
"wikibase-schema/dialog-explanation": "以下のスキーマは、あなたの表データをどのようにWikidataの編集項目に変換するかを指定します。カラム名を入力boxにドラッグできます。各行が一つづつ項目に変換されます。",
|
||||
"wikibase-schema/preview-explanation": "このタブは、アップロードされる({nb_edits}のうち)最初の編集項目を表示します。ファセットを使って点検できます。",
|
||||
"wikibase-schema/schema-tab-header": "スキーマ",
|
||||
"wikibase-schema/warnings-tab-header": "項目",
|
||||
"wikibase-schema/edits-preview-tab-header": "プレビュー",
|
||||
"wikibase-schema/statements-header": "ステートメント",
|
||||
"wikibase-schema/terms-header": "用語(Term)",
|
||||
"wikibase-schema/empty-statements": "ステートメントがありません",
|
||||
"wikibase-schema/empty-terms": "ラベルもdescriptions も別名もありません",
|
||||
"wikibase-schema/add-item-button": "項目追加",
|
||||
"wikibase-schema/add-term": "Termの追加",
|
||||
"wikibase-schema/remove": "削除",
|
||||
"wikibase-schema/add-statement": "ステートメント追加",
|
||||
"wikibase-schema/add-value": "値の追加",
|
||||
"wikibase-schema/add-qualifier": "修飾子追加",
|
||||
"wikibase-schema/add-reference": "参照の追加",
|
||||
"wikibase-schema/add-reference-snak": "追加",
|
||||
"wikibase-schema/property-placeholder": "属性",
|
||||
"wikibase-schema/nb-references": " 参照",
|
||||
"wikibase-schema/remove-column": "カラムの削除",
|
||||
"wikibase-schema/label": "ラベル",
|
||||
"wikibase-schema/description": "Description(説明)",
|
||||
"wikibase-schema/alias": "別名",
|
||||
"wikibase-schema/item-or-reconciled-column": "項目を入力するか、上のカラムをドラッグしてください",
|
||||
"wikibase-schema/amount": "量",
|
||||
"wikibase-schema/unit": "単位",
|
||||
"wikibase-schema/full-url": "完全URL",
|
||||
"wikibase-schema/tabular-data-with-prefix": "\"Data:\"で始まるファイル名",
|
||||
"wikibase-schema/commons-media": "ファイル名",
|
||||
"wikibase-schema/math-expression": "数学的表現",
|
||||
"wikibase-schema/geoshape-with-prefix": "\"Data:\"で始まるファイル名",
|
||||
"wikibase-schema/datatype-not-supported-yet": "このデータ型は未対応です.",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "スキーマが不完全です。修正してください.",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "スキーマが不完全です。修正してください.",
|
||||
"wikibase-schema/discard-button": "変更を破棄",
|
||||
"wikibase-schema/save-button": "スキーマを保存",
|
||||
"wikibase-schema/close-button": "閉じる",
|
||||
"wikibase-schema/unsaved-changes-alt": "スキーマの変更は保存されていません.",
|
||||
"wikibase-schema/save-schema-alt": "スキーマをローカルのOpenRefineに保存。Wikidataには送信されません.",
|
||||
"wikibase-schema/discard-schema-changes-alt": "スキーマの変更を破棄.",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "スキーマが不完全なので保存できません.",
|
||||
"wikibase-schema/unsaved-warning": "スキーマの変更を保存できていませんが、とにかく終了しますか?",
|
||||
"wikibase-preview/new-id": "新しい項目",
|
||||
"wikibase-account/dialog-header": "Wikidataアカウント",
|
||||
"wikibase-account/explain-log-in": "OpenRefineから直接データをアップロードするため、<a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a>にログインする.",
|
||||
"wikibase-account/username-label": "ユーザー名:",
|
||||
"wikibase-account/password-label": "パスワード:",
|
||||
"wikibase-account/close": "閉じる",
|
||||
"wikibase-account/log-in": "ログイン",
|
||||
"wikibase-account/logged-in-as": "ログイン名:",
|
||||
"wikibase-account/log-out": "ログアウト",
|
||||
"wikibase-account/connecting-to-wikibase": "Wikidataに接続中…",
|
||||
"perform-wikibase-edits/dialog-header": "Wikidataに編集をアップロードする",
|
||||
"perform-wikibase-edits/review-your-edits": "Wikidataに{nb_edits}項目をアップロードします。大量アップロードは<a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">bot review</a>を試みてください。",
|
||||
"perform-wikibase-edits/logged-in-as": "ログイン名:",
|
||||
"perform-wikibase-edits/edit-summary-label": "編集サマリー:",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "編集項目について",
|
||||
"perform-wikibase-edits/perform-edits": "編集項目のアップロード",
|
||||
"perform-wikibase-edits/cancel": "中止",
|
||||
"perform-wikibase-edits/analyzing-edits": "編集項目を分析中…",
|
||||
"warnings-messages/new-item-created/title": "このバッチ編集は新しい項目を作ります.",
|
||||
"warnings-messages/new-item-created/body": "Wikidataに既存項目がないか、また、<a href=\"https://www.wikidata.org/wiki/Wikidata:Notability\" target=\"_blank\">Wikidataにふさわしいか</a>、確認してください.",
|
||||
"warnings-messages/new-item-without-labels-or-aliases/title": "ラベルも別名もない項目が作られます.",
|
||||
@ -78,8 +78,8 @@
|
||||
"warnings-messages/new-item-without-descriptions/body": "記述がないと、{example_entity}項目が明確になります.",
|
||||
"warnings-messages/new-item-with-deleted-statements/title": "新しい項目のステートメントを削除します.",
|
||||
"warnings-messages/new-item-with-deleted-statements/body": "おそらくスキーマに問題があります.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/title": "型(Type)のない項目が作られます.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/body": "(P31)のインスタンスか、(P279)のサブクラスが必要です.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/title": "型(Type)のない項目が作られます.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/body": "(P31)のインスタンスか、(P279)のサブクラスが必要です.",
|
||||
"warnings-messages/add-statements-with-invalid-format/title": "{property_entity} ステートメントが無効なフォーマットです.",
|
||||
"warnings-messages/add-statements-with-invalid-format/body": "この項目は、正規表現の<span class=\"wb-issue-preformat\">{regex}</span>に合致する必要があります。対象:{example_item_entity}の<span class=\"wb-issue-preformat\">{example_value}</span>.",
|
||||
"warnings-messages/remove-statements-with-invalid-format/title": "無効なフォーマットのステートメントが削除されました.",
|
||||
@ -157,15 +157,15 @@
|
||||
"import-wikibase-schema/schema-label": "あるいは、JSONテキスト:",
|
||||
"import-wikibase-schema/invalid-schema": "無効のWikidataスキーマです。",
|
||||
"import-wikibase-schema/import": "インポート",
|
||||
"wikidata-schema/copy-reference": "コピー",
|
||||
"wikidata-schema/paste-reference": "参照貼り付け",
|
||||
"wikidata-schema/reference-copied": "コピー済み",
|
||||
"wikidata-schema/label-if-new": "ラベル(上書き不可)",
|
||||
"wikidata-schema/label-override": "ラベル(存在すれば上書き)",
|
||||
"wikidata-schema/description-if-new": "Description(上書き不可)",
|
||||
"wikidata-schema/description-override": "Description(存在すれば上書き)",
|
||||
"wikidata-schema/override-term": "存在すれば上書き",
|
||||
"wikidata-extension/export-wikidata-schema": "Wikidataスキーマのエクスポート",
|
||||
"wikibase-schema/copy-reference": "コピー",
|
||||
"wikibase-schema/paste-reference": "参照貼り付け",
|
||||
"wikibase-schema/reference-copied": "コピー済み",
|
||||
"wikibase-schema/label-if-new": "ラベル(上書き不可)",
|
||||
"wikibase-schema/label-override": "ラベル(存在すれば上書き)",
|
||||
"wikibase-schema/description-if-new": "Description(上書き不可)",
|
||||
"wikibase-schema/description-override": "Description(存在すれば上書き)",
|
||||
"wikibase-schema/override-term": "存在すれば上書き",
|
||||
"wikibase-extension/export-wikibase-schema": "Wikidataスキーマのエクスポート",
|
||||
"warnings-messages/early-gregorian-date/title": "グレゴリー暦以前の日付",
|
||||
"warnings-messages/early-gregorian-date/body": "1582年10月以前の日付は(例えば、 {example_year}年)、グレゴリー暦で表示されることは稀です。詳しくは、 <a href=\"https://www.wikidata.org/wiki/Wikidata:Tools/OpenRefine/Editing/Schema_alignment#Dates\" target=\"_blank\">manual</a> で、適切な暦を指定してください。",
|
||||
"warnings-messages/item-description-too-long/body": "{example_entity}の<span class=\"wb-issue-preformat\">{description}</span>のようなDescription({lang})は長過ぎです。長さは {length} あり、上限の {max_length} を超えています。Descriptionsはフル表記ではなく、簡潔な説明です。多くの場合、2語から12語までです。詳しくは、<a href=\"https://www.wikidata.org/wiki/Help:Description#Length\" target=\"_blank\">マニュアル</a> をご覧ください。",
|
||||
@ -178,7 +178,7 @@
|
||||
"warnings-messages/item-description-identical-with-label/body": "{example_entity}のdescription ({lang})とラベル({label_lang})が<span class=\"wb-issue-preformat\">{description}</span>です。Descriptionは、ラベルよりも詳しい記述です。詳しくは<a href=\"https://www.wikidata.org/wiki/Help:Description\" target=\"_blank\">マニュアル</a>をご覧ください。",
|
||||
"warnings-messages/item-description-identical-with-label/title": "Descriptionがラベルと同一です",
|
||||
"warnings-messages/item-description-too-long/title": "Descriptionを短くしてください",
|
||||
"wikidata-extension/wikidata-schema": "Wikidataスキーマ",
|
||||
"wikibase-extension/wikibase-schema": "Wikidataスキーマ",
|
||||
"warnings-messages/multi-valued-property-is-required-for-existing-item/body": "このプロパティは2つ以上のステートメントが期待されていますが、例えば {example_entity} には1つしかありません。もしアイテムがWikidataに他のステートメントが存在するなら、この警告は無視して構いません.",
|
||||
"warnings-messages/multi-valued-property-is-required-for-existing-item/title": "{property_entity} は2つ以上のステートメントを持たなければなりません.",
|
||||
"warnings-messages/multi-valued-property-is-required-for-new-item/body": "このプロパティは2つ以上のステートメントが期待されていますが、例えば {example_entity} には1つしかありません.",
|
||||
@ -204,6 +204,23 @@
|
||||
"wikidata-account/explain-owner-only-consumer-login": "<a>オーナー限定consumer</a>でもログインできます",
|
||||
"wikidata-account/explain-password-login": "<a>ユーザー名/パスワード</a>でもログインできます",
|
||||
"wikidata-account/explain-owner-only-consumer-wiki": "オーナー限定comsumerを取得するには、 <a href=\"https://github.com/OpenRefine/OpenRefine/wiki/Wikidata-owner-only-consumer\" target=\"_blank\">wiki</a> を参照してください.",
|
||||
"wikibase-account/owner-only-consumer-remember-me-title": "Consumer証明書はクッキーに保存さます。共有PCでは使用しないでください.",
|
||||
"wikibase-account/password-remember-me-title": "パスワードは保存されません。共有PCでは使用しないでください.",
|
||||
"wikibase-account/remember-me": "ログイン情報を記憶",
|
||||
"wikibase-account/access-secret-placeholder": "アクセスの秘密",
|
||||
"wikibase-account/access-secret-label": "アクセスの秘密:",
|
||||
"wikibase-account/access-token-placeholder": "アクセストークン",
|
||||
"wikibase-account/access-token-label": "アクセストークン:",
|
||||
"wikibase-account/consumer-secret-placeholder": "consumerの秘密",
|
||||
"wikibase-account/consumer-secret-label": "Consumerの秘密:",
|
||||
"wikibase-account/consumer-token-placeholder": "consumerトークン",
|
||||
"wikibase-account/consumer-token-label": "Consumerトークン:",
|
||||
"wikibase-account/password-placeholder": "パスワード",
|
||||
"wikibase-account/username-placeholder": "ユーザー名",
|
||||
"wikibase-account/invalid-credentials": "無効な証明書",
|
||||
"wikibase-account/explain-owner-only-consumer-login": "<a>オーナー限定consumer</a>でもログインできます",
|
||||
"wikibase-account/explain-password-login": "<a>ユーザー名/パスワード</a>でもログインできます",
|
||||
"wikibase-account/explain-owner-only-consumer-wiki": "オーナー限定comsumerを取得するには、 <a href=\"https://github.com/OpenRefine/OpenRefine/wiki/Wikidata-owner-only-consumer\" target=\"_blank\">wiki</a> を参照してください.",
|
||||
"warnings-messages/existing-item-requires-certain-other-statement/body": "このプロパティは、例えば {example_entity} で、プロパティ {added_property_entity} を持つ別のステートメントを持つことが想定されています。もし、Wikidataにプロパティ {added_property_entity} があるステートメントを持っている場合、この警告は無視しても構いません.",
|
||||
"warnings-messages/existing-item-requires-certain-other-statement/title": "{property_entity} は、プロパティ {added_property_entity} を持つステートメントが必要です.",
|
||||
"warnings-messages/existing-item-requires-property-to-have-certain-values/body": "プロパティ {added_property_entity} が、例えば {example_entity} で適切な値を取っていません。もし、プロパティ {added_property_entity}とWikidataに適切な値を持つステートメントを持つ場合、この警告は無視しても構いません.",
|
||||
|
@ -1,73 +1,73 @@
|
||||
{
|
||||
"wikidata-extension/menu-label": "Wikidata",
|
||||
"wikidata-extension/edit-wikidata-schema": "Wikidata 스키마 편집",
|
||||
"wikidata-extension/import-wikidata-schema": "스키마 임포트",
|
||||
"wikidata-extension/manage-wikidata-account": "Wikidata 계정 관리",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "편집한 것을 Wikidata로 업로드",
|
||||
"wikidata-extension/export-to-qs": "QuickStatements로 익스포트",
|
||||
"wikidata-extension/export-schema": "스키마 익스포트",
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-schema/dialog-header": "Wikidata에 맞추기",
|
||||
"wikidata-schema/dialog-explanation": "아래의 Wikidata 스키마는 당신의 테이블 데이터가 Wikidata 편집값으로 어떻게 변하는지 지정합니다. 입력상자 아래의 컬럼 이름을 드래그 앤 드랍할 수 있습니다. 매 줄마다, 편집값이 컬럼별로 값이 생성됩니다.",
|
||||
"wikidata-schema/preview-explanation": "This tab shows the first edits (out of {nb_edits}) that will be made once you upload the changes to Wikidata. You can use facets to inspect the edits on particular items.\n이 탭에서는 Wikidata 로 변경사항을 업로드하면 처음 편집 (out of {nb_edits})이 만들어 집니다. 특정 아이템에서 편집을 검사하기 위해 facets 을 사용할 수 있습니다.",
|
||||
"wikidata-schema/schema-tab-header": "스키마",
|
||||
"wikidata-schema/warnings-tab-header": "이슈",
|
||||
"wikidata-schema/edits-preview-tab-header": "미리보기",
|
||||
"wikidata-schema/statements-header": "Statements",
|
||||
"wikidata-schema/terms-header": "용어",
|
||||
"wikidata-schema/empty-statements": "어떤 statements도 추가 되지 않음",
|
||||
"wikidata-schema/empty-terms": "어떤 라벨, 설명 및 다른 이름이 추가되지 않음",
|
||||
"wikidata-schema/add-item-button": "아이템 추가",
|
||||
"wikidata-schema/add-term": "용어 추가",
|
||||
"wikidata-schema/remove": "삭제",
|
||||
"wikidata-schema/add-statement": "statement 추가",
|
||||
"wikidata-schema/add-value": "값 추가",
|
||||
"wikidata-schema/add-qualifier": "qualifier 추가",
|
||||
"wikidata-schema/add-reference": "참조 추가",
|
||||
"wikidata-schema/add-reference-snak": "추가",
|
||||
"wikidata-schema/property-placeholder": "속성",
|
||||
"wikidata-schema/nb-references": " 참조",
|
||||
"wikidata-schema/remove-column": "컬럼 삭제",
|
||||
"wikidata-schema/label": "라벨",
|
||||
"wikidata-schema/description": "설명",
|
||||
"wikidata-schema/alias": "다른 이름",
|
||||
"wikidata-schema/item-or-reconciled-column": "아이템을 입력하거나 여기로 조정된 컬럼을 드래그하세요",
|
||||
"wikidata-schema/amount": "총량",
|
||||
"wikidata-schema/unit": "단위",
|
||||
"wikidata-schema/full-url": "프로토콜을 포함하는 전체 URL",
|
||||
"wikidata-schema/tabular-data-with-prefix": "\"Data:\"로 시작하는 파일이름",
|
||||
"wikidata-schema/commons-media": "파일이름",
|
||||
"wikidata-schema/math-expression": "수학적인 표현",
|
||||
"wikidata-schema/geoshape-with-prefix": "\"Data:\"로 시작하는 파일이름",
|
||||
"wikidata-schema/datatype-not-supported-yet": "이 데이터타입은 아직 지원하지 않습니다. 미안합니다.",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "스키마가 불완전합니다. 이슈롤 보기위해서는 스키마를 수정해주세요.",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "스키마가 불완전합니다. 미리보기를 보려면 스키마를 수정해주세요.",
|
||||
"wikidata-schema/discard-button": "변경사항 버리기",
|
||||
"wikidata-schema/save-button": "스키마 저장",
|
||||
"wikidata-schema/close-button": "닫기",
|
||||
"wikidata-schema/unsaved-changes-alt": "Wikidata 스키마로 저장되지 않은 변경사항을 만들었습니다.",
|
||||
"wikidata-schema/save-schema-alt": "OpenRefine으로 스키마를 저장하세요. 변경사항은 Wikidata로 아직 업로드되지 않습니다.",
|
||||
"wikidata-schema/discard-schema-changes-alt": "스키마로 만들어진 변경사항을 무시하세요.",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "스키마가 불완전합니다. 그래서 스키마를 저장할 수 없습니다.",
|
||||
"wikidata-schema/unsaved-warning": "Wikidata 스키마로 저장되지 않은 변경사항이 만들어졌습니다. 어쨌든 닫을까요?",
|
||||
"wikidata-preview/new-id": "신규 아이템",
|
||||
"wikidata-account/dialog-header": "Wikidata 계정",
|
||||
"wikidata-account/explain-log-in": "<a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> 로그인하세요. OpenRefine 에서 직접 편집을 업로드할 수 있습니다.",
|
||||
"wikidata-account/username-label": "사용자이름:",
|
||||
"wikidata-account/password-label": "비밀번호:",
|
||||
"wikidata-account/close": "닫기",
|
||||
"wikidata-account/log-in": "로그인",
|
||||
"wikidata-account/logged-in-as": "다음으로 로그인 됨:",
|
||||
"wikidata-account/log-out": "로그아웃",
|
||||
"wikidata-account/connecting-to-wikidata": "Wikidata 에 접속중 ...",
|
||||
"perform-wikidata-edits/dialog-header": "Wikidata에 편집을 업로드하기",
|
||||
"perform-wikidata-edits/review-your-edits": "Wikidata로 {nb_edits} 편집을 업로드하기 시작합니다. 주의해서 체크해주세요. 큰 편집 꾸러미는 <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\"> 봇 리뷰</a>를 위해서 제일 먼저 제출되어야 합니다.",
|
||||
"perform-wikidata-edits/logged-in-as": "다음으로 로그인 됨",
|
||||
"perform-wikidata-edits/edit-summary-label": "요약 편집:",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "편집을 설명하는 몇가지 단어들",
|
||||
"perform-wikidata-edits/perform-edits": "편집을 업로드",
|
||||
"perform-wikidata-edits/cancel": "취소",
|
||||
"perform-wikidata-edits/analyzing-edits": "편집을 분석중 ...",
|
||||
"wikibase-extension/menu-label": "Wikidata",
|
||||
"wikibase-extension/edit-wikibase-schema": "Wikidata 스키마 편집",
|
||||
"wikibase-extension/import-wikibase-schema": "스키마 임포트",
|
||||
"wikibase-extension/manage-wikibase-account": "Wikidata 계정 관리",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "편집한 것을 Wikidata로 업로드",
|
||||
"wikibase-extension/export-to-qs": "QuickStatements로 익스포트",
|
||||
"wikibase-extension/export-schema": "스키마 익스포트",
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-schema/dialog-header": "Wikidata에 맞추기",
|
||||
"wikibase-schema/dialog-explanation": "아래의 Wikidata 스키마는 당신의 테이블 데이터가 Wikidata 편집값으로 어떻게 변하는지 지정합니다. 입력상자 아래의 컬럼 이름을 드래그 앤 드랍할 수 있습니다. 매 줄마다, 편집값이 컬럼별로 값이 생성됩니다.",
|
||||
"wikibase-schema/preview-explanation": "This tab shows the first edits (out of {nb_edits}) that will be made once you upload the changes to Wikidata. You can use facets to inspect the edits on particular items.\n이 탭에서는 Wikidata 로 변경사항을 업로드하면 처음 편집 (out of {nb_edits})이 만들어 집니다. 특정 아이템에서 편집을 검사하기 위해 facets 을 사용할 수 있습니다.",
|
||||
"wikibase-schema/schema-tab-header": "스키마",
|
||||
"wikibase-schema/warnings-tab-header": "이슈",
|
||||
"wikibase-schema/edits-preview-tab-header": "미리보기",
|
||||
"wikibase-schema/statements-header": "Statements",
|
||||
"wikibase-schema/terms-header": "용어",
|
||||
"wikibase-schema/empty-statements": "어떤 statements도 추가 되지 않음",
|
||||
"wikibase-schema/empty-terms": "어떤 라벨, 설명 및 다른 이름이 추가되지 않음",
|
||||
"wikibase-schema/add-item-button": "아이템 추가",
|
||||
"wikibase-schema/add-term": "용어 추가",
|
||||
"wikibase-schema/remove": "삭제",
|
||||
"wikibase-schema/add-statement": "statement 추가",
|
||||
"wikibase-schema/add-value": "값 추가",
|
||||
"wikibase-schema/add-qualifier": "qualifier 추가",
|
||||
"wikibase-schema/add-reference": "참조 추가",
|
||||
"wikibase-schema/add-reference-snak": "추가",
|
||||
"wikibase-schema/property-placeholder": "속성",
|
||||
"wikibase-schema/nb-references": " 참조",
|
||||
"wikibase-schema/remove-column": "컬럼 삭제",
|
||||
"wikibase-schema/label": "라벨",
|
||||
"wikibase-schema/description": "설명",
|
||||
"wikibase-schema/alias": "다른 이름",
|
||||
"wikibase-schema/item-or-reconciled-column": "아이템을 입력하거나 여기로 조정된 컬럼을 드래그하세요",
|
||||
"wikibase-schema/amount": "총량",
|
||||
"wikibase-schema/unit": "단위",
|
||||
"wikibase-schema/full-url": "프로토콜을 포함하는 전체 URL",
|
||||
"wikibase-schema/tabular-data-with-prefix": "\"Data:\"로 시작하는 파일이름",
|
||||
"wikibase-schema/commons-media": "파일이름",
|
||||
"wikibase-schema/math-expression": "수학적인 표현",
|
||||
"wikibase-schema/geoshape-with-prefix": "\"Data:\"로 시작하는 파일이름",
|
||||
"wikibase-schema/datatype-not-supported-yet": "이 데이터타입은 아직 지원하지 않습니다. 미안합니다.",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "스키마가 불완전합니다. 이슈롤 보기위해서는 스키마를 수정해주세요.",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "스키마가 불완전합니다. 미리보기를 보려면 스키마를 수정해주세요.",
|
||||
"wikibase-schema/discard-button": "변경사항 버리기",
|
||||
"wikibase-schema/save-button": "스키마 저장",
|
||||
"wikibase-schema/close-button": "닫기",
|
||||
"wikibase-schema/unsaved-changes-alt": "Wikidata 스키마로 저장되지 않은 변경사항을 만들었습니다.",
|
||||
"wikibase-schema/save-schema-alt": "OpenRefine으로 스키마를 저장하세요. 변경사항은 Wikidata로 아직 업로드되지 않습니다.",
|
||||
"wikibase-schema/discard-schema-changes-alt": "스키마로 만들어진 변경사항을 무시하세요.",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "스키마가 불완전합니다. 그래서 스키마를 저장할 수 없습니다.",
|
||||
"wikibase-schema/unsaved-warning": "Wikidata 스키마로 저장되지 않은 변경사항이 만들어졌습니다. 어쨌든 닫을까요?",
|
||||
"wikibase-preview/new-id": "신규 아이템",
|
||||
"wikibase-account/dialog-header": "Wikidata 계정",
|
||||
"wikibase-account/explain-log-in": "<a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> 로그인하세요. OpenRefine 에서 직접 편집을 업로드할 수 있습니다.",
|
||||
"wikibase-account/username-label": "사용자이름:",
|
||||
"wikibase-account/password-label": "비밀번호:",
|
||||
"wikibase-account/close": "닫기",
|
||||
"wikibase-account/log-in": "로그인",
|
||||
"wikibase-account/logged-in-as": "다음으로 로그인 됨:",
|
||||
"wikibase-account/log-out": "로그아웃",
|
||||
"wikibase-account/connecting-to-wikibase": "Wikidata 에 접속중 ...",
|
||||
"perform-wikibase-edits/dialog-header": "Wikidata에 편집을 업로드하기",
|
||||
"perform-wikibase-edits/review-your-edits": "Wikidata로 {nb_edits} 편집을 업로드하기 시작합니다. 주의해서 체크해주세요. 큰 편집 꾸러미는 <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\"> 봇 리뷰</a>를 위해서 제일 먼저 제출되어야 합니다.",
|
||||
"perform-wikibase-edits/logged-in-as": "다음으로 로그인 됨",
|
||||
"perform-wikibase-edits/edit-summary-label": "요약 편집:",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "편집을 설명하는 몇가지 단어들",
|
||||
"perform-wikibase-edits/perform-edits": "편집을 업로드",
|
||||
"perform-wikibase-edits/cancel": "취소",
|
||||
"perform-wikibase-edits/analyzing-edits": "편집을 분석중 ...",
|
||||
"import-wikibase-schema/dialog-header": "Wikidata 스키마 임포트",
|
||||
"import-wikibase-schema/file-label": "JSON 파일: ",
|
||||
"import-wikibase-schema/schema-label": "또는 JSON 텍스트:",
|
||||
@ -81,7 +81,7 @@
|
||||
"warnings-messages/new-item-without-descriptions/body": "{example_entity}와 같은 신규 아이템에 설명을 추가하면 그 아이템에 대한 모호성을 줄여줄 겁니다.",
|
||||
"warnings-messages/new-item-with-deleted-statements/title": "신규 아이템에서 statements를 삭제.",
|
||||
"warnings-messages/new-item-with-deleted-statements/body": "스키마 또는 프로젝트에 잘못된 것이 아마 있는것 같습니다.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/title": "타입없이 신규 아이템이 생성되었습니다.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/body": "{example_entity}와 같이 생성된 각 아이템마다 \"instance of\" (P31) 또는 \"subclass of\" (P279) statement를 작성해야합니다.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/title": "타입없이 신규 아이템이 생성되었습니다.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/body": "{example_entity}와 같이 생성된 각 아이템마다 \"instance of\" (P31) 또는 \"subclass of\" (P279) statement를 작성해야합니다.",
|
||||
"warnings-messages/add-statements-with-invalid-format/title": "{property_entity} statments는 유효하지 않는 포맷을 가지고 있습니다."
|
||||
}
|
||||
|
@ -1,73 +1,73 @@
|
||||
{
|
||||
"wikidata-extension/menu-label": "Wikidata",
|
||||
"wikidata-extension/edit-wikidata-schema": "Rediger Wikidata-skjema",
|
||||
"wikidata-extension/import-wikidata-schema": "Importer skjema",
|
||||
"wikidata-extension/manage-wikidata-account": "Behandle Wikidata-konto",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Last opp redigeringer til Wikidata",
|
||||
"wikidata-extension/export-to-qs": "Eksporter til QuickStatements",
|
||||
"wikidata-extension/export-schema": "Eksporter skjema",
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-schema/dialog-header": "Innrett til Wikidata",
|
||||
"wikidata-schema/dialog-explanation": "Wikidata-skjemaet nedenfor spesifiserer hvordan dine tabulære data vil transformeres til Wikidata-redigeringer. Du kan dra og slippe kolonnenavnene nedenfor til de fleste inndataboksene: For hver rad vil redigeringer genereres med verdiene i disse kolonnene.",
|
||||
"wikidata-schema/preview-explanation": "Denne fanen viser de første (av {nb_edits}) redigeringene som vil gjøres når du laster opp endringene til Wikidata. Du kan bruke fasetter for å ettergå redigeringene til spesifikke elementer.",
|
||||
"wikidata-schema/schema-tab-header": "Skjema",
|
||||
"wikidata-schema/warnings-tab-header": "Saker",
|
||||
"wikidata-schema/edits-preview-tab-header": "Forhåndsvisning",
|
||||
"wikidata-schema/statements-header": "Påstander",
|
||||
"wikidata-schema/terms-header": "Termer",
|
||||
"wikidata-schema/empty-statements": "ingen påstander lagt til",
|
||||
"wikidata-schema/empty-terms": "ingen etiketter, beskrivelser eller aliaser lagt til",
|
||||
"wikidata-schema/add-item-button": "legg til element",
|
||||
"wikidata-schema/add-term": "legg til term",
|
||||
"wikidata-schema/remove": "fjern",
|
||||
"wikidata-schema/add-statement": "legg til påstand",
|
||||
"wikidata-schema/add-value": "legg til verdi",
|
||||
"wikidata-schema/add-qualifier": "legg til kvalifikator",
|
||||
"wikidata-schema/add-reference": "legg til referanse",
|
||||
"wikidata-schema/add-reference-snak": "legg til",
|
||||
"wikidata-schema/property-placeholder": "egenskap",
|
||||
"wikidata-schema/nb-references": " referanser",
|
||||
"wikidata-schema/remove-column": "fjern kolonne",
|
||||
"wikidata-schema/label": "Etikett",
|
||||
"wikidata-schema/description": "Beskrivelse",
|
||||
"wikidata-schema/alias": "Alias",
|
||||
"wikidata-schema/item-or-reconciled-column": "skriv inn element eller dra avstemt kolonne hit",
|
||||
"wikidata-schema/amount": "antall",
|
||||
"wikidata-schema/unit": "enhet",
|
||||
"wikidata-schema/full-url": "full nettadresse, inkludert protokoll",
|
||||
"wikidata-schema/tabular-data-with-prefix": "filnavn som begynner med «Data:»",
|
||||
"wikidata-schema/commons-media": "filnavn",
|
||||
"wikidata-schema/math-expression": "matematisk uttrykk",
|
||||
"wikidata-schema/geoshape-with-prefix": "filnavn som begynner med «Data:»",
|
||||
"wikidata-schema/datatype-not-supported-yet": "Denne datatypen støttes ikke ennå.",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "Skjemaet ditt er ufullstendig, fiks det for å se problemene.",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "Skjemaet ditt er ufullstendig, fiks det for å se forhåndsvisningen.",
|
||||
"wikidata-schema/discard-button": "Forkast endringer",
|
||||
"wikidata-schema/save-button": "Lagre skjema",
|
||||
"wikidata-schema/close-button": "Lukk",
|
||||
"wikidata-schema/unsaved-changes-alt": "Du har ulagrede endringer i Wikidata-skjemaet ditt.",
|
||||
"wikidata-schema/save-schema-alt": "Lagre skjemaet i OpenRefine. Endringene blir ikke lastet opp til Wikidata ennå.",
|
||||
"wikidata-schema/discard-schema-changes-alt": "Forkast endringene gjort i skjemaet.",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "Skjemaet ditt er ufullstendig, så det kan ikke lagres ennå.",
|
||||
"wikidata-schema/unsaved-warning": "Du har gjort ulagrede endringer i Wikidata-skjemaet ditt. Lukk likevel?",
|
||||
"wikidata-preview/new-id": "nytt element",
|
||||
"wikidata-account/dialog-header": "Wikidata-konto",
|
||||
"wikidata-account/explain-log-in": "Hvis du logger inn på <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> kan du laste opp redigeringer direkte fra OpenRefine.",
|
||||
"wikidata-account/username-label": "Brukernavn:",
|
||||
"wikidata-account/password-label": "Passord:",
|
||||
"wikidata-account/close": "Lukk",
|
||||
"wikidata-account/log-in": "Logg inn",
|
||||
"wikidata-account/logged-in-as": "Du er innlogget som:",
|
||||
"wikidata-account/log-out": "Logg ut",
|
||||
"wikidata-account/connecting-to-wikidata": "Kobler til Wikidata …",
|
||||
"perform-wikidata-edits/dialog-header": "Last opp redigeringer på Wikidata",
|
||||
"perform-wikidata-edits/review-your-edits": "Du er i ferd med å laste opp {nb_edits} redigeringer på Wikidata. Sjekk dem nøye. Store redigeringspartier bør gå gjennom <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">bot-godkjenning</a> først.",
|
||||
"perform-wikidata-edits/logged-in-as": "Du er innlogget som",
|
||||
"perform-wikidata-edits/edit-summary-label": "Redigeringsforklaring:",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "noen ord som beskriver redigeringene dine",
|
||||
"perform-wikidata-edits/perform-edits": "Last opp redigeringer",
|
||||
"perform-wikidata-edits/cancel": "Avbryt",
|
||||
"perform-wikidata-edits/analyzing-edits": "Analyserer redigeringene dine …",
|
||||
"wikibase-extension/menu-label": "Wikidata",
|
||||
"wikibase-extension/edit-wikibase-schema": "Rediger Wikidata-skjema",
|
||||
"wikibase-extension/import-wikibase-schema": "Importer skjema",
|
||||
"wikibase-extension/manage-wikibase-account": "Behandle Wikidata-konto",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Last opp redigeringer til Wikidata",
|
||||
"wikibase-extension/export-to-qs": "Eksporter til QuickStatements",
|
||||
"wikibase-extension/export-schema": "Eksporter skjema",
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-schema/dialog-header": "Innrett til Wikidata",
|
||||
"wikibase-schema/dialog-explanation": "Wikidata-skjemaet nedenfor spesifiserer hvordan dine tabulære data vil transformeres til Wikidata-redigeringer. Du kan dra og slippe kolonnenavnene nedenfor til de fleste inndataboksene: For hver rad vil redigeringer genereres med verdiene i disse kolonnene.",
|
||||
"wikibase-schema/preview-explanation": "Denne fanen viser de første (av {nb_edits}) redigeringene som vil gjøres når du laster opp endringene til Wikidata. Du kan bruke fasetter for å ettergå redigeringene til spesifikke elementer.",
|
||||
"wikibase-schema/schema-tab-header": "Skjema",
|
||||
"wikibase-schema/warnings-tab-header": "Saker",
|
||||
"wikibase-schema/edits-preview-tab-header": "Forhåndsvisning",
|
||||
"wikibase-schema/statements-header": "Påstander",
|
||||
"wikibase-schema/terms-header": "Termer",
|
||||
"wikibase-schema/empty-statements": "ingen påstander lagt til",
|
||||
"wikibase-schema/empty-terms": "ingen etiketter, beskrivelser eller aliaser lagt til",
|
||||
"wikibase-schema/add-item-button": "legg til element",
|
||||
"wikibase-schema/add-term": "legg til term",
|
||||
"wikibase-schema/remove": "fjern",
|
||||
"wikibase-schema/add-statement": "legg til påstand",
|
||||
"wikibase-schema/add-value": "legg til verdi",
|
||||
"wikibase-schema/add-qualifier": "legg til kvalifikator",
|
||||
"wikibase-schema/add-reference": "legg til referanse",
|
||||
"wikibase-schema/add-reference-snak": "legg til",
|
||||
"wikibase-schema/property-placeholder": "egenskap",
|
||||
"wikibase-schema/nb-references": " referanser",
|
||||
"wikibase-schema/remove-column": "fjern kolonne",
|
||||
"wikibase-schema/label": "Etikett",
|
||||
"wikibase-schema/description": "Beskrivelse",
|
||||
"wikibase-schema/alias": "Alias",
|
||||
"wikibase-schema/item-or-reconciled-column": "skriv inn element eller dra avstemt kolonne hit",
|
||||
"wikibase-schema/amount": "antall",
|
||||
"wikibase-schema/unit": "enhet",
|
||||
"wikibase-schema/full-url": "full nettadresse, inkludert protokoll",
|
||||
"wikibase-schema/tabular-data-with-prefix": "filnavn som begynner med «Data:»",
|
||||
"wikibase-schema/commons-media": "filnavn",
|
||||
"wikibase-schema/math-expression": "matematisk uttrykk",
|
||||
"wikibase-schema/geoshape-with-prefix": "filnavn som begynner med «Data:»",
|
||||
"wikibase-schema/datatype-not-supported-yet": "Denne datatypen støttes ikke ennå.",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "Skjemaet ditt er ufullstendig, fiks det for å se problemene.",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "Skjemaet ditt er ufullstendig, fiks det for å se forhåndsvisningen.",
|
||||
"wikibase-schema/discard-button": "Forkast endringer",
|
||||
"wikibase-schema/save-button": "Lagre skjema",
|
||||
"wikibase-schema/close-button": "Lukk",
|
||||
"wikibase-schema/unsaved-changes-alt": "Du har ulagrede endringer i Wikidata-skjemaet ditt.",
|
||||
"wikibase-schema/save-schema-alt": "Lagre skjemaet i OpenRefine. Endringene blir ikke lastet opp til Wikidata ennå.",
|
||||
"wikibase-schema/discard-schema-changes-alt": "Forkast endringene gjort i skjemaet.",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "Skjemaet ditt er ufullstendig, så det kan ikke lagres ennå.",
|
||||
"wikibase-schema/unsaved-warning": "Du har gjort ulagrede endringer i Wikidata-skjemaet ditt. Lukk likevel?",
|
||||
"wikibase-preview/new-id": "nytt element",
|
||||
"wikibase-account/dialog-header": "Wikidata-konto",
|
||||
"wikibase-account/explain-log-in": "Hvis du logger inn på <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> kan du laste opp redigeringer direkte fra OpenRefine.",
|
||||
"wikibase-account/username-label": "Brukernavn:",
|
||||
"wikibase-account/password-label": "Passord:",
|
||||
"wikibase-account/close": "Lukk",
|
||||
"wikibase-account/log-in": "Logg inn",
|
||||
"wikibase-account/logged-in-as": "Du er innlogget som:",
|
||||
"wikibase-account/log-out": "Logg ut",
|
||||
"wikibase-account/connecting-to-wikibase": "Kobler til Wikidata …",
|
||||
"perform-wikibase-edits/dialog-header": "Last opp redigeringer på Wikidata",
|
||||
"perform-wikibase-edits/review-your-edits": "Du er i ferd med å laste opp {nb_edits} redigeringer på Wikidata. Sjekk dem nøye. Store redigeringspartier bør gå gjennom <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">bot-godkjenning</a> først.",
|
||||
"perform-wikibase-edits/logged-in-as": "Du er innlogget som",
|
||||
"perform-wikibase-edits/edit-summary-label": "Redigeringsforklaring:",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "noen ord som beskriver redigeringene dine",
|
||||
"perform-wikibase-edits/perform-edits": "Last opp redigeringer",
|
||||
"perform-wikibase-edits/cancel": "Avbryt",
|
||||
"perform-wikibase-edits/analyzing-edits": "Analyserer redigeringene dine …",
|
||||
"import-wikibase-schema/dialog-header": "Importer Wikidata-skjema",
|
||||
"import-wikibase-schema/file-label": "Fra JSON-fil: ",
|
||||
"import-wikibase-schema/schema-label": "Eller fra JSON-tekst:",
|
||||
@ -81,8 +81,8 @@
|
||||
"warnings-messages/new-item-without-descriptions/body": "Å legge til beskrivelser til nye elementer som {example_entity} gjør det enklere å skille elementer fra hverandre om de har samme etikett.",
|
||||
"warnings-messages/new-item-with-deleted-statements/title": "Sletter påstander i nye elementer.",
|
||||
"warnings-messages/new-item-with-deleted-statements/body": "Det er trolig noe galt med skjemaet eller prosjektet ditt.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/title": "Nye elementer opprettet uten type.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/body": "Du bør angi påstanden «forekomst av» (P31) eller «underklasse av» (P279) for hvert element du oppretter, som {example_entity}.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/title": "Nye elementer opprettet uten type.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/body": "Du bør angi påstanden «forekomst av» (P31) eller «underklasse av» (P279) for hvert element du oppretter, som {example_entity}.",
|
||||
"warnings-messages/add-statements-with-invalid-format/title": "{property_entity} påstander med ugyldig format.",
|
||||
"warnings-messages/add-statements-with-invalid-format/body": "Verdiene for denne egenskapen forventes å samsvare med det regulære uttrykket <span class=\"wb-issue-preformat\">{regex}</span>, noe som ikke er tilfelle for <span class=\"wb-issue-preformat\">{example_value}</span> lagt til på {example_item_entity}.",
|
||||
"warnings-messages/remove-statements-with-invalid-format/title": "Fjernet påstander med ugyldig format.",
|
||||
@ -143,30 +143,30 @@
|
||||
"warnings-messages/no-unit-provided/body": "Verdier som <span class=\"wb-issue-preformat\">{example_value}</span> i {example_item_entity} forventes å ha enheter.",
|
||||
"warnings-messages/invalid-entity-type/title": "{property_entity} brukt i elementer",
|
||||
"warnings-messages/invalid-entity-type/body": "Bruken av {property_entity} i elementer som {example_entity} er ugyldig.",
|
||||
"wikidata-schema/copy-reference": "kopier",
|
||||
"wikidata-schema/paste-reference": "lim inn referanse",
|
||||
"wikidata-schema/reference-copied": "kopiert",
|
||||
"wikibase-schema/copy-reference": "kopier",
|
||||
"wikibase-schema/paste-reference": "lim inn referanse",
|
||||
"wikibase-schema/reference-copied": "kopiert",
|
||||
"warnings-messages/item-description-identical-with-label/title": "Beskrivelsen er identisk med etiketten",
|
||||
"warnings-messages/item-description-too-long/title": "Gjør beskrivelsen kortere",
|
||||
"wikidata-account/owner-only-consumer-remember-me-title": "Konsument-identitetsdetaljer lagres ukryptert i kaker. Ikke velg dette hvis datamaskinen deles av andre.",
|
||||
"wikidata-account/password-remember-me-title": "Passordet ditt vil ikke bli lagret. Ikke velg dette hvis datamaskinen deles med andre.",
|
||||
"wikidata-account/remember-me": "Husk meg",
|
||||
"wikidata-account/access-secret-placeholder": "tilgangshemmelighet",
|
||||
"wikidata-account/access-secret-label": "Tilgangshemmelighet:",
|
||||
"wikidata-account/access-token-placeholder": "tilgangssymbol",
|
||||
"wikidata-account/access-token-label": "Tilgangssymbol:",
|
||||
"wikidata-account/consumer-secret-placeholder": "konsument-hemmelighet",
|
||||
"wikidata-account/consumer-secret-label": "Konsument-hemmelighet:",
|
||||
"wikidata-account/consumer-token-placeholder": "kosnument-symbol",
|
||||
"wikidata-account/consumer-token-label": "Konsument-symbol:",
|
||||
"wikidata-account/password-placeholder": "passord",
|
||||
"wikidata-account/username-placeholder": "brukernavn",
|
||||
"wikidata-account/invalid-credentials": "Ugyldige identitetsdetaljer",
|
||||
"wikidata-schema/override-term": "overstyr hvis satt",
|
||||
"wikidata-schema/description-override": "Beskrivelse (overstyr hvis satt)",
|
||||
"wikidata-schema/description-if-new": "Beskrivelse (ikke overstyr)",
|
||||
"wikidata-schema/label-if-new": "Etikett (ikke overstyr)",
|
||||
"wikidata-schema/label-override": "Etikett (overstyr hvis satt)",
|
||||
"wikidata-extension/wikidata-edits": "Wikidata-redigeringer…",
|
||||
"wikidata-extension/qs-file": "QickStatements-fil"
|
||||
"wikibase-account/owner-only-consumer-remember-me-title": "Konsument-identitetsdetaljer lagres ukryptert i kaker. Ikke velg dette hvis datamaskinen deles av andre.",
|
||||
"wikibase-account/password-remember-me-title": "Passordet ditt vil ikke bli lagret. Ikke velg dette hvis datamaskinen deles med andre.",
|
||||
"wikibase-account/remember-me": "Husk meg",
|
||||
"wikibase-account/access-secret-placeholder": "tilgangshemmelighet",
|
||||
"wikibase-account/access-secret-label": "Tilgangshemmelighet:",
|
||||
"wikibase-account/access-token-placeholder": "tilgangssymbol",
|
||||
"wikibase-account/access-token-label": "Tilgangssymbol:",
|
||||
"wikibase-account/consumer-secret-placeholder": "konsument-hemmelighet",
|
||||
"wikibase-account/consumer-secret-label": "Konsument-hemmelighet:",
|
||||
"wikibase-account/consumer-token-placeholder": "kosnument-symbol",
|
||||
"wikibase-account/consumer-token-label": "Konsument-symbol:",
|
||||
"wikibase-account/password-placeholder": "passord",
|
||||
"wikibase-account/username-placeholder": "brukernavn",
|
||||
"wikibase-account/invalid-credentials": "Ugyldige identitetsdetaljer",
|
||||
"wikibase-schema/override-term": "overstyr hvis satt",
|
||||
"wikibase-schema/description-override": "Beskrivelse (overstyr hvis satt)",
|
||||
"wikibase-schema/description-if-new": "Beskrivelse (ikke overstyr)",
|
||||
"wikibase-schema/label-if-new": "Etikett (ikke overstyr)",
|
||||
"wikibase-schema/label-override": "Etikett (overstyr hvis satt)",
|
||||
"wikibase-extension/wikibase-edits": "Wikibase-redigeringer…",
|
||||
"wikibase-extension/qs-file": "QickStatements-fil"
|
||||
}
|
||||
|
@ -1,71 +1,71 @@
|
||||
{
|
||||
"wikidata-extension/menu-label": "Wikidata",
|
||||
"wikidata-extension/edit-wikidata-schema": "Wikidata-schema bewerken",
|
||||
"wikidata-extension/import-wikidata-schema": "Schema importeren",
|
||||
"wikidata-extension/manage-wikidata-account": "Wikidata-account beheren",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Bewerkingen naar Wikidata uploaden",
|
||||
"wikidata-extension/export-to-qs": "Naar QuickStatements exporteren",
|
||||
"wikidata-extension/export-schema": "Schema exporteren",
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-schema/schema-tab-header": "Schema",
|
||||
"wikidata-schema/warnings-tab-header": "Problemen",
|
||||
"wikidata-schema/edits-preview-tab-header": "Voorbeeld",
|
||||
"wikidata-schema/statements-header": "Verklaringen",
|
||||
"wikidata-schema/terms-header": "Labels, beschrijvingen en aliassen",
|
||||
"wikidata-schema/empty-statements": "geen verklaringen toegevoegd",
|
||||
"wikidata-schema/empty-terms": "geen labels, beschrijvingen of aliassen toegevoegd",
|
||||
"wikidata-schema/add-item-button": "item toevoegen",
|
||||
"wikidata-schema/add-term": "label, beschrijving of alias toevoegen",
|
||||
"wikidata-schema/remove": "verwijderen",
|
||||
"wikidata-schema/add-statement": "verklaring toevoegen",
|
||||
"wikidata-schema/add-value": "waarde toevoegen",
|
||||
"wikidata-schema/add-qualifier": "kwalificatie toevoegen",
|
||||
"wikidata-schema/copy-reference": "kopiëren",
|
||||
"wikidata-schema/paste-reference": "bron plakken",
|
||||
"wikidata-schema/reference-copied": "gekopieerd",
|
||||
"wikidata-schema/add-reference": "bron toevoegen",
|
||||
"wikidata-schema/add-reference-snak": "toevoegen",
|
||||
"wikidata-schema/property-placeholder": "eigenschap",
|
||||
"wikidata-schema/nb-references": " bronnen",
|
||||
"wikidata-schema/remove-column": "kolom verwijderen",
|
||||
"wikidata-schema/label": "Label",
|
||||
"wikidata-schema/description": "Beschrijving",
|
||||
"wikidata-schema/alias": "Alias",
|
||||
"wikidata-schema/amount": "hoeveelheid",
|
||||
"wikidata-schema/unit": "eenheid",
|
||||
"wikidata-schema/full-url": "volledige URL inclusief protocol",
|
||||
"wikidata-schema/tabular-data-with-prefix": "bestandsnaam beginnend met \"Data:\"",
|
||||
"wikidata-schema/commons-media": "bestandsnaam",
|
||||
"wikidata-schema/math-expression": "wiskundige uitdrukking",
|
||||
"wikidata-schema/geoshape-with-prefix": "bestandsnaam beginnend met \"Data:\"",
|
||||
"wikidata-schema/datatype-not-supported-yet": "Dit gegevenstype wordt nog niet ondersteund.",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "Uw schema is incompleet, los de bestaande problemen op.",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "Uw schema is incompleet, los de bestaande problemen op om het voorbeeld te bekijken.",
|
||||
"wikidata-schema/discard-button": "Wijzigingen negeren",
|
||||
"wikidata-schema/save-button": "Schema opslaan",
|
||||
"wikidata-schema/close-button": "Sluiten",
|
||||
"wikidata-schema/unsaved-changes-alt": "U heeft on-opgeslagen wijzigingen aan uw Wikidata-schema aangebracht.",
|
||||
"wikidata-schema/save-schema-alt": "Sla het schema op in OpenRefine. De wijzigingen worden nog niet naar Wikidata geüpload.",
|
||||
"wikidata-schema/discard-schema-changes-alt": "De wijzigingen aan het schema negeren.",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "Uw schema is incompleet en kan nog niet worden opgeslagen.",
|
||||
"wikidata-schema/unsaved-warning": "U heeft on-opgeslagen wijzigingen aan uw Wikidata-schema aangebracht. Toch sluiten?",
|
||||
"wikidata-preview/new-id": "nieuw item",
|
||||
"wikidata-account/dialog-header": "Wikidata-account",
|
||||
"wikidata-account/explain-log-in": "Aanmelden bij <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> laat u direct bewerkingen vanuit OpenRefine uploaden.",
|
||||
"wikidata-account/username-label": "Gebruikersnaam:",
|
||||
"wikidata-account/password-label": "Wachtwoord:",
|
||||
"wikidata-account/close": "Sluiten",
|
||||
"wikidata-account/log-in": "Aanmelden",
|
||||
"wikidata-account/logged-in-as": "U bent aangemeld als:",
|
||||
"wikidata-account/log-out": "Afmelden",
|
||||
"wikidata-account/connecting-to-wikidata": "Verbinding maken met Wikidata...",
|
||||
"perform-wikidata-edits/dialog-header": "Bewerkingen naar Wikidata uploaden",
|
||||
"perform-wikidata-edits/logged-in-as": "U bent aangemeld als",
|
||||
"perform-wikidata-edits/edit-summary-label": "Bewerkingssamenvatting:",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "een paar woorden om uw bewerkingen te beschrijven",
|
||||
"perform-wikidata-edits/perform-edits": "Bewerkingen uploaden",
|
||||
"perform-wikidata-edits/cancel": "Annuleren",
|
||||
"perform-wikidata-edits/analyzing-edits": "Uw bewerkingen analyseren...",
|
||||
"wikibase-extension/menu-label": "Wikidata",
|
||||
"wikibase-extension/edit-wikibase-schema": "Wikidata-schema bewerken",
|
||||
"wikibase-extension/import-wikibase-schema": "Schema importeren",
|
||||
"wikibase-extension/manage-wikibase-account": "Wikidata-account beheren",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Bewerkingen naar Wikidata uploaden",
|
||||
"wikibase-extension/export-to-qs": "Naar QuickStatements exporteren",
|
||||
"wikibase-extension/export-schema": "Schema exporteren",
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-schema/schema-tab-header": "Schema",
|
||||
"wikibase-schema/warnings-tab-header": "Problemen",
|
||||
"wikibase-schema/edits-preview-tab-header": "Voorbeeld",
|
||||
"wikibase-schema/statements-header": "Verklaringen",
|
||||
"wikibase-schema/terms-header": "Labels, beschrijvingen en aliassen",
|
||||
"wikibase-schema/empty-statements": "geen verklaringen toegevoegd",
|
||||
"wikibase-schema/empty-terms": "geen labels, beschrijvingen of aliassen toegevoegd",
|
||||
"wikibase-schema/add-item-button": "item toevoegen",
|
||||
"wikibase-schema/add-term": "label, beschrijving of alias toevoegen",
|
||||
"wikibase-schema/remove": "verwijderen",
|
||||
"wikibase-schema/add-statement": "verklaring toevoegen",
|
||||
"wikibase-schema/add-value": "waarde toevoegen",
|
||||
"wikibase-schema/add-qualifier": "kwalificatie toevoegen",
|
||||
"wikibase-schema/copy-reference": "kopiëren",
|
||||
"wikibase-schema/paste-reference": "bron plakken",
|
||||
"wikibase-schema/reference-copied": "gekopieerd",
|
||||
"wikibase-schema/add-reference": "bron toevoegen",
|
||||
"wikibase-schema/add-reference-snak": "toevoegen",
|
||||
"wikibase-schema/property-placeholder": "eigenschap",
|
||||
"wikibase-schema/nb-references": " bronnen",
|
||||
"wikibase-schema/remove-column": "kolom verwijderen",
|
||||
"wikibase-schema/label": "Label",
|
||||
"wikibase-schema/description": "Beschrijving",
|
||||
"wikibase-schema/alias": "Alias",
|
||||
"wikibase-schema/amount": "hoeveelheid",
|
||||
"wikibase-schema/unit": "eenheid",
|
||||
"wikibase-schema/full-url": "volledige URL inclusief protocol",
|
||||
"wikibase-schema/tabular-data-with-prefix": "bestandsnaam beginnend met \"Data:\"",
|
||||
"wikibase-schema/commons-media": "bestandsnaam",
|
||||
"wikibase-schema/math-expression": "wiskundige uitdrukking",
|
||||
"wikibase-schema/geoshape-with-prefix": "bestandsnaam beginnend met \"Data:\"",
|
||||
"wikibase-schema/datatype-not-supported-yet": "Dit gegevenstype wordt nog niet ondersteund.",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "Uw schema is incompleet, los de bestaande problemen op.",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "Uw schema is incompleet, los de bestaande problemen op om het voorbeeld te bekijken.",
|
||||
"wikibase-schema/discard-button": "Wijzigingen negeren",
|
||||
"wikibase-schema/save-button": "Schema opslaan",
|
||||
"wikibase-schema/close-button": "Sluiten",
|
||||
"wikibase-schema/unsaved-changes-alt": "U heeft on-opgeslagen wijzigingen aan uw Wikidata-schema aangebracht.",
|
||||
"wikibase-schema/save-schema-alt": "Sla het schema op in OpenRefine. De wijzigingen worden nog niet naar Wikidata geüpload.",
|
||||
"wikibase-schema/discard-schema-changes-alt": "De wijzigingen aan het schema negeren.",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "Uw schema is incompleet en kan nog niet worden opgeslagen.",
|
||||
"wikibase-schema/unsaved-warning": "U heeft on-opgeslagen wijzigingen aan uw Wikidata-schema aangebracht. Toch sluiten?",
|
||||
"wikibase-preview/new-id": "nieuw item",
|
||||
"wikibase-account/dialog-header": "Wikidata-account",
|
||||
"wikibase-account/explain-log-in": "Aanmelden bij <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> laat u direct bewerkingen vanuit OpenRefine uploaden.",
|
||||
"wikibase-account/username-label": "Gebruikersnaam:",
|
||||
"wikibase-account/password-label": "Wachtwoord:",
|
||||
"wikibase-account/close": "Sluiten",
|
||||
"wikibase-account/log-in": "Aanmelden",
|
||||
"wikibase-account/logged-in-as": "U bent aangemeld als:",
|
||||
"wikibase-account/log-out": "Afmelden",
|
||||
"wikibase-account/connecting-to-wikibase": "Verbinding maken met Wikidata...",
|
||||
"perform-wikibase-edits/dialog-header": "Bewerkingen naar Wikidata uploaden",
|
||||
"perform-wikibase-edits/logged-in-as": "U bent aangemeld als",
|
||||
"perform-wikibase-edits/edit-summary-label": "Bewerkingssamenvatting:",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "een paar woorden om uw bewerkingen te beschrijven",
|
||||
"perform-wikibase-edits/perform-edits": "Bewerkingen uploaden",
|
||||
"perform-wikibase-edits/cancel": "Annuleren",
|
||||
"perform-wikibase-edits/analyzing-edits": "Uw bewerkingen analyseren...",
|
||||
"import-wikibase-schema/dialog-header": "Wikidata-schema importeren",
|
||||
"import-wikibase-schema/file-label": "Van JSON-bestand: ",
|
||||
"import-wikibase-schema/schema-label": "Of van JSON-tekst:",
|
||||
@ -75,7 +75,7 @@
|
||||
"warnings-messages/new-item-without-labels-or-aliases/title": "Nieuwe items zullen worden aangemaakt zonder label of alias.",
|
||||
"warnings-messages/new-item-without-descriptions/title": "Nieuwe items worden aangemaakt zonder beschrijving.",
|
||||
"warnings-messages/new-item-with-deleted-statements/title": "Statements op nieuwe items worden verwijderd.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/title": "Nieuwe items worden aangemaakt zonder type.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/title": "Nieuwe items worden aangemaakt zonder type.",
|
||||
"warnings-messages/add-statements-with-invalid-format/title": "{property_entity} verklaringen met ongeldig formaat.",
|
||||
"warnings-messages/unsourced-statements/title": "Verklaringen zonder bronnen.",
|
||||
"warnings-messages/unsourced-statements/body": "Meeste verklaringen hebben bronnen nodig. U kunt deze makkelijk in het schema invoegen.",
|
||||
|
@ -1,14 +1,14 @@
|
||||
{
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-extension/wikidata-schema": "Esquema de Wikidata",
|
||||
"wikidata-extension/export-wikidata-schema": "Exportar esquema de Wikidata",
|
||||
"wikidata-extension/export-schema": "Exportar esquema",
|
||||
"wikidata-extension/wikidata-edits": "Edições de Wikidata…",
|
||||
"wikidata-extension/qs-file": "Arquivo de QuickStatements",
|
||||
"wikidata-extension/export-to-qs": "Exportar para QuickStatements",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Carregar edições para Wikidata",
|
||||
"wikidata-extension/manage-wikidata-account": "Gerenciar conta de Wikidata",
|
||||
"wikidata-extension/import-wikidata-schema": "Importar esquema",
|
||||
"wikidata-extension/edit-wikidata-schema": "Editar esquema de Wikidata",
|
||||
"wikidata-extension/menu-label": "Wikidata"
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-extension/wikibase-schema": "Esquema de Wikidata",
|
||||
"wikibase-extension/export-wikibase-schema": "Exportar esquema de Wikidata",
|
||||
"wikibase-extension/export-schema": "Exportar esquema",
|
||||
"wikibase-extension/wikibase-edits": "Edições de Wikidata…",
|
||||
"wikibase-extension/qs-file": "Arquivo de QuickStatements",
|
||||
"wikibase-extension/export-to-qs": "Exportar para QuickStatements",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Carregar edições para Wikidata",
|
||||
"wikibase-extension/manage-wikibase-account": "Gerenciar conta de Wikidata",
|
||||
"wikibase-extension/import-wikibase-schema": "Importar esquema",
|
||||
"wikibase-extension/edit-wikibase-schema": "Editar esquema de Wikidata",
|
||||
"wikibase-extension/menu-label": "Wikidata"
|
||||
}
|
||||
|
@ -1,73 +1,73 @@
|
||||
{
|
||||
"wikidata-extension/menu-label": "Wikidata",
|
||||
"wikidata-extension/edit-wikidata-schema": "Redigera Wikidata-schema",
|
||||
"wikidata-extension/import-wikidata-schema": "Importera schema",
|
||||
"wikidata-extension/perform-edits-on-wikidata": "Ladda upp redigeringar till Wikidata",
|
||||
"wikidata-extension/export-to-qs": "Exportera till QuickStatements",
|
||||
"wikidata-extension/export-schema": "Exportera schema",
|
||||
"wikidata-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikidata-schema/dialog-explanation": "Wikidata-schemat nedan specificerar hur dina tabulerade data transformeras till Wikidata-redigeringar. Du kan dra och släppa kolumnnamnen nedan till de flesta indataboxarna: för varje rad genereras redigeringar med värdena i dessa kolumner.",
|
||||
"wikidata-schema/schema-tab-header": "Schema",
|
||||
"wikidata-schema/edits-preview-tab-header": "Förhandsvisning",
|
||||
"wikidata-schema/statements-header": "Uttalanden",
|
||||
"wikidata-schema/empty-statements": "Inga uttalanden tillagda",
|
||||
"wikidata-schema/empty-terms": "inga etiketter, beskrivningar eller alias tillagda",
|
||||
"wikidata-schema/remove": "ta bort",
|
||||
"wikidata-schema/add-statement": "lägg till uttalande",
|
||||
"wikidata-schema/add-value": "lägg till värde",
|
||||
"wikidata-schema/add-reference": "lägg till referens",
|
||||
"wikidata-schema/add-reference-snak": "lägg till",
|
||||
"wikidata-schema/property-placeholder": "egenskap",
|
||||
"wikidata-schema/nb-references": " referenser",
|
||||
"wikidata-schema/remove-column": "ta bort kolumn",
|
||||
"wikidata-schema/label": "Etikett",
|
||||
"wikidata-schema/description": "Beskrivning",
|
||||
"wikidata-schema/alias": "Alias",
|
||||
"wikidata-schema/amount": "antal",
|
||||
"wikidata-schema/unit": "enhet",
|
||||
"wikidata-schema/tabular-data-with-prefix": "filnamn som börjar med «Data:»",
|
||||
"wikidata-schema/commons-media": "filnamn",
|
||||
"wikidata-schema/math-expression": "matematiskt uttryck",
|
||||
"wikidata-schema/geoshape-with-prefix": "filnamn som börjar med «Data:»",
|
||||
"wikidata-schema/invalid-schema-warning-issues": "Schemat är ofullständigt, fixa detta för att se problemen.",
|
||||
"wikidata-schema/invalid-schema-warning-preview": "Schemat är ofullständigt, fixa detta för att se förhandsvisningen.",
|
||||
"wikidata-schema/save-button": "Spara schema",
|
||||
"wikidata-schema/close-button": "Stäng",
|
||||
"wikidata-schema/save-schema-alt": "Spara schemat i OpenRefine. Ändringarna kommer inte laddas upp till Wikidata ännu.",
|
||||
"wikidata-schema/incomplete-schema-could-not-be-saved": "Schemat är ofullständigt, så kan inte sparas ännu.",
|
||||
"wikidata-schema/unsaved-warning": "Ditt schema har ändringar som ej sparats. Stäng ändå?",
|
||||
"wikidata-account/dialog-header": "Wikidata-konto",
|
||||
"wikidata-account/close": "Stäng",
|
||||
"wikidata-account/log-in": "Logga in",
|
||||
"wikidata-account/logged-in-as": "Du är inloggad som:",
|
||||
"wikidata-account/log-out": "Logga ut",
|
||||
"perform-wikidata-edits/logged-in-as": "Du är inloggad som",
|
||||
"wikidata-extension/manage-wikidata-account": "hantera Wikidata-konto",
|
||||
"wikidata-schema/dialog-header": "Anpassa till Wikidata",
|
||||
"wikidata-schema/preview-explanation": "Den här fliken visar de första ändringarna (av {nb_edits}) som kommer att göras när du laddar upp ändringarna till Wikidata. Du kan använda fasetter för att inspektera ändringarna på specifika objekt.",
|
||||
"wikidata-schema/warnings-tab-header": "Problem",
|
||||
"wikidata-schema/terms-header": "Termer",
|
||||
"wikidata-schema/add-item-button": "lägg till objekt",
|
||||
"wikidata-schema/add-term": "lägg till term",
|
||||
"wikidata-schema/add-qualifier": "lägg till kvalifikator",
|
||||
"wikidata-schema/item-or-reconciled-column": "skriv in objekt eller dra avstämd kolumn hit",
|
||||
"wikidata-schema/full-url": "full URL inklusive protokoll",
|
||||
"wikidata-schema/datatype-not-supported-yet": "Denna datatyp stöds tyvärr inte ännu.",
|
||||
"wikidata-schema/discard-button": "Ignorera ändringar",
|
||||
"wikidata-schema/unsaved-changes-alt": "Du har olagrade ändringar i ditt Wikidata-schema.",
|
||||
"wikidata-schema/discard-schema-changes-alt": "Ignorera ändringarna i schemat.",
|
||||
"wikidata-preview/new-id": "nytt objekt",
|
||||
"wikidata-account/explain-log-in": "Logga in på <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> så att du kan ladda upp redigeringar direkt från OpenRefine.",
|
||||
"wikidata-account/username-label": "Användarnamn:",
|
||||
"wikidata-account/password-label": "Lösenord:",
|
||||
"wikidata-account/connecting-to-wikidata": "Anslut till Wikidata…",
|
||||
"perform-wikidata-edits/dialog-header": "Överför redigeringar till Wikidata",
|
||||
"perform-wikidata-edits/review-your-edits": "Du håller på att ladda upp {nb_edits} redigeringar till Wikidata. Kontrollera dem noggrant. Stora antal av ändringar bör skickas till <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">botgranskning</a> först.",
|
||||
"perform-wikidata-edits/edit-summary-label": "Redigeringssammanfattning:",
|
||||
"perform-wikidata-edits/edit-summary-placeholder": "några ord som beskriver dina ändringar",
|
||||
"perform-wikidata-edits/perform-edits": "Överför redigeringar",
|
||||
"perform-wikidata-edits/cancel": "Avbryt",
|
||||
"perform-wikidata-edits/analyzing-edits": "Analyserar dina ändringar…",
|
||||
"wikibase-extension/menu-label": "Wikidata",
|
||||
"wikibase-extension/edit-wikibase-schema": "Redigera Wikidata-schema",
|
||||
"wikibase-extension/import-wikibase-schema": "Importera schema",
|
||||
"wikibase-extension/perform-edits-on-wikibase": "Ladda upp redigeringar till Wikidata",
|
||||
"wikibase-extension/export-to-qs": "Exportera till QuickStatements",
|
||||
"wikibase-extension/export-schema": "Exportera schema",
|
||||
"wikibase-extension/quickstatements-export-name": "QuickStatements",
|
||||
"wikibase-schema/dialog-explanation": "Wikidata-schemat nedan specificerar hur dina tabulerade data transformeras till Wikidata-redigeringar. Du kan dra och släppa kolumnnamnen nedan till de flesta indataboxarna: för varje rad genereras redigeringar med värdena i dessa kolumner.",
|
||||
"wikibase-schema/schema-tab-header": "Schema",
|
||||
"wikibase-schema/edits-preview-tab-header": "Förhandsvisning",
|
||||
"wikibase-schema/statements-header": "Uttalanden",
|
||||
"wikibase-schema/empty-statements": "Inga uttalanden tillagda",
|
||||
"wikibase-schema/empty-terms": "inga etiketter, beskrivningar eller alias tillagda",
|
||||
"wikibase-schema/remove": "ta bort",
|
||||
"wikibase-schema/add-statement": "lägg till uttalande",
|
||||
"wikibase-schema/add-value": "lägg till värde",
|
||||
"wikibase-schema/add-reference": "lägg till referens",
|
||||
"wikibase-schema/add-reference-snak": "lägg till",
|
||||
"wikibase-schema/property-placeholder": "egenskap",
|
||||
"wikibase-schema/nb-references": " referenser",
|
||||
"wikibase-schema/remove-column": "ta bort kolumn",
|
||||
"wikibase-schema/label": "Etikett",
|
||||
"wikibase-schema/description": "Beskrivning",
|
||||
"wikibase-schema/alias": "Alias",
|
||||
"wikibase-schema/amount": "antal",
|
||||
"wikibase-schema/unit": "enhet",
|
||||
"wikibase-schema/tabular-data-with-prefix": "filnamn som börjar med «Data:»",
|
||||
"wikibase-schema/commons-media": "filnamn",
|
||||
"wikibase-schema/math-expression": "matematiskt uttryck",
|
||||
"wikibase-schema/geoshape-with-prefix": "filnamn som börjar med «Data:»",
|
||||
"wikibase-schema/invalid-schema-warning-issues": "Schemat är ofullständigt, fixa detta för att se problemen.",
|
||||
"wikibase-schema/invalid-schema-warning-preview": "Schemat är ofullständigt, fixa detta för att se förhandsvisningen.",
|
||||
"wikibase-schema/save-button": "Spara schema",
|
||||
"wikibase-schema/close-button": "Stäng",
|
||||
"wikibase-schema/save-schema-alt": "Spara schemat i OpenRefine. Ändringarna kommer inte laddas upp till Wikidata ännu.",
|
||||
"wikibase-schema/incomplete-schema-could-not-be-saved": "Schemat är ofullständigt, så kan inte sparas ännu.",
|
||||
"wikibase-schema/unsaved-warning": "Ditt schema har ändringar som ej sparats. Stäng ändå?",
|
||||
"wikibase-account/dialog-header": "Wikidata-konto",
|
||||
"wikibase-account/close": "Stäng",
|
||||
"wikibase-account/log-in": "Logga in",
|
||||
"wikibase-account/logged-in-as": "Du är inloggad som:",
|
||||
"wikibase-account/log-out": "Logga ut",
|
||||
"perform-wikibase-edits/logged-in-as": "Du är inloggad som",
|
||||
"wikibase-extension/manage-wikibase-account": "hantera Wikidata-konto",
|
||||
"wikibase-schema/dialog-header": "Anpassa till Wikidata",
|
||||
"wikibase-schema/preview-explanation": "Den här fliken visar de första ändringarna (av {nb_edits}) som kommer att göras när du laddar upp ändringarna till Wikidata. Du kan använda fasetter för att inspektera ändringarna på specifika objekt.",
|
||||
"wikibase-schema/warnings-tab-header": "Problem",
|
||||
"wikibase-schema/terms-header": "Termer",
|
||||
"wikibase-schema/add-item-button": "lägg till objekt",
|
||||
"wikibase-schema/add-term": "lägg till term",
|
||||
"wikibase-schema/add-qualifier": "lägg till kvalifikator",
|
||||
"wikibase-schema/item-or-reconciled-column": "skriv in objekt eller dra avstämd kolumn hit",
|
||||
"wikibase-schema/full-url": "full URL inklusive protokoll",
|
||||
"wikibase-schema/datatype-not-supported-yet": "Denna datatyp stöds tyvärr inte ännu.",
|
||||
"wikibase-schema/discard-button": "Ignorera ändringar",
|
||||
"wikibase-schema/unsaved-changes-alt": "Du har olagrade ändringar i ditt Wikidata-schema.",
|
||||
"wikibase-schema/discard-schema-changes-alt": "Ignorera ändringarna i schemat.",
|
||||
"wikibase-preview/new-id": "nytt objekt",
|
||||
"wikibase-account/explain-log-in": "Logga in på <a href=\"https://www.wikidata.org/\" target=\"_blank\">Wikidata</a> så att du kan ladda upp redigeringar direkt från OpenRefine.",
|
||||
"wikibase-account/username-label": "Användarnamn:",
|
||||
"wikibase-account/password-label": "Lösenord:",
|
||||
"wikibase-account/connecting-to-wikibase": "Anslut till Wikidata…",
|
||||
"perform-wikibase-edits/dialog-header": "Överför redigeringar till Wikidata",
|
||||
"perform-wikibase-edits/review-your-edits": "Du håller på att ladda upp {nb_edits} redigeringar till Wikidata. Kontrollera dem noggrant. Stora antal av ändringar bör skickas till <a href=\"https://www.wikidata.org/wiki/Wikidata:Requests_for_permissions/Bot\" target=\"_blank\">botgranskning</a> först.",
|
||||
"perform-wikibase-edits/edit-summary-label": "Redigeringssammanfattning:",
|
||||
"perform-wikibase-edits/edit-summary-placeholder": "några ord som beskriver dina ändringar",
|
||||
"perform-wikibase-edits/perform-edits": "Överför redigeringar",
|
||||
"perform-wikibase-edits/cancel": "Avbryt",
|
||||
"perform-wikibase-edits/analyzing-edits": "Analyserar dina ändringar…",
|
||||
"import-wikibase-schema/dialog-header": "Importera Wikidata-schema",
|
||||
"import-wikibase-schema/file-label": "Från JSON-fil: ",
|
||||
"import-wikibase-schema/schema-label": "Eller från JSON-text:",
|
||||
@ -81,8 +81,8 @@
|
||||
"warnings-messages/new-item-without-descriptions/body": "Lägga till beskrivningar för nya objekt som {example_entity} gör det enklare att skilja objekten från andra som har samma etikett.",
|
||||
"warnings-messages/new-item-with-deleted-statements/title": "Radera påståenden om nya objekt.",
|
||||
"warnings-messages/new-item-with-deleted-statements/body": "Det finns förmodligen något fel i ditt schema eller projekt.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/title": "Nya objekt skapade utan typ.",
|
||||
"warnings-messages/new-item-without-P31-or-P279/body": "Du bör ange \"instans av\" (P31) eller \"underklass till\" (P279) för varje objekt som du skapar, till exempel {example_entity}.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/title": "Nya objekt skapade utan typ.",
|
||||
"warnings-messages/new-item-without-instance-of-or-subclass-of/body": "Du bör ange \"instans av\" (P31) eller \"underklass till\" (P279) för varje objekt som du skapar, till exempel {example_entity}.",
|
||||
"warnings-messages/add-statements-with-invalid-format/title": "{property_entity} påstående med ogiltigt format.",
|
||||
"warnings-messages/add-statements-with-invalid-format/body": "Värden för den här egenskapen förväntas matcha det reguljära uttrycket <span class = \"wb-issue-preformat\">{regex}</span>, vilket inte är fallet för <span class = \"wb-issue-preformat\">{ example_value}</span> tillagt på {example_item_entity}.",
|
||||
"warnings-messages/remove-statements-with-invalid-format/title": "Tog bort påståenden med ogiltigt format.",
|
||||
@ -143,7 +143,7 @@
|
||||
"warnings-messages/no-unit-provided/body": "Värden som <span class = \"wb-issue-preformat\">{example_value}</span> på {example_item_entity} förväntas ha enhet.",
|
||||
"warnings-messages/invalid-entity-type/title": "{property_entity} används i objekt",
|
||||
"warnings-messages/invalid-entity-type/body": "Användning av {property_entity} i objekt som {example_entity} är icke giltigt.",
|
||||
"wikidata-schema/copy-reference": "kopiera",
|
||||
"wikidata-schema/paste-reference": "klistra referens",
|
||||
"wikidata-extension/export-wikidata-schema": "Exportera Wikidata-schema"
|
||||
"wikibase-schema/copy-reference": "kopiera",
|
||||
"wikibase-schema/paste-reference": "klistra referens",
|
||||
"wikibase-extension/export-wikibase-schema": "Exportera Wikidata-schema"
|
||||
}
|
||||
|
3
extensions/wikidata/module/scripts/ajv.min.js
vendored
Normal file
3
extensions/wikidata/module/scripts/ajv.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -0,0 +1,21 @@
|
||||
<div class="dialog-frame add-wikibase-dialog" style="width: 700px;">
|
||||
<div class="dialog-header" bind="dialogHeader"></div>
|
||||
<div class="dialog-body" bind="dialogBody">
|
||||
<p bind="explainAddManifest"></p>
|
||||
<div>
|
||||
<p bind="explainAddManifestViaURL"></p>
|
||||
<div class="input-container"><input bind="manifestURLInput"/></div>
|
||||
</div>
|
||||
<div>
|
||||
<p bind="explainPasteManifest"></p>
|
||||
<textarea bind="manifestTextarea"></textarea>
|
||||
<p class="invalid-manifest" bind="invalidManifest"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dialog-footer" bind="dialogFooter">
|
||||
<div class="add-wikibase-buttons">
|
||||
<button class="button" bind="cancelButton"></button>
|
||||
<button class="button" bind="addButton"></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,13 +1,13 @@
|
||||
<div class="dialog-frame" style="width: 800px;">
|
||||
<div class="dialog-header" bind="dialogHeader"></div>
|
||||
<div class="dialog-body" bind="dialogBody">
|
||||
<label for="schema-file" bind="fileLabel"></label><input type="file" name="schema-file" bind="fileInput" /><br />
|
||||
<label for="schema" bind="schemaLabel"></label><br />
|
||||
<textarea name="schema" class="wikibase-schema-textarea" bind="schemaTextarea"></textarea><br />
|
||||
<div class="wikibase-invalid-schema" bind="invalidSchema"></div>
|
||||
<div class="wikibase-import-schema-buttons">
|
||||
<button class="button cancel-button" bind="cancelButton"></button>
|
||||
<button class="button button-primary" bind="importButton"></button>
|
||||
</div>
|
||||
<label for="schema-file" bind="fileLabel"></label><input type="file" id="schema-file" bind="fileInput"/><br/><br/>
|
||||
<label for="schema" bind="schemaLabel"></label><br/><br/>
|
||||
<textarea id="schema" class="wikibase-schema-textarea" bind="schemaTextarea"></textarea>
|
||||
<div class="wikibase-invalid-schema" bind="invalidSchema"></div>
|
||||
</div>
|
||||
<div class="dialog-footer wikibase-import-schema-buttons">
|
||||
<button class="button cancel-button" bind="cancelButton"></button>
|
||||
<button class="button button-primary" bind="importButton"></button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -29,7 +29,7 @@ ImportSchemaDialog.launch = function() {
|
||||
elmts.schemaTextarea.val(evt.target.result);
|
||||
elmts.schemaTextarea.hide();
|
||||
elmts.schemaLabel.hide();
|
||||
}
|
||||
};
|
||||
freader.readAsText(file);
|
||||
});
|
||||
|
||||
@ -37,6 +37,14 @@ ImportSchemaDialog.launch = function() {
|
||||
var schema = null;
|
||||
try {
|
||||
schema = JSON.parse(elmts.schemaTextarea.val());
|
||||
|
||||
// If Wikibase related information is not included in the schema,
|
||||
// fall back to Wikidata.
|
||||
if (!schema.siteIri || !schema.mediaWikiApiEndpoint) {
|
||||
schema.siteIri = WikidataManifestV1_0.wikibase.site_iri;
|
||||
schema.mediaWikiApiEndpoint = WikidataManifestV1_0.mediawiki.api;
|
||||
schema.editGroupsURLSchema = WikidataManifestV1_0.editgroups.url_schema;
|
||||
}
|
||||
} catch(e) {
|
||||
elmts.invalidSchema.text($.i18n('import-wikibase-schema/invalid-schema'));
|
||||
return;
|
||||
@ -51,7 +59,7 @@ ImportSchemaDialog.launch = function() {
|
||||
{
|
||||
onDone: function() {
|
||||
theProject.overlayModels.wikibaseSchema = schema;
|
||||
SchemaAlignmentDialog._discardChanges();
|
||||
SchemaAlignment._discardChanges();
|
||||
dismiss();
|
||||
},
|
||||
onError: function(e) {
|
||||
|
@ -3,7 +3,7 @@
|
||||
<div class="dialog-body" bind="dialogBody" style="position: relative; height: 100px">
|
||||
<div class="wikidata-logo">
|
||||
<a href="https://www.wikidata.org/" target="_blank">
|
||||
<img src="extension/wikidata/images/wikidata.png" style="height: 100px" alt="Wikidata logo"/>
|
||||
<img src="extension/wikidata/images/Wikibase_logo.png" style="height: 100px" alt="Wikidata logo"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="right-of-logo">
|
||||
|
@ -1,19 +1,12 @@
|
||||
var ManageAccountDialog = {};
|
||||
|
||||
ManageAccountDialog.firstLogin = true;
|
||||
|
||||
/**
|
||||
* Displays the logged in page if the user is logged in,
|
||||
* displays the login page otherwise.
|
||||
*/
|
||||
ManageAccountDialog.display = function (logged_in_username, onSuccess) {
|
||||
if (logged_in_username == null) {
|
||||
if (ManageAccountDialog.firstLogin) {
|
||||
ManageAccountDialog.firstLogin = false;
|
||||
ManageAccountDialog.tryLoginWithCookies(onSuccess);
|
||||
} else {
|
||||
ManageAccountDialog.displayPasswordLogin(onSuccess);
|
||||
}
|
||||
ManageAccountDialog.tryLoginWithCookies(onSuccess);
|
||||
} else {
|
||||
ManageAccountDialog.displayLoggedIn(logged_in_username);
|
||||
}
|
||||
@ -21,37 +14,36 @@ ManageAccountDialog.display = function (logged_in_username, onSuccess) {
|
||||
|
||||
|
||||
ManageAccountDialog.tryLoginWithCookies = function (onSuccess) {
|
||||
// In the first login, we try logging in with cookies,
|
||||
// the backend may take a while to tell if the cookies are valid or not.
|
||||
// So we need to call DialogSystem.showBusy to inform the user that
|
||||
// OpenRefine is trying connecting to Wikidata.
|
||||
const discardWaiter = DialogSystem.showBusy($.i18n('wikidata-account/connecting-to-wikidata'));
|
||||
// Try with cookies first.
|
||||
const discardWaiter = DialogSystem.showBusy($.i18n('wikibase-account/connecting-to-wikibase'));
|
||||
Refine.postCSRF(
|
||||
"command/wikidata/login",
|
||||
{},
|
||||
{"wb-api-endpoint": WikibaseManager.getSelectedWikibaseApi()},
|
||||
function (data) {
|
||||
discardWaiter();
|
||||
if (data.logged_in) {
|
||||
onSuccess(data.username);
|
||||
ManageAccountDialog.displayLoggedIn(data.username);
|
||||
} else {
|
||||
// If failed, then login with username/password.
|
||||
ManageAccountDialog.displayPasswordLogin(onSuccess);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
ManageAccountDialog.initCommon = function (elmts) {
|
||||
elmts.dialogHeader.text($.i18n('wikidata-account/dialog-header'));
|
||||
elmts.explainLogIn.html($.i18n('wikidata-account/explain-log-in'));
|
||||
elmts.cancelButton.text($.i18n('wikidata-account/close'));
|
||||
elmts.dialogHeader.text($.i18n('wikibase-account/dialog-header', WikibaseManager.getSelectedWikibaseName()));
|
||||
elmts.explainLogIn.html($.i18n('wikibase-account/explain-log-in',
|
||||
WikibaseManager.getSelectedWikibaseMainPage(), WikibaseManager.getSelectedWikibaseName()));
|
||||
elmts.cancelButton.text($.i18n('wikibase-account/close'));
|
||||
};
|
||||
|
||||
ManageAccountDialog.displayLoggedIn = function (logged_in_username) {
|
||||
var frame = $(DOM.loadHTML("wikidata", "scripts/dialogs/logged-in-dialog.html"));
|
||||
var elmts = DOM.bind(frame);
|
||||
ManageAccountDialog.initCommon(elmts);
|
||||
elmts.loggedInAs.text($.i18n('wikidata-account/logged-in-as'));
|
||||
elmts.logoutButton.text($.i18n('wikidata-account/log-out'));
|
||||
elmts.loggedInAs.text($.i18n('wikibase-account/logged-in-as'));
|
||||
elmts.logoutButton.text($.i18n('wikibase-account/log-out'));
|
||||
|
||||
var level = DialogSystem.showDialog(frame);
|
||||
var dismiss = function () {
|
||||
@ -60,7 +52,7 @@ ManageAccountDialog.displayLoggedIn = function (logged_in_username) {
|
||||
|
||||
elmts.loggedInUsername
|
||||
.text(logged_in_username)
|
||||
.attr('href', 'https://www.wikidata.org/wiki/User:' + logged_in_username);
|
||||
.attr('href', WikibaseManager.getSelectedWikibaseRoot() + 'User:' + logged_in_username);
|
||||
|
||||
elmts.cancelButton.click(function (e) {
|
||||
dismiss();
|
||||
@ -70,7 +62,10 @@ ManageAccountDialog.displayLoggedIn = function (logged_in_username) {
|
||||
frame.hide();
|
||||
Refine.postCSRF(
|
||||
"command/wikidata/login",
|
||||
"logout=true",
|
||||
$.param({
|
||||
"logout": "true",
|
||||
"wb-api-endpoint": WikibaseManager.getSelectedWikibaseApi()
|
||||
}),
|
||||
function (data) {
|
||||
frame.show();
|
||||
if (!data.logged_in) {
|
||||
@ -84,18 +79,23 @@ ManageAccountDialog.displayPasswordLogin = function (onSuccess) {
|
||||
const frame = $(DOM.loadHTML("wikidata", "scripts/dialogs/password-login-dialog.html"));
|
||||
const elmts = DOM.bind(frame);
|
||||
ManageAccountDialog.initCommon(elmts);
|
||||
elmts.explainOwnerOnlyConsumerLogin.html($.i18n('wikidata-account/explain-owner-only-consumer-login'));
|
||||
elmts.invalidCredentials.text($.i18n('wikidata-account/invalid-credentials'));
|
||||
elmts.explainOwnerOnlyConsumerLogin.html($.i18n('wikibase-account/explain-owner-only-consumer-login'));
|
||||
elmts.invalidCredentials.text($.i18n('wikibase-account/invalid-credentials'));
|
||||
elmts.invalidCredentials.hide();
|
||||
elmts.usernameLabel.text($.i18n('wikidata-account/username-label'));
|
||||
elmts.usernameInput.attr("placeholder", $.i18n('wikidata-account/username-placeholder'));
|
||||
elmts.passwordLabel.text($.i18n('wikidata-account/password-label'));
|
||||
elmts.passwordInput.attr("placeholder", $.i18n('wikidata-account/password-placeholder'));
|
||||
elmts.rememberMe.text($.i18n('wikidata-account/remember-me'));
|
||||
elmts.passwordRememberMeTitle.attr("title", $.i18n('wikidata-account/password-remember-me-title'));
|
||||
elmts.loginButton.text($.i18n('wikidata-account/log-in'));
|
||||
elmts.usernameLabel.text($.i18n('wikibase-account/username-label'));
|
||||
elmts.usernameInput.attr("placeholder", $.i18n('wikibase-account/username-placeholder'));
|
||||
elmts.passwordLabel.text($.i18n('wikibase-account/password-label'));
|
||||
elmts.passwordInput.attr("placeholder", $.i18n('wikibase-account/password-placeholder'));
|
||||
elmts.rememberMe.text($.i18n('wikibase-account/remember-me'));
|
||||
elmts.passwordRememberMeTitle.attr("title", $.i18n('wikibase-account/password-remember-me-title'));
|
||||
elmts.loginButton.text($.i18n('wikibase-account/log-in'));
|
||||
elmts.usernameInput.focus();
|
||||
|
||||
// We don't support logging in with owner-only consumer if the target Wikibase doesn't support OAuth.
|
||||
if (!WikibaseManager.getSelectedWikibaseOAuth()) {
|
||||
elmts.dialogFooter.hide();
|
||||
}
|
||||
|
||||
var level = DialogSystem.showDialog(frame);
|
||||
var dismiss = function () {
|
||||
DialogSystem.dismissUntil(level - 1);
|
||||
@ -112,9 +112,11 @@ ManageAccountDialog.displayPasswordLogin = function (onSuccess) {
|
||||
|
||||
elmts.loginForm.submit(function (e) {
|
||||
frame.hide();
|
||||
let formArr = elmts.loginForm.serializeArray();
|
||||
formArr.push({name: "wb-api-endpoint", value: WikibaseManager.getSelectedWikibaseApi()});
|
||||
Refine.postCSRF(
|
||||
"command/wikidata/login",
|
||||
elmts.loginForm.serialize(),
|
||||
$.param(formArr),
|
||||
function (data) {
|
||||
if (data.logged_in) {
|
||||
dismiss();
|
||||
@ -132,21 +134,22 @@ ManageAccountDialog.displayOwnerOnlyConsumerLogin = function (onSuccess) {
|
||||
var frame = $(DOM.loadHTML("wikidata", "scripts/dialogs/owner-only-consumer-login-dialog.html"));
|
||||
var elmts = DOM.bind(frame);
|
||||
ManageAccountDialog.initCommon(elmts);
|
||||
elmts.explainOwnerOnlyConsumerWiki.html($.i18n('wikidata-account/explain-owner-only-consumer-wiki'));
|
||||
elmts.explainPasswordLogin.html($.i18n('wikidata-account/explain-password-login'));
|
||||
elmts.invalidCredentials.text($.i18n('wikidata-account/invalid-credentials'));
|
||||
elmts.explainOwnerOnlyConsumerWiki.html($.i18n('wikibase-account/explain-owner-only-consumer-wiki',
|
||||
WikibaseManager.getSelectedWikibaseOAuth().registration_page));
|
||||
elmts.explainPasswordLogin.html($.i18n('wikibase-account/explain-password-login'));
|
||||
elmts.invalidCredentials.text($.i18n('wikibase-account/invalid-credentials'));
|
||||
elmts.invalidCredentials.hide();
|
||||
elmts.consumerTokenLabel.text($.i18n('wikidata-account/consumer-token-label'));
|
||||
elmts.consumerTokenInput.attr("placeholder", $.i18n('wikidata-account/consumer-token-placeholder'));
|
||||
elmts.consumerSecretLabel.text($.i18n('wikidata-account/consumer-secret-label'));
|
||||
elmts.consumerSecretInput.attr("placeholder", $.i18n('wikidata-account/consumer-secret-placeholder'));
|
||||
elmts.accessTokenLabel.text($.i18n('wikidata-account/access-token-label'));
|
||||
elmts.accessTokenInput.attr("placeholder", $.i18n('wikidata-account/access-token-placeholder'));
|
||||
elmts.accessSecretLabel.text($.i18n('wikidata-account/access-secret-label'));
|
||||
elmts.accessSecretInput.attr("placeholder", $.i18n('wikidata-account/access-secret-placeholder'));
|
||||
elmts.rememberMe.text($.i18n('wikidata-account/remember-me'));
|
||||
elmts.ownerOnlyConsumerRememberMeTitle.attr("title", $.i18n('wikidata-account/owner-only-consumer-remember-me-title'));
|
||||
elmts.loginButton.text($.i18n('wikidata-account/log-in'));
|
||||
elmts.consumerTokenLabel.text($.i18n('wikibase-account/consumer-token-label'));
|
||||
elmts.consumerTokenInput.attr("placeholder", $.i18n('wikibase-account/consumer-token-placeholder'));
|
||||
elmts.consumerSecretLabel.text($.i18n('wikibase-account/consumer-secret-label'));
|
||||
elmts.consumerSecretInput.attr("placeholder", $.i18n('wikibase-account/consumer-secret-placeholder'));
|
||||
elmts.accessTokenLabel.text($.i18n('wikibase-account/access-token-label'));
|
||||
elmts.accessTokenInput.attr("placeholder", $.i18n('wikibase-account/access-token-placeholder'));
|
||||
elmts.accessSecretLabel.text($.i18n('wikibase-account/access-secret-label'));
|
||||
elmts.accessSecretInput.attr("placeholder", $.i18n('wikibase-account/access-secret-placeholder'));
|
||||
elmts.rememberMe.text($.i18n('wikibase-account/remember-me'));
|
||||
elmts.ownerOnlyConsumerRememberMeTitle.attr("title", $.i18n('wikibase-account/owner-only-consumer-remember-me-title'));
|
||||
elmts.loginButton.text($.i18n('wikibase-account/log-in'));
|
||||
elmts.consumerTokenInput.focus();
|
||||
|
||||
var level = DialogSystem.showDialog(frame);
|
||||
@ -165,9 +168,11 @@ ManageAccountDialog.displayOwnerOnlyConsumerLogin = function (onSuccess) {
|
||||
|
||||
elmts.loginForm.submit(function (e) {
|
||||
frame.hide();
|
||||
let formArr = elmts.loginForm.serializeArray();
|
||||
formArr.push({name: "wb-api-endpoint", value: WikibaseManager.getSelectedWikibaseApi()});
|
||||
Refine.postCSRF(
|
||||
"command/wikidata/login",
|
||||
elmts.loginForm.serialize(),
|
||||
$.param(formArr),
|
||||
function (data) {
|
||||
if (data.logged_in) {
|
||||
dismiss();
|
||||
@ -189,8 +194,14 @@ ManageAccountDialog.displayOwnerOnlyConsumerLogin = function (onSuccess) {
|
||||
ManageAccountDialog.isLoggedIn = function (callback) {
|
||||
$.get(
|
||||
"command/wikidata/login",
|
||||
{"wb-api-endpoint": WikibaseManager.getSelectedWikibaseApi()},
|
||||
function (data) {
|
||||
callback(data.username);
|
||||
if (data.logged_in) {
|
||||
// make sure that the user is logged in to the selected Wikibase
|
||||
callback(data.username)
|
||||
} else {
|
||||
callback(null);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
<div class="dialog-body" bind="dialogBody" style="position: relative; height: 240px">
|
||||
<div class="wikidata-logo">
|
||||
<a href="https://www.wikidata.org/" target="_blank">
|
||||
<img src="extension/wikidata/images/wikidata.png" alt="Wikidata logo"/>
|
||||
<img src="extension/wikidata/images/Wikibase_logo.png" alt="Wikidata logo"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="right-of-logo">
|
||||
|
@ -3,7 +3,7 @@
|
||||
<div class="dialog-body" bind="dialogBody" style="position: relative; height: 140px">
|
||||
<div class="wikidata-logo">
|
||||
<a href="https://www.wikidata.org/" target="_blank">
|
||||
<img src="extension/wikidata/images/wikidata.png" alt="Wikidata logo"/>
|
||||
<img src="extension/wikidata/images/Wikibase_logo.png" alt="Wikidata logo"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="right-of-logo">
|
||||
@ -40,7 +40,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dialog-footer wikibase-login-dialog-footer">
|
||||
<div class="dialog-footer wikibase-login-dialog-footer" bind="dialogFooter">
|
||||
<span bind="explainOwnerOnlyConsumerLogin"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -6,15 +6,31 @@
|
||||
<div class="perform-edits-warnings-area" bind="warningsArea">
|
||||
</div>
|
||||
<div class="wikibase-perform-edits-area">
|
||||
<form id="wikibase-perform-edits-form" onsubmit="return false;" bind="performEditsForm" autocomplete="on">
|
||||
<p style="margin-top: 0.5rem; margin-bottom: 0.5rem"><span bind="loggedInAs"></span> <a bind="loggedInUsername" target="_blank"></a>.</p>
|
||||
<p><span bind="editSummaryLabel"></span> <input type="text" name="editSummary" bind="editSummary" class="edit-summary" value="" /></p>
|
||||
<div class="wikibase-perform-edits-buttons">
|
||||
<button class="button cancel-button" bind="cancelButton"></button>
|
||||
<button class="button button-primary" bind="performEditsButton"></button>
|
||||
</div>
|
||||
</form>
|
||||
<iframe id="hiddeniframe" src="javascript:false" class="hidden" bind="hiddenIframe"></iframe>
|
||||
<form id="wikibase-perform-edits-form" onsubmit="return false;" bind="performEditsForm" autocomplete="on">
|
||||
<p>
|
||||
<span bind="loggedInAs"></span>: <a bind="loggedInUsername" target="_blank"></a>.
|
||||
</p>
|
||||
<table>
|
||||
<tr>
|
||||
<td><label for="editSummary" bind="editSummaryLabel"></label></td>
|
||||
<td>
|
||||
<input type="text" id="editSummary" name="editSummary" bind="editSummary" class="edit-summary" value=""/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="maxlag" bind="maxlagLabel"></label></td>
|
||||
<td>
|
||||
<input type="text" id="maxlag" name="maxlag" bind="maxlag" style="width: 50px"/>
|
||||
<span bind="explainMaxlag"></span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="wikibase-perform-edits-buttons">
|
||||
<button class="button cancel-button" bind="cancelButton"></button>
|
||||
<button class="button button-primary" bind="performEditsButton"></button>
|
||||
</div>
|
||||
</form>
|
||||
<iframe id="hiddeniframe" src="javascript:false" class="hidden" bind="hiddenIframe"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -10,13 +10,16 @@ PerformEditsDialog.launch = function(logged_in_username, max_severity) {
|
||||
}
|
||||
|
||||
this._level = DialogSystem.showDialog(frame);
|
||||
|
||||
this._elmts.dialogHeader.text($.i18n('perform-wikidata-edits/dialog-header'));
|
||||
this._elmts.loggedInAs.text($.i18n('perform-wikidata-edits/logged-in-as'));
|
||||
this._elmts.editSummaryLabel.text($.i18n('perform-wikidata-edits/edit-summary-label'));
|
||||
this._elmts.editSummary.attr('placeholder', $.i18n('perform-wikidata-edits/edit-summary-placeholder'));
|
||||
this._elmts.performEditsButton.text($.i18n('perform-wikidata-edits/perform-edits'));
|
||||
this._elmts.cancelButton.text($.i18n('perform-wikidata-edits/cancel'));
|
||||
this._elmts.dialogHeader.text($.i18n('perform-wikibase-edits/dialog-header', WikibaseManager.getSelectedWikibaseName()));
|
||||
this._elmts.loggedInAs.text($.i18n('perform-wikibase-edits/logged-in-as'));
|
||||
this._elmts.editSummaryLabel.text($.i18n('perform-wikibase-edits/edit-summary-label'));
|
||||
this._elmts.editSummary.attr('placeholder', $.i18n('perform-wikibase-edits/edit-summary-placeholder'));
|
||||
this._elmts.maxlagLabel.text($.i18n('perform-wikibase-edits/maxlag-label'));
|
||||
this._elmts.maxlag.val(WikibaseManager.getSelectedWikibaseMaxlag());
|
||||
this._elmts.maxlag.attr('placeholder', WikibaseManager.getSelectedWikibaseMaxlag());
|
||||
this._elmts.explainMaxlag.html($.i18n('perform-wikibase-edits/explain-maxlag'));
|
||||
this._elmts.performEditsButton.text($.i18n('perform-wikibase-edits/perform-edits'));
|
||||
this._elmts.cancelButton.text($.i18n('perform-wikibase-edits/cancel'));
|
||||
|
||||
var hiddenIframe = $('#hiddenIframe').contents();
|
||||
|
||||
@ -30,24 +33,36 @@ PerformEditsDialog.launch = function(logged_in_username, max_severity) {
|
||||
var formCopy = hiddenIframe.find("#wikibase-perform-edits-form");
|
||||
formCopy.submit();
|
||||
|
||||
if(elmts.editSummary.val().length == 0) {
|
||||
if (elmts.editSummary.val().length === 0) {
|
||||
elmts.editSummary.focus();
|
||||
} else {
|
||||
Refine.postProcess(
|
||||
"wikidata",
|
||||
"perform-wikibase-edits",
|
||||
{},
|
||||
{ summary: elmts.editSummary.val(), },
|
||||
{ includeEngine: true, cellsChanged: true, columnStatsChanged: true },
|
||||
{ onDone: function() { dismiss(); } }
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (elmts.maxlag.val().length === 0) {
|
||||
elmts.maxlag.val(WikibaseManager.getSelectedWikibaseMaxlag());
|
||||
}
|
||||
|
||||
// validate maxlag
|
||||
if (!/^\+?[1-9]\d*$/.test(elmts.maxlag.val())) {
|
||||
elmts.maxlag.focus();
|
||||
alert($.i18n('perform-wikibase-edits/maxlag-validation'));
|
||||
return;
|
||||
}
|
||||
|
||||
Refine.postProcess(
|
||||
"wikidata",
|
||||
"perform-wikibase-edits",
|
||||
{},
|
||||
{ summary: elmts.editSummary.val(), maxlag: elmts.maxlag.val() },
|
||||
{ includeEngine: true, cellsChanged: true, columnStatsChanged: true },
|
||||
{ onDone: function() { dismiss(); } }
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
elmts.loggedInUsername
|
||||
.text(logged_in_username)
|
||||
.attr('href','https://www.wikidata.org/wiki/User:'+logged_in_username);
|
||||
|
||||
.attr('href', WikibaseManager.getSelectedWikibaseRoot() + 'User:' + logged_in_username);
|
||||
|
||||
frame.find('.cancel-button').click(function() {
|
||||
dismiss();
|
||||
});
|
||||
@ -69,9 +84,11 @@ PerformEditsDialog.launch = function(logged_in_username, max_severity) {
|
||||
};
|
||||
|
||||
PerformEditsDialog.updateEditCount = function(edit_count) {
|
||||
this._elmts.reviewYourEdits.html(
|
||||
$.i18n('perform-wikidata-edits/review-your-edits')
|
||||
.replace('{nb_edits}', edit_count));
|
||||
this._elmts.reviewYourEdits.html($.i18n('perform-wikibase-edits/review-your-edits',
|
||||
edit_count,
|
||||
WikibaseManager.getSelectedWikibaseMainPage(),
|
||||
WikibaseManager.getSelectedWikibaseName(),
|
||||
));
|
||||
};
|
||||
|
||||
PerformEditsDialog._updateWarnings = function(data) {
|
||||
@ -83,32 +100,30 @@ PerformEditsDialog._updateWarnings = function(data) {
|
||||
PerformEditsDialog.updateEditCount(data.edit_count);
|
||||
|
||||
var table = $('<table></table>').appendTo(mainDiv);
|
||||
for (var i = 0; i != warnings.length; i++) {
|
||||
for (var i = 0; i < warnings.length; i++) {
|
||||
var rendered = WarningsRenderer._renderWarning(warnings[i]);
|
||||
rendered.appendTo(table);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
PerformEditsDialog.checkAndLaunch = function () {
|
||||
var self = this;
|
||||
this.frame = $(DOM.loadHTML("wikidata", "scripts/dialogs/perform-edits-dialog.html"));
|
||||
this._elmts = DOM.bind(this.frame);
|
||||
this.missingSchema = false;
|
||||
|
||||
var onSaved = function () {
|
||||
ManageAccountDialog.ensureLoggedIn(function (logged_in_username) {
|
||||
var discardWaiter = DialogSystem.showBusy($.i18n('perform-wikidata-edits/analyzing-edits'));
|
||||
var discardWaiter = DialogSystem.showBusy($.i18n('perform-wikibase-edits/analyzing-edits'));
|
||||
Refine.postCSRF(
|
||||
"command/wikidata/preview-wikibase-schema?" + $.param({project: theProject.id}),
|
||||
{engine: JSON.stringify(ui.browsingEngine.getJSON())},
|
||||
{manifest: JSON.stringify(WikibaseManager.getSelectedWikibase()), engine: JSON.stringify(ui.browsingEngine.getJSON())},
|
||||
function (data) {
|
||||
discardWaiter();
|
||||
if (data['code'] != 'error') {
|
||||
if (data['code'] !== 'error') {
|
||||
PerformEditsDialog._updateWarnings(data);
|
||||
PerformEditsDialog.launch(logged_in_username, data['max_severity']);
|
||||
} else {
|
||||
SchemaAlignmentDialog.launch(
|
||||
PerformEditsDialog.checkAndLaunch);
|
||||
SchemaAlignment.launch();
|
||||
}
|
||||
},
|
||||
"json"
|
||||
@ -117,8 +132,8 @@ PerformEditsDialog.checkAndLaunch = function () {
|
||||
};
|
||||
|
||||
|
||||
if (SchemaAlignmentDialog.isSetUp() && SchemaAlignmentDialog._hasUnsavedChanges) {
|
||||
SchemaAlignmentDialog._save(onSaved);
|
||||
if (SchemaAlignment.isSetUp() && SchemaAlignment._hasUnsavedChanges) {
|
||||
SchemaAlignment._save(onSaved);
|
||||
} else {
|
||||
onSaved();
|
||||
}
|
||||
|
@ -1,49 +0,0 @@
|
||||
<div class="dialog-frame" style="width: 800px;">
|
||||
<div class="dialog-header" bind="dialogHeader"></div>
|
||||
<div class="dialog-body" bind="dialogBody">
|
||||
<div id="schema-alignment-tabs" class="refine-tabs">
|
||||
<ul>
|
||||
<li><a href="#schema-alignment-tabs-schema" bind="schemaTabHeader"></a></li>
|
||||
<li><a href="#schema-alignment-tabs-warnings"><span bind="warningsTabHeader"></span> <span class="schema-alignment-total-warning-count" bind="warningsTabCount"></span></a></li>
|
||||
<li><a href="#schema-alignment-tabs-preview-edits" bind="editsPreviewTabHeader"></a></li>
|
||||
</ul>
|
||||
<div id="schema-alignment-tabs-schema">
|
||||
<div bind="schemaHeader">
|
||||
<p class="body-text" bind="dialogExplanation"></p>
|
||||
<div class="schema-alignment-dialog-columns-area" bind="columnsArea">
|
||||
</div>
|
||||
</div>
|
||||
<div class="schema-alignment-dialog-canvas" bind="canvas">
|
||||
<div class="schema-alignment-dialog-statements-area" bind="statementsArea">
|
||||
<div id="schema-alignment-statements-container">
|
||||
</div>
|
||||
<div class="wbs-toolbar"><a class="wbs-add-item" bind="addItemButton"></a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="schema-alignment-tabs-warnings" style="display: none;">
|
||||
<div class="invalid-schema-warning" bind="invalidSchemaWarningIssues"></div>
|
||||
<div class="schema-alignment-dialog-warnings" bind="warningsArea"></div>
|
||||
</div>
|
||||
<div id="schema-alignment-tabs-preview-edits" style="display: none;">
|
||||
<p class="body-text" bind="previewExplanation"></p>
|
||||
<div class="invalid-schema-warning" bind="invalidSchemaWarningPreview"></div>
|
||||
<div class="schema-alignment-dialog-preview"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dialog-footer" bind="dialogFooter"><div class="grid-layout layout-normal layout-full"><table><tr>
|
||||
<td>
|
||||
<button class="button" bind="resetButton"></button>
|
||||
</td>
|
||||
<td style="text-align:right;">
|
||||
<button class="button button-primary" bind="saveButton"></button>
|
||||
</td>
|
||||
<td style="text-align:center;" width="30%">
|
||||
<span class="schema-alignment-status-indicator" bind="statusIndicator"></span>
|
||||
</td>
|
||||
<td style="text-align:right;" width="1%">
|
||||
<button class="button" bind="closeButton"></button>
|
||||
</td>
|
||||
</tr></table></div></div>
|
||||
</div>
|
@ -0,0 +1,18 @@
|
||||
<div class="dialog-frame wikibase-dialog" style="width: 700px">
|
||||
<div class="dialog-header" bind="dialogHeader"></div>
|
||||
<div class="dialog-body" bind="dialogBody">
|
||||
<p bind="explainSelectWikibase"></p>
|
||||
<p bind="currentSelectedWikibase"></p>
|
||||
<div class="wikibase-list-wrapper">
|
||||
<table class="wikibase-dialog-wikibase-list" bind="wikibaseList">
|
||||
<!-- dynamically generated -->
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dialog-footer" bind="dialogFooter">
|
||||
<div class="add-wikibase-buttons">
|
||||
<button class="button" bind="closeButton"></button>
|
||||
<button class="button" bind="addButton"></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
124
extensions/wikidata/module/scripts/dialogs/wikibase-dialog.js
Normal file
124
extensions/wikidata/module/scripts/dialogs/wikibase-dialog.js
Normal file
@ -0,0 +1,124 @@
|
||||
const WikibaseDialog = {};
|
||||
|
||||
WikibaseDialog.launch = function () {
|
||||
const frame = $(DOM.loadHTML("wikidata", "scripts/dialogs/wikibase-dialog.html"));
|
||||
const elmts = this.elmts = DOM.bind(frame);
|
||||
elmts.dialogHeader.text($.i18n("wikibase-management/dialog-header"));
|
||||
elmts.explainSelectWikibase.text($.i18n("wikibase-management/explain-select-wikibase"));
|
||||
elmts.currentSelectedWikibase.html($.i18n("wikibase-management/current-selected-wikibase",
|
||||
WikibaseManager.getSelectedWikibaseMainPage(), WikibaseManager.getSelectedWikibaseName()));
|
||||
elmts.closeButton.text($.i18n("wikibase-management/close"));
|
||||
elmts.addButton.text($.i18n("wikibase-management/add-wikibase"));
|
||||
|
||||
WikibaseDialog.populateDialog();
|
||||
|
||||
let level = DialogSystem.showDialog(frame);
|
||||
|
||||
elmts.closeButton.click(function () {
|
||||
DialogSystem.dismissUntil(level - 1);
|
||||
});
|
||||
|
||||
elmts.addButton.click(function () {
|
||||
WikibaseDialog.addWikibaseManifest();
|
||||
});
|
||||
};
|
||||
|
||||
WikibaseDialog.populateDialog = function () {
|
||||
let wikibases = WikibaseManager.getAllWikibases();
|
||||
|
||||
WikibaseDialog.elmts.wikibaseList.empty();
|
||||
for (let wikibaseName in wikibases) {
|
||||
if (wikibases.hasOwnProperty(wikibaseName)) {
|
||||
let item = "<tr onclick=\"WikibaseDialog.selectWikibase('" + wikibaseName + "')\">";
|
||||
item += "<td>" + wikibaseName + "</td>";
|
||||
if (wikibaseName.toLowerCase() === WikibaseManager.getSelectedWikibaseName().toLowerCase()) {
|
||||
item += "<td><a class=\"wikibase-dialog-selector-remove wikibase-selected\" onclick=\"void(0)\"></a></td>";
|
||||
} else {
|
||||
item += "<td><a class=\"wikibase-dialog-selector-remove\" onclick=\"WikibaseDialog.removeWikibase(event, '" + wikibaseName + "')\"></a></td>";
|
||||
}
|
||||
item += "</tr>";
|
||||
WikibaseDialog.elmts.wikibaseList.append(item);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
WikibaseDialog.selectWikibase = function (wikibaseName) {
|
||||
if (wikibaseName !== WikibaseManager.getSelectedWikibaseName()) {
|
||||
WikibaseManager.selectWikibase(wikibaseName);
|
||||
WikibaseDialog.elmts.currentSelectedWikibase.html($.i18n("wikibase-management/current-selected-wikibase",
|
||||
WikibaseManager.getSelectedWikibaseMainPage(), WikibaseManager.getSelectedWikibaseName()));
|
||||
WikibaseDialog.populateDialog();
|
||||
SchemaAlignment.onWikibaseChange();
|
||||
}
|
||||
};
|
||||
|
||||
WikibaseDialog.removeWikibase = function (e, wikibaseName) {
|
||||
e.stopPropagation(); // must stop, otherwise the removed Wikibase will be selected
|
||||
WikibaseManager.removeWikibase(wikibaseName);
|
||||
WikibaseDialog.populateDialog();
|
||||
};
|
||||
|
||||
|
||||
WikibaseDialog.addWikibaseManifest = function () {
|
||||
const frame = $(DOM.loadHTML("wikidata", "scripts/dialogs/add-wikibase-dialog.html"));
|
||||
const elmts = DOM.bind(frame);
|
||||
elmts.dialogHeader.text($.i18n("wikibase-addition/dialog-header"));
|
||||
elmts.explainAddManifest.text($.i18n("wikibase-addition/explain-add-manifest"));
|
||||
elmts.explainAddManifestViaURL.text($.i18n("wikibase-addition/explain-add-manifest-via-url"));
|
||||
elmts.explainPasteManifest.html($.i18n("wikibase-addition/explain-paste-manifest"));
|
||||
elmts.cancelButton.text($.i18n("wikibase-addition/cancel"));
|
||||
elmts.addButton.text($.i18n("wikibase-addition/add-wikibase"));
|
||||
elmts.invalidManifest.hide();
|
||||
elmts.invalidManifest.text($.i18n("wikibase-addition/invalid-manifest"));
|
||||
|
||||
let level = DialogSystem.showDialog(frame);
|
||||
|
||||
elmts.cancelButton.click(function () {
|
||||
DialogSystem.dismissUntil(level - 1);
|
||||
});
|
||||
|
||||
elmts.addButton.click(function () {
|
||||
let addManifest = function (manifest) {
|
||||
if (!WikibaseDialog.validateManifest(manifest)) {
|
||||
return;
|
||||
}
|
||||
|
||||
WikibaseManager.addWikibase(manifest);
|
||||
let lang = $.i18n('core-recon/wd-recon-lang');
|
||||
let reconEndpoint = manifest.reconciliation.endpoint.replace("${lang}", lang);
|
||||
ReconciliationManager.getOrRegisterServiceFromUrl(reconEndpoint, function () {}, true);
|
||||
DialogSystem.dismissUntil(level - 1);
|
||||
WikibaseDialog.populateDialog();
|
||||
};
|
||||
|
||||
let manifestURL = $.trim(elmts.manifestURLInput.val());
|
||||
if (manifestURL.length) {
|
||||
WikibaseManager.fetchManifestFromURL(manifestURL, addManifest);
|
||||
} else {
|
||||
try {
|
||||
let manifest = JSON.parse(elmts.manifestTextarea.val());
|
||||
addManifest(manifest);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
elmts.invalidManifest.show();
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
WikibaseDialog.validateManifest = function (manifest) {
|
||||
if (!WikibaseDialog.ajv) {
|
||||
WikibaseDialog.ajv = new Ajv();
|
||||
WikibaseDialog.validateWikibaseManifestV1 = WikibaseDialog.ajv.compile(WikibaseManifestSchemaV1);
|
||||
}
|
||||
|
||||
if (WikibaseDialog.validateWikibaseManifestV1(manifest)) {
|
||||
return true;
|
||||
} else {
|
||||
let errMsg = WikibaseDialog.ajv.errorsText(WikibaseDialog.validateWikibaseManifestV1.errors, {
|
||||
dataVar: "manifest"
|
||||
});
|
||||
alert(errMsg);
|
||||
return false;
|
||||
}
|
||||
};
|
@ -1,5 +1,5 @@
|
||||
<div id="schema-issues-tab">
|
||||
<div class="invalid-schema-warning" bind="invalidSchemaWarningIssues"></div>
|
||||
<p class="invalid-schema-warning" bind="invalidSchemaWarningIssues"></p>
|
||||
<div class="schema-issues-area" bind="warningsArea"></div>
|
||||
</div>
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/********************
|
||||
* LANGUAGE SUGGEST *
|
||||
********************/
|
||||
@ -13,65 +12,97 @@
|
||||
//
|
||||
// This is the list of language codes accepted for monolingualtext values. The language codes for terms are more restrictive.
|
||||
// TODO: in the future, store different lists for term languages and monolingual text languages.
|
||||
WIKIDATA_LANGUAGES = [
|
||||
"aa","ab","abs","ace","ady","ady-cyrl","aeb","aeb-arab","aeb-latn","af","ak","aln","als","am","an","ang","anp",
|
||||
"ar","arc","arn","arq","ary","arz","as","ase","ast","atj","av","avk","awa","ay","az","azb","ba","ban","bar",
|
||||
"bbc","bbc-latn","bcc","bcl","be","be-tarask","bg","bgn","bh","bho","bi","bjn","bm","bn","bo","bpy","bqi","br",
|
||||
"brh","bs","btm","bto","bug","bxr","ca","cbk-zam","cdo","ce","ceb","ch","cho","chr","chy","ckb","co","cps","cr",
|
||||
"crh","crh-cyrl","crh-latn","cs","csb","cu","cv","cy","da","de","de-at","de-ch","din","diq","dsb","dtp","dty",
|
||||
"dv","dz","ee","egl","el","eml","en","en-ca","en-gb","eo","es","es-419","et","eu","ext","fa","ff","fi","fit",
|
||||
"fj","fo","fr","frc","frp","frr","fur","fy","ga","gag","gan","gan-hans","gan-hant","gcr","gd","gl","glk","gn",
|
||||
"gom","gom-deva","gom-latn","gor","got","grc","gsw","gu","gv","ha","hak","haw","he","hi","hif","hif-latn","hil",
|
||||
"ho","hr","hrx","hsb","ht","hu","hy","hyw","hz","ia","id","ie","ig","ii","ik","ike-cans","ike-latn","ilo","inh",
|
||||
"io","is","it","iu","ja","jam","jbo","jut","jv","ka","kaa","kab","kbd","kbd-cyrl","kbp","kea","kg","khw","ki",
|
||||
"kiu","kj","kjp","kk","kk-arab","kk-cn","kk-cyrl","kk-kz","kk-latn","kk-tr","kl","km","kn","ko","ko-kp","koi",
|
||||
"kr","krc","kri","krj","krl","ks","ks-arab","ks-deva","ksh","ku","ku-arab","ku-latn","kum","kv","kw","ky","la",
|
||||
"lad","lb","lbe","lez","lfn","lg","li","lij","liv","lki","lmo","ln","lo","loz","lrc","lt","ltg","lus","luz","lv",
|
||||
"lzh","lzz","mai","map-bms","mdf","mg","mh","mhr","mi","min","mk","ml","mn","mni","mnw","mo","mr","mrj","ms","mt",
|
||||
"mus","mwl","my","myv","mzn","na","nah","nan","nap","nb","nds","nds-nl","ne","new","ng","niu","nl","nn","no","nod",
|
||||
"nov","nqo","nrm","nso","nv","ny","nys","oc","olo","om","or","os","ota","pa","pag","pam","pap","pcd","pdc","pdt",
|
||||
"pfl","pi","pih","pl","pms","pnb","pnt","prg","ps","pt","pt-br","qu","qug","rgn","rif","rm","rmy","rn","ro",
|
||||
"roa-tara","ru","rue","rup","ruq","ruq-cyrl","ruq-latn","rw","rwr","sa","sah","sat","sc","scn","sco","sd","sdc",
|
||||
"sdh","se","sei","ses","sg","sgs","sh","shi","shi-latn","shi-tfng","shn","shy-latn","si","sje","sk","skr","skr-arab",
|
||||
"sl","sli","sm","sma","smj","smn","sms","sn","so","sq","sr","sr-ec","sr-el","srn","srq","ss","st","stq","sty","su",
|
||||
"sv","sw","szl","ta","tay","tcy","te","tet","tg","tg-cyrl","tg-latn","th","ti","tk","tl","tly","tn","to","tpi","tr",
|
||||
"tru","ts","tt","tt-cyrl","tt-latn","tum","tw","ty","tyv","tzm","udm","ug","ug-arab","ug-latn","uk","ur","uz","uz-cyrl",
|
||||
"uz-latn","ve","vec","vep","vi","vls","vmf","vo","vot","vro","wa","war","wo","wuu","xal","xh","xmf","xsy","yi","yo",
|
||||
"yue","za","zea","zgh","zh","zh-cn","zh-hans","zh-hant","zh-hk","zh-mo","zh-my","zh-sg","zh-tw","zu","und","mis",
|
||||
"mul","zxx","abe","abq","ami","bnn","brx","chn","cnr","cop","el-cy","ett","eya","fkv","fos","fr-ca","frm","fro",
|
||||
"fuf","gez","gmy","hai","haz","hbo","kjh","koy","lag","lkt","lld","mid","mnc","moe","non","nr","nxm","ood","otk",
|
||||
"pjt","ppu","pwn","pyu","quc","qya","rar","shy","sia","sjd","sjk","sjn","sjt","sju","ssf","syc","tlb","trv","tzl",
|
||||
"uga","umu","uun","xpu","yap","zun" ]
|
||||
DEFAULT_LANGUAGES = [
|
||||
"aa", "ab", "abs", "ace", "ady", "ady-cyrl", "aeb", "aeb-arab", "aeb-latn", "af", "ak", "aln", "als", "am", "an", "ang", "anp",
|
||||
"ar", "arc", "arn", "arq", "ary", "arz", "as", "ase", "ast", "atj", "av", "avk", "awa", "ay", "az", "azb", "ba", "ban", "bar",
|
||||
"bbc", "bbc-latn", "bcc", "bcl", "be", "be-tarask", "bg", "bgn", "bh", "bho", "bi", "bjn", "bm", "bn", "bo", "bpy", "bqi", "br",
|
||||
"brh", "bs", "btm", "bto", "bug", "bxr", "ca", "cbk-zam", "cdo", "ce", "ceb", "ch", "cho", "chr", "chy", "ckb", "co", "cps", "cr",
|
||||
"crh", "crh-cyrl", "crh-latn", "cs", "csb", "cu", "cv", "cy", "da", "de", "de-at", "de-ch", "din", "diq", "dsb", "dtp", "dty",
|
||||
"dv", "dz", "ee", "egl", "el", "eml", "en", "en-ca", "en-gb", "eo", "es", "es-419", "et", "eu", "ext", "fa", "ff", "fi", "fit",
|
||||
"fj", "fo", "fr", "frc", "frp", "frr", "fur", "fy", "ga", "gag", "gan", "gan-hans", "gan-hant", "gcr", "gd", "gl", "glk", "gn",
|
||||
"gom", "gom-deva", "gom-latn", "gor", "got", "grc", "gsw", "gu", "gv", "ha", "hak", "haw", "he", "hi", "hif", "hif-latn", "hil",
|
||||
"ho", "hr", "hrx", "hsb", "ht", "hu", "hy", "hyw", "hz", "ia", "id", "ie", "ig", "ii", "ik", "ike-cans", "ike-latn", "ilo", "inh",
|
||||
"io", "is", "it", "iu", "ja", "jam", "jbo", "jut", "jv", "ka", "kaa", "kab", "kbd", "kbd-cyrl", "kbp", "kea", "kg", "khw", "ki",
|
||||
"kiu", "kj", "kjp", "kk", "kk-arab", "kk-cn", "kk-cyrl", "kk-kz", "kk-latn", "kk-tr", "kl", "km", "kn", "ko", "ko-kp", "koi",
|
||||
"kr", "krc", "kri", "krj", "krl", "ks", "ks-arab", "ks-deva", "ksh", "ku", "ku-arab", "ku-latn", "kum", "kv", "kw", "ky", "la",
|
||||
"lad", "lb", "lbe", "lez", "lfn", "lg", "li", "lij", "liv", "lki", "lmo", "ln", "lo", "loz", "lrc", "lt", "ltg", "lus", "luz", "lv",
|
||||
"lzh", "lzz", "mai", "map-bms", "mdf", "mg", "mh", "mhr", "mi", "min", "mk", "ml", "mn", "mni", "mnw", "mo", "mr", "mrj", "ms", "mt",
|
||||
"mus", "mwl", "my", "myv", "mzn", "na", "nah", "nan", "nap", "nb", "nds", "nds-nl", "ne", "new", "ng", "niu", "nl", "nn", "no", "nod",
|
||||
"nov", "nqo", "nrm", "nso", "nv", "ny", "nys", "oc", "olo", "om", "or", "os", "ota", "pa", "pag", "pam", "pap", "pcd", "pdc", "pdt",
|
||||
"pfl", "pi", "pih", "pl", "pms", "pnb", "pnt", "prg", "ps", "pt", "pt-br", "qu", "qug", "rgn", "rif", "rm", "rmy", "rn", "ro",
|
||||
"roa-tara", "ru", "rue", "rup", "ruq", "ruq-cyrl", "ruq-latn", "rw", "rwr", "sa", "sah", "sat", "sc", "scn", "sco", "sd", "sdc",
|
||||
"sdh", "se", "sei", "ses", "sg", "sgs", "sh", "shi", "shi-latn", "shi-tfng", "shn", "shy-latn", "si", "sje", "sk", "skr", "skr-arab",
|
||||
"sl", "sli", "sm", "sma", "smj", "smn", "sms", "sn", "so", "sq", "sr", "sr-ec", "sr-el", "srn", "srq", "ss", "st", "stq", "sty", "su",
|
||||
"sv", "sw", "szl", "ta", "tay", "tcy", "te", "tet", "tg", "tg-cyrl", "tg-latn", "th", "ti", "tk", "tl", "tly", "tn", "to", "tpi", "tr",
|
||||
"tru", "ts", "tt", "tt-cyrl", "tt-latn", "tum", "tw", "ty", "tyv", "tzm", "udm", "ug", "ug-arab", "ug-latn", "uk", "ur", "uz", "uz-cyrl",
|
||||
"uz-latn", "ve", "vec", "vep", "vi", "vls", "vmf", "vo", "vot", "vro", "wa", "war", "wo", "wuu", "xal", "xh", "xmf", "xsy", "yi", "yo",
|
||||
"yue", "za", "zea", "zgh", "zh", "zh-cn", "zh-hans", "zh-hant", "zh-hk", "zh-mo", "zh-my", "zh-sg", "zh-tw", "zu", "und", "mis",
|
||||
"mul", "zxx", "abe", "abq", "ami", "bnn", "brx", "chn", "cnr", "cop", "el-cy", "ett", "eya", "fkv", "fos", "fr-ca", "frm", "fro",
|
||||
"fuf", "gez", "gmy", "hai", "haz", "hbo", "kjh", "koy", "lag", "lkt", "lld", "mid", "mnc", "moe", "non", "nr", "nxm", "ood", "otk",
|
||||
"pjt", "ppu", "pwn", "pyu", "quc", "qya", "rar", "shy", "sia", "sjd", "sjk", "sjn", "sjt", "sju", "ssf", "syc", "tlb", "trv", "tzl",
|
||||
"uga", "umu", "uun", "xpu", "yap", "zun"];
|
||||
|
||||
$.suggest("langsuggest", {
|
||||
_init: function() {
|
||||
this.api_url = "https://www.wikidata.org/w/api.php";
|
||||
_init: function () {
|
||||
this._status.SELECT = "Select a language from the list:";
|
||||
},
|
||||
|
||||
request: function(val, cursor) {
|
||||
request: function (val, cursor) {
|
||||
var self = this;
|
||||
var ajax_options = {
|
||||
url: self.api_url,
|
||||
data: { action: "languagesearch",
|
||||
search: val,
|
||||
format: "json", },
|
||||
success: function(data) {
|
||||
self.response(self.convertResults(data));
|
||||
},
|
||||
$.ajax({
|
||||
dataType: "jsonp",
|
||||
};
|
||||
$.ajax(ajax_options);
|
||||
url: WikibaseManager.getSelectedWikibaseApi(),
|
||||
data: {
|
||||
action: "languagesearch",
|
||||
search: val,
|
||||
format: "json",
|
||||
},
|
||||
success: function (data) {
|
||||
self.getLanguageCodes(function (languageCodes) {
|
||||
var array = [];
|
||||
for (var key in data.languagesearch) {
|
||||
if (data.languagesearch.hasOwnProperty(key) && languageCodes.indexOf(key) !== -1) {
|
||||
array.push({id: key, name: key, search_name: data.languagesearch[key]});
|
||||
}
|
||||
}
|
||||
self.response(array);
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
convertResults: function(data) {
|
||||
var array = [];
|
||||
for (var key in data.languagesearch) {
|
||||
if (data.languagesearch.hasOwnProperty(key) && WIKIDATA_LANGUAGES.indexOf(key) != -1) {
|
||||
array.push({ id: key, name: key, search_name: data.languagesearch[key] });
|
||||
}
|
||||
|
||||
apiEndpointToLangCodes: {},
|
||||
|
||||
getLanguageCodes: function (callback) {
|
||||
var self = this;
|
||||
var selectedApi = WikibaseManager.getSelectedWikibaseApi();
|
||||
if (self.apiEndpointToLangCodes[selectedApi]) {
|
||||
callback(self.apiEndpointToLangCodes[selectedApi]);
|
||||
} else {
|
||||
// try fetching the language codes
|
||||
// action=query&meta=wbcontentlanguages&wbclcontext=monolingualtext&format=json
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
dataType: "jsonp",
|
||||
url: WikibaseManager.getSelectedWikibaseApi() +
|
||||
"?action=query&meta=wbcontentlanguages&wbclcontext=monolingualtext&format=json",
|
||||
success: function (data) {
|
||||
var result = [];
|
||||
var langs = data.query.wbcontentlanguages;
|
||||
for (var lang in langs) {
|
||||
if (langs.hasOwnProperty(lang)) {
|
||||
result.push(langs[lang].code);
|
||||
}
|
||||
}
|
||||
self.apiEndpointToLangCodes[selectedApi] = result;
|
||||
callback(result);
|
||||
},
|
||||
error: function () {
|
||||
self.apiEndpointToLangCodes[selectedApi] = DEFAULT_LANGUAGES;
|
||||
callback(DEFAULT_LANGUAGES);
|
||||
},
|
||||
});
|
||||
}
|
||||
return array;
|
||||
},
|
||||
|
||||
create_item: function(data, response_data) {
|
||||
|
@ -1,134 +1,153 @@
|
||||
// Load the localization file
|
||||
var dictionary = {};
|
||||
$.ajax({
|
||||
url : "command/core/load-language?",
|
||||
type : "POST",
|
||||
async : false,
|
||||
data : {
|
||||
module : "wikidata",
|
||||
url: "command/core/load-language?",
|
||||
type: "POST",
|
||||
async: false,
|
||||
data: {
|
||||
module: "wikidata",
|
||||
// lang : lang
|
||||
},
|
||||
success : function(data) {
|
||||
dictionary = data['dictionary'];
|
||||
lang = data['lang'];
|
||||
}
|
||||
},
|
||||
success: function (data) {
|
||||
dictionary = data['dictionary'];
|
||||
lang = data['lang'];
|
||||
}
|
||||
});
|
||||
$.i18n().load(dictionary, lang);
|
||||
|
||||
|
||||
|
||||
ExporterManager.MenuItems.push({});
|
||||
ExporterManager.MenuItems.push(
|
||||
{
|
||||
id:"performWikibaseEdits",
|
||||
label: $.i18n('wikidata-extension/wikidata-edits'),
|
||||
click: function() { PerformEditsDialog.checkAndLaunch(); }
|
||||
});
|
||||
ExporterManager.MenuItems.push(
|
||||
{
|
||||
id:"exportQuickStatements",
|
||||
label: $.i18n('wikidata-extension/qs-file'),
|
||||
click: function() { WikibaseExporterMenuBar.checkSchemaAndExport("quickstatements"); }
|
||||
});
|
||||
ExporterManager.MenuItems.push(
|
||||
{
|
||||
id:"exportWikibaseSchema",
|
||||
label: $.i18n('wikidata-extension/wikidata-schema'),
|
||||
click: function() { WikibaseExporterMenuBar.checkSchemaAndExport("wikibase-schema"); }
|
||||
}
|
||||
);
|
||||
ExporterManager.MenuItems.push({
|
||||
id: "performWikibaseEdits",
|
||||
label: $.i18n('wikibase-extension/wikibase-edits'),
|
||||
click: function () {
|
||||
PerformEditsDialog.checkAndLaunch();
|
||||
}
|
||||
});
|
||||
ExporterManager.MenuItems.push({
|
||||
id: "exportQuickStatements",
|
||||
label: $.i18n('wikibase-extension/qs-file'),
|
||||
click: function () {
|
||||
WikibaseExporterMenuBar.checkSchemaAndExport("quickstatements");
|
||||
}
|
||||
});
|
||||
ExporterManager.MenuItems.push({
|
||||
id: "exportWikibaseSchema",
|
||||
label: $.i18n('wikibase-extension/wikibase-schema'),
|
||||
click: function () {
|
||||
WikibaseExporterMenuBar.checkSchemaAndExport("wikibase-schema");
|
||||
}
|
||||
});
|
||||
|
||||
WikibaseExporterMenuBar = {};
|
||||
|
||||
WikibaseExporterMenuBar.exportTo = function(format) {
|
||||
var targetUrl = null;
|
||||
if (format ==="quickstatements") {
|
||||
targetUrl = "statements.txt";
|
||||
} else {
|
||||
targetUrl = "schema.json";
|
||||
}
|
||||
var form = document.createElement("form");
|
||||
$(form).css("display", "none")
|
||||
.attr("method", "post")
|
||||
.attr("action", "command/core/export-rows/"+targetUrl)
|
||||
.attr("target", "gridworks-export-"+format);
|
||||
$('<input />')
|
||||
.attr("name", "engine")
|
||||
.val(JSON.stringify(ui.browsingEngine.getJSON()))
|
||||
.appendTo(form);
|
||||
$('<input />')
|
||||
.attr("name", "project")
|
||||
.val(theProject.id)
|
||||
.appendTo(form);
|
||||
$('<input />')
|
||||
.attr("name", "format")
|
||||
.val(format)
|
||||
.appendTo(form);
|
||||
WikibaseExporterMenuBar.exportTo = function (format) {
|
||||
var targetUrl = null;
|
||||
if (format === "quickstatements") {
|
||||
targetUrl = "statements.txt";
|
||||
} else {
|
||||
targetUrl = "schema.json";
|
||||
}
|
||||
var form = document.createElement("form");
|
||||
$(form).css("display", "none")
|
||||
.attr("method", "post")
|
||||
.attr("action", "command/core/export-rows/" + targetUrl)
|
||||
.attr("target", "openrefine-export-" + format);
|
||||
$('<input />')
|
||||
.attr("name", "engine")
|
||||
.val(JSON.stringify(ui.browsingEngine.getJSON()))
|
||||
.appendTo(form);
|
||||
$('<input />')
|
||||
.attr("name", "project")
|
||||
.val(theProject.id)
|
||||
.appendTo(form);
|
||||
$('<input />')
|
||||
.attr("name", "format")
|
||||
.val(format)
|
||||
.appendTo(form);
|
||||
|
||||
document.body.appendChild(form);
|
||||
document.body.appendChild(form);
|
||||
|
||||
window.open("about:blank", "gridworks-export");
|
||||
form.submit();
|
||||
window.open("about:blank", "openrefine-export");
|
||||
form.submit();
|
||||
|
||||
document.body.removeChild(form);
|
||||
document.body.removeChild(form);
|
||||
};
|
||||
|
||||
WikibaseExporterMenuBar.checkSchemaAndExport = function(format) {
|
||||
var onSaved = function(callback) {
|
||||
WikibaseExporterMenuBar.exportTo(format);
|
||||
WikibaseExporterMenuBar.checkSchemaAndExport = function (format) {
|
||||
var onSaved = function (callback) {
|
||||
WikibaseExporterMenuBar.exportTo(format);
|
||||
};
|
||||
if (!SchemaAlignmentDialog.isSetUp()) {
|
||||
SchemaAlignmentDialog.launch(null);
|
||||
} else if (SchemaAlignmentDialog._hasUnsavedChanges) {
|
||||
SchemaAlignmentDialog._save(onSaved);
|
||||
if (!SchemaAlignment.isSetUp()) {
|
||||
SchemaAlignment.launch(null);
|
||||
} else if (SchemaAlignment._hasUnsavedChanges) {
|
||||
SchemaAlignment._save(onSaved);
|
||||
} else {
|
||||
onSaved();
|
||||
onSaved();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//extend the column header menu
|
||||
$(function(){
|
||||
|
||||
ExtensionBar.MenuItems.push(
|
||||
{
|
||||
"id":"reconcile",
|
||||
"label": $.i18n('wikidata-extension/menu-label'),
|
||||
"submenu" : [
|
||||
{
|
||||
id: "wikidata/edit-schema",
|
||||
label: $.i18n('wikidata-extension/edit-wikidata-schema'),
|
||||
click: function() { SchemaAlignmentDialog.launch(false); }
|
||||
},
|
||||
{
|
||||
id:"wikidata/manage-account",
|
||||
label: $.i18n('wikidata-extension/manage-wikidata-account'),
|
||||
click: function() { ManageAccountDialog.checkAndLaunch(); }
|
||||
},
|
||||
{},
|
||||
{
|
||||
id: "wikidata/import-schema",
|
||||
label: $.i18n('wikidata-extension/import-wikidata-schema'),
|
||||
click: function() { ImportSchemaDialog.launch(); }
|
||||
},
|
||||
{
|
||||
id:"wikidata/export-schema",
|
||||
label: $.i18n('wikidata-extension/export-schema'),
|
||||
click: function() { WikibaseExporterMenuBar.checkSchemaAndExport("wikibase-schema"); }
|
||||
},
|
||||
{},
|
||||
{
|
||||
id:"wikidata/perform-edits",
|
||||
label: $.i18n('wikidata-extension/perform-edits-on-wikidata'),
|
||||
click: function() { PerformEditsDialog.checkAndLaunch(); }
|
||||
},
|
||||
{
|
||||
id:"wikidata/export-qs",
|
||||
label: $.i18n('wikidata-extension/export-to-qs'),
|
||||
click: function() { WikibaseExporterMenuBar.checkSchemaAndExport("quickstatements"); }
|
||||
},
|
||||
$(function () {
|
||||
|
||||
]
|
||||
}
|
||||
);
|
||||
ExtensionBar.MenuItems.push(
|
||||
{
|
||||
"id": "reconcile",
|
||||
"label": $.i18n('wikibase-extension/menu-label'),
|
||||
"submenu": [
|
||||
{
|
||||
id: "wikidata/select-instance",
|
||||
label: $.i18n('wikibase-extension/select-wikibase-instance'),
|
||||
click: function () {
|
||||
WikibaseDialog.launch()
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "wikidata/edit-schema",
|
||||
label: $.i18n('wikibase-extension/edit-wikibase-schema'),
|
||||
click: function () {
|
||||
SchemaAlignment.launch(false);
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "wikidata/manage-account",
|
||||
label: $.i18n('wikibase-extension/manage-wikibase-account'),
|
||||
click: function () {
|
||||
ManageAccountDialog.checkAndLaunch();
|
||||
}
|
||||
},
|
||||
{},
|
||||
{
|
||||
id: "wikidata/import-schema",
|
||||
label: $.i18n('wikibase-extension/import-wikibase-schema'),
|
||||
click: function () {
|
||||
ImportSchemaDialog.launch();
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "wikidata/export-schema",
|
||||
label: $.i18n('wikibase-extension/export-schema'),
|
||||
click: function () {
|
||||
WikibaseExporterMenuBar.checkSchemaAndExport("wikibase-schema");
|
||||
}
|
||||
},
|
||||
{},
|
||||
{
|
||||
id: "wikidata/perform-edits",
|
||||
label: $.i18n('wikibase-extension/perform-edits-on-wikibase'),
|
||||
click: function () {
|
||||
PerformEditsDialog.checkAndLaunch();
|
||||
}
|
||||
},
|
||||
{
|
||||
id: "wikidata/export-qs",
|
||||
label: $.i18n('wikibase-extension/export-to-qs'),
|
||||
click: function () {
|
||||
WikibaseExporterMenuBar.checkSchemaAndExport("quickstatements");
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
<div id="schema-preview-tab">
|
||||
<p class="panel-explanation" bind="previewExplanation"></p>
|
||||
<div class="invalid-schema-warning" bind="invalidSchemaWarningPreview"></div>
|
||||
<p class="invalid-schema-warning" bind="invalidSchemaWarningPreview"></p>
|
||||
<div class="schema-alignment-dialog-preview"></div>
|
||||
</div>
|
||||
|
||||
|
@ -11,10 +11,10 @@ EditRenderer.maxStatements = 25; // max number of statements per statement group
|
||||
// main method: takes a DOM element and a list
|
||||
// of edits to render there.
|
||||
EditRenderer.renderEdits = function(edits, container) {
|
||||
for(var i = 0; i != edits.length; i++) {
|
||||
for(var i = 0; i < edits.length; i++) {
|
||||
EditRenderer._renderItem(edits[i], container);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**************/
|
||||
/*** ITEMS ****/
|
||||
@ -57,14 +57,14 @@ EditRenderer._renderItem = function(json, container) {
|
||||
// Statements
|
||||
if (json.addedStatementGroups && json.addedStatementGroups.length) {
|
||||
// $('<div></div>').addClass('wbs-statements-header')
|
||||
// .text($.i18n('wikidata-schema/statements-header')).appendTo(right);
|
||||
// .text($.i18n('wikibase-schema/statements-header')).appendTo(right);
|
||||
var statementsGroupContainer = $('<div></div>').addClass('wbs-statement-group-container')
|
||||
.appendTo(right);
|
||||
for(var i = 0; i != json.addedStatementGroups.length; i++) {
|
||||
EditRenderer._renderStatementGroup(json.addedStatementGroups[i], statementsGroupContainer);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**************************
|
||||
* NAMES AND DESCRIPTIONS *
|
||||
@ -80,18 +80,18 @@ EditRenderer._renderTermsList = function(termList, termType, termsContainer) {
|
||||
if(termList.length > this.maxTerms) {
|
||||
$('<div></div>').addClass('wbs-namedesc').text('...').appendTo(termsContainer);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
EditRenderer._renderTerm = function(termType, json, container) {
|
||||
var namedesc = $('<div></div>').addClass('wbs-namedesc').appendTo(container);
|
||||
var type_container = $('<div></div>').addClass('wbs-namedesc-type').appendTo(namedesc);
|
||||
var type_span = $('<span></span>').appendTo(type_container)
|
||||
.text($.i18n('wikidata-schema/'+termType));
|
||||
.text($.i18n('wikibase-schema/'+termType));
|
||||
|
||||
var right = $('<div></div>').addClass('wbs-right').appendTo(namedesc);
|
||||
var value_container = $('<div></div>').addClass('wbs-namedesc-value').appendTo(namedesc);
|
||||
EditRenderer._renderValue({datavalue:json,datatype:'monolingualtext'}, value_container);
|
||||
}
|
||||
};
|
||||
|
||||
/********************
|
||||
* STATEMENT GROUPS *
|
||||
@ -114,7 +114,7 @@ EditRenderer._renderStatementGroup = function(json, container) {
|
||||
.addClass('wbs-statement')
|
||||
.appendTo(statementContainer);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**************
|
||||
* STATEMENTS *
|
||||
@ -165,7 +165,7 @@ EditRenderer._renderStatement = function(json, container) {
|
||||
}
|
||||
}
|
||||
EditRenderer._updateReferencesNumber(referenceContainer);
|
||||
}
|
||||
};
|
||||
|
||||
/*********************************
|
||||
* QUALIFIER AND REFERENCE SNAKS *
|
||||
@ -180,7 +180,7 @@ EditRenderer._renderSnak = function(json, container) {
|
||||
var statementContainer = $('<div></div>').addClass('wbs-statement-container').appendTo(right);
|
||||
EditRenderer._renderEntity(json.full_property, inputContainer);
|
||||
EditRenderer._renderValue(json, statementContainer);
|
||||
}
|
||||
};
|
||||
|
||||
/**************
|
||||
* REFERENCES *
|
||||
@ -206,8 +206,8 @@ EditRenderer._updateReferencesNumber = function(container) {
|
||||
var childrenCount = container.children().length;
|
||||
var statement = container.parents('.wbs-statement');
|
||||
var a = statement.find('.wbs-references-toggle a').first();
|
||||
a.html(childrenCount+$.i18n('wikidata-schema/nb-references'));
|
||||
}
|
||||
a.html(childrenCount+$.i18n('wikibase-schema/nb-references'));
|
||||
};
|
||||
|
||||
/*******************
|
||||
* VALUE RENDERING *
|
||||
@ -218,7 +218,7 @@ EditRenderer.renderedValueCache = {};
|
||||
EditRenderer._renderEntity = function(json, container) {
|
||||
var html = WarningsRenderer._renderEntity(json);
|
||||
$(html).appendTo(container);
|
||||
}
|
||||
};
|
||||
|
||||
EditRenderer._renderValue = function(json, container) {
|
||||
var input = $('<span></span>').appendTo(container);
|
||||
@ -245,7 +245,7 @@ EditRenderer._renderValue = function(json, container) {
|
||||
params.datatype = json.datatype;
|
||||
}
|
||||
$.get(
|
||||
'https://www.wikidata.org/w/api.php',
|
||||
WikibaseManager.getSelectedWikibaseApi(),
|
||||
params,
|
||||
function (data) {
|
||||
if('result' in data) {
|
||||
@ -257,6 +257,6 @@ EditRenderer._renderValue = function(json, container) {
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,74 +1,75 @@
|
||||
var WarningsRenderer = {};
|
||||
|
||||
// renders a Wikibase entity into a link
|
||||
WarningsRenderer._renderEntity = function(entity) {
|
||||
WarningsRenderer._renderEntity = function (entity) {
|
||||
if (!entity.id && entity.value) {
|
||||
entity.id = entity.value.id;
|
||||
entity.id = entity.value.id;
|
||||
}
|
||||
var id = entity.id;
|
||||
var is_new = entity.siteIri == "http://localhost/entity/";
|
||||
var is_new = entity.siteIri === "http://localhost/entity/";
|
||||
if (is_new) {
|
||||
id = $.i18n('wikidata-preview/new-id');
|
||||
id = $.i18n('wikibase-preview/new-id');
|
||||
}
|
||||
var fullLabel = id;
|
||||
if (entity.label) {
|
||||
fullLabel = entity.label + ' (' + id + ')';
|
||||
fullLabel = entity.label + ' (' + id + ')';
|
||||
}
|
||||
|
||||
var url = entity.iri;
|
||||
if (!url && entity.value) {
|
||||
url = 'http://www.wikidata.org/entity/'+entity.value.id;
|
||||
url = WikibaseManager.getSelectedWikibaseSiteIri() + entity.value.id;
|
||||
}
|
||||
|
||||
if (is_new) {
|
||||
return '<span class="wb-preview-new-entity">'+fullLabel+'</span>';
|
||||
return '<span class="wb-preview-new-entity">' + fullLabel + '</span>';
|
||||
} else {
|
||||
return '<a href="'+url+'" class="wb-preview-entity" target="_blank">'+fullLabel+'</a>';
|
||||
return '<a href="' + url + '" class="wb-preview-entity" target="_blank">' + fullLabel + '</a>';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// replaces the issue properties in localization template
|
||||
WarningsRenderer._replaceIssueProperties = function(template, properties) {
|
||||
WarningsRenderer._replaceIssueProperties = function (template, properties) {
|
||||
template = template.replace(new RegExp('{wikibase_name}', 'g'), WikibaseManager.getSelectedWikibaseName);
|
||||
if (!properties) {
|
||||
return template;
|
||||
}
|
||||
var expanded = template;
|
||||
for (var key in properties) {
|
||||
if (properties.hasOwnProperty(key)) {
|
||||
var rendered = properties[key];
|
||||
if (key.endsWith('_entity')) {
|
||||
rendered = WarningsRenderer._renderEntity(properties[key]);
|
||||
}
|
||||
expanded = expanded.replace(new RegExp('{'+key+'}', 'g'), rendered);
|
||||
var rendered = properties[key];
|
||||
if (key.endsWith('_entity')) {
|
||||
rendered = WarningsRenderer._renderEntity(properties[key]);
|
||||
}
|
||||
expanded = expanded.replace(new RegExp('{' + key + '}', 'g'), rendered);
|
||||
}
|
||||
}
|
||||
return expanded;
|
||||
}
|
||||
};
|
||||
|
||||
WarningsRenderer._renderWarning = function(warning) {
|
||||
var title = WarningsRenderer._replaceIssueProperties($.i18n('warnings-messages/'+warning.type+'/title'), warning.properties);
|
||||
var body = WarningsRenderer._replaceIssueProperties($.i18n('warnings-messages/'+warning.type+'/body'), warning.properties);
|
||||
WarningsRenderer._renderWarning = function (warning) {
|
||||
var title = WarningsRenderer._replaceIssueProperties($.i18n('warnings-messages/' + warning.type + '/title'), warning.properties);
|
||||
var body = WarningsRenderer._replaceIssueProperties($.i18n('warnings-messages/' + warning.type + '/body'), warning.properties);
|
||||
var tr = $('<tr></tr>').addClass('wb-warning');
|
||||
var severityTd = $('<td></td>')
|
||||
.addClass('wb-warning-severity')
|
||||
.addClass('wb-warning-severity-'+warning.severity)
|
||||
.appendTo(tr);
|
||||
.addClass('wb-warning-severity')
|
||||
.addClass('wb-warning-severity-' + warning.severity)
|
||||
.appendTo(tr);
|
||||
var bodyTd = $('<td></td>')
|
||||
.addClass('wb-warning-body')
|
||||
.appendTo(tr);
|
||||
.addClass('wb-warning-body')
|
||||
.appendTo(tr);
|
||||
var h1 = $('<h1></h1>')
|
||||
.html(title)
|
||||
.appendTo(bodyTd);
|
||||
.html(title)
|
||||
.appendTo(bodyTd);
|
||||
var p = $('<p></p>')
|
||||
.html(body)
|
||||
.appendTo(bodyTd);
|
||||
.html(body)
|
||||
.appendTo(bodyTd);
|
||||
var countTd = $('<td></td>')
|
||||
.addClass('wb-warning-count')
|
||||
.appendTo(tr);
|
||||
.addClass('wb-warning-count')
|
||||
.appendTo(tr);
|
||||
var countSpan = $('<span></span>')
|
||||
.text(warning.count)
|
||||
.appendTo(countTd);
|
||||
.text(warning.count)
|
||||
.appendTo(countTd);
|
||||
return tr;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
190
extensions/wikidata/module/scripts/wikibase-manager.js
Normal file
190
extensions/wikidata/module/scripts/wikibase-manager.js
Normal file
@ -0,0 +1,190 @@
|
||||
/**
|
||||
* Manages Wikibase instances.
|
||||
*/
|
||||
const WikibaseManager = {
|
||||
selected: "Wikidata",
|
||||
wikibases: {
|
||||
"Wikidata": WikidataManifestV1_0 // default one
|
||||
}
|
||||
};
|
||||
|
||||
WikibaseManager.getSelectedWikibase = function () {
|
||||
return WikibaseManager.wikibases[WikibaseManager.selected];
|
||||
};
|
||||
|
||||
WikibaseManager.getSelectedWikibaseRoot = function () {
|
||||
return WikibaseManager.getSelectedWikibase().mediawiki.root;
|
||||
};
|
||||
|
||||
WikibaseManager.getSelectedWikibaseMainPage = function () {
|
||||
return WikibaseManager.getSelectedWikibase().mediawiki.main_page;
|
||||
};
|
||||
|
||||
WikibaseManager.getSelectedWikibaseApi = function () {
|
||||
return WikibaseManager.getSelectedWikibase().mediawiki.api;
|
||||
};
|
||||
|
||||
WikibaseManager.getSelectedWikibaseName = function () {
|
||||
return WikibaseManager.selected;
|
||||
};
|
||||
|
||||
WikibaseManager.getSelectedWikibaseSiteIri = function () {
|
||||
return WikibaseManager.getSelectedWikibase().wikibase.site_iri;
|
||||
};
|
||||
|
||||
WikibaseManager.getSelectedWikibaseMaxlag = function() {
|
||||
return WikibaseManager.getSelectedWikibase().wikibase.maxlag;
|
||||
};
|
||||
|
||||
WikibaseManager.getSelectedWikibaseOAuth = function() {
|
||||
return WikibaseManager.getSelectedWikibase().oauth;
|
||||
};
|
||||
|
||||
WikibaseManager.getSelectedWikibaseEditGroupsURLSchema = function() {
|
||||
let editgroups = WikibaseManager.getSelectedWikibase().editgroups;
|
||||
return editgroups ? editgroups.url_schema : null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the default reconciliation service URL of the Wikibase,
|
||||
* such as "https://wdreconcile.toolforge.org/${lang}/api".
|
||||
*
|
||||
* Notice that there is a "${lang}" variable in the URL, which should
|
||||
* be replaced with the actual language code.
|
||||
*/
|
||||
WikibaseManager.getSelectedWikibaseReconEndpoint = function () {
|
||||
return WikibaseManager.getSelectedWikibase().reconciliation.endpoint;
|
||||
};
|
||||
|
||||
WikibaseManager.selectWikibase = function (wikibaseName) {
|
||||
if (WikibaseManager.wikibases.hasOwnProperty(wikibaseName)) {
|
||||
WikibaseManager.selected = wikibaseName;
|
||||
}
|
||||
};
|
||||
|
||||
WikibaseManager.getAllWikibases = function () {
|
||||
return WikibaseManager.wikibases;
|
||||
};
|
||||
|
||||
WikibaseManager.addWikibase = function (manifest) {
|
||||
WikibaseManager.wikibases[manifest.mediawiki.name] = manifest;
|
||||
WikibaseManager.saveWikibases();
|
||||
};
|
||||
|
||||
WikibaseManager.removeWikibase = function (wikibaseName) {
|
||||
delete WikibaseManager.wikibases[wikibaseName];
|
||||
WikibaseManager.saveWikibases();
|
||||
};
|
||||
|
||||
WikibaseManager.saveWikibases = function () {
|
||||
let manifests = [];
|
||||
for (let wikibaseName in WikibaseManager.wikibases) {
|
||||
if (WikibaseManager.wikibases.hasOwnProperty(wikibaseName)) {
|
||||
manifests.push(WikibaseManager.wikibases[wikibaseName])
|
||||
}
|
||||
}
|
||||
|
||||
Refine.wrapCSRF(function (token) {
|
||||
$.ajax({
|
||||
async: false,
|
||||
type: "POST",
|
||||
url: "command/core/set-preference?" + $.param({
|
||||
name: "wikibase.manifests"
|
||||
}),
|
||||
data: {
|
||||
"value": JSON.stringify(manifests),
|
||||
csrf_token: token
|
||||
},
|
||||
dataType: "json"
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
WikibaseManager.loadWikibases = function (onDone) {
|
||||
$.ajax({
|
||||
url: "command/core/get-preference?" + $.param({
|
||||
name: "wikibase.manifests"
|
||||
}),
|
||||
success: function (data) {
|
||||
if (data.value && data.value !== "null" && data.value !== "[]") {
|
||||
let manifests = JSON.parse(data.value);
|
||||
manifests.forEach(function (manifest) {
|
||||
if (manifest.custom && manifest.custom.url && manifest.custom.last_updated
|
||||
&& ((Date.now() - new Date(manifest.custom.last_updated)) > 7 * 24 * 60 * 60 * 1000)) {
|
||||
// If the manifest was fetched via URL and hasn't been updated for a week,
|
||||
// fetch it again to keep track of the lasted version
|
||||
WikibaseManager.fetchManifestFromURL(manifest.custom.url, function (newManifest) {
|
||||
WikibaseManager.wikibases[newManifest.mediawiki.name] = newManifest;
|
||||
WikibaseManager.saveWikibases();
|
||||
}, function () {
|
||||
// fall back to the current one if failed to fetch the latest one
|
||||
WikibaseManager.wikibases[manifest.mediawiki.name] = manifest;
|
||||
}, true)
|
||||
} else {
|
||||
WikibaseManager.wikibases[manifest.mediawiki.name] = manifest;
|
||||
}
|
||||
});
|
||||
|
||||
WikibaseManager.selected = WikibaseManager.selectDefaultWikibaseAccordingToSavedSchema();
|
||||
|
||||
if (onDone) {
|
||||
onDone();
|
||||
}
|
||||
}
|
||||
},
|
||||
dataType: "json"
|
||||
});
|
||||
};
|
||||
|
||||
WikibaseManager.selectDefaultWikibaseAccordingToSavedSchema = function () {
|
||||
let schema = theProject.overlayModels.wikibaseSchema || {};
|
||||
if (!schema.siteIri) {
|
||||
return "Wikidata";
|
||||
}
|
||||
|
||||
for (let wikibaseName in WikibaseManager.wikibases) {
|
||||
if (WikibaseManager.wikibases.hasOwnProperty(wikibaseName)) {
|
||||
let wikibase = WikibaseManager.wikibases[wikibaseName];
|
||||
if (schema.siteIri === wikibase.wikibase.site_iri) {
|
||||
return wikibase.mediawiki.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "Wikidata";
|
||||
};
|
||||
|
||||
WikibaseManager.fetchManifestFromURL = function (manifestURL, onSuccess, onError, silent) {
|
||||
let dismissBusy = function() {};
|
||||
if (!silent) {
|
||||
dismissBusy = DialogSystem.showBusy($.i18n("wikibase-management/contact-service") + "...");
|
||||
}
|
||||
|
||||
let _onSuccess = function (data) {
|
||||
// record custom information in the manifest
|
||||
data.custom = {};
|
||||
data.custom.url = manifestURL;
|
||||
data.custom.last_updated = Date.now();
|
||||
if (onSuccess) {
|
||||
onSuccess(data);
|
||||
}
|
||||
};
|
||||
|
||||
// The manifest host must support CORS.
|
||||
$.ajax(manifestURL, {
|
||||
"dataType": "json",
|
||||
"timeout": 5000
|
||||
}).success(function (data) {
|
||||
dismissBusy();
|
||||
_onSuccess(data);
|
||||
}).error(function (jqXHR, textStatus, errorThrown) {
|
||||
dismissBusy();
|
||||
if (!silent) {
|
||||
alert($.i18n("wikibase-management/error-contact")+": " + textStatus + " : " + errorThrown + " - " + manifestURL);
|
||||
}
|
||||
if (onError) {
|
||||
onError();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -0,0 +1,126 @@
|
||||
const WikibaseManifestSchemaV1 = {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "TBD",
|
||||
"type": "object",
|
||||
"description": "The schema validates Wikibase manifests with version 1.x. The manifest contains configurations of basic information (e.g. URL of the main page), extensions (e.g. OAuth extension) or external services (e.g. Reconciliation service) of a Wikibase",
|
||||
"properties": {
|
||||
"version": {
|
||||
"type": "string",
|
||||
"pattern": "^1\\.[0-9]+$",
|
||||
"description": "The version of the Wikibase manifest, in the format of 1.x"
|
||||
},
|
||||
"mediawiki": {
|
||||
"type": "object",
|
||||
"description": "The configurations of the MediaWiki engine",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the Wikibase, such as 'Wikidata'"
|
||||
},
|
||||
"root": {
|
||||
"type": "string",
|
||||
"format": "url",
|
||||
"pattern": "^.*/$",
|
||||
"description": "The URL of the root of the Wikibase, such as 'https://www.wikidata.org/wiki/'. The trailing slash cannot be omitted"
|
||||
},
|
||||
"main_page": {
|
||||
"type": "string",
|
||||
"format": "url",
|
||||
"description": "The URL of the main page of the Wikibase, such as 'https://www.wikidata.org/wiki/Wikidata:Main_Page'"
|
||||
},
|
||||
"api": {
|
||||
"type": "string",
|
||||
"format": "url",
|
||||
"description": "The MediaWiki API endpoint of the Wikibase, such as 'https://www.wikidata.org/w/api.php'"
|
||||
}
|
||||
},
|
||||
"required": ["name", "root", "main_page", "api"]
|
||||
},
|
||||
"wikibase": {
|
||||
"type": "object",
|
||||
"description": "The configurations of the Wikibase extension",
|
||||
"properties": {
|
||||
"site_iri": {
|
||||
"type": "string",
|
||||
"format": "url",
|
||||
"pattern": "^.*/$",
|
||||
"description": "The IRI of the Wikibase, such as 'http://www.wikidata.org/entity/'. This should match the IRI prefixes used in RDF serialization. Be careful about using 'http' or 'https', because any variation will break comparisons at various places. The trailing slash cannot be omitted"
|
||||
},
|
||||
"maxlag": {
|
||||
"type": "integer",
|
||||
"description": "The default maxlag of this Wikibase. For Wikidata, the default value is 5 (seconds)"
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"instance_of": {
|
||||
"type": "string",
|
||||
"description": "The 'instance of' qid of the Wikibase ('P31' for Wikidata)"
|
||||
},
|
||||
"subclass_of": {
|
||||
"type": "string",
|
||||
"description": "The 'subclass of' qid of the Wikibase ('P279' for Wikidata)"
|
||||
}
|
||||
},
|
||||
"required": ["instance_of", "subclass_of"]
|
||||
},
|
||||
"constraints": {
|
||||
"type": "object",
|
||||
"description": "Constraints related qids and pids, not required since the constraints extension may not be installed",
|
||||
"properties": {
|
||||
"property_constraint_pid": {
|
||||
"type": "string",
|
||||
"description": "The property constraint pid of the Wikibase ('P2302' for Wikidata)"
|
||||
}
|
||||
},
|
||||
"patternProperties": {
|
||||
"^.*$": {
|
||||
"type": "string",
|
||||
"description": "If a pid/qid is missing, constraint checks depending on it will be skipped"
|
||||
}
|
||||
},
|
||||
"required": ["property_constraint_pid"]
|
||||
}
|
||||
},
|
||||
"required": ["site_iri", "maxlag", "properties"]
|
||||
},
|
||||
"oauth": {
|
||||
"type": "object",
|
||||
"description": "The configurations of the OAuth extension. Not required. Configuring this if and only if the OAuth extension is installed",
|
||||
"properties": {
|
||||
"registration_page": {
|
||||
"type": "string",
|
||||
"format": "url",
|
||||
"description": "The url of the OAuth consumer registration page, 'https://meta.wikimedia.org/wiki/Special:OAuthConsumerRegistration/propose' for Wikidata"
|
||||
}
|
||||
},
|
||||
"required": ["registration_page"]
|
||||
},
|
||||
"reconciliation": {
|
||||
"type": "object",
|
||||
"description": "The configurations of the default reconciliation service of the Wikibase",
|
||||
"properties": {
|
||||
"endpoint": {
|
||||
"type": "string",
|
||||
"format": "url",
|
||||
"pattern": "^.*\\${lang}.*$",
|
||||
"description": "The default reconciliation API endpoint of the Wikibase, the endpoint should include the language variable '${lang}', such as 'https://wdreconcile.toolforge.org/${lang}/api'"
|
||||
}
|
||||
},
|
||||
"required": ["endpoint"]
|
||||
},
|
||||
"editgroups": {
|
||||
"type": "object",
|
||||
"description": "The configurations of the EditGroups service of the Wikibase",
|
||||
"properties": {
|
||||
"url_schema": {
|
||||
"type": "string",
|
||||
"pattern": "^.*\\${batch_id}.*$",
|
||||
"description": "The URL schema used in edits summary. This is used for EditGroups to extract the batch id from a batch of edits and for linking to the EditGroups page of the batch. The URL schema must contains the variable '${batch_id}', such as '([[:toollabs:editgroups/b/OR/${batch_id}|details]])' for Wikidata"
|
||||
},
|
||||
},
|
||||
"required": ["url_schema"]
|
||||
}
|
||||
},
|
||||
"required": ["version", "mediawiki", "wikibase", "reconciliation"]
|
||||
};
|
@ -0,0 +1,6 @@
|
||||
// Make sure the wikibase manifests are loaded before initializing the schema UI.
|
||||
Refine.registerUpdateFunction(function(options) {
|
||||
WikibaseManager.loadWikibases(function () {
|
||||
SchemaAlignment.onProjectUpdate(options);
|
||||
});
|
||||
});
|
92
extensions/wikidata/module/scripts/wikidata-manifest-v1.0.js
Normal file
92
extensions/wikidata/module/scripts/wikidata-manifest-v1.0.js
Normal file
@ -0,0 +1,92 @@
|
||||
const WikidataManifestV1_0 = {
|
||||
"version": "1.0",
|
||||
"mediawiki": {
|
||||
"name": "Wikidata",
|
||||
"root": "https://www.wikidata.org/wiki/",
|
||||
"main_page": "https://www.wikidata.org/wiki/Wikidata:Main_Page",
|
||||
"api": "https://www.wikidata.org/w/api.php"
|
||||
},
|
||||
"wikibase": {
|
||||
"site_iri": "http://www.wikidata.org/entity/",
|
||||
"maxlag": 5,
|
||||
"properties": {
|
||||
"instance_of": "P31",
|
||||
"subclass_of": "P279"
|
||||
},
|
||||
"constraints": {
|
||||
"property_constraint_pid": "P2302",
|
||||
"exception_to_constraint_pid": "P2303",
|
||||
"constraint_status_pid": "P2316",
|
||||
"mandatory_constraint_qid": "Q21502408",
|
||||
"suggestion_constraint_qid": "Q62026391",
|
||||
"distinct_values_constraint_qid": "Q21502410",
|
||||
"multi_value_constraint_qid": "Q21510857",
|
||||
"used_as_qualifier_constraint_qid": "Q21510863",
|
||||
"single_value_constraint_qid": "Q19474404",
|
||||
"symmetric_constraint_qid": "Q21510862",
|
||||
"type_constraint_qid": "Q21503250",
|
||||
"value_type_constraint_qid": "Q21510865",
|
||||
"inverse_constraint_qid": "Q21510855",
|
||||
"item_requires_statement_constraint_qid": "Q21503247",
|
||||
"value_requires_statement_constraint_qid": "Q21510864",
|
||||
"conflicts_with_constraint_qid": "Q21502838",
|
||||
"one_of_constraint_qid": "Q21510859",
|
||||
"mandatory_qualifier_constraint_qid": "Q21510856",
|
||||
"allowed_qualifiers_constraint_qid": "Q21510851",
|
||||
"range_constraint_qid": "Q21510860",
|
||||
"difference_within_range_constraint_qid": "Q21510854",
|
||||
"common_link_constraint_qid": "Q21510852",
|
||||
"contemporary_constraint_qid": "Q25796498",
|
||||
"format_constraint_qid": "Q21502404",
|
||||
"used_for_values_only_constraint_qid": "Q21528958",
|
||||
"used_as_reference_constraint_qid": "Q21528959",
|
||||
"no_bounds_constraint_qid": "Q51723761",
|
||||
"allowed_units_constraint_qid": "Q21514353",
|
||||
"single_best_value_constraint_qid": "Q52060874",
|
||||
"allowed_entity_types_constraint_qid": "Q52004125",
|
||||
"citation_needed_constraint_qid": "Q54554025",
|
||||
"property_scope_constraint_qid": "Q53869507",
|
||||
"class_pid": "P2308",
|
||||
"relation_pid": "P2309",
|
||||
"instance_of_relation_qid": "Q21503252",
|
||||
"subclass_of_relation_qid": "Q21514624",
|
||||
"instance_or_subclass_of_relation_qid": "Q30208840",
|
||||
"property_pid": "P2306",
|
||||
"item_of_property_constraint_pid": "P2305",
|
||||
"minimum_value_pid": "P2313",
|
||||
"maximum_value_pid": "P2312",
|
||||
"minimum_date_pid": "P2310",
|
||||
"maximum_date_pid": "P2311",
|
||||
"namespace_pid": "P2307",
|
||||
"format_as_a_regular_expression_pid": "P1793",
|
||||
"syntax_clarification_pid": "P2916",
|
||||
"constraint_scope_pid": "P4680",
|
||||
"separator_pid": "P4155",
|
||||
"constraint_checked_on_main_value_qid": "Q46466787",
|
||||
"constraint_checked_on_qualifiers_qid": "Q46466783",
|
||||
"constraint_checked_on_references_qid": "Q46466805",
|
||||
"none_of_constraint_qid": "Q52558054",
|
||||
"one_of_qualifier_value_property_constraint_qid": "Q52712340",
|
||||
"integer_constraint_qid": "Q52848401",
|
||||
"wikibase_item_qid": "Q29934200",
|
||||
"wikibase_property_qid": "Q29934218",
|
||||
"wikibase_lexeme_qid": "Q51885771",
|
||||
"wikibase_form_qid": "Q54285143",
|
||||
"wikibase_sense_qid": "Q54285715",
|
||||
"wikibase_media_info_qid": "Q59712033",
|
||||
"property_scope_pid": "P5314",
|
||||
"as_main_value_qid": "Q54828448",
|
||||
"as_qualifiers_qid": "Q54828449",
|
||||
"as_references_qid": "Q54828450"
|
||||
}
|
||||
},
|
||||
"oauth": {
|
||||
"registration_page": "https://meta.wikimedia.org/wiki/Special:OAuthConsumerRegistration/propose"
|
||||
},
|
||||
"reconciliation": {
|
||||
"endpoint": "https://wdreconcile.toolforge.org/${lang}/api"
|
||||
},
|
||||
"editgroups": {
|
||||
"url_schema": "([[:toollabs:editgroups/b/OR/${batch_id}|details]])"
|
||||
}
|
||||
};
|
@ -0,0 +1,19 @@
|
||||
@import-less url("../theme.less");
|
||||
|
||||
.add-wikibase-dialog p {
|
||||
padding-top: 6px;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.add-wikibase-dialog textarea {
|
||||
width: 100%;
|
||||
height: 160px;
|
||||
}
|
||||
|
||||
.add-wikibase-dialog .add-wikibase-buttons {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.add-wikibase-dialog .invalid-manifest {
|
||||
color: red;
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
|
||||
@import-less url("../theme.less");
|
||||
|
||||
.wikibase-invalid-schema {
|
||||
margin-top: 10px;
|
||||
color: red;
|
||||
}
|
||||
|
||||
.wikibase-schema-textarea {
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
height: 160px;
|
||||
}
|
||||
|
@ -75,11 +75,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
bottom: 12px;
|
||||
}
|
||||
|
||||
|
||||
.wikibase-perform-edits-buttons {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.wikibase-import-schema-buttons {
|
||||
text-align: right;
|
||||
}
|
||||
|
@ -33,7 +33,29 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
@import-less url("../theme.less");
|
||||
|
||||
.perform-edits-warnings-area {
|
||||
margin-bottom: 10px;
|
||||
min-height: 340px;
|
||||
max-height: 400px;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
border: 1px solid #bbb;
|
||||
}
|
||||
|
||||
.wikibase-perform-edits-area table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.wikibase-perform-edits-area tr td {
|
||||
padding-top: 6px;
|
||||
}
|
||||
|
||||
.edit-summary {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.wikibase-perform-edits-buttons {
|
||||
margin-top: 6px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,44 @@
|
||||
@import-less url("../theme.less");
|
||||
|
||||
.wikibase-dialog p {
|
||||
padding: 0 10px 10px 10px
|
||||
}
|
||||
|
||||
.wikibase-dialog .add-wikibase-buttons {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.wikibase-list-wrapper {
|
||||
max-height: 300px; overflow-y: auto
|
||||
}
|
||||
|
||||
.wikibase-dialog-wikibase-list {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.wikibase-dialog-wikibase-list tr:hover {
|
||||
background: @dialog_footer;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.wikibase-dialog-wikibase-list tr td {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.wikibase-dialog-selector-remove {
|
||||
float: right;
|
||||
position: relative;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
text-decoration: none;
|
||||
background-image: url(../../images/close-map.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0px 0px;
|
||||
}
|
||||
.wikibase-dialog-selector-remove:hover {
|
||||
background-position: -12px 0px;
|
||||
}
|
||||
|
||||
.wikibase-dialog-selector-remove.wikibase-selected:hover {
|
||||
cursor: not-allowed;
|
||||
}
|
@ -6,7 +6,7 @@
|
||||
position: initial;
|
||||
}
|
||||
|
||||
#wikidata-schema-panel, #wikidata-issues-panel, #wikidata-preview-panel {
|
||||
#wikibase-schema-panel, #wikibase-issues-panel, #wikibase-preview-panel {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
height: 100%;
|
||||
@ -60,6 +60,10 @@
|
||||
margin: 1em;
|
||||
}
|
||||
|
||||
.invalid-schema-warning {
|
||||
margin: 1em;
|
||||
}
|
||||
|
||||
.schema-alignment-save {
|
||||
float: right;
|
||||
padding: 1em;
|
||||
@ -465,12 +469,12 @@
|
||||
}
|
||||
|
||||
.schema-alignment-columns-header {
|
||||
margin-bottom: 0.3em;
|
||||
margin-bottom: 0.3em;
|
||||
}
|
||||
|
||||
/*** Warnings rendering ****/
|
||||
|
||||
#wikidata-issues-panel table {
|
||||
#wikibase-issues-panel table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@ -503,19 +507,19 @@ tr.wb-warning:nth-of-type(odd) {
|
||||
}
|
||||
|
||||
.wb-warning-severity-INFO {
|
||||
background-image: url('../../images/Information.png');
|
||||
background-image: url('../images/Information.png');
|
||||
}
|
||||
|
||||
.wb-warning-severity-WARNING {
|
||||
background-image: url('../../images/Warning.png');
|
||||
background-image: url('../images/Warning.png');
|
||||
}
|
||||
|
||||
.wb-warning-severity-IMPORTANT {
|
||||
background-image: url('../../images/Important.png');
|
||||
background-image: url('../images/Important.png');
|
||||
}
|
||||
|
||||
.wb-warning-severity-CRITICAL {
|
||||
background-image: url('../../images/Critical.png');
|
||||
background-image: url('../images/Critical.png');
|
||||
}
|
||||
|
||||
.wb-warning-body {
|
||||
@ -530,15 +534,7 @@ tr.wb-warning:nth-of-type(odd) {
|
||||
}
|
||||
|
||||
.wb-warning-end {
|
||||
float: clear;
|
||||
}
|
||||
|
||||
div.perform-edits-warnings-area {
|
||||
min-height: 340px;
|
||||
max-height: 400px;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
border: 1px solid #bbb;
|
||||
float: unset;
|
||||
}
|
||||
|
||||
.wb-issue-preformat {
|
||||
@ -568,4 +564,4 @@ div.schema-alignment-dialog-preview {
|
||||
|
||||
.schema-alignment-dialog-columns-area div:hover{
|
||||
cursor: grabbing;
|
||||
}
|
||||
}
|
@ -175,7 +175,13 @@
|
||||
<artifactId>powermock-api-mockito2</artifactId>
|
||||
<version>${powermock.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>mockwebserver</artifactId>
|
||||
<version>4.8.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
@ -43,13 +43,10 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Manages a connection to Wikidata.
|
||||
* Manages a connection to the current Wikibase instance.
|
||||
* <p>
|
||||
* The connection can be either {@link BasicApiConnection} or {@link OAuthApiConnection}.
|
||||
* <p>
|
||||
* This class is also hard-coded for Wikidata,
|
||||
* it will be generalized to other Wikibase instances soon.
|
||||
*
|
||||
* @author Antonin Delpeuch
|
||||
* @author Lu Liu
|
||||
*/
|
||||
@ -67,19 +64,7 @@ public class ConnectionManager {
|
||||
public static final int CONNECT_TIMEOUT = 5000;
|
||||
public static final int READ_TIMEOUT = 10000;
|
||||
|
||||
/**
|
||||
* For now, this class is hard-coded for Wikidata.
|
||||
* <p>
|
||||
* It will be generalized to work against other Wikibase instances in the future.
|
||||
*/
|
||||
private static final String WIKIBASE_API_ENDPOINT = ApiConnection.URL_WIKIDATA_API;
|
||||
|
||||
/**
|
||||
* The single {@link ApiConnection} instance managed by {@link ConnectionManager}.
|
||||
* <p>
|
||||
* Currently, only one connection is supported at the same time.
|
||||
*/
|
||||
private ApiConnection connection;
|
||||
private Map<String, ApiConnection> endpointToConnection = new HashMap<>();
|
||||
|
||||
private static final ConnectionManager instance = new ConnectionManager();
|
||||
|
||||
@ -98,19 +83,20 @@ public class ConnectionManager {
|
||||
* <p>
|
||||
* If failed to login, the connection will be set to null.
|
||||
*
|
||||
* @param mediaWikiApiEndpoint the api endpoint of the target Wikibase instance
|
||||
* @param username the username to log in with
|
||||
* @param password the password to log in with
|
||||
* @return true if logged in successfully, false otherwise
|
||||
*/
|
||||
public boolean login(String username, String password) {
|
||||
connection = new BasicApiConnection(WIKIBASE_API_ENDPOINT);
|
||||
public boolean login(String mediaWikiApiEndpoint, String username, String password) {
|
||||
BasicApiConnection connection = new BasicApiConnection(mediaWikiApiEndpoint);
|
||||
setupConnection(connection);
|
||||
try {
|
||||
((BasicApiConnection) connection).login(username, password);
|
||||
connection.login(username, password);
|
||||
endpointToConnection.put(mediaWikiApiEndpoint, connection);
|
||||
return true;
|
||||
} catch (LoginFailedException e) {
|
||||
logger.error(e.getMessage());
|
||||
connection = null;
|
||||
logger.error(e.getMessage(), e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -120,25 +106,26 @@ public class ConnectionManager {
|
||||
* <p>
|
||||
* If failed to login, the connection will be set to null.
|
||||
*
|
||||
* @param mediaWikiApiEndpoint the api endpoint of the target Wikibase instance
|
||||
* @param consumerToken consumer token of an owner-only consumer
|
||||
* @param consumerSecret consumer secret of an owner-only consumer
|
||||
* @param accessToken access token of an owner-only consumer
|
||||
* @param accessSecret access secret of an owner-only consumer
|
||||
* @return true if logged in successfully, false otherwise
|
||||
*/
|
||||
public boolean login(String consumerToken, String consumerSecret,
|
||||
public boolean login(String mediaWikiApiEndpoint, String consumerToken, String consumerSecret,
|
||||
String accessToken, String accessSecret) {
|
||||
connection = new OAuthApiConnection(WIKIBASE_API_ENDPOINT,
|
||||
OAuthApiConnection connection = new OAuthApiConnection(mediaWikiApiEndpoint,
|
||||
consumerToken, consumerSecret,
|
||||
accessToken, accessSecret);
|
||||
setupConnection(connection);
|
||||
try {
|
||||
// check if the credentials are valid
|
||||
connection.checkCredentials();
|
||||
endpointToConnection.put(mediaWikiApiEndpoint, connection);
|
||||
return true;
|
||||
} catch (IOException | MediaWikiApiErrorException e) {
|
||||
logger.error(e.getMessage());
|
||||
connection = null;
|
||||
logger.error(e.getMessage(), e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -149,14 +136,15 @@ public class ConnectionManager {
|
||||
* <p>
|
||||
* If failed to login, the connection will be set to null.
|
||||
*
|
||||
* @param mediaWikiApiEndpoint the api endpoint of the target Wikibase instance
|
||||
* @param username the username
|
||||
* @param cookies the cookies used to login
|
||||
* @return true if logged in successfully, false otherwise
|
||||
*/
|
||||
public boolean login(String username, List<Cookie> cookies) {
|
||||
public boolean login(String mediaWikiApiEndpoint, String username, List<Cookie> cookies) {
|
||||
cookies.forEach(cookie -> cookie.setPath("/"));
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("baseUrl", WIKIBASE_API_ENDPOINT);
|
||||
map.put("baseUrl", mediaWikiApiEndpoint);
|
||||
map.put("cookies", cookies);
|
||||
map.put("username", username);
|
||||
map.put("loggedIn", true);
|
||||
@ -164,13 +152,12 @@ public class ConnectionManager {
|
||||
map.put("connectTimeout", CONNECT_TIMEOUT);
|
||||
map.put("readTimeout", READ_TIMEOUT);
|
||||
try {
|
||||
BasicApiConnection newConnection = convertToBasicApiConnection(map);
|
||||
newConnection.checkCredentials();
|
||||
connection = newConnection;
|
||||
BasicApiConnection connection = convertToBasicApiConnection(map);
|
||||
connection.checkCredentials();
|
||||
endpointToConnection.put(mediaWikiApiEndpoint, connection);
|
||||
return true;
|
||||
} catch (IOException | MediaWikiApiErrorException e) {
|
||||
logger.error(e.getMessage());
|
||||
connection = null;
|
||||
logger.error(e.getMessage(), e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -185,33 +172,35 @@ public class ConnectionManager {
|
||||
}
|
||||
|
||||
|
||||
public void logout() {
|
||||
public void logout(String mediaWikiApiEndpoint) {
|
||||
ApiConnection connection = endpointToConnection.get(mediaWikiApiEndpoint);
|
||||
if (connection != null) {
|
||||
try {
|
||||
connection.logout();
|
||||
connection = null;
|
||||
endpointToConnection.remove(mediaWikiApiEndpoint);
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getMessage());
|
||||
logger.error(e.getMessage(), e);
|
||||
} catch (MediaWikiApiErrorException e) {
|
||||
if ("assertuserfailed".equals(e.getErrorCode())) {
|
||||
// it turns out we were already logged out
|
||||
connection = null;
|
||||
endpointToConnection.remove(mediaWikiApiEndpoint);
|
||||
} else {
|
||||
logger.error(e.getMessage());
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ApiConnection getConnection() {
|
||||
return connection;
|
||||
public ApiConnection getConnection(String mediaWikiApiEndpoint) {
|
||||
return endpointToConnection.get(mediaWikiApiEndpoint);
|
||||
}
|
||||
|
||||
public boolean isLoggedIn() {
|
||||
return connection != null;
|
||||
public boolean isLoggedIn(String mediaWikiApiEndpoint) {
|
||||
return endpointToConnection.get(mediaWikiApiEndpoint) != null;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
public String getUsername(String mediaWikiApiEndpoint) {
|
||||
ApiConnection connection = endpointToConnection.get(mediaWikiApiEndpoint);
|
||||
if (connection != null) {
|
||||
return connection.getCurrentUser();
|
||||
} else {
|
||||
|
@ -50,12 +50,15 @@ import static org.apache.commons.lang.StringUtils.isNotBlank;
|
||||
* Both logging in with username/password or owner-only consumer are supported.
|
||||
* <p>
|
||||
* This command also manages cookies of login credentials.
|
||||
* <p>
|
||||
* Cookies for different MediaWiki API endpoint are stored,
|
||||
* but only one connection is kept at the same time.
|
||||
*/
|
||||
public class LoginCommand extends Command {
|
||||
|
||||
static final String WIKIDATA_COOKIE_PREFIX = "openrefine-wikidata-";
|
||||
static final String WIKIBASE_COOKIE_PREFIX = "openrefine-wikibase-";
|
||||
|
||||
static final String WIKIBASE_USERNAME_COOKIE_KEY = "wikibase-username";
|
||||
static final String API_ENDPOINT = "wb-api-endpoint";
|
||||
|
||||
static final String USERNAME = "wb-username";
|
||||
static final String PASSWORD = "wb-password";
|
||||
@ -75,10 +78,17 @@ public class LoginCommand extends Command {
|
||||
|
||||
ConnectionManager manager = ConnectionManager.getInstance();
|
||||
|
||||
String mediawikiApiEndpoint = removeCRLF(request.getParameter(API_ENDPOINT));
|
||||
if (isBlank(mediawikiApiEndpoint)) {
|
||||
CommandUtilities.respondError(response, "missing parameter '" + API_ENDPOINT + "'");
|
||||
return;
|
||||
}
|
||||
String mediawikiApiEndpointPrefix = mediawikiApiEndpoint + '-';
|
||||
|
||||
if ("true".equals(request.getParameter("logout"))) {
|
||||
manager.logout();
|
||||
removeUsernamePasswordCookies(request, response);
|
||||
removeOwnerOnlyConsumerCookies(request, response);
|
||||
manager.logout(mediawikiApiEndpoint);
|
||||
removeUsernamePasswordCookies(mediawikiApiEndpointPrefix, request, response);
|
||||
removeOwnerOnlyConsumerCookies(mediawikiApiEndpointPrefix, request, response);
|
||||
respond(request, response);
|
||||
return; // return directly
|
||||
}
|
||||
@ -93,53 +103,35 @@ public class LoginCommand extends Command {
|
||||
String accessToken = request.getParameter(ACCESS_TOKEN);
|
||||
String accessSecret = request.getParameter(ACCESS_SECRET);
|
||||
|
||||
if (isBlank(username) && isBlank(password) && isBlank(consumerToken) &&
|
||||
isBlank(consumerSecret) && isBlank(accessToken) && isBlank(accessSecret)) {
|
||||
// In this case, we use cookie to login, and we will always remember the credentials in cookies.
|
||||
if (isBlank(username) && isBlank(password) && isBlank(consumerToken)
|
||||
&& isBlank(consumerSecret) && isBlank(accessToken) && isBlank(accessSecret)) {
|
||||
// In this case, we use cookies to login, and we will always remember the credentials in cookies.
|
||||
remember = true;
|
||||
Cookie[] cookies = request.getCookies();
|
||||
|
||||
for (Cookie cookie : cookies) {
|
||||
String value = getCookieValue(cookie);
|
||||
switch (cookie.getName()) {
|
||||
case CONSUMER_TOKEN:
|
||||
consumerToken = value;
|
||||
break;
|
||||
case CONSUMER_SECRET:
|
||||
consumerSecret = value;
|
||||
break;
|
||||
case ACCESS_TOKEN:
|
||||
accessToken = value;
|
||||
break;
|
||||
case ACCESS_SECRET:
|
||||
accessSecret = value;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
Map<String, String> cookieMap = processCookiesWithPrefix(mediawikiApiEndpointPrefix, request.getCookies());
|
||||
username = cookieMap.get(USERNAME);
|
||||
consumerToken = cookieMap.get(CONSUMER_TOKEN);
|
||||
consumerSecret = cookieMap.get(CONSUMER_SECRET);
|
||||
accessToken = cookieMap.get(ACCESS_TOKEN);
|
||||
accessSecret = cookieMap.get(ACCESS_SECRET);
|
||||
|
||||
if (isBlank(consumerToken) && isBlank(consumerSecret) && isBlank(accessToken) && isBlank(accessSecret)) {
|
||||
// Try logging in with the cookies of a password-based connection.
|
||||
String username1 = null;
|
||||
List<Cookie> cookieList = new ArrayList<>();
|
||||
for (Cookie cookie : cookies) {
|
||||
if (cookie.getName().startsWith(WIKIDATA_COOKIE_PREFIX)) {
|
||||
String cookieName = cookie.getName().substring(WIKIDATA_COOKIE_PREFIX.length());
|
||||
Cookie newCookie = new Cookie(cookieName, getCookieValue(cookie));
|
||||
for (Map.Entry<String, String> entry : cookieMap.entrySet()) {
|
||||
if (entry.getKey().startsWith(WIKIBASE_COOKIE_PREFIX)) {
|
||||
String name = entry.getKey().substring(WIKIBASE_COOKIE_PREFIX.length());
|
||||
Cookie newCookie = new Cookie(name, entry.getValue());
|
||||
cookieList.add(newCookie);
|
||||
} else if (cookie.getName().equals(WIKIBASE_USERNAME_COOKIE_KEY)) {
|
||||
username1 = getCookieValue(cookie);
|
||||
}
|
||||
}
|
||||
|
||||
if (cookieList.size() > 0 && username1 != null) {
|
||||
removeOwnerOnlyConsumerCookies(request, response);
|
||||
if (manager.login(username1, cookieList)) {
|
||||
if (cookieList.size() > 0 && isNotBlank(username)) {
|
||||
removeOwnerOnlyConsumerCookies(mediawikiApiEndpointPrefix, request, response);
|
||||
if (manager.login(mediawikiApiEndpoint, username, cookieList)) {
|
||||
respond(request, response);
|
||||
return;
|
||||
} else {
|
||||
removeUsernamePasswordCookies(request, response);
|
||||
removeUsernamePasswordCookies(mediawikiApiEndpointPrefix, request, response);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -148,31 +140,32 @@ public class LoginCommand extends Command {
|
||||
if (isNotBlank(username) && isNotBlank(password)) {
|
||||
// Once logged in with new credentials,
|
||||
// the old credentials in cookies should be cleared.
|
||||
if (manager.login(username, password) && remember) {
|
||||
ApiConnection connection = manager.getConnection();
|
||||
if (manager.login(mediawikiApiEndpoint, username, password) && remember) {
|
||||
ApiConnection connection = manager.getConnection(mediawikiApiEndpoint);
|
||||
List<HttpCookie> cookies = ((BasicApiConnection) connection).getCookies();
|
||||
String prefix = mediawikiApiEndpointPrefix + WIKIBASE_COOKIE_PREFIX;
|
||||
for (HttpCookie cookie : cookies) {
|
||||
setCookie(response, WIKIDATA_COOKIE_PREFIX + cookie.getName(), cookie.getValue());
|
||||
setCookie(response, prefix + cookie.getName(), cookie.getValue());
|
||||
}
|
||||
|
||||
// Though the cookies from the connection contain some cookies of username,
|
||||
// we cannot make sure that all Wikibase instances use the same cookie key
|
||||
// to retrieve the username. So we choose to set the username cookie with our own cookie key.
|
||||
setCookie(response, WIKIBASE_USERNAME_COOKIE_KEY, connection.getCurrentUser());
|
||||
setCookie(response, mediawikiApiEndpointPrefix + USERNAME, connection.getCurrentUser());
|
||||
} else {
|
||||
removeUsernamePasswordCookies(request, response);
|
||||
removeUsernamePasswordCookies(mediawikiApiEndpointPrefix, request, response);
|
||||
}
|
||||
removeOwnerOnlyConsumerCookies(request, response);
|
||||
removeOwnerOnlyConsumerCookies(mediawikiApiEndpointPrefix, request, response);
|
||||
} else if (isNotBlank(consumerToken) && isNotBlank(consumerSecret) && isNotBlank(accessToken) && isNotBlank(accessSecret)) {
|
||||
if (manager.login(consumerToken, consumerSecret, accessToken, accessSecret) && remember) {
|
||||
setCookie(response, CONSUMER_TOKEN, consumerToken);
|
||||
setCookie(response, CONSUMER_SECRET, consumerSecret);
|
||||
setCookie(response, ACCESS_TOKEN, accessToken);
|
||||
setCookie(response, ACCESS_SECRET, accessSecret);
|
||||
if (manager.login(mediawikiApiEndpoint, consumerToken, consumerSecret, accessToken, accessSecret) && remember) {
|
||||
setCookie(response, mediawikiApiEndpointPrefix + CONSUMER_TOKEN, consumerToken);
|
||||
setCookie(response, mediawikiApiEndpointPrefix + CONSUMER_SECRET, consumerSecret);
|
||||
setCookie(response, mediawikiApiEndpointPrefix + ACCESS_TOKEN, accessToken);
|
||||
setCookie(response, mediawikiApiEndpointPrefix + ACCESS_SECRET, accessSecret);
|
||||
} else {
|
||||
removeOwnerOnlyConsumerCookies(request, response);
|
||||
removeOwnerOnlyConsumerCookies(mediawikiApiEndpointPrefix, request, response);
|
||||
}
|
||||
removeUsernamePasswordCookies(request, response);
|
||||
removeUsernamePasswordCookies(mediawikiApiEndpointPrefix, request, response);
|
||||
}
|
||||
|
||||
respond(request, response);
|
||||
@ -185,28 +178,60 @@ public class LoginCommand extends Command {
|
||||
}
|
||||
|
||||
protected void respond(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
String mediawikiApiEndpoint = request.getParameter(API_ENDPOINT);
|
||||
if (isBlank(mediawikiApiEndpoint)) {
|
||||
CommandUtilities.respondError(response, "missing parameter '" + API_ENDPOINT + "'");
|
||||
return;
|
||||
}
|
||||
|
||||
ConnectionManager manager = ConnectionManager.getInstance();
|
||||
Map<String, Object> jsonResponse = new HashMap<>();
|
||||
jsonResponse.put("logged_in", manager.isLoggedIn());
|
||||
jsonResponse.put("username", manager.getUsername());
|
||||
if (manager.isLoggedIn(mediawikiApiEndpoint)) {
|
||||
jsonResponse.put("logged_in", manager.isLoggedIn(mediawikiApiEndpoint));
|
||||
jsonResponse.put("username", manager.getUsername(mediawikiApiEndpoint));
|
||||
jsonResponse.put("mediawiki_api_endpoint", mediawikiApiEndpoint);
|
||||
} else {
|
||||
jsonResponse.put("logged_in", false);
|
||||
jsonResponse.put("username", null);
|
||||
jsonResponse.put("mediawiki_api_endpoint", mediawikiApiEndpoint);
|
||||
}
|
||||
|
||||
respondJSON(response, jsonResponse);
|
||||
}
|
||||
|
||||
private static void removeUsernamePasswordCookies(HttpServletRequest request, HttpServletResponse response) {
|
||||
|
||||
/**
|
||||
* 1. Filters cookies with the given prefix
|
||||
* 2. Removes the prefix
|
||||
*/
|
||||
private static Map<String, String> processCookiesWithPrefix(String prefix, Cookie[] cookies) throws UnsupportedEncodingException {
|
||||
Map<String, String> result = new HashMap<>();
|
||||
for (Cookie cookie : cookies) {
|
||||
String name = cookie.getName();
|
||||
if (name.startsWith(prefix)) {
|
||||
result.put(name.substring(prefix.length()), getCookieValue(cookie));
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void removeUsernamePasswordCookies(String wikibaseApiEndpointPrefix, HttpServletRequest request, HttpServletResponse response) {
|
||||
String toRemovePrefix = wikibaseApiEndpointPrefix + WIKIBASE_COOKIE_PREFIX;
|
||||
Cookie[] cookies = request.getCookies();
|
||||
for (Cookie cookie : cookies) {
|
||||
if (cookie.getName().startsWith(WIKIDATA_COOKIE_PREFIX)) {
|
||||
if (cookie.getName().startsWith(toRemovePrefix)) {
|
||||
removeCookie(response, cookie.getName());
|
||||
}
|
||||
}
|
||||
removeCookie(response, WIKIBASE_USERNAME_COOKIE_KEY);
|
||||
removeCookie(response, wikibaseApiEndpointPrefix + USERNAME);
|
||||
}
|
||||
|
||||
private static void removeOwnerOnlyConsumerCookies(HttpServletRequest request, HttpServletResponse response) {
|
||||
removeCookie(response, CONSUMER_TOKEN);
|
||||
removeCookie(response, CONSUMER_SECRET);
|
||||
removeCookie(response, ACCESS_TOKEN);
|
||||
removeCookie(response, ACCESS_SECRET);
|
||||
private static void removeOwnerOnlyConsumerCookies(String wikibaseApiEndpointPrefix, HttpServletRequest request, HttpServletResponse response) {
|
||||
removeCookie(response, wikibaseApiEndpointPrefix + CONSUMER_TOKEN);
|
||||
removeCookie(response, wikibaseApiEndpointPrefix + CONSUMER_SECRET);
|
||||
removeCookie(response, wikibaseApiEndpointPrefix + ACCESS_TOKEN);
|
||||
removeCookie(response, wikibaseApiEndpointPrefix + ACCESS_SECRET);
|
||||
}
|
||||
|
||||
static String getCookieValue(Cookie cookie) throws UnsupportedEncodingException {
|
||||
@ -230,4 +255,17 @@ public class LoginCommand extends Command {
|
||||
cookie.setSecure(false);
|
||||
response.addCookie(cookie);
|
||||
}
|
||||
|
||||
/**
|
||||
* To avoid HTTP response splitting.
|
||||
*
|
||||
* See https://lgtm.com/rules/3980077/
|
||||
*/
|
||||
static String removeCRLF(String str) {
|
||||
if (str == null) {
|
||||
return "";
|
||||
} else {
|
||||
return str.replaceAll("[\n\r]", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,9 @@ public class PerformWikibaseEditsCommand extends EngineDependentCommand {
|
||||
protected AbstractOperation createOperation(Project project, HttpServletRequest request, EngineConfig engineConfig)
|
||||
throws Exception {
|
||||
String summary = request.getParameter("summary");
|
||||
return new PerformWikibaseEditsOperation(engineConfig, summary);
|
||||
String maxlagStr = request.getParameter("maxlag");
|
||||
int maxlag = maxlagStr == null ? 5 : Integer.parseInt(maxlagStr);
|
||||
return new PerformWikibaseEditsOperation(engineConfig, summary, maxlag);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,18 +1,18 @@
|
||||
/*******************************************************************************
|
||||
* MIT License
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2018 Antonin Delpeuch
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
@ -34,6 +34,9 @@ import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.openrefine.wikidata.manifests.Manifest;
|
||||
import org.openrefine.wikidata.manifests.ManifestException;
|
||||
import org.openrefine.wikidata.manifests.ManifestParser;
|
||||
import org.openrefine.wikidata.qa.EditInspector;
|
||||
import org.openrefine.wikidata.qa.QAWarningStore;
|
||||
import org.openrefine.wikidata.schema.WikibaseSchema;
|
||||
@ -63,12 +66,12 @@ public class PreviewWikibaseSchemaCommand extends Command {
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.setHeader("Content-Type", "application/json");
|
||||
|
||||
String jsonString = request.getParameter("schema");
|
||||
String schemaJson = request.getParameter("schema");
|
||||
|
||||
WikibaseSchema schema = null;
|
||||
if (jsonString != null) {
|
||||
if (schemaJson != null) {
|
||||
try {
|
||||
schema = WikibaseSchema.reconstruct(jsonString);
|
||||
schema = WikibaseSchema.reconstruct(schemaJson);
|
||||
} catch (IOException e) {
|
||||
respondError(response, "Wikibase schema could not be parsed.");
|
||||
return;
|
||||
@ -81,6 +84,21 @@ public class PreviewWikibaseSchemaCommand extends Command {
|
||||
return;
|
||||
}
|
||||
|
||||
Manifest manifest = null;
|
||||
String manifestJson = request.getParameter("manifest");
|
||||
if (manifestJson != null) {
|
||||
try {
|
||||
manifest = ManifestParser.parse(manifestJson);
|
||||
} catch (ManifestException e) {
|
||||
respondError(response, "Wikibase manifest could not be parsed. Error message: " + e.getMessage());
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (manifest == null) {
|
||||
respondError(response, "No Wikibase manifest provided.");
|
||||
return;
|
||||
}
|
||||
|
||||
QAWarningStore warningStore = new QAWarningStore();
|
||||
|
||||
// Evaluate project
|
||||
@ -88,9 +106,9 @@ public class PreviewWikibaseSchemaCommand extends Command {
|
||||
List<ItemUpdate> editBatch = schema.evaluate(project, engine, warningStore);
|
||||
|
||||
// Inspect the edits and generate warnings
|
||||
EditInspector inspector = new EditInspector(warningStore);
|
||||
EditInspector inspector = new EditInspector(warningStore, manifest);
|
||||
inspector.inspect(editBatch);
|
||||
|
||||
|
||||
// Dump the first 10 edits, scheduled with the default scheduler
|
||||
WikibaseAPIUpdateScheduler scheduler = new WikibaseAPIUpdateScheduler();
|
||||
List<ItemUpdate> nonNullEdits = scheduler.schedule(editBatch).stream()
|
||||
|
@ -43,8 +43,6 @@ import org.wikidata.wdtk.datamodel.interfaces.MonolingualTextValue;
|
||||
import org.wikidata.wdtk.wikibaseapi.WikibaseDataEditor;
|
||||
import org.wikidata.wdtk.wikibaseapi.WikibaseDataFetcher;
|
||||
import org.wikidata.wdtk.wikibaseapi.apierrors.MediaWikiApiErrorException;
|
||||
import com.google.refine.ProjectManager;
|
||||
import com.google.refine.preference.PreferenceStore;
|
||||
|
||||
|
||||
/**
|
||||
@ -70,17 +68,6 @@ public class EditBatchProcessor {
|
||||
private int globalCursor;
|
||||
private Map<String, EntityDocument> currentDocs;
|
||||
private int batchSize;
|
||||
protected static final String MAX_LAG_KEY = "wikibase.upload.maxLag";
|
||||
protected static final int MAX_LAG_DEFAULT = 5; // 5 second default maxLag
|
||||
protected PreferenceStore prefStore = ProjectManager.singleton.getPreferenceStore();
|
||||
|
||||
private int getMaxLag() {
|
||||
try {
|
||||
return Integer.parseInt((String) prefStore.get(MAX_LAG_KEY));
|
||||
} catch (NumberFormatException e) {
|
||||
return MAX_LAG_DEFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiates the process of pushing a batch of updates to Wikibase. This
|
||||
@ -104,7 +91,7 @@ public class EditBatchProcessor {
|
||||
* API
|
||||
*/
|
||||
public EditBatchProcessor(WikibaseDataFetcher fetcher, WikibaseDataEditor editor, List<ItemUpdate> updates,
|
||||
NewItemLibrary library, String summary, List<String> tags, int batchSize) {
|
||||
NewItemLibrary library, String summary, int maxLag, List<String> tags, int batchSize) {
|
||||
this.fetcher = fetcher;
|
||||
this.editor = editor;
|
||||
editor.setEditAsBot(true); // this will not do anything if the user does not
|
||||
@ -114,7 +101,6 @@ public class EditBatchProcessor {
|
||||
// it will slow us down via the maxlag mechanism.
|
||||
editor.setAverageTimePerEdit(1000);
|
||||
// set maxlag based on preference store
|
||||
int maxLag = getMaxLag();
|
||||
editor.setMaxLag(maxLag);
|
||||
|
||||
this.library = library;
|
||||
|
@ -1,75 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2018 Antonin Delpeuch
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
******************************************************************************/
|
||||
package org.openrefine.wikidata.editing;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
|
||||
/**
|
||||
* This is just the necessary bits to store Wikidata credentials in OpenRefine's
|
||||
* preference store.
|
||||
*
|
||||
* @author Antonin Delpeuch
|
||||
*
|
||||
*/
|
||||
class WikibaseCredentials {
|
||||
|
||||
@JsonProperty("username")
|
||||
private String username;
|
||||
@JsonProperty("password")
|
||||
private String password;
|
||||
|
||||
public WikibaseCredentials() {
|
||||
username = null;
|
||||
password = null;
|
||||
}
|
||||
|
||||
@JsonCreator
|
||||
public WikibaseCredentials(
|
||||
@JsonProperty("username")
|
||||
String username,
|
||||
@JsonProperty("password")
|
||||
String password) {
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public boolean isNonNull() {
|
||||
return username != null && password != null && !"null".equals(username) && !"null".equals(password);
|
||||
}
|
||||
|
||||
@JsonProperty("class")
|
||||
public String getClassName() {
|
||||
return getClass().getName();
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package org.openrefine.wikidata.manifests;
|
||||
|
||||
public interface Manifest {
|
||||
|
||||
String getVersion();
|
||||
|
||||
String getName();
|
||||
|
||||
String getSiteIri();
|
||||
|
||||
int getMaxlag();
|
||||
|
||||
String getInstanceOfPid();
|
||||
|
||||
String getSubclassOfPid();
|
||||
|
||||
String getMediaWikiApiEndpoint();
|
||||
|
||||
String getReconServiceEndpoint();
|
||||
|
||||
String getConstraintsRelatedId(String name);
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package org.openrefine.wikidata.manifests;
|
||||
|
||||
public class ManifestException extends Exception {
|
||||
|
||||
public ManifestException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public ManifestException(String msg, Throwable cause) {
|
||||
super(msg, cause);
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package org.openrefine.wikidata.manifests;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public final class ManifestParser {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ManifestParser.class);
|
||||
|
||||
private static final ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
public static Manifest parse(String manifestJson) throws ManifestException {
|
||||
JsonNode root;
|
||||
try {
|
||||
root = mapper.readTree(manifestJson);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new ManifestException("invalid manifest format", e);
|
||||
}
|
||||
|
||||
String version = root.path("version").textValue();
|
||||
if (StringUtils.isBlank(version)) {
|
||||
throw new ManifestException("invalid manifest format, version is missing");
|
||||
}
|
||||
if (!version.matches("[0-9]+\\.[0-9]+")) {
|
||||
throw new ManifestException("invalid version: " + version);
|
||||
}
|
||||
|
||||
String majorVersion = version.split("\\.")[0];
|
||||
// support only v1.x for now
|
||||
if ("1".equals(majorVersion)) {
|
||||
return new ManifestV1(root);
|
||||
} else {
|
||||
throw new ManifestException("unsupported manifest version: " + version);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
package org.openrefine.wikidata.manifests;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
public class ManifestV1 implements Manifest {
|
||||
|
||||
private String version;
|
||||
private String name;
|
||||
private String siteIri;
|
||||
private int maxlag;
|
||||
private String instanceOfPid;
|
||||
private String subclassOfPid;
|
||||
private String mediaWikiApiEndpoint;
|
||||
private String reconServiceEndpoint;
|
||||
|
||||
private Map<String, String> constraintsRelatedIdMap = new HashMap<>();
|
||||
|
||||
public ManifestV1(JsonNode manifest) {
|
||||
version = manifest.path("version").textValue();
|
||||
|
||||
JsonNode mediawiki = manifest.path("mediawiki");
|
||||
name = mediawiki.path("name").textValue();
|
||||
mediaWikiApiEndpoint = mediawiki.path("api").textValue();
|
||||
|
||||
JsonNode wikibase = manifest.path("wikibase");
|
||||
siteIri = wikibase.path("site_iri").textValue();
|
||||
maxlag = wikibase.path("maxlag").intValue();
|
||||
JsonNode properties = wikibase.path("properties");
|
||||
instanceOfPid = properties.path("instance_of").textValue();
|
||||
subclassOfPid = properties.path("subclass_of").textValue();
|
||||
|
||||
JsonNode constraints = wikibase.path("constraints");
|
||||
Iterator<Map.Entry<String, JsonNode>> fields = constraints.fields();
|
||||
while (fields.hasNext()) {
|
||||
Map.Entry<String, JsonNode> entry = fields.next();
|
||||
String name = entry.getKey();
|
||||
String value = entry.getValue().textValue();
|
||||
constraintsRelatedIdMap.put(name, value);
|
||||
}
|
||||
|
||||
JsonNode reconciliation = manifest.path("reconciliation");
|
||||
reconServiceEndpoint = reconciliation.path("endpoint").textValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSiteIri() {
|
||||
return siteIri;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxlag() {
|
||||
return maxlag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getInstanceOfPid() {
|
||||
return instanceOfPid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSubclassOfPid() {
|
||||
return subclassOfPid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMediaWikiApiEndpoint() {
|
||||
return mediaWikiApiEndpoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getReconServiceEndpoint() {
|
||||
return reconServiceEndpoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getConstraintsRelatedId(String name) {
|
||||
return constraintsRelatedIdMap.get(name);
|
||||
}
|
||||
|
||||
}
|
@ -34,6 +34,7 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.openrefine.wikidata.commands.ConnectionManager;
|
||||
import org.openrefine.wikidata.editing.EditBatchProcessor;
|
||||
import org.openrefine.wikidata.editing.NewItemLibrary;
|
||||
@ -67,16 +68,27 @@ public class PerformWikibaseEditsOperation extends EngineDependentOperation {
|
||||
@JsonProperty("summary")
|
||||
private String summary;
|
||||
|
||||
@JsonProperty("maxlag")
|
||||
private int maxlag;
|
||||
|
||||
@JsonCreator
|
||||
public PerformWikibaseEditsOperation(
|
||||
@JsonProperty("engineConfig")
|
||||
EngineConfig engineConfig,
|
||||
@JsonProperty("summary")
|
||||
String summary) {
|
||||
String summary,
|
||||
@JsonProperty("maxlag")
|
||||
Integer maxlag) {
|
||||
super(engineConfig);
|
||||
Validate.notNull(summary, "An edit summary must be provided.");
|
||||
Validate.notEmpty(summary, "An edit summary must be provided.");
|
||||
this.summary = summary;
|
||||
if (maxlag == null) {
|
||||
// For backward compatibility, if the maxlag parameter is not included
|
||||
// in the serialized JSON text, set it to 5.
|
||||
maxlag = 5;
|
||||
}
|
||||
this.maxlag = maxlag;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -171,23 +183,28 @@ public class PerformWikibaseEditsOperation extends EngineDependentOperation {
|
||||
|
||||
WebResourceFetcherImpl.setUserAgent("OpenRefine Wikidata extension");
|
||||
ConnectionManager manager = ConnectionManager.getInstance();
|
||||
if (!manager.isLoggedIn()) {
|
||||
String mediaWikiApiEndpoint = _schema.getMediaWikiApiEndpoint();
|
||||
if (!manager.isLoggedIn(mediaWikiApiEndpoint)) {
|
||||
return;
|
||||
}
|
||||
ApiConnection connection = manager.getConnection();
|
||||
ApiConnection connection = manager.getConnection(mediaWikiApiEndpoint);
|
||||
|
||||
WikibaseDataFetcher wbdf = new WikibaseDataFetcher(connection, _schema.getBaseIri());
|
||||
WikibaseDataEditor wbde = new WikibaseDataEditor(connection, _schema.getBaseIri());
|
||||
|
||||
// Generate batch token
|
||||
long token = (new Random()).nextLong();
|
||||
// The following replacement is a fix for: https://github.com/Wikidata/editgroups/issues/4
|
||||
// Because commas and colons are used by Wikibase to separate the auto-generated summaries
|
||||
// from the user-supplied ones, we replace these separators by similar unicode characters to
|
||||
// make sure they can be told apart.
|
||||
String summaryWithoutCommas = _summary.replaceAll(", ","ꓹ ").replaceAll(": ","։ ");
|
||||
String summary = summaryWithoutCommas + String.format(" ([[:toollabs:editgroups/b/OR/%s|details]])",
|
||||
(Long.toHexString(token).substring(0, 11)));
|
||||
WikibaseDataFetcher wbdf = new WikibaseDataFetcher(connection, _schema.getSiteIri());
|
||||
WikibaseDataEditor wbde = new WikibaseDataEditor(connection, _schema.getSiteIri());
|
||||
|
||||
String summary;
|
||||
if (StringUtils.isBlank(_schema.getEditGroupsURLSchema())) {
|
||||
summary = _summary;
|
||||
} else {
|
||||
// Generate batch id
|
||||
String batchId = Long.toHexString((new Random()).nextLong()).substring(0, 11);
|
||||
// The following replacement is a fix for: https://github.com/Wikidata/editgroups/issues/4
|
||||
// Because commas and colons are used by Wikibase to separate the auto-generated summaries
|
||||
// from the user-supplied ones, we replace these separators by similar unicode characters to
|
||||
// make sure they can be told apart.
|
||||
String summaryWithoutCommas = _summary.replaceAll(", ","ꓹ ").replaceAll(": ","։ ");
|
||||
summary = summaryWithoutCommas + " " + _schema.getEditGroupsURLSchema().replace("${batch_id}", batchId);
|
||||
}
|
||||
|
||||
// Evaluate the schema
|
||||
List<ItemUpdate> itemDocuments = _schema.evaluate(_project, _engine);
|
||||
@ -195,7 +212,7 @@ public class PerformWikibaseEditsOperation extends EngineDependentOperation {
|
||||
// Prepare the edits
|
||||
NewItemLibrary newItemLibrary = new NewItemLibrary();
|
||||
EditBatchProcessor processor = new EditBatchProcessor(wbdf, wbde, itemDocuments, newItemLibrary, summary,
|
||||
_tags, 50);
|
||||
maxlag, _tags, 50);
|
||||
|
||||
// Perform edits
|
||||
logger.info("Performing edits");
|
||||
|
@ -23,18 +23,36 @@
|
||||
******************************************************************************/
|
||||
package org.openrefine.wikidata.qa;
|
||||
|
||||
import org.openrefine.wikidata.utils.EntityCache;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.EntityIdValue;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyDocument;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Statement;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.StatementGroup;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.StatementRank;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* An object that fetches constraints about properties.
|
||||
* This class provides an abstraction over the way constraint definitions are
|
||||
* stored in a Wikibase instance.
|
||||
*
|
||||
* @author Antonin Delpeuch
|
||||
*
|
||||
*/
|
||||
public interface ConstraintFetcher {
|
||||
public class ConstraintFetcher {
|
||||
|
||||
private String wikibaseConstraintPid;
|
||||
|
||||
private EntityCache entityCache;
|
||||
|
||||
public ConstraintFetcher(EntityCache cache, String wikibaseConstraintPid) {
|
||||
entityCache = cache;
|
||||
this.wikibaseConstraintPid = wikibaseConstraintPid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of constraints of a particular type for a property
|
||||
@ -45,6 +63,30 @@ public interface ConstraintFetcher {
|
||||
* the type of the constraints
|
||||
* @return the list of matching constraint statements
|
||||
*/
|
||||
List<Statement> getConstraintsByType(PropertyIdValue pid, String qid);
|
||||
public List<Statement> getConstraintsByType(PropertyIdValue pid, String qid) {
|
||||
Stream<Statement> allConstraints = getConstraintStatements(pid).stream()
|
||||
.filter(s -> s.getValue() != null && ((EntityIdValue) s.getValue()).getId().equals(qid))
|
||||
.filter(s -> !StatementRank.DEPRECATED.equals(s.getRank()));
|
||||
return allConstraints.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all the constraint statements for a given property
|
||||
*
|
||||
* @param pid
|
||||
* the id of the property to retrieve the constraints for
|
||||
* @return the list of constraint statements
|
||||
*/
|
||||
private List<Statement> getConstraintStatements(PropertyIdValue pid) {
|
||||
PropertyDocument doc = (PropertyDocument) entityCache.get(pid);
|
||||
StatementGroup group = doc.findStatementGroup(wikibaseConstraintPid);
|
||||
if (group != null) {
|
||||
return group.getStatements().stream()
|
||||
.filter(s -> s.getValue() != null && s.getValue() instanceof EntityIdValue)
|
||||
.collect(Collectors.toList());
|
||||
} else {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,18 +1,18 @@
|
||||
/*******************************************************************************
|
||||
* MIT License
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2018 Antonin Delpeuch
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
@ -23,10 +23,13 @@
|
||||
******************************************************************************/
|
||||
package org.openrefine.wikidata.qa;
|
||||
|
||||
import org.openrefine.wikidata.manifests.Manifest;
|
||||
import org.openrefine.wikidata.qa.scrutinizers.*;
|
||||
import org.openrefine.wikidata.updates.ItemUpdate;
|
||||
import org.openrefine.wikidata.updates.scheduler.WikibaseAPIUpdateScheduler;
|
||||
import org.openrefine.wikidata.utils.EntityCache;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.EntityIdValue;
|
||||
|
||||
import java.util.HashMap;
|
||||
@ -38,18 +41,26 @@ import java.util.stream.Collectors;
|
||||
* Runs a collection of edit scrutinizers on an edit batch.
|
||||
*
|
||||
* @author Antonin Delpeuch
|
||||
*
|
||||
*/
|
||||
public class EditInspector {
|
||||
|
||||
private Map<String, EditScrutinizer> scrutinizers;
|
||||
private static final Logger logger = LoggerFactory.getLogger(EditInspector.class);
|
||||
|
||||
Map<String, EditScrutinizer> scrutinizers;
|
||||
private QAWarningStore warningStore;
|
||||
private ConstraintFetcher fetcher;
|
||||
private Manifest manifest;
|
||||
|
||||
public EditInspector(QAWarningStore warningStore) {
|
||||
public EditInspector(QAWarningStore warningStore, Manifest manifest) {
|
||||
this.scrutinizers = new HashMap<>();
|
||||
this.fetcher = new WikidataConstraintFetcher(EntityCache.getEntityCache());
|
||||
this.warningStore = warningStore;
|
||||
this.manifest = manifest;
|
||||
|
||||
String propertyConstraintPid = manifest.getConstraintsRelatedId("property_constraint_pid");
|
||||
if (propertyConstraintPid != null) {
|
||||
EntityCache entityCache = EntityCache.getEntityCache(manifest.getSiteIri(), manifest.getMediaWikiApiEndpoint());
|
||||
this.fetcher = new ConstraintFetcher(entityCache, propertyConstraintPid);
|
||||
}
|
||||
|
||||
// Register all known scrutinizers here
|
||||
register(new NewItemScrutinizer());
|
||||
@ -77,15 +88,23 @@ public class EditInspector {
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a new scrutinizer to the inspector
|
||||
* Adds a new scrutinizer to the inspector.
|
||||
*
|
||||
* If any necessary dependency is missing, the scrutinizer will not be added.
|
||||
*
|
||||
* @param scrutinizer
|
||||
*/
|
||||
public void register(EditScrutinizer scrutinizer) {
|
||||
String key = scrutinizer.getClass().getName();
|
||||
scrutinizers.put(key, scrutinizer);
|
||||
scrutinizer.setStore(warningStore);
|
||||
scrutinizer.setFetcher(fetcher);
|
||||
scrutinizer.setManifest(manifest);
|
||||
if (scrutinizer.prepareDependencies()) {
|
||||
String key = scrutinizer.getClass().getName();
|
||||
scrutinizers.put(key, scrutinizer);
|
||||
} else {
|
||||
logger.info("scrutinizer [" + scrutinizer.getClass().getSimpleName() + "] is skipped " +
|
||||
"due to missing of necessary constraint configurations in the Wikibase manifest");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,92 +0,0 @@
|
||||
/*******************************************************************************
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2018 Antonin Delpeuch
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
******************************************************************************/
|
||||
package org.openrefine.wikidata.qa;
|
||||
|
||||
import org.openrefine.wikidata.utils.EntityCache;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.EntityIdValue;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyDocument;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Statement;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.StatementGroup;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.StatementRank;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* This class provides an abstraction over the way constraint definitions are
|
||||
* stored in Wikidata.
|
||||
*
|
||||
* @author Antonin Delpeuch
|
||||
*
|
||||
*/
|
||||
public class WikidataConstraintFetcher implements ConstraintFetcher {
|
||||
|
||||
public static String WIKIDATA_CONSTRAINT_PID = "P2302";
|
||||
|
||||
protected EntityCache entityCache;
|
||||
|
||||
public WikidataConstraintFetcher(EntityCache cache) {
|
||||
entityCache = cache;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of constraints of a particular type for a property
|
||||
*
|
||||
* @param pid
|
||||
* the property to retrieve the constraints for
|
||||
* @param qid
|
||||
* the type of the constraints
|
||||
* @return the list of matching constraint statements
|
||||
*/
|
||||
@Override
|
||||
public List<Statement> getConstraintsByType(PropertyIdValue pid, String qid) {
|
||||
Stream<Statement> allConstraints = getConstraintStatements(pid).stream()
|
||||
.filter(s -> s.getValue() != null && ((EntityIdValue) s.getValue()).getId().equals(qid))
|
||||
.filter(s -> !StatementRank.DEPRECATED.equals(s.getRank()));
|
||||
return allConstraints.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all the constraint statements for a given property
|
||||
*
|
||||
* @param pid
|
||||
* the id of the property to retrieve the constraints for
|
||||
* @return the list of constraint statements
|
||||
*/
|
||||
protected List<Statement> getConstraintStatements(PropertyIdValue pid) {
|
||||
PropertyDocument doc = (PropertyDocument) entityCache.get(pid);
|
||||
StatementGroup group = doc.findStatementGroup(WIKIDATA_CONSTRAINT_PID);
|
||||
if (group != null) {
|
||||
return group.getStatements().stream()
|
||||
.filter(s -> s.getValue() != null && s.getValue() instanceof EntityIdValue)
|
||||
.collect(Collectors.toList());
|
||||
} else {
|
||||
return new ArrayList<Statement>();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -28,4 +28,8 @@ public class CalendarScrutinizer extends ValueScrutinizer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -57,4 +57,8 @@ public class CommonDescriptionScrutinizer extends DescriptionScrutinizer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -18,9 +18,9 @@ import java.util.Set;
|
||||
public class ConflictsWithScrutinizer extends EditScrutinizer {
|
||||
|
||||
public static final String type = "having-conflicts-with-statements";
|
||||
public static String CONFLICTS_WITH_CONSTRAINT_QID = "Q21502838";
|
||||
public static String CONFLICTS_WITH_PROPERTY_PID = "P2306";
|
||||
public static String ITEM_OF_PROPERTY_CONSTRAINT_PID = "P2305";
|
||||
public String conflictsWithConstraintQid;
|
||||
public String conflictsWithPropertyPid;
|
||||
public String itemOfPropertyConstraintPid;
|
||||
|
||||
class ConflictsWithConstraint {
|
||||
final PropertyIdValue conflictingPid;
|
||||
@ -32,10 +32,10 @@ public class ConflictsWithScrutinizer extends EditScrutinizer {
|
||||
this.itemList = new ArrayList<>();
|
||||
for(SnakGroup group : specs) {
|
||||
for (Snak snak : group.getSnaks()) {
|
||||
if (group.getProperty().getId().equals(CONFLICTS_WITH_PROPERTY_PID)){
|
||||
if (group.getProperty().getId().equals(conflictsWithPropertyPid)){
|
||||
pid = (PropertyIdValue) snak.getValue();
|
||||
}
|
||||
if (group.getProperty().getId().equals(ITEM_OF_PROPERTY_CONSTRAINT_PID)){
|
||||
if (group.getProperty().getId().equals(itemOfPropertyConstraintPid)){
|
||||
this.itemList.add(snak.getValue());
|
||||
}
|
||||
}
|
||||
@ -44,6 +44,16 @@ public class ConflictsWithScrutinizer extends EditScrutinizer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
conflictsWithConstraintQid = getConstraintsRelatedId("conflicts_with_constraint_qid");
|
||||
conflictsWithPropertyPid = getConstraintsRelatedId("property_pid");
|
||||
itemOfPropertyConstraintPid = getConstraintsRelatedId("item_of_property_constraint_pid");
|
||||
|
||||
return _fetcher != null && conflictsWithConstraintQid != null
|
||||
&& conflictsWithPropertyPid != null && itemOfPropertyConstraintPid != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrutinize(ItemUpdate update) {
|
||||
Map<PropertyIdValue, Set<Value>> propertyIdValueValueMap = new HashMap<>();
|
||||
@ -64,7 +74,7 @@ public class ConflictsWithScrutinizer extends EditScrutinizer {
|
||||
}
|
||||
|
||||
for(PropertyIdValue propertyId : propertyIdValueValueMap.keySet()){
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(propertyId, CONFLICTS_WITH_CONSTRAINT_QID);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(propertyId, conflictsWithConstraintQid);
|
||||
for (Statement statement : statementList) {
|
||||
ConflictsWithConstraint constraint = new ConflictsWithConstraint(statement);
|
||||
PropertyIdValue conflictingPid = constraint.conflictingPid;
|
||||
|
@ -11,10 +11,10 @@ import java.util.Map;
|
||||
public class DifferenceWithinRangeScrutinizer extends EditScrutinizer {
|
||||
|
||||
public static final String type = "difference-of-the-properties-is-not-within-the-specified-range";
|
||||
public static String DIFFERENCE_WITHIN_RANGE_CONSTRAINT_QID = "Q21510854";
|
||||
public static String DIFFERENCE_WITHIN_RANGE_CONSTRAINT_PID = "P2306";
|
||||
public static String MINIMUM_VALUE_PID = "P2313";
|
||||
public static String MAXIMUM_VALUE_PID = "P2312";
|
||||
public String differenceWithinRangeConstraintQid;
|
||||
public String differenceWithinRangeConstraintPid;
|
||||
public String minimumValuePid;
|
||||
public String maximumValuePid;
|
||||
|
||||
class DifferenceWithinRangeConstraint {
|
||||
PropertyIdValue lowerPropertyIdValue;
|
||||
@ -23,9 +23,9 @@ public class DifferenceWithinRangeScrutinizer extends EditScrutinizer {
|
||||
DifferenceWithinRangeConstraint(Statement statement) {
|
||||
List<SnakGroup> specs = statement.getClaim().getQualifiers();
|
||||
if (specs != null) {
|
||||
List<Value> lowerValueProperty = findValues(specs, DIFFERENCE_WITHIN_RANGE_CONSTRAINT_PID);
|
||||
List<Value> minValue = findValues(specs, MINIMUM_VALUE_PID);
|
||||
List<Value> maxValue = findValues(specs, MAXIMUM_VALUE_PID);
|
||||
List<Value> lowerValueProperty = findValues(specs, differenceWithinRangeConstraintPid);
|
||||
List<Value> minValue = findValues(specs, minimumValuePid);
|
||||
List<Value> maxValue = findValues(specs, maximumValuePid);
|
||||
if (!lowerValueProperty.isEmpty()) {
|
||||
lowerPropertyIdValue = (PropertyIdValue) lowerValueProperty.get(0);
|
||||
}
|
||||
@ -39,6 +39,16 @@ public class DifferenceWithinRangeScrutinizer extends EditScrutinizer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
differenceWithinRangeConstraintQid = getConstraintsRelatedId("difference_within_range_constraint_qid");
|
||||
differenceWithinRangeConstraintPid = getConstraintsRelatedId("property_pid");
|
||||
minimumValuePid = getConstraintsRelatedId("minimum_value_pid");
|
||||
maximumValuePid = getConstraintsRelatedId("maximum_value_pid");
|
||||
return _fetcher != null && differenceWithinRangeConstraintQid != null && differenceWithinRangeConstraintPid != null
|
||||
&& minimumValuePid != null && maximumValuePid != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrutinize(ItemUpdate update) {
|
||||
Map<PropertyIdValue, Value> propertyIdValueValueMap = new HashMap<>();
|
||||
@ -49,7 +59,7 @@ public class DifferenceWithinRangeScrutinizer extends EditScrutinizer {
|
||||
}
|
||||
|
||||
for(PropertyIdValue propertyId : propertyIdValueValueMap.keySet()){
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(propertyId, DIFFERENCE_WITHIN_RANGE_CONSTRAINT_QID);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(propertyId, differenceWithinRangeConstraintQid);
|
||||
if (!statementList.isEmpty()){
|
||||
DifferenceWithinRangeConstraint constraint = new DifferenceWithinRangeConstraint(statementList.get(0));
|
||||
PropertyIdValue lowerPropertyId = constraint.lowerPropertyIdValue;
|
||||
|
@ -43,7 +43,7 @@ import java.util.Map;
|
||||
public class DistinctValuesScrutinizer extends StatementScrutinizer {
|
||||
|
||||
public final static String type = "identical-values-for-distinct-valued-property";
|
||||
public static String DISTINCT_VALUES_CONSTRAINT_QID = "Q21502410";
|
||||
public String distinctValuesConstraintQid;
|
||||
|
||||
private Map<PropertyIdValue, Map<Value, EntityIdValue>> _seenValues;
|
||||
|
||||
@ -51,10 +51,16 @@ public class DistinctValuesScrutinizer extends StatementScrutinizer {
|
||||
_seenValues = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
distinctValuesConstraintQid = getConstraintsRelatedId("distinct_values_constraint_qid");
|
||||
return _fetcher != null && distinctValuesConstraintQid != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrutinize(Statement statement, EntityIdValue entityId, boolean added) {
|
||||
PropertyIdValue pid = statement.getClaim().getMainSnak().getPropertyId();
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, DISTINCT_VALUES_CONSTRAINT_QID);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, distinctValuesConstraintQid);
|
||||
if (!statementList.isEmpty()) {
|
||||
Value mainSnakValue = statement.getClaim().getMainSnak().getValue();
|
||||
Map<Value, EntityIdValue> seen = _seenValues.get(pid);
|
||||
|
@ -23,6 +23,7 @@
|
||||
******************************************************************************/
|
||||
package org.openrefine.wikidata.qa.scrutinizers;
|
||||
|
||||
import org.openrefine.wikidata.manifests.Manifest;
|
||||
import org.openrefine.wikidata.qa.ConstraintFetcher;
|
||||
import org.openrefine.wikidata.qa.QAWarning;
|
||||
import org.openrefine.wikidata.qa.QAWarning.Severity;
|
||||
@ -44,19 +45,35 @@ public abstract class EditScrutinizer {
|
||||
|
||||
protected QAWarningStore _store;
|
||||
protected ConstraintFetcher _fetcher;
|
||||
|
||||
public EditScrutinizer() {
|
||||
_fetcher = null;
|
||||
_store = null;
|
||||
}
|
||||
protected Manifest manifest;
|
||||
|
||||
public void setStore(QAWarningStore store) {
|
||||
_store = store;
|
||||
}
|
||||
|
||||
/**
|
||||
* The fetcher will be set to null if 'property_constraint_pid' is missing in the manifest.
|
||||
*/
|
||||
public void setFetcher(ConstraintFetcher fetcher) {
|
||||
_fetcher = fetcher;
|
||||
}
|
||||
|
||||
public void setManifest(Manifest manifest) {
|
||||
this.manifest = manifest;
|
||||
}
|
||||
|
||||
public String getConstraintsRelatedId(String name) {
|
||||
return manifest.getConstraintsRelatedId(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare the dependencies(i.e. constraint-related pids and qids) needed by the scrutinizer.
|
||||
*
|
||||
* Called before {@link EditScrutinizer#batchIsBeginning()}.
|
||||
*
|
||||
* @return false if any necessary dependency is missing, true otherwise.
|
||||
*/
|
||||
public abstract boolean prepareDependencies();
|
||||
|
||||
/**
|
||||
* Called before an edit batch is scrutinized.
|
||||
@ -97,8 +114,6 @@ public abstract class EditScrutinizer {
|
||||
|
||||
/**
|
||||
* Helper to be used by subclasses to emit simple INFO warnings
|
||||
*
|
||||
* @param warning
|
||||
*/
|
||||
protected void info(String type) {
|
||||
addIssue(type, null, QAWarning.Severity.INFO, 1);
|
||||
@ -107,8 +122,6 @@ public abstract class EditScrutinizer {
|
||||
|
||||
/**
|
||||
* Helper to be used by subclasses to emit simple warnings
|
||||
*
|
||||
* @param warning
|
||||
*/
|
||||
protected void warning(String type) {
|
||||
addIssue(type, null, QAWarning.Severity.WARNING, 1);
|
||||
@ -116,8 +129,6 @@ public abstract class EditScrutinizer {
|
||||
|
||||
/**
|
||||
* Helper to be used by subclasses to emit simple important warnings
|
||||
*
|
||||
* @param warning
|
||||
*/
|
||||
protected void important(String type) {
|
||||
addIssue(type, null, QAWarning.Severity.IMPORTANT, 1);
|
||||
@ -125,8 +136,6 @@ public abstract class EditScrutinizer {
|
||||
|
||||
/**
|
||||
* Helper to be used by subclasses to emit simple critical warnings
|
||||
*
|
||||
* @param warning
|
||||
*/
|
||||
protected void critical(String type) {
|
||||
addIssue(type, null, QAWarning.Severity.CRITICAL, 1);
|
||||
|
@ -71,4 +71,8 @@ public class EnglishDescriptionScrutinizer extends DescriptionScrutinizer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -14,20 +14,20 @@ import java.util.List;
|
||||
public class EntityTypeScrutinizer extends SnakScrutinizer {
|
||||
|
||||
public final static String type = "invalid-entity-type";
|
||||
public static String ALLOWED_ENTITY_TYPES_QID = "Q52004125";
|
||||
public static String ALLOWED_ITEM_TYPE_QID = "Q29934200";
|
||||
public static String ALLOWED_ENTITY_TYPES_PID = "P2305";
|
||||
public String allowedEntityTypesQid;
|
||||
public String wikibaseItemQid;
|
||||
public String itemOfPropertyConstraint;
|
||||
|
||||
@Override
|
||||
public void scrutinize(Snak snak, EntityIdValue entityId, boolean added) {
|
||||
PropertyIdValue pid = snak.getPropertyId();
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, ALLOWED_ENTITY_TYPES_QID);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, allowedEntityTypesQid);
|
||||
if(!statementList.isEmpty()) {
|
||||
List<SnakGroup> constraint = statementList.get(0).getClaim().getQualifiers();
|
||||
boolean isUsable = true;
|
||||
if (constraint != null) {
|
||||
isUsable = findValues(constraint, ALLOWED_ENTITY_TYPES_PID).contains(
|
||||
Datamodel.makeWikidataItemIdValue(ALLOWED_ITEM_TYPE_QID));
|
||||
isUsable = findValues(constraint, itemOfPropertyConstraint).contains(
|
||||
Datamodel.makeWikidataItemIdValue(wikibaseItemQid));
|
||||
}
|
||||
if (!isUsable) {
|
||||
QAWarning issue = new QAWarning(type, null, QAWarning.Severity.WARNING, 1);
|
||||
@ -37,4 +37,13 @@ public class EntityTypeScrutinizer extends SnakScrutinizer {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
allowedEntityTypesQid = getConstraintsRelatedId("allowed_entity_types_constraint_qid");
|
||||
wikibaseItemQid = getConstraintsRelatedId("wikibase_item_qid");
|
||||
itemOfPropertyConstraint = getConstraintsRelatedId("item_of_property_constraint_pid");
|
||||
return _fetcher != null && allowedEntityTypesQid != null
|
||||
&& wikibaseItemQid != null && itemOfPropertyConstraint != null;
|
||||
}
|
||||
}
|
||||
|
@ -49,8 +49,8 @@ import java.util.regex.Pattern;
|
||||
public class FormatScrutinizer extends SnakScrutinizer {
|
||||
|
||||
public static final String type = "add-statements-with-invalid-format";
|
||||
public static String FORMAT_CONSTRAINT_QID = "Q21502404";
|
||||
public static String FORMAT_REGEX_PID = "P1793";
|
||||
public String formatConstraintQid;
|
||||
public String formatRegexPid;
|
||||
|
||||
private Map<PropertyIdValue, Set<Pattern>> _patterns;
|
||||
|
||||
@ -60,7 +60,7 @@ public class FormatScrutinizer extends SnakScrutinizer {
|
||||
FormatConstraint(Statement statement) {
|
||||
List<SnakGroup> constraint = statement.getClaim().getQualifiers();
|
||||
if (constraint != null) {
|
||||
List<Value> regexes = findValues(constraint, FORMAT_REGEX_PID);
|
||||
List<Value> regexes = findValues(constraint, formatRegexPid);
|
||||
if (!regexes.isEmpty()) {
|
||||
regularExpressionFormat = ((StringValue) regexes.get(0)).getString();
|
||||
}
|
||||
@ -71,6 +71,13 @@ public class FormatScrutinizer extends SnakScrutinizer {
|
||||
_patterns = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
formatConstraintQid = getConstraintsRelatedId("format_constraint_qid");
|
||||
formatRegexPid = getConstraintsRelatedId("format_as_a_regular_expression_pid");
|
||||
return _fetcher != null && formatConstraintQid != null && formatRegexPid != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the regex for a property and compiles it to a pattern (this is cached
|
||||
* upstream, plus we are doing it only once per property and batch).
|
||||
@ -83,7 +90,7 @@ public class FormatScrutinizer extends SnakScrutinizer {
|
||||
if (_patterns.containsKey(pid)) {
|
||||
return _patterns.get(pid);
|
||||
} else {
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, FORMAT_CONSTRAINT_QID);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, formatConstraintQid);
|
||||
Set<Pattern> patterns = new HashSet<>();
|
||||
for (Statement statement: statementList) {
|
||||
FormatConstraint constraint = new FormatConstraint(statement);
|
||||
|
@ -47,9 +47,9 @@ import java.util.Set;
|
||||
public class InverseConstraintScrutinizer extends StatementScrutinizer {
|
||||
|
||||
public static final String type = "missing-inverse-statements";
|
||||
public static String INVERSE_CONSTRAINT_QID = "Q21510855";
|
||||
public static String INVERSE_PROPERTY_PID = "P2306";
|
||||
public static String SYMMETRIC_CONSTRAINT_QID = "Q21510862";
|
||||
public String inverseConstraintQid;
|
||||
public String inversePropertyPid;
|
||||
public String symmetricConstraintQid;
|
||||
|
||||
class InverseConstraint {
|
||||
PropertyIdValue propertyParameterValue;
|
||||
@ -58,7 +58,7 @@ public class InverseConstraintScrutinizer extends StatementScrutinizer {
|
||||
List<SnakGroup> specs = statement.getClaim().getQualifiers();
|
||||
|
||||
if (specs != null) {
|
||||
List<Value> inverses = findValues(specs, INVERSE_PROPERTY_PID);
|
||||
List<Value> inverses = findValues(specs, inversePropertyPid);
|
||||
if (!inverses.isEmpty()) {
|
||||
propertyParameterValue = (PropertyIdValue) inverses.get(0);
|
||||
}
|
||||
@ -74,17 +74,26 @@ public class InverseConstraintScrutinizer extends StatementScrutinizer {
|
||||
_statements = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
inverseConstraintQid = getConstraintsRelatedId("inverse_constraint_qid");
|
||||
inversePropertyPid = getConstraintsRelatedId("property_pid");
|
||||
symmetricConstraintQid = getConstraintsRelatedId("symmetric_constraint_qid");
|
||||
return _fetcher != null && inverseConstraintQid != null
|
||||
&& inversePropertyPid != null && symmetricConstraintQid != null;
|
||||
}
|
||||
|
||||
protected PropertyIdValue getInverseConstraint(PropertyIdValue pid) {
|
||||
if (_inverse.containsKey(pid)) {
|
||||
return _inverse.get(pid);
|
||||
} else {
|
||||
PropertyIdValue inversePid = null;
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, INVERSE_CONSTRAINT_QID);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, inverseConstraintQid);
|
||||
if (!statementList.isEmpty()) {
|
||||
InverseConstraint constraint = new InverseConstraint(statementList.get(0));
|
||||
inversePid = constraint.propertyParameterValue;
|
||||
}
|
||||
if (inversePid == null && !_fetcher.getConstraintsByType(pid, SYMMETRIC_CONSTRAINT_QID).isEmpty()) {
|
||||
if (inversePid == null && !_fetcher.getConstraintsByType(pid, symmetricConstraintQid).isEmpty()) {
|
||||
inversePid = pid;
|
||||
}
|
||||
_inverse.put(pid, inversePid);
|
||||
|
@ -21,9 +21,9 @@ public class ItemRequiresScrutinizer extends EditScrutinizer {
|
||||
public static final String newItemRequirePropertyType = "new-item-requires-certain-other-statement";
|
||||
public static final String existingItemRequireValuesType = "existing-item-requires-property-to-have-certain-values";
|
||||
public static final String existingItemRequirePropertyType = "existing-item-requires-certain-other-statement";
|
||||
public static String ITEM_REQUIRES_CONSTRAINT_QID = "Q21503247";
|
||||
public static String ITEM_REQUIRES_PROPERTY_PID = "P2306";
|
||||
public static String ITEM_OF_PROPERTY_CONSTRAINT_PID = "P2305";
|
||||
public String itemRequiresConstraintQid;
|
||||
public String itemRequiresPropertyPid;
|
||||
public String itemOfPropertyConstraintPid;
|
||||
|
||||
class ItemRequiresConstraint {
|
||||
final PropertyIdValue itemRequiresPid;
|
||||
@ -35,10 +35,10 @@ public class ItemRequiresScrutinizer extends EditScrutinizer {
|
||||
this.itemList = new ArrayList<>();
|
||||
for(SnakGroup group : specs) {
|
||||
for (Snak snak : group.getSnaks()) {
|
||||
if (group.getProperty().getId().equals(ITEM_REQUIRES_PROPERTY_PID)){
|
||||
if (group.getProperty().getId().equals(itemRequiresPropertyPid)){
|
||||
pid = (PropertyIdValue) snak.getValue();
|
||||
}
|
||||
if (group.getProperty().getId().equals(ITEM_OF_PROPERTY_CONSTRAINT_PID)){
|
||||
if (group.getProperty().getId().equals(itemOfPropertyConstraintPid)){
|
||||
this.itemList.add(snak.getValue());
|
||||
}
|
||||
}
|
||||
@ -47,6 +47,15 @@ public class ItemRequiresScrutinizer extends EditScrutinizer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
itemRequiresConstraintQid = getConstraintsRelatedId("item_requires_statement_constraint_qid");
|
||||
itemRequiresPropertyPid = getConstraintsRelatedId("property_pid");
|
||||
itemOfPropertyConstraintPid = getConstraintsRelatedId("item_of_property_constraint_pid");
|
||||
return _fetcher != null && itemRequiresConstraintQid != null
|
||||
&& itemRequiresPropertyPid != null && itemOfPropertyConstraintPid != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrutinize(ItemUpdate update) {
|
||||
Map<PropertyIdValue, Set<Value>> propertyIdValueValueMap = new HashMap<>();
|
||||
@ -66,7 +75,7 @@ public class ItemRequiresScrutinizer extends EditScrutinizer {
|
||||
}
|
||||
|
||||
for (PropertyIdValue propertyId : propertyIdValueValueMap.keySet()) {
|
||||
List<Statement> constraintDefinitions = _fetcher.getConstraintsByType(propertyId, ITEM_REQUIRES_CONSTRAINT_QID);
|
||||
List<Statement> constraintDefinitions = _fetcher.getConstraintsByType(propertyId, itemRequiresConstraintQid);
|
||||
for (Statement statement : constraintDefinitions) {
|
||||
ItemRequiresConstraint constraint = new ItemRequiresConstraint(statement);
|
||||
PropertyIdValue itemRequiresPid = constraint.itemRequiresPid;
|
||||
|
@ -3,10 +3,7 @@ package org.openrefine.wikidata.qa.scrutinizers;
|
||||
import org.openrefine.wikidata.qa.QAWarning;
|
||||
import org.openrefine.wikidata.updates.ItemUpdate;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Snak;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.SnakGroup;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Statement;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Value;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -16,7 +13,13 @@ public class MultiValueScrutinizer extends EditScrutinizer {
|
||||
|
||||
public static final String new_type = "multi-valued-property-is-required-for-new-item";
|
||||
public static final String existing_type = "multi-valued-property-is-required-for-existing-item";
|
||||
public static String MULTI_VALUE_CONSTRAINT_QID = "Q21510857";
|
||||
public String multiValueConstraintQid;
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
multiValueConstraintQid = getConstraintsRelatedId("multi_value_constraint_qid");
|
||||
return _fetcher != null && multiValueConstraintQid != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrutinize(ItemUpdate update) {
|
||||
@ -24,7 +27,7 @@ public class MultiValueScrutinizer extends EditScrutinizer {
|
||||
|
||||
for (Statement statement : update.getAddedStatements()) {
|
||||
PropertyIdValue pid = statement.getClaim().getMainSnak().getPropertyId();
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, MULTI_VALUE_CONSTRAINT_QID);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, multiValueConstraintQid);
|
||||
if (propertyCount.containsKey(pid)) {
|
||||
propertyCount.put(pid, propertyCount.get(pid) + 1);
|
||||
} else if (!statementList.isEmpty()) {
|
||||
|
@ -37,9 +37,14 @@ public class NewItemScrutinizer extends EditScrutinizer {
|
||||
public static final String noLabelType = "new-item-without-labels-or-aliases";
|
||||
public static final String noDescType = "new-item-without-descriptions";
|
||||
public static final String deletedStatementsType = "new-item-with-deleted-statements";
|
||||
public static final String noTypeType = "new-item-without-P31-or-P279";
|
||||
public static final String noTypeType = "new-item-without-instance-of-or-subclass-of";
|
||||
public static final String newItemType = "new-item-created";
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrutinize(ItemUpdate update) {
|
||||
if (update.isNew()) {
|
||||
@ -67,7 +72,7 @@ public class NewItemScrutinizer extends EditScrutinizer {
|
||||
boolean typeFound = false;
|
||||
for (StatementGroup group : update.getAddedStatementGroups()) {
|
||||
String pid = group.getProperty().getId();
|
||||
if ("P31".equals(pid) || "P279".equals(pid)) {
|
||||
if (manifest.getInstanceOfPid().equals(pid) || manifest.getSubclassOfPid().equals(pid)) {
|
||||
typeFound = true;
|
||||
break;
|
||||
}
|
||||
|
@ -30,7 +30,12 @@ public class NoEditsMadeScrutinizer extends EditScrutinizer {
|
||||
public static final String type = "no-edit-generated";
|
||||
|
||||
private boolean nonNullUpdateSeen = false;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void batchIsBeginning() {
|
||||
nonNullUpdateSeen = false;
|
||||
|
@ -47,11 +47,12 @@ public class QualifierCompatibilityScrutinizer extends StatementScrutinizer {
|
||||
|
||||
public static final String missingMandatoryQualifiersType = "missing-mandatory-qualifiers";
|
||||
public static final String disallowedQualifiersType = "disallowed-qualifiers";
|
||||
public static String ALLOWED_QUALIFIERS_CONSTRAINT_QID = "Q21510851";
|
||||
public static String ALLOWED_QUALIFIERS_CONSTRAINT_PID = "P2306";
|
||||
|
||||
public static String MANDATORY_QUALIFIERS_CONSTRAINT_QID = "Q21510856";
|
||||
public static String MANDATORY_QUALIFIERS_CONSTRAINT_PID = "P2306";
|
||||
public String allowedQualifiersConstraintQid;
|
||||
public String allowedQualifiersConstraintPid;
|
||||
|
||||
public String mandatoryQualifiersConstraintQid;
|
||||
public String mandatoryQualifiersConstraintPid;
|
||||
|
||||
class AllowedQualifierConstraint {
|
||||
Set<PropertyIdValue> allowedProperties;
|
||||
@ -59,7 +60,7 @@ public class QualifierCompatibilityScrutinizer extends StatementScrutinizer {
|
||||
allowedProperties = new HashSet<>();
|
||||
List<SnakGroup> specs = statement.getClaim().getQualifiers();
|
||||
if (specs != null) {
|
||||
List<Value> properties = findValues(specs, ALLOWED_QUALIFIERS_CONSTRAINT_PID);
|
||||
List<Value> properties = findValues(specs, allowedQualifiersConstraintPid);
|
||||
allowedProperties = properties.stream()
|
||||
.filter(e -> e != null)
|
||||
.map(e -> (PropertyIdValue) e)
|
||||
@ -75,7 +76,7 @@ public class QualifierCompatibilityScrutinizer extends StatementScrutinizer {
|
||||
mandatoryProperties = new HashSet<>();
|
||||
List<SnakGroup> specs = statement.getClaim().getQualifiers();
|
||||
if (specs != null) {
|
||||
List<Value> properties = findValues(specs, MANDATORY_QUALIFIERS_CONSTRAINT_PID);
|
||||
List<Value> properties = findValues(specs, mandatoryQualifiersConstraintPid);
|
||||
mandatoryProperties = properties.stream()
|
||||
.filter(e -> e != null)
|
||||
.map(e -> (PropertyIdValue) e)
|
||||
@ -92,12 +93,22 @@ public class QualifierCompatibilityScrutinizer extends StatementScrutinizer {
|
||||
_mandatoryQualifiers = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
allowedQualifiersConstraintQid = getConstraintsRelatedId("allowed_qualifiers_constraint_qid");
|
||||
allowedQualifiersConstraintPid = getConstraintsRelatedId("property_pid");
|
||||
mandatoryQualifiersConstraintQid = getConstraintsRelatedId("mandatory_qualifier_constraint_qid");
|
||||
mandatoryQualifiersConstraintPid = getConstraintsRelatedId("property_pid");
|
||||
return _fetcher != null && allowedQualifiersConstraintQid != null && allowedQualifiersConstraintPid != null &&
|
||||
mandatoryQualifiersConstraintQid != null && mandatoryQualifiersConstraintPid != null;
|
||||
}
|
||||
|
||||
protected boolean qualifierIsAllowed(PropertyIdValue statementProperty, PropertyIdValue qualifierProperty) {
|
||||
Set<PropertyIdValue> allowed = null;
|
||||
if (_allowedQualifiers.containsKey(statementProperty)) {
|
||||
allowed = _allowedQualifiers.get(statementProperty);
|
||||
} else {
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(statementProperty, ALLOWED_QUALIFIERS_CONSTRAINT_QID);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(statementProperty, allowedQualifiersConstraintQid);
|
||||
if (!statementList.isEmpty()){
|
||||
AllowedQualifierConstraint allowedQualifierConstraint = new AllowedQualifierConstraint(statementList.get(0));
|
||||
allowed = allowedQualifierConstraint.allowedProperties;
|
||||
@ -112,7 +123,7 @@ public class QualifierCompatibilityScrutinizer extends StatementScrutinizer {
|
||||
if (_mandatoryQualifiers.containsKey(statementProperty)) {
|
||||
mandatory = _mandatoryQualifiers.get(statementProperty);
|
||||
} else {
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(statementProperty, MANDATORY_QUALIFIERS_CONSTRAINT_QID);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(statementProperty, mandatoryQualifiersConstraintQid);
|
||||
if (!statementList.isEmpty()){
|
||||
MandatoryQualifierConstraint mandatoryQualifierConstraint = new MandatoryQualifierConstraint(statementList.get(0));
|
||||
mandatory = mandatoryQualifierConstraint.mandatoryProperties;
|
||||
|
@ -27,18 +27,28 @@ public class QuantityScrutinizer extends SnakScrutinizer {
|
||||
public static final String invalidUnitType = "invalid-unit";
|
||||
public static final String noUnitProvidedType = "no-unit-provided";
|
||||
|
||||
public static String NO_BOUNDS_CONSTRAINT_QID = "Q51723761";
|
||||
public static String INTEGER_VALUED_CONSTRAINT_QID = "Q52848401";
|
||||
public String noBoundsConstraintQid;
|
||||
public String integerValuedConstraintQid;
|
||||
|
||||
public static String ALLOWED_UNITS_CONSTRAINT_QID = "Q21514353";
|
||||
public static String ALLOWED_UNITS_CONSTRAINT_PID = "P2305";
|
||||
public String allowedUnitsConstraintQid;
|
||||
public String allowedUnitsConstraintPid;
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
noBoundsConstraintQid = getConstraintsRelatedId("no_bounds_constraint_qid");
|
||||
integerValuedConstraintQid = getConstraintsRelatedId("integer_constraint_qid");
|
||||
allowedUnitsConstraintQid = getConstraintsRelatedId("allowed_units_constraint_qid");
|
||||
allowedUnitsConstraintPid = getConstraintsRelatedId("item_of_property_constraint_pid");
|
||||
return _fetcher != null && noBoundsConstraintQid != null && integerValuedConstraintQid != null
|
||||
&& allowedUnitsConstraintQid != null && allowedUnitsConstraintPid != null;
|
||||
}
|
||||
|
||||
class AllowedUnitsConstraint {
|
||||
Set<ItemIdValue> allowedUnits;
|
||||
AllowedUnitsConstraint(Statement statement) {
|
||||
List<SnakGroup> specs = statement.getClaim().getQualifiers();
|
||||
if (specs != null) {
|
||||
List<Value> properties = findValues(specs, ALLOWED_UNITS_CONSTRAINT_PID);
|
||||
List<Value> properties = findValues(specs, allowedUnitsConstraintPid);
|
||||
allowedUnits = properties.stream()
|
||||
.map(e -> e == null ? null : (ItemIdValue) e)
|
||||
.collect(Collectors.toSet());
|
||||
@ -52,21 +62,21 @@ public class QuantityScrutinizer extends SnakScrutinizer {
|
||||
PropertyIdValue pid = snak.getPropertyId();
|
||||
QuantityValue value = (QuantityValue)snak.getValue();
|
||||
|
||||
if(!_fetcher.getConstraintsByType(pid, NO_BOUNDS_CONSTRAINT_QID).isEmpty() && (value.getUpperBound() != null || value.getLowerBound() != null)) {
|
||||
if(!_fetcher.getConstraintsByType(pid, noBoundsConstraintQid).isEmpty() && (value.getUpperBound() != null || value.getLowerBound() != null)) {
|
||||
QAWarning issue = new QAWarning(boundsDisallowedType, pid.getId(), QAWarning.Severity.IMPORTANT, 1);
|
||||
issue.setProperty("property_entity", pid);
|
||||
issue.setProperty("example_value", value.getNumericValue().toString());
|
||||
issue.setProperty("example_item_entity", entityId);
|
||||
addIssue(issue);
|
||||
}
|
||||
if(!_fetcher.getConstraintsByType(pid, INTEGER_VALUED_CONSTRAINT_QID).isEmpty() && value.getNumericValue().scale() > 0) {
|
||||
if(!_fetcher.getConstraintsByType(pid, integerValuedConstraintQid).isEmpty() && value.getNumericValue().scale() > 0) {
|
||||
QAWarning issue = new QAWarning(integerConstraintType, pid.getId(), QAWarning.Severity.IMPORTANT, 1);
|
||||
issue.setProperty("property_entity", pid);
|
||||
issue.setProperty("example_value", value.getNumericValue().toString());
|
||||
issue.setProperty("example_item_entity", entityId);
|
||||
addIssue(issue);
|
||||
}
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, ALLOWED_UNITS_CONSTRAINT_QID);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, allowedUnitsConstraintQid);
|
||||
Set<ItemIdValue> allowedUnits = null;
|
||||
if (!statementList.isEmpty()) {
|
||||
AllowedUnitsConstraint allowedUnitsConstraint = new AllowedUnitsConstraint(statementList.get(0));
|
||||
|
@ -39,11 +39,22 @@ import java.util.List;
|
||||
|
||||
public class RestrictedPositionScrutinizer extends StatementScrutinizer {
|
||||
|
||||
public static String SCOPE_CONSTRAINT_QID = "Q53869507";
|
||||
public static String SCOPE_CONSTRAINT_PID = "P5314";
|
||||
public static String SCOPE_CONSTRAINT_VALUE_QID = "Q54828448";
|
||||
public static String SCOPE_CONSTRAINT_QUALIFIER_QID = "Q54828449";
|
||||
public static String SCOPE_CONSTRAINT_REFERENCE_QID = "Q54828450";
|
||||
public String scopeConstraintQid;
|
||||
public String scopeConstraintPid;
|
||||
public String scopeConstraintValueQid;
|
||||
public String scopeConstraintQualifierQid;
|
||||
public String scopeConstraintReferenceQid;
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
scopeConstraintQid = getConstraintsRelatedId("property_scope_constraint_qid");
|
||||
scopeConstraintPid = getConstraintsRelatedId("property_scope_pid");
|
||||
scopeConstraintValueQid = getConstraintsRelatedId("as_main_value_qid");
|
||||
scopeConstraintQualifierQid = getConstraintsRelatedId("as_qualifiers_qid");
|
||||
scopeConstraintReferenceQid = getConstraintsRelatedId("as_references_qid");
|
||||
return _fetcher != null && scopeConstraintQid != null && scopeConstraintPid != null && scopeConstraintValueQid != null
|
||||
&& scopeConstraintQualifierQid != null && scopeConstraintReferenceQid != null;
|
||||
}
|
||||
|
||||
protected enum SnakPosition {
|
||||
MAINSNAK, QUALIFIER, REFERENCE
|
||||
@ -54,10 +65,10 @@ public class RestrictedPositionScrutinizer extends StatementScrutinizer {
|
||||
RestrictedPositionConstraint(Statement statement) {
|
||||
List<SnakGroup> specs = statement.getClaim().getQualifiers();
|
||||
if (specs != null) {
|
||||
ItemIdValue targetValue = Datamodel.makeWikidataItemIdValue(SCOPE_CONSTRAINT_VALUE_QID);
|
||||
ItemIdValue targetQualifier = Datamodel.makeWikidataItemIdValue(SCOPE_CONSTRAINT_QUALIFIER_QID);
|
||||
ItemIdValue targetReference = Datamodel.makeWikidataItemIdValue(SCOPE_CONSTRAINT_REFERENCE_QID);
|
||||
List<Value> snakValues = findValues(specs, SCOPE_CONSTRAINT_PID);
|
||||
ItemIdValue targetValue = Datamodel.makeWikidataItemIdValue(scopeConstraintValueQid);
|
||||
ItemIdValue targetQualifier = Datamodel.makeWikidataItemIdValue(scopeConstraintQualifierQid);
|
||||
ItemIdValue targetReference = Datamodel.makeWikidataItemIdValue(scopeConstraintReferenceQid);
|
||||
List<Value> snakValues = findValues(specs, scopeConstraintPid);
|
||||
isAllowedAsValue = snakValues.contains(targetValue);
|
||||
isAllowedAsQualifier = snakValues.contains(targetQualifier);
|
||||
isAllowedAsReference = snakValues.contains(targetReference);
|
||||
@ -99,7 +110,7 @@ public class RestrictedPositionScrutinizer extends StatementScrutinizer {
|
||||
}
|
||||
|
||||
public boolean positionAllowed(PropertyIdValue pid, SnakPosition position) {
|
||||
List<Statement> constraintDefinitions = _fetcher.getConstraintsByType(pid, SCOPE_CONSTRAINT_QID);
|
||||
List<Statement> constraintDefinitions = _fetcher.getConstraintsByType(pid, scopeConstraintQid);
|
||||
if (!constraintDefinitions.isEmpty()) {
|
||||
RestrictedPositionConstraint constraint = new RestrictedPositionConstraint(constraintDefinitions.get(0));
|
||||
if (position.equals(SnakPosition.MAINSNAK)) {
|
||||
|
@ -15,19 +15,29 @@ import java.util.stream.Collectors;
|
||||
|
||||
public class RestrictedValuesScrutinizer extends SnakScrutinizer {
|
||||
|
||||
public static String type = "forbidden-value";
|
||||
public static String ALLOWED_VALUES_CONSTRAINT_QID = "Q21510859";
|
||||
public static String ALLOWED_VALUES_CONSTRAINT_PID = "P2305";
|
||||
public static final String type = "forbidden-value";
|
||||
public String allowedValuesConstraintQid;
|
||||
public String allowedValuesConstraintPid;
|
||||
|
||||
public static String DISALLOWED_VALUES_CONSTRAINT_QID = "Q52558054";
|
||||
public static String DISALLOWED_VALUES_CONSTRAINT_PID = "P2305";
|
||||
public String disallowedValuesConstraintQid;
|
||||
public String disallowedValuesConstraintPid;
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
allowedValuesConstraintQid = getConstraintsRelatedId("one_of_constraint_qid");
|
||||
allowedValuesConstraintPid = getConstraintsRelatedId("item_of_property_constraint_pid");
|
||||
disallowedValuesConstraintQid = getConstraintsRelatedId("none_of_constraint_qid");
|
||||
disallowedValuesConstraintPid = getConstraintsRelatedId("item_of_property_constraint_pid");
|
||||
return _fetcher != null && allowedValuesConstraintQid != null && allowedValuesConstraintPid != null
|
||||
&& disallowedValuesConstraintQid != null && disallowedValuesConstraintPid != null;
|
||||
}
|
||||
|
||||
class AllowedValueConstraint {
|
||||
Set<Value> allowedValues;
|
||||
AllowedValueConstraint(Statement statement) {
|
||||
List<SnakGroup> specs = statement.getClaim().getQualifiers();
|
||||
if (specs != null) {
|
||||
List<Value> properties = findValues(specs, ALLOWED_VALUES_CONSTRAINT_PID);
|
||||
List<Value> properties = findValues(specs, allowedValuesConstraintPid);
|
||||
allowedValues = properties.stream().collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
@ -38,7 +48,7 @@ public class RestrictedValuesScrutinizer extends SnakScrutinizer {
|
||||
DisallowedValueConstraint(Statement statement) {
|
||||
List<SnakGroup> specs = statement.getClaim().getQualifiers();
|
||||
if (specs != null) {
|
||||
List<Value> properties = findValues(specs, DISALLOWED_VALUES_CONSTRAINT_PID);
|
||||
List<Value> properties = findValues(specs, disallowedValuesConstraintPid);
|
||||
disallowedValues = properties.stream().collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
@ -48,8 +58,8 @@ public class RestrictedValuesScrutinizer extends SnakScrutinizer {
|
||||
public void scrutinize(Snak snak, EntityIdValue entityId, boolean added) {
|
||||
PropertyIdValue pid = snak.getPropertyId();
|
||||
Value value = snak.getValue();
|
||||
List<Statement> allowedValueConstraintDefinitions = _fetcher.getConstraintsByType(pid, ALLOWED_VALUES_CONSTRAINT_QID);
|
||||
List<Statement> disallowedValueConstraintDefinitions = _fetcher.getConstraintsByType(pid, DISALLOWED_VALUES_CONSTRAINT_QID);
|
||||
List<Statement> allowedValueConstraintDefinitions = _fetcher.getConstraintsByType(pid, allowedValuesConstraintQid);
|
||||
List<Statement> disallowedValueConstraintDefinitions = _fetcher.getConstraintsByType(pid, disallowedValuesConstraintQid);
|
||||
Set<Value> allowedValues = null, disallowedValues = null;
|
||||
if (!allowedValueConstraintDefinitions.isEmpty()) {
|
||||
AllowedValueConstraint constraint = new AllowedValueConstraint(allowedValueConstraintDefinitions.get(0));
|
||||
|
@ -47,4 +47,8 @@ public class SelfReferentialScrutinizer extends SnakScrutinizer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -45,8 +45,15 @@ import java.util.Set;
|
||||
public class SingleValueScrutinizer extends EditScrutinizer {
|
||||
|
||||
public static final String type = "single-valued-property-added-more-than-once";
|
||||
public static String SINGLE_VALUE_CONSTRAINT_QID = "Q19474404";
|
||||
public static String SINGLE_BEST_VALUE_CONSTRAINT_QID = "Q52060874";
|
||||
public String singleValueConstraintQid;
|
||||
public String singleBestValueConstraintQid;
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
singleValueConstraintQid = getConstraintsRelatedId("single_value_constraint_qid");
|
||||
singleBestValueConstraintQid = getConstraintsRelatedId("single_best_value_constraint_qid");
|
||||
return _fetcher != null && singleValueConstraintQid != null && singleBestValueConstraintQid != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrutinize(ItemUpdate update) {
|
||||
@ -54,8 +61,8 @@ public class SingleValueScrutinizer extends EditScrutinizer {
|
||||
|
||||
for (Statement statement : update.getAddedStatements()) {
|
||||
PropertyIdValue pid = statement.getClaim().getMainSnak().getPropertyId();
|
||||
List<Statement> constraintStatementList1 = _fetcher.getConstraintsByType(pid, SINGLE_VALUE_CONSTRAINT_QID);
|
||||
List<Statement> constraintStatementList2 = _fetcher.getConstraintsByType(pid, SINGLE_BEST_VALUE_CONSTRAINT_QID);
|
||||
List<Statement> constraintStatementList1 = _fetcher.getConstraintsByType(pid, singleValueConstraintQid);
|
||||
List<Statement> constraintStatementList2 = _fetcher.getConstraintsByType(pid, singleBestValueConstraintQid);
|
||||
if (seenSingleProperties.contains(pid)) {
|
||||
QAWarning issue = new QAWarning(type, pid.getId(), QAWarning.Severity.WARNING, 1);
|
||||
issue.setProperty("property_entity", pid);
|
||||
|
@ -39,7 +39,7 @@ import java.util.List;
|
||||
*/
|
||||
public class UnsourcedScrutinizer extends EditScrutinizer {
|
||||
|
||||
public static final String CITATION_NEEDED_QID = "Q54554025";
|
||||
private String citationNeededConstraintQid;
|
||||
public static final String generalType = "unsourced-statements";
|
||||
public static final String constraintItemType = "no-references-provided";
|
||||
|
||||
@ -47,7 +47,7 @@ public class UnsourcedScrutinizer extends EditScrutinizer {
|
||||
public void scrutinize(ItemUpdate update) {
|
||||
for (Statement statement : update.getAddedStatements()) {
|
||||
PropertyIdValue pid = statement.getClaim().getMainSnak().getPropertyId();
|
||||
List<Statement> constraintDefinitions = _fetcher.getConstraintsByType(pid, CITATION_NEEDED_QID);
|
||||
List<Statement> constraintDefinitions = _fetcher.getConstraintsByType(pid, citationNeededConstraintQid);
|
||||
List<Reference> referenceList = statement.getReferences();
|
||||
|
||||
if (referenceList.isEmpty()) {
|
||||
@ -63,4 +63,9 @@ public class UnsourcedScrutinizer extends EditScrutinizer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
citationNeededConstraintQid = getConstraintsRelatedId("citation_needed_constraint_qid");
|
||||
return _fetcher != null && citationNeededConstraintQid != null;
|
||||
}
|
||||
}
|
||||
|
@ -17,9 +17,9 @@ import java.util.Map;
|
||||
public class UseAsQualifierScrutinizer extends EditScrutinizer {
|
||||
|
||||
public static final String type = "values-should-not-be-used-as-qualifier";
|
||||
public static String ONE_OF_QUALIFIER_VALUE_PROPERTY_QID = "Q52712340";
|
||||
public static String QUALIFIER_PROPERTY_PID = "P2306";
|
||||
public static String ITEM_OF_PROPERTY_CONSTRAINT_PID = "P2305";
|
||||
public String oneOfQualifierValuePropertyQid;
|
||||
public String property;
|
||||
public String itemOfPropertyConstraintPid;
|
||||
|
||||
class UseAsQualifierConstraint {
|
||||
final PropertyIdValue allowedQualifierPid;
|
||||
@ -30,10 +30,10 @@ public class UseAsQualifierScrutinizer extends EditScrutinizer {
|
||||
this.itemList = new ArrayList<>();
|
||||
for(SnakGroup group : specs) {
|
||||
for (Snak snak : group.getSnaks()) {
|
||||
if (group.getProperty().getId().equals(QUALIFIER_PROPERTY_PID)){
|
||||
if (group.getProperty().getId().equals(property)){
|
||||
pid = (PropertyIdValue) snak.getValue();
|
||||
}
|
||||
if (group.getProperty().getId().equals(ITEM_OF_PROPERTY_CONSTRAINT_PID)){
|
||||
if (group.getProperty().getId().equals(itemOfPropertyConstraintPid)){
|
||||
this.itemList.add(snak.getValue());
|
||||
}
|
||||
}
|
||||
@ -42,6 +42,14 @@ public class UseAsQualifierScrutinizer extends EditScrutinizer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
oneOfQualifierValuePropertyQid = getConstraintsRelatedId("one_of_qualifier_value_property_constraint_qid");
|
||||
property = getConstraintsRelatedId("property_pid");
|
||||
itemOfPropertyConstraintPid = getConstraintsRelatedId("item_of_property_constraint_pid");
|
||||
return _fetcher != null && oneOfQualifierValuePropertyQid != null && property != null && itemOfPropertyConstraintPid != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrutinize(ItemUpdate update) {
|
||||
for (Statement statement : update.getAddedStatements()) {
|
||||
@ -63,7 +71,7 @@ public class UseAsQualifierScrutinizer extends EditScrutinizer {
|
||||
}
|
||||
}
|
||||
|
||||
List<Statement> constraintDefinitions = _fetcher.getConstraintsByType(pid, ONE_OF_QUALIFIER_VALUE_PROPERTY_QID);
|
||||
List<Statement> constraintDefinitions = _fetcher.getConstraintsByType(pid, oneOfQualifierValuePropertyQid);
|
||||
for (Statement constraintStatement : constraintDefinitions) {
|
||||
UseAsQualifierConstraint constraint = new UseAsQualifierConstraint(constraintStatement);
|
||||
if (qualifiersMap.containsKey(constraint.allowedQualifierPid)) {
|
||||
|
@ -54,6 +54,11 @@ public class WhitespaceScrutinizer extends ValueScrutinizer {
|
||||
_issuesMap.put(nonPrintableCharsType, Pattern.compile("[\\x00\\x03\\x08\\x0B\\x0C\\x0E-\\x1F]"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareDependencies() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void scrutinize(Value value) {
|
||||
String str = null;
|
||||
|
@ -42,6 +42,7 @@ import com.google.refine.model.Row;
|
||||
public class ExpressionContext {
|
||||
|
||||
private String baseIRI;
|
||||
private String mediaWikiApiEndpoint;
|
||||
private int rowId;
|
||||
private Row row;
|
||||
private ColumnModel columnModel;
|
||||
@ -52,6 +53,8 @@ public class ExpressionContext {
|
||||
*
|
||||
* @param baseIRI
|
||||
* the siteIRI of the schema
|
||||
* @param mediaWikiApiEndpoint
|
||||
* the MediaWiki API endpoint of the Wikibase
|
||||
* @param rowId
|
||||
* the id of the row currently visited
|
||||
* @param row
|
||||
@ -62,9 +65,10 @@ public class ExpressionContext {
|
||||
* where to store the issues encountered when evaluating (can be set
|
||||
* to null if these issues should be ignored)
|
||||
*/
|
||||
public ExpressionContext(String baseIRI, int rowId, Row row, ColumnModel columnModel, QAWarningStore warningStore) {
|
||||
public ExpressionContext(String baseIRI, String mediaWikiApiEndpoint, int rowId, Row row, ColumnModel columnModel, QAWarningStore warningStore) {
|
||||
Validate.notNull(baseIRI);
|
||||
this.baseIRI = baseIRI;
|
||||
this.mediaWikiApiEndpoint = mediaWikiApiEndpoint;
|
||||
this.rowId = rowId;
|
||||
Validate.notNull(row);
|
||||
this.row = row;
|
||||
@ -77,6 +81,10 @@ public class ExpressionContext {
|
||||
return baseIRI;
|
||||
}
|
||||
|
||||
public String getMediaWikiApiEndpoint() {
|
||||
return mediaWikiApiEndpoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a cell in the current row, by column name. If the column does not
|
||||
* exist, null is returned.
|
||||
|
@ -62,7 +62,7 @@ public class WbItemVariable extends WbVariableExpr<ItemIdValue> {
|
||||
throws SkipSchemaExpressionException {
|
||||
if (cell.recon != null
|
||||
&& (Judgment.Matched.equals(cell.recon.judgment) || Judgment.New.equals(cell.recon.judgment))) {
|
||||
if (cell.recon.identifierSpace == null || !cell.recon.identifierSpace.equals(Datamodel.SITE_WIKIDATA)) {
|
||||
if (cell.recon.identifierSpace == null || !cell.recon.identifierSpace.equals(ctxt.getBaseIRI())) {
|
||||
QAWarning warning = new QAWarning("invalid-identifier-space", null, QAWarning.Severity.INFO, 1);
|
||||
warning.setProperty("example_cell", cell.value.toString());
|
||||
ctxt.addWarning(warning);
|
||||
|
@ -50,17 +50,23 @@ public class WbLanguageConstant implements WbExpression<String> {
|
||||
_langLabel = langLabel;
|
||||
}
|
||||
|
||||
public static String normalizeLanguageCode(String lang) {
|
||||
return normalizeLanguageCode(lang, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that a language code is valid and returns its preferred version
|
||||
* (converting deprecated language codes to their better values).
|
||||
*
|
||||
* @param lang
|
||||
* a Wikimedia language code
|
||||
* @param mediaWikiApiEndpoint
|
||||
* the MediaWiki API endpoint of the Wikibase
|
||||
* @return the normalized code, or null if the code is invalid.
|
||||
*/
|
||||
public static String normalizeLanguageCode(String lang) {
|
||||
public static String normalizeLanguageCode(String lang, String mediaWikiApiEndpoint) {
|
||||
try {
|
||||
if (LanguageCodeStore.ALLOWED_LANGUAGE_CODES.contains(lang)) {
|
||||
if (LanguageCodeStore.getLanguageCodes(mediaWikiApiEndpoint).contains(lang)) {
|
||||
return WikimediaLanguageCodes.fixLanguageCodeIfDeprecated(lang);
|
||||
} else {
|
||||
return null;
|
||||
|
@ -56,7 +56,8 @@ public class WbLanguageVariable extends WbVariableExpr<String> {
|
||||
throws SkipSchemaExpressionException {
|
||||
if (cell.value != null && !cell.value.toString().isEmpty()) {
|
||||
String code = cell.value.toString().trim();
|
||||
String normalized = WbLanguageConstant.normalizeLanguageCode(code);
|
||||
String mediaWikiApiEndpoint = ctxt.getMediaWikiApiEndpoint();
|
||||
String normalized = WbLanguageConstant.normalizeLanguageCode(code, mediaWikiApiEndpoint);
|
||||
if (normalized != null) {
|
||||
return normalized;
|
||||
} else {
|
||||
|
@ -28,6 +28,7 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import org.openrefine.wikidata.qa.QAWarningStore;
|
||||
import org.openrefine.wikidata.schema.exceptions.SkipSchemaExpressionException;
|
||||
import org.openrefine.wikidata.updates.ItemUpdate;
|
||||
@ -35,7 +36,6 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.google.refine.browsing.Engine;
|
||||
@ -59,9 +59,16 @@ public class WikibaseSchema implements OverlayModel {
|
||||
final static Logger logger = LoggerFactory.getLogger("RdfSchema");
|
||||
|
||||
@JsonProperty("itemDocuments")
|
||||
protected List<WbItemDocumentExpr> itemDocumentExprs = new ArrayList<WbItemDocumentExpr>();
|
||||
protected List<WbItemDocumentExpr> itemDocumentExprs = new ArrayList<>();
|
||||
|
||||
protected String baseIri = "http://www.wikidata.org/entity/";
|
||||
@JsonProperty("siteIri")
|
||||
protected String siteIri;
|
||||
|
||||
@JsonProperty("mediaWikiApiEndpoint")
|
||||
protected String mediaWikiApiEndpoint;
|
||||
|
||||
@JsonIgnore
|
||||
protected String editGroupsURLSchema;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
@ -69,33 +76,45 @@ public class WikibaseSchema implements OverlayModel {
|
||||
public WikibaseSchema() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Constructor for deserialization via Jackson
|
||||
*/
|
||||
@JsonCreator
|
||||
public WikibaseSchema(@JsonProperty("itemDocuments") List<WbItemDocumentExpr> exprs) {
|
||||
public WikibaseSchema(@JsonProperty("itemDocuments") List<WbItemDocumentExpr> exprs,
|
||||
@JsonProperty("siteIri") String siteIri,
|
||||
@JsonProperty("mediaWikiApiEndpoint") String mediaWikiApiEndpoint,
|
||||
@JsonProperty("editGroupsURLSchema") String editGroupsURLSchema) {
|
||||
this.itemDocumentExprs = exprs;
|
||||
this.siteIri = siteIri;
|
||||
this.mediaWikiApiEndpoint = mediaWikiApiEndpoint;
|
||||
this.editGroupsURLSchema = editGroupsURLSchema;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the site IRI of the Wikibase instance referenced by this schema
|
||||
*/
|
||||
@JsonIgnore
|
||||
public String getBaseIri() {
|
||||
return baseIri;
|
||||
@JsonProperty("siteIri")
|
||||
public String getSiteIri() {
|
||||
return siteIri;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the list of document expressions for this schema
|
||||
*/
|
||||
@JsonIgnore
|
||||
@JsonProperty("itemDocuments")
|
||||
public List<WbItemDocumentExpr> getItemDocumentExpressions() {
|
||||
return Collections.unmodifiableList(itemDocumentExprs);
|
||||
}
|
||||
|
||||
public void setItemDocumentExpressions(List<WbItemDocumentExpr> exprs) {
|
||||
this.itemDocumentExprs = exprs;
|
||||
|
||||
@JsonProperty("mediaWikiApiEndpoint")
|
||||
public String getMediaWikiApiEndpoint() {
|
||||
return mediaWikiApiEndpoint;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
public String getEditGroupsURLSchema() {
|
||||
return editGroupsURLSchema;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -168,7 +187,7 @@ public class WikibaseSchema implements OverlayModel {
|
||||
|
||||
@Override
|
||||
public boolean visit(Project project, int rowIndex, Row row) {
|
||||
ExpressionContext ctxt = new ExpressionContext(baseIri, rowIndex, row, project.columnModel, warningStore);
|
||||
ExpressionContext ctxt = new ExpressionContext(siteIri, mediaWikiApiEndpoint, rowIndex, row, project.columnModel, warningStore);
|
||||
result.addAll(evaluateItemDocuments(ctxt));
|
||||
return false;
|
||||
}
|
||||
|
@ -1,18 +1,18 @@
|
||||
/*******************************************************************************
|
||||
* MIT License
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2018 Antonin Delpeuch
|
||||
*
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
@ -26,14 +26,13 @@ package org.openrefine.wikidata.utils;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.EntityDocument;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.EntityIdValue;
|
||||
import org.wikidata.wdtk.wikibaseapi.ApiConnection;
|
||||
import org.wikidata.wdtk.wikibaseapi.BasicApiConnection;
|
||||
import org.wikidata.wdtk.wikibaseapi.WikibaseDataFetcher;
|
||||
import org.wikidata.wdtk.wikibaseapi.apierrors.MediaWikiApiErrorException;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
@ -41,27 +40,25 @@ import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
|
||||
public class EntityCache {
|
||||
|
||||
private static EntityCache _entityCache = new EntityCache(BasicApiConnection.getWikidataApiConnection());
|
||||
private static Map<String, EntityCache> entityCacheMap = new HashMap<>();
|
||||
|
||||
private LoadingCache<String, EntityDocument> _cache = null;
|
||||
private WikibaseDataFetcher _fetcher;
|
||||
private LoadingCache<String, EntityDocument> cache;
|
||||
|
||||
protected EntityCache(ApiConnection connection) {
|
||||
this(new WikibaseDataFetcher(connection, Datamodel.SITE_WIKIDATA));
|
||||
protected EntityCache(String entityPrefix, String mediaWikiApiEndpoint) {
|
||||
this(new WikibaseDataFetcher(new BasicApiConnection(mediaWikiApiEndpoint), entityPrefix));
|
||||
}
|
||||
|
||||
protected EntityCache(WikibaseDataFetcher fetcher) {
|
||||
_fetcher = fetcher;
|
||||
|
||||
_cache = CacheBuilder.newBuilder().maximumSize(4096).expireAfterWrite(1, TimeUnit.HOURS)
|
||||
protected EntityCache(WikibaseDataFetcher fetcher) {
|
||||
cache = CacheBuilder.newBuilder().maximumSize(4096).expireAfterWrite(1, TimeUnit.HOURS)
|
||||
.build(new CacheLoader<String, EntityDocument>() {
|
||||
|
||||
@Override
|
||||
public EntityDocument load(String entityId)
|
||||
throws Exception {
|
||||
EntityDocument doc = _fetcher.getEntityDocument(entityId);
|
||||
EntityDocument doc = fetcher.getEntityDocument(entityId);
|
||||
if (doc != null) {
|
||||
return doc;
|
||||
} else {
|
||||
@ -72,7 +69,7 @@ public class EntityCache {
|
||||
@Override
|
||||
public Map<String, EntityDocument> loadAll(Iterable<? extends String> entityIds)
|
||||
throws Exception {
|
||||
Map<String, EntityDocument> entityDocumentMap = _fetcher.getEntityDocuments(StreamSupport.stream(entityIds.spliterator(), false)
|
||||
Map<String, EntityDocument> entityDocumentMap = fetcher.getEntityDocuments(StreamSupport.stream(entityIds.spliterator(), false)
|
||||
.collect(Collectors.toList()));
|
||||
if (!entityDocumentMap.isEmpty()) {
|
||||
return entityDocumentMap;
|
||||
@ -85,22 +82,24 @@ public class EntityCache {
|
||||
}
|
||||
|
||||
public EntityDocument get(EntityIdValue id) {
|
||||
return _cache.apply(id.getId());
|
||||
return cache.apply(id.getId());
|
||||
}
|
||||
|
||||
public static EntityCache getEntityCache() {
|
||||
if (_entityCache == null) {
|
||||
_entityCache = new EntityCache(BasicApiConnection.getWikidataApiConnection());
|
||||
public static EntityCache getEntityCache(String siteIri, String mediaWikiApiEndpoint) {
|
||||
EntityCache entityCache = entityCacheMap.get(siteIri);
|
||||
if (entityCache == null) {
|
||||
entityCache = new EntityCache(siteIri, mediaWikiApiEndpoint);
|
||||
entityCacheMap.put(siteIri, entityCache);
|
||||
}
|
||||
return _entityCache;
|
||||
return entityCache;
|
||||
}
|
||||
|
||||
public List<EntityDocument> getMultipleDocuments(List<EntityIdValue> entityIds) throws ExecutionException {
|
||||
List<String> ids = entityIds.stream().map(entityId -> entityId.getId()).collect(Collectors.toList());
|
||||
return _cache.getAll(ids).values().stream().collect(Collectors.toList());
|
||||
return cache.getAll(ids).values().stream().collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static EntityDocument getEntityDocument(EntityIdValue id) {
|
||||
return getEntityCache().get(id);
|
||||
public static EntityDocument getEntityDocument(String entityPrefix, String mediaWikiApiEndpoint, EntityIdValue id) {
|
||||
return getEntityCache(entityPrefix, mediaWikiApiEndpoint).get(id);
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,20 @@
|
||||
package org.openrefine.wikidata.utils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* A store for the allowed language code for terms and monolingual text values
|
||||
* in Wikidata.
|
||||
*
|
||||
* @todo generalize for other Wikibase instances (fetch it dynamically via
|
||||
* https://stackoverflow.com/questions/46507037/how-to-get-all-allowed-languages-for-wikidata/46562061)
|
||||
* in Wikibase.
|
||||
*
|
||||
* @todo separate the languages allowed for terms from the ones allowed for monolingual text.
|
||||
* Currently the list is for monolingual texts (which is larger).
|
||||
*
|
||||
@ -20,7 +25,46 @@ import java.util.stream.Collectors;
|
||||
*
|
||||
*/
|
||||
public class LanguageCodeStore {
|
||||
public static Set<String> ALLOWED_LANGUAGE_CODES = Arrays.asList(
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(LanguageCodeStore.class);
|
||||
|
||||
private static Map<String, Set<String>> apiEndpointToLangCodes = new HashMap<>();
|
||||
|
||||
public static Set<String> getLanguageCodes(String mediaWikiApiEndpoint) {
|
||||
if (mediaWikiApiEndpoint == null) return DEFAULT_LANGUAGE_CODES;
|
||||
|
||||
if (apiEndpointToLangCodes.containsKey(mediaWikiApiEndpoint)) {
|
||||
return apiEndpointToLangCodes.get(mediaWikiApiEndpoint);
|
||||
}
|
||||
|
||||
try {
|
||||
Set<String> langCodes = fetchLangCodes(mediaWikiApiEndpoint);
|
||||
apiEndpointToLangCodes.put(mediaWikiApiEndpoint, langCodes);
|
||||
} catch (IOException e) {
|
||||
logger.error("An error occurred when fetching language codes from: "
|
||||
+ mediaWikiApiEndpoint + ", fall back to the default language codes", e);
|
||||
apiEndpointToLangCodes.put(mediaWikiApiEndpoint, DEFAULT_LANGUAGE_CODES);
|
||||
}
|
||||
return apiEndpointToLangCodes.get(mediaWikiApiEndpoint);
|
||||
}
|
||||
|
||||
private static Set<String> fetchLangCodes(String mediaWikiApiEndpoint) throws IOException {
|
||||
String url = mediaWikiApiEndpoint +
|
||||
"?action=query&meta=wbcontentlanguages&wbclprop=code&wbclcontext=monolingualtext&format=json";
|
||||
OkHttpClient client = new OkHttpClient.Builder().build();
|
||||
Request request = new Request.Builder().url(url).build();
|
||||
Response response = client.newCall(request).execute();
|
||||
JsonNode jsonNode = new ObjectMapper().readTree(response.body().string());
|
||||
JsonNode languages = jsonNode.path("query").path("wbcontentlanguages");
|
||||
Set<String> supportedLangCodes = new HashSet<>();
|
||||
for (JsonNode language : languages) {
|
||||
supportedLangCodes.add(language.path("code").textValue());
|
||||
}
|
||||
|
||||
return supportedLangCodes;
|
||||
}
|
||||
|
||||
private static Set<String> DEFAULT_LANGUAGE_CODES = new HashSet<>(Arrays.asList(
|
||||
"aa",
|
||||
"ab",
|
||||
"abs",
|
||||
@ -525,5 +569,5 @@ public class LanguageCodeStore {
|
||||
"xpu",
|
||||
"yap",
|
||||
"zun"
|
||||
).stream().collect(Collectors.toSet());
|
||||
));
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,91 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"mediawiki": {
|
||||
"name": "Wikidata",
|
||||
"root": "https://www.wikidata.org/wiki/",
|
||||
"main_page": "https://www.wikidata.org/wiki/Wikidata:Main_Page",
|
||||
"api": "https://www.wikidata.org/w/api.php"
|
||||
},
|
||||
"wikibase": {
|
||||
"site_iri": "http://www.wikidata.org/entity/",
|
||||
"maxlag": 5,
|
||||
"properties": {
|
||||
"instance_of": "P31",
|
||||
"subclass_of": "P279"
|
||||
},
|
||||
"constraints": {
|
||||
"exception_to_constraint_pid": "P2303",
|
||||
"constraint_status_pid": "P2316",
|
||||
"mandatory_constraint_qid": "Q21502408",
|
||||
"suggestion_constraint_qid": "Q62026391",
|
||||
"distinct_values_constraint_qid": "Q21502410",
|
||||
"multi_value_constraint_qid": "Q21510857",
|
||||
"used_as_qualifier_constraint_qid": "Q21510863",
|
||||
"single_value_constraint_qid": "Q19474404",
|
||||
"symmetric_constraint_qid": "Q21510862",
|
||||
"type_constraint_qid": "Q21503250",
|
||||
"value_type_constraint_qid": "Q21510865",
|
||||
"inverse_constraint_qid": "Q21510855",
|
||||
"item_requires_statement_constraint_qid": "Q21503247",
|
||||
"value_requires_statement_constraint_qid": "Q21510864",
|
||||
"conflicts_with_constraint_qid": "Q21502838",
|
||||
"one_of_constraint_qid": "Q21510859",
|
||||
"mandatory_qualifier_constraint_qid": "Q21510856",
|
||||
"allowed_qualifiers_constraint_qid": "Q21510851",
|
||||
"range_constraint_qid": "Q21510860",
|
||||
"difference_within_range_constraint_qid": "Q21510854",
|
||||
"common_link_constraint_qid": "Q21510852",
|
||||
"contemporary_constraint_qid": "Q25796498",
|
||||
"format_constraint_qid": "Q21502404",
|
||||
"used_for_values_only_constraint_qid": "Q21528958",
|
||||
"used_as_reference_constraint_qid": "Q21528959",
|
||||
"no_bounds_constraint_qid": "Q51723761",
|
||||
"allowed_units_constraint_qid": "Q21514353",
|
||||
"single_best_value_constraint_qid": "Q52060874",
|
||||
"allowed_entity_types_constraint_qid": "Q52004125",
|
||||
"citation_needed_constraint_qid": "Q54554025",
|
||||
"property_scope_constraint_qid": "Q53869507",
|
||||
"class_pid": "P2308",
|
||||
"relation_pid": "P2309",
|
||||
"instance_of_relation_qid": "Q21503252",
|
||||
"subclass_of_relation_qid": "Q21514624",
|
||||
"instance_or_subclass_of_relation_qid": "Q30208840",
|
||||
"property_pid": "P2306",
|
||||
"item_of_property_constraint_pid": "P2305",
|
||||
"minimum_value_pid": "P2313",
|
||||
"maximum_value_pid": "P2312",
|
||||
"minimum_date_pid": "P2310",
|
||||
"maximum_date_pid": "P2311",
|
||||
"namespace_pid": "P2307",
|
||||
"format_as_a_regular_expression_pid": "P1793",
|
||||
"syntax_clarification_pid": "P2916",
|
||||
"constraint_scope_pid": "P4680",
|
||||
"separator_pid": "P4155",
|
||||
"constraint_checked_on_main_value_qid": "Q46466787",
|
||||
"constraint_checked_on_qualifiers_qid": "Q46466783",
|
||||
"constraint_checked_on_references_qid": "Q46466805",
|
||||
"none_of_constraint_qid": "Q52558054",
|
||||
"one_of_qualifier_value_property_constraint_qid": "Q52712340",
|
||||
"integer_constraint_qid": "Q52848401",
|
||||
"wikibase_item_qid": "Q29934200",
|
||||
"wikibase_property_qid": "Q29934218",
|
||||
"wikibase_lexeme_qid": "Q51885771",
|
||||
"wikibase_form_qid": "Q54285143",
|
||||
"wikibase_sense_qid": "Q54285715",
|
||||
"wikibase_media_info_qid": "Q59712033",
|
||||
"property_scope_pid": "P5314",
|
||||
"as_main_value_qid": "Q54828448",
|
||||
"as_qualifiers_qid": "Q54828449",
|
||||
"as_references_qid": "Q54828450"
|
||||
}
|
||||
},
|
||||
"oauth": {
|
||||
"registration_page": "https://meta.wikimedia.org/wiki/Special:OAuthConsumerRegistration/propose"
|
||||
},
|
||||
"reconciliation": {
|
||||
"endpoint": "https://wdreconcile.toolforge.org/${lang}/api"
|
||||
},
|
||||
"editgroups": {
|
||||
"url_schema": "([[:toollabs:editgroups/b/OR/${batch_id}|details]])"
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"mediawiki": {
|
||||
"name": "Wikidata",
|
||||
"root": "https://www.wikidata.org/wiki/",
|
||||
"main_page": "https://www.wikidata.org/wiki/Wikidata:Main_Page",
|
||||
"api": "https://www.wikidata.org/w/api.php"
|
||||
},
|
||||
"wikibase": {
|
||||
"site_iri": "http://www.wikidata.org/entity/",
|
||||
"maxlag": 5,
|
||||
"properties": {
|
||||
"instance_of": "P31",
|
||||
"subclass_of": "P279"
|
||||
}
|
||||
},
|
||||
"oauth": {
|
||||
"registration_page": "https://meta.wikimedia.org/wiki/Special:OAuthConsumerRegistration/propose"
|
||||
},
|
||||
"reconciliation": {
|
||||
"endpoint": "https://wdreconcile.toolforge.org/${lang}/api"
|
||||
},
|
||||
"editgroups": {
|
||||
"url_schema": "([[:toollabs:editgroups/b/OR/${batch_id}|details]])"
|
||||
}
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"mediawiki": {
|
||||
"name": "Wikidata",
|
||||
"root": "https://www.wikidata.org/wiki/",
|
||||
"main_page": "https://www.wikidata.org/wiki/Wikidata:Main_Page",
|
||||
"api": "https://www.wikidata.org/w/api.php"
|
||||
},
|
||||
"wikibase": {
|
||||
"site_iri": "http://www.wikidata.org/entity/",
|
||||
"maxlag": 5,
|
||||
"properties": {
|
||||
"instance_of": "P31",
|
||||
"subclass_of": "P279"
|
||||
},
|
||||
"constraints": {
|
||||
"property_constraint_pid": "P2302",
|
||||
"exception_to_constraint_pid": "P2303",
|
||||
"constraint_status_pid": "P2316",
|
||||
"mandatory_constraint_qid": "Q21502408",
|
||||
"suggestion_constraint_qid": "Q62026391",
|
||||
"distinct_values_constraint_qid": "Q21502410",
|
||||
"multi_value_constraint_qid": "Q21510857",
|
||||
"used_as_qualifier_constraint_qid": "Q21510863",
|
||||
"single_value_constraint_qid": "Q19474404",
|
||||
"symmetric_constraint_qid": "Q21510862",
|
||||
"type_constraint_qid": "Q21503250",
|
||||
"value_type_constraint_qid": "Q21510865",
|
||||
"inverse_constraint_qid": "Q21510855",
|
||||
"item_requires_statement_constraint_qid": "Q21503247",
|
||||
"value_requires_statement_constraint_qid": "Q21510864",
|
||||
"conflicts_with_constraint_qid": "Q21502838",
|
||||
"one_of_constraint_qid": "Q21510859",
|
||||
"mandatory_qualifier_constraint_qid": "Q21510856",
|
||||
"allowed_qualifiers_constraint_qid": "Q21510851",
|
||||
"range_constraint_qid": "Q21510860",
|
||||
"difference_within_range_constraint_qid": "Q21510854",
|
||||
"common_link_constraint_qid": "Q21510852",
|
||||
"contemporary_constraint_qid": "Q25796498",
|
||||
"format_constraint_qid": "Q21502404",
|
||||
"used_for_values_only_constraint_qid": "Q21528958",
|
||||
"used_as_reference_constraint_qid": "Q21528959",
|
||||
"no_bounds_constraint_qid": "Q51723761",
|
||||
"allowed_units_constraint_qid": "Q21514353",
|
||||
"single_best_value_constraint_qid": "Q52060874",
|
||||
"allowed_entity_types_constraint_qid": "Q52004125",
|
||||
"citation_needed_constraint_qid": "Q54554025",
|
||||
"property_scope_constraint_qid": "Q53869507",
|
||||
"class_pid": "P2308",
|
||||
"relation_pid": "P2309",
|
||||
"instance_of_relation_qid": "Q21503252",
|
||||
"subclass_of_relation_qid": "Q21514624",
|
||||
"instance_or_subclass_of_relation_qid": "Q30208840",
|
||||
"property_pid": "P2306",
|
||||
"item_of_property_constraint_pid": "P2305",
|
||||
"minimum_value_pid": "P2313",
|
||||
"maximum_value_pid": "P2312",
|
||||
"minimum_date_pid": "P2310",
|
||||
"maximum_date_pid": "P2311",
|
||||
"namespace_pid": "P2307",
|
||||
"format_as_a_regular_expression_pid": "P1793",
|
||||
"syntax_clarification_pid": "P2916",
|
||||
"constraint_scope_pid": "P4680",
|
||||
"separator_pid": "P4155",
|
||||
"constraint_checked_on_main_value_qid": "Q46466787",
|
||||
"constraint_checked_on_qualifiers_qid": "Q46466783",
|
||||
"constraint_checked_on_references_qid": "Q46466805",
|
||||
"none_of_constraint_qid": "Q52558054",
|
||||
"one_of_qualifier_value_property_constraint_qid": "Q52712340",
|
||||
"integer_constraint_qid": "Q52848401",
|
||||
"wikibase_item_qid": "Q29934200",
|
||||
"wikibase_property_qid": "Q29934218",
|
||||
"wikibase_lexeme_qid": "Q51885771",
|
||||
"wikibase_form_qid": "Q54285143",
|
||||
"wikibase_sense_qid": "Q54285715",
|
||||
"wikibase_media_info_qid": "Q59712033",
|
||||
"property_scope_pid": "P5314",
|
||||
"as_main_value_qid": "Q54828448",
|
||||
"as_qualifiers_qid": "Q54828449",
|
||||
"as_references_qid": "Q54828450"
|
||||
}
|
||||
},
|
||||
"oauth": {
|
||||
"registration_page": "https://meta.wikimedia.org/wiki/Special:OAuthConsumerRegistration/propose"
|
||||
},
|
||||
"reconciliation": {
|
||||
"endpoint": "https://wdreconcile.toolforge.org/${lang}/api"
|
||||
},
|
||||
"editgroups": {
|
||||
"url_schema": "([[:toollabs:editgroups/b/OR/${batch_id}|details]])"
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@
|
||||
"op": "wikidata/perform-wikibase-edits",
|
||||
"description": "Perform Wikibase edits",
|
||||
"summary": "test null edit",
|
||||
"maxlag": 5,
|
||||
"engineConfig": {
|
||||
"mode": "row-based",
|
||||
"facets": []
|
||||
|
@ -28,6 +28,8 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"siteIri": "http://www.wikidata.org/entity/",
|
||||
"mediaWikiApiEndpoint":"https://www.wikidata.org/w/api.php"
|
||||
}
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
{"itemDocuments":[{"subject":{"type":"wbitemvariable","columnName":"name"},"statementGroups":[{"property":{"datatype":"wikibase-item","pid":"P39","label":"position held","type":"wbpropconstant"},"statements":[{"value":{"type":"wbitemconstant","qid":"Q30461","label":"president"},"qualifiers":[{"prop":{"datatype":"wikibase-item","pid":"P642","label":"of","type":"wbpropconstant"},"value":{"label":"History of Medicine Society","type":"wbitemconstant","qid":"Q37461404"}},{"prop":{"datatype":"time","pid":"P580","label":"start date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"start"}},{"prop":{"datatype":"time","pid":"P582","label":"end date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"end"}}],"references":[{"snaks":[{"prop":{"datatype":"wikibase-item","pid":"P248","label":"stated in","type":"wbpropconstant"},"value":{"label":"The History of The Royal Society of Medicine","type":"wbitemconstant","qid":"Q42036099"}},{"prop":{"datatype":"string","pid":"P304","label":"page","type":"wbpropconstant"},"value":{"type":"wbstringconstant","value":"330-333"}}]}]}]}],"nameDescs":[]},{"subject":{"label":"History of Medicine Society","type":"wbitemconstant","qid":"Q37461404"},"statementGroups":[{"property":{"datatype":"wikibase-item","pid":"P488","label":"chairperson","type":"wbpropconstant"},"statements":[{"value":{"type":"wbitemvariable","columnName":"name"},"qualifiers":[{"prop":{"datatype":"time","pid":"P580","label":"start date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"start"}},{"prop":{"datatype":"time","pid":"P582","label":"end date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"end"}}],"references":[{"snaks":[{"prop":{"datatype":"wikibase-item","pid":"P248","label":"stated in","type":"wbpropconstant"},"value":{"label":"The History of The Royal Society of Medicine","type":"wbitemconstant","qid":"Q42036099"}},{"prop":{"datatype":"string","pid":"P304","label":"page","type":"wbpropconstant"},"value":{"type":"wbstringconstant","value":"330-333"}}]}]}]}],"nameDescs":[]}],"wikibasePrefix":"http://www.wikidata.org/entity/"}
|
||||
{"itemDocuments":[{"subject":{"type":"wbitemvariable","columnName":"name"},"statementGroups":[{"property":{"datatype":"wikibase-item","pid":"P39","label":"position held","type":"wbpropconstant"},"statements":[{"value":{"type":"wbitemconstant","qid":"Q30461","label":"president"},"qualifiers":[{"prop":{"datatype":"wikibase-item","pid":"P642","label":"of","type":"wbpropconstant"},"value":{"label":"History of Medicine Society","type":"wbitemconstant","qid":"Q37461404"}},{"prop":{"datatype":"time","pid":"P580","label":"start date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"start"}},{"prop":{"datatype":"time","pid":"P582","label":"end date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"end"}}],"references":[{"snaks":[{"prop":{"datatype":"wikibase-item","pid":"P248","label":"stated in","type":"wbpropconstant"},"value":{"label":"The History of The Royal Society of Medicine","type":"wbitemconstant","qid":"Q42036099"}},{"prop":{"datatype":"string","pid":"P304","label":"page","type":"wbpropconstant"},"value":{"type":"wbstringconstant","value":"330-333"}}]}]}]}],"nameDescs":[]},{"subject":{"label":"History of Medicine Society","type":"wbitemconstant","qid":"Q37461404"},"statementGroups":[{"property":{"datatype":"wikibase-item","pid":"P488","label":"chairperson","type":"wbpropconstant"},"statements":[{"value":{"type":"wbitemvariable","columnName":"name"},"qualifiers":[{"prop":{"datatype":"time","pid":"P580","label":"start date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"start"}},{"prop":{"datatype":"time","pid":"P582","label":"end date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"end"}}],"references":[{"snaks":[{"prop":{"datatype":"wikibase-item","pid":"P248","label":"stated in","type":"wbpropconstant"},"value":{"label":"The History of The Royal Society of Medicine","type":"wbitemconstant","qid":"Q42036099"}},{"prop":{"datatype":"string","pid":"P304","label":"page","type":"wbpropconstant"},"value":{"type":"wbstringconstant","value":"330-333"}}]}]}]}],"nameDescs":[]}],"siteIri":"http://www.wikidata.org/entity/","mediaWikiApiEndpoint":"https://www.wikidata.org/w/api.php"}
|
||||
|
@ -1 +1 @@
|
||||
{"itemDocuments":[{"subject":{"type":"wbitemvariable","columnName":"name"},"statementGroups":[{"property":{"datatype":"wikibase-item","pid":"P39","label":"position held","type":"wbpropconstant"},"statements":[{"references":[{"snaks":[{"prop":{"datatype":"wikibase-item","pid":"P248","label":"stated in","type":"wbpropconstant"},"value":{"label":"The History of The Royal Society of Medicine","type":"wbitemconstant","qid":"Q42036099"}},{"prop":{"datatype":"string","pid":"P304","label":"page","type":"wbpropconstant"},"value":{"type":"wbstringconstant","value":"330-333"}}]}],"qualifiers":[{"prop":{"datatype":"wikibase-item","pid":"P642","label":"of","type":"wbpropconstant"},"value":{"label":"History of Medicine Society","type":"wbitemconstant","qid":"Q37461404"}},{"prop":{"datatype":"time","pid":"P580","label":"start date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"start"}},{"prop":{"datatype":"time","pid":"P582","label":"end date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"end"}}],"value":{"label":"president","type":"wbitemconstant","qid":"Q30461"}}]}],"nameDescs":[]},{"subject":{"label":"History of Medicine Society","type":"wbitemconstant","qid":"Q37461404"},"statementGroups":[{"property":{"datatype":"wikibase-item","pid":"P488","label":"chairperson","type":"wbpropconstant"},"statements":[{"references":[{"snaks":[{"prop":{"datatype":"wikibase-item","pid":"P248","label":"stated in","type":"wbpropconstant"},"value":{"label":"The History of The Royal Society of Medicine","type":"wbitemconstant","qid":"Q42036099"}},{"prop":{"datatype":"string","pid":"P304","label":"page","type":"wbpropconstant"},"value":{"type":"wbstringconstant","value":"330-333"}}]}],"qualifiers":[{"prop":{"datatype":"time","pid":"P580","label":"start date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"start"}},{"prop":{"datatype":"time","pid":"P582","label":"end date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"end"}}],"value":{"type":"wbitemvariable","columnName":"name"}}]}],"nameDescs":[]}]}
|
||||
{"itemDocuments":[{"subject":{"type":"wbitemvariable","columnName":"name"},"statementGroups":[{"property":{"datatype":"wikibase-item","pid":"P39","label":"position held","type":"wbpropconstant"},"statements":[{"references":[{"snaks":[{"prop":{"datatype":"wikibase-item","pid":"P248","label":"stated in","type":"wbpropconstant"},"value":{"label":"The History of The Royal Society of Medicine","type":"wbitemconstant","qid":"Q42036099"}},{"prop":{"datatype":"string","pid":"P304","label":"page","type":"wbpropconstant"},"value":{"type":"wbstringconstant","value":"330-333"}}]}],"qualifiers":[{"prop":{"datatype":"wikibase-item","pid":"P642","label":"of","type":"wbpropconstant"},"value":{"label":"History of Medicine Society","type":"wbitemconstant","qid":"Q37461404"}},{"prop":{"datatype":"time","pid":"P580","label":"start date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"start"}},{"prop":{"datatype":"time","pid":"P582","label":"end date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"end"}}],"value":{"label":"president","type":"wbitemconstant","qid":"Q30461"}}]}],"nameDescs":[]},{"subject":{"label":"History of Medicine Society","type":"wbitemconstant","qid":"Q37461404"},"statementGroups":[{"property":{"datatype":"wikibase-item","pid":"P488","label":"chairperson","type":"wbpropconstant"},"statements":[{"references":[{"snaks":[{"prop":{"datatype":"wikibase-item","pid":"P248","label":"stated in","type":"wbpropconstant"},"value":{"label":"The History of The Royal Society of Medicine","type":"wbitemconstant","qid":"Q42036099"}},{"prop":{"datatype":"string","pid":"P304","label":"page","type":"wbpropconstant"},"value":{"type":"wbstringconstant","value":"330-333"}}]}],"qualifiers":[{"prop":{"datatype":"time","pid":"P580","label":"start date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"start"}},{"prop":{"datatype":"time","pid":"P582","label":"end date","type":"wbpropconstant"},"value":{"type":"wbdatevariable","columnName":"end"}}],"value":{"type":"wbitemvariable","columnName":"name"}}]}],"nameDescs":[]}],"siteIri":"http://www.wikidata.org/entity/","mediaWikiApiEndpoint":"https://www.wikidata.org/w/api.php"}
|
||||
|
@ -1 +1 @@
|
||||
{"itemDocuments":[{"subject":{"type":"wbitemvariable","columnName":"subject"},"statementGroups":[{"property":{"type":"wbpropconstant","pid":"P571","label":"inception","datatype":"time"},"statements":[{"value":{"type":"wbdatevariable","columnName":"inception"},"qualifiers":[],"references":[{"snaks":[{"prop":{"type":"wbpropconstant","pid":"P854","label":"reference URL","datatype":"url"},"value":{"type":"wbstringvariable","columnName":"reference"}},{"prop":{"type":"wbpropconstant","pid":"P813","label":"retrieved","datatype":"time"},"value":{"type":"wbdateconstant","value":"2018-02-28"}}]}]}]}],"nameDescs":[]}],"wikibasePrefix":"http://www.wikidata.org/entity/"}
|
||||
{"itemDocuments":[{"subject":{"type":"wbitemvariable","columnName":"subject"},"statementGroups":[{"property":{"type":"wbpropconstant","pid":"P571","label":"inception","datatype":"time"},"statements":[{"value":{"type":"wbdatevariable","columnName":"inception"},"qualifiers":[],"references":[{"snaks":[{"prop":{"type":"wbpropconstant","pid":"P854","label":"reference URL","datatype":"url"},"value":{"type":"wbstringvariable","columnName":"reference"}},{"prop":{"type":"wbpropconstant","pid":"P813","label":"retrieved","datatype":"time"},"value":{"type":"wbdateconstant","value":"2018-02-28"}}]}]}]}],"nameDescs":[]}],"siteIri":"http://www.wikidata.org/entity/"}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user