From 2ee7f2e1006e5d4bfc3d9be83260a733fd747c07 Mon Sep 17 00:00:00 2001 From: Angel Montenegro Date: Thu, 18 Nov 2021 14:16:57 -0600 Subject: [PATCH 1/5] release-2.5.46 (#1390) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Transifex (#1264) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Rever not-verified user allow to use search and links (#1266) * style: Actions aligned in modal websites (#1267) * fix: Modify default sor in research resource end point (#1268) * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Fix/add manage similar works modal (#1269) * Rever not-verified user allow to use search and links * Fix testing and change title * 🤖 GITHUB ACTIONS: formatting 🤖 * Allow user to merge works * Reload on work reload * Remove logs * fix i18n * Fix i18n * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Handle no selected works * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * 7703 qamy orcid fix order of works section header action buttons (#1271) * Rever not-verified user allow to use search and links * Fix testing and change title * 🤖 GITHUB ACTIONS: formatting 🤖 * Allow user to merge works * Reload on work reload * Remove logs * fix i18n * Fix i18n * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Handle no selected works * Fix works menu * Add testing languages * Fix link (#1270) * Transifex (#1272) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Force reload on record OnInit (#1277) * Fixed focus for fundings external ids (#1273) * Fixed focus for fundings external ids * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the 500 on create a copy or a work (#1275) * Fixed the 500 on create a copy or a work * 🤖 GITHUB ACTIONS: formatting 🤖 * Transifex (#1278) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * Fixed the focus for external identifiers when editing works (#1274) * Fixed the focus for external identifiers when editing works * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Limit number of items to display in export works modal (#1279) * fix: Limit number of items to display in export works modal * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fixing editing publication date on works (#1280) * Fixing editing publication date on works * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Moving translations from the registry * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix names unique * Revert "Fix names unique" This reverts commit d3e96baba9001b658321b154b0b80f7715fc9c7e. * Done (#1281) * Fix/multiple external id fixes (#1282) * 7722-qamy-orcid-allow-users-to-enter-dois-that-we-cannot-validate * Add translation string * 7723-qamy-orcid-valid-doi-url-not-recognized * Fix small issues * 7720-qamy-orcid-error-message-not-displayed-when-trying-to-save-work-without-external-id * Fix small isssues * Rearrage code * Remove logs * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Improve naming * fix Dani comment * Fix grouping function (#1283) * fix: Remove keyvalue pipe sort properties (#1284) * fix: Remove keyvalue pipe sort properties * 🤖 GITHUB ACTIONS: formatting 🤖 * 7710 qamy orcid impossible to export all works at once when theres pagination 2 (#1285) * fix: Add `Export all works` button * fix: Revert select all functionality and fix export all function * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/7729 qamy orcid user and member obo source not displayed when applying bulk actions (#1286) * style: Border-line misaligned * fix: Add obo to combine, export and visibility modals * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix NPE on validating works (#1287) * Fix NPE on validating works * 🤖 GITHUB ACTIONS: formatting 🤖 * NPE (#1288) * Fixed typos (#1290) * Fix/7714 qamy orcid fix field name for journal title publisher (#1291) * fix: Rename mislabeled properties * fix: Add missing updated property * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/7718 qamy orcid when i change the visibility setting of a work inside the modal the visibility indicator in the works section is not (#1292) * 7722-qamy-orcid-allow-users-to-enter-dois-that-we-cannot-validate * Add translation string * 7723-qamy-orcid-valid-doi-url-not-recognized * Fix small issues * 7720-qamy-orcid-error-message-not-displayed-when-trying-to-save-work-without-external-id * Fix small isssues * Rearrage code * Remove logs * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Improve naming * fix Dani comment * Fix wrong form validation * Fix works refresh after save * 7730 qamy orcid no error message when saving work with citation but no citation type (#1289) * Added validators for citation and translated title * added the common properties for translated title error * Fixed citation message * Fixed styling of error * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: Angel Montenegro * Add funding relation validation (#1293) * Resolve generated urls (#1294) * Fix merge works suggestions copy * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/7737 qamy orcid auto select relationship type for isbn depending on work type (#1295) * fix: Add auto select to work type * fix: Add auto select to relationship * 🤖 GITHUB ACTIONS: formatting 🤖 * Clone Orcid Source values * fix: Add missing title label for some work types (#1297) * fix: Remove commented code and add missing template reference variable (#1298) * fix: Remove commented code and add missing template reference variable * 🤖 GITHUB ACTIONS: formatting 🤖 * feat: Add tooltip for privacy selector (#1300) * feat: Add tooltip for privacy selector * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/blocker works modal and sync transifex changes (#1299) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Clone Orcid Source values * Fix works blockers * Fix valid format error on red * Use value changes to handle external type udpates * remove logs * remove logs * Remove not use variable * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix udpates * Fix external id url normalization * Format * Format * Remove debug data Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * Fix/7747 qamy orcid issues selecting works in bulk delete modal (#1301) * fix: Add missing message info if there wasnt items selected and add call to detect changes in the UI * style: Add missing style class to no info message * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Add count works validation (#1302) * fix: Add count works validation * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Add missing property in works (#1308) * fix: Add missing property in works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fixed placeholders inside work modal (#1303) * Fixed placeholders inside work modal * removed log console * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Angel Montenegro * Disable menu items for actions menu when no elements are selected (#1304) * Disable menu items for actions menu when no elements are selected * 🤖 GITHUB ACTIONS: formatting 🤖 * Update work-stack-group.component.html Co-authored-by: Angel Montenegro * Fixed the visibility default setting for biography (#1305) * Fixed the visibility default setting for biography * Added the additional props to X, LR and RL files * fixed the property name in localize for whoCanSeeBio * Fixed the default visibility for change bulk works * Removed console.log * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the missing language name for works (#1306) * Fixed the missing language name for works * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed funding translated title language (#1307) * Fixed funding translated title language * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Export all works error and add no items selected message (#1309) * fix: Export all works error and add no items selected message * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Only export preferred work * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Display visibility tooltip at the top of the selector (#1310) * Fix/blocker (part-of relation) validation on works modal (#1311) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Clone Orcid Source values * Fix works blockers * Fix valid format error on red * Use value changes to handle external type udpates * remove logs * remove logs * Remove not use variable * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix udpates * Fix external id url normalization * Format * Format * Remove debug data * Add comments * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * Added error messages for max length in work title, subtitle, journal title, description (#1312) * Added error messages for max length in work title, subtitle, journal title and description * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: Angel Montenegro * Fix build works delete (#1316) * Paula review fixes (#1313) * Paula review fixes * 🤖 GITHUB ACTIONS: testing languages 🤖 * various fixes for visibility, additional maxlength checks (#1314) * various fixes for visibility, additional maxlength checks * 🤖 GITHUB ACTIONS: formatting 🤖 * disable click when no selected works to combine (#1315) * 7761 qamy orcid fix position of visibility selector in mobile version (#1317) * Fix build works delete * Fix mobile titles * pull-from-transifex * add translation clones * Apply translations in ca translation completed for the source file '/src/locale/properties/environment-banner/environment-banner.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/institutional/institutional.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ca' language. * fix: counter inside export works modal (#1319) * fix: counter inside export works modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/7752 qamy orcid fix position of visibility tooltip (#1318) * style: Fix visibility tooltip alignment inside modals * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Add bottom visibility tooltip alignment * fix: remove todo comment * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in it translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'it' language. * Fixed sorting in search and link work wizards (#1320) * Fixed sorting in search and link work wizards * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed visibility text inconsistencies between sections (#1321) * Fixed visibility text inconsistencies between sections * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the adding work from bibtex (#1323) * Fixed the adding work from bibtex * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: enable button Managing similar works without need to select any … (#1327) * fix: enable button Managing similar works without need to select any checkbox * 🤖 GITHUB ACTIONS: formatting 🤖 * Attempt to fix the bulk delete error that cannot be reproduced in dev (#1325) * Fixed double spacing (#1322) * Open the bibtex link in a new tab (#1324) * Open the bibtex link in a new tab * fix: Add missing attribute to a tag Co-authored-by: Daniel Palafox * fix: deselect works, if cancel button is clicked or the modal is closed (#1326) * fix: deselect works, if cancel button is clicked or the modal is closed * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix validations on pubmed (#1328) * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_TW' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Update environment-banner.uk.properties * sync with TX * 🤖 GITHUB ACTIONS: testing languages 🤖 * Transifex (#1333) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Clone Orcid Source values * pull-from-transifex * add translation clones * Apply translations in ca translation completed for the source file '/src/locale/properties/environment-banner/environment-banner.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/institutional/institutional.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ca' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in it translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'it' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_TW' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Update environment-banner.uk.properties * sync with TX * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Leonardo Mendoza Fernadez * fix: select All issue in delete modal (#1335) * fix: select All issue in delete modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the css for displaying pubMed error (#1330) * Fixed the css for displaying pubMed error * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Angel Montenegro * Added validation for max URL limit (#1332) * Added validation for max URL limit * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the broken test * 7773 qamy orcid max character limit error messages missing in funding modal (#1334) * Fixed the error display/validations for funding * Fixed spelling errors * Fixed formatting errors * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fixed double spacing in funding detail (#1336) * fix: only display delete button if `other sources` is clicked in grou… (#1337) * fix: only display delete button if `other sources` is clicked in grouped activities * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the no-error message when invalid id (#1331) * Fixed the no-error message when invalid id * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Angel Montenegro * Fixed importing from bibtext with publication date and console error (#1338) * Fixed importing from bibtext with publication date and console error * Fix CI formatting error * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Call getWorks method only once when works have been imported via BibTeX * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Daniel Palafox * Fixed the default visibility label in edit work (#1339) * Fixed the default visibility label in edit work * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/7704 qamy orcid new functionality for contributors in works not implemented (#1329) * feature: Add contributors list in the description works * feature: Add contributors in works summary panel * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * fix: Add new variable for contributors * fix: add missing change * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Remove uppercase from contributors * Revert "fix: Remove uppercase from contributors" This reverts commit 087422ec84c3c5276d4ae7302e94c2d1790b393d. * fix: CI internalization error * fix: update href attribute to the correct article (#1340) * Feature/remove qa segment (#1341) * Fix remove qa segment * Use angular navigator for register, signin and signout * clean up * 🤖 GITHUB ACTIONS: formatting 🤖 * Remove ORCID_ANGULAR_INBOX togglz (#1073) * remove orcid_angular_inbox togglz * Remove togglz service Co-authored-by: Angel Montenegro * fix: date validator for firefox (#1347) * Fixed the button size (#1345) * Fix on enter action (#1342) * Fix not visible mobile button: (#1343) * Clean cache/remove zoombie sessions (#1348) * Clean up zoombie session * Remove query parameters on logout * Remove logs * fix translations * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the visibility for affiliations and funding (#1349) * Fixed the visibility for affiliations and funding * 🤖 GITHUB ACTIONS: formatting 🤖 * Show sidebars for doi and bibtext modals (#1350) * feature: Add togglz for work contributors in work summary (#1346) * feature: Add togglz for work contributors in work summary * fix: Duplicate call to getDetails * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Add todo comment * fix: Leo comments * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the max length validator for translated title and region in funding (#1351) * Added the max length valdator for translated title and region in funding * 🤖 GITHUB ACTIONS: formatting 🤖 * Added external Ids to bibtex modal (#1344) * Added external Ids to bibtex modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the URL if present in bibtex * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the translation for URL * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the translation for the max work subtitle (#1352) * Fixed the translation for the max work subtitle * Fixed the CI * fix: Add error bibtex message (#1353) * fix: Add error bibtex message * 🤖 GITHUB ACTIONS: testing languages 🤖 * style: fix font size bibtex error * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the max length errors for affiliations (#1355) * Added the max length errors for affiliations * 🤖 GITHUB ACTIONS: formatting 🤖 * added the separation between the 2 error messages (#1356) * added the separation between the 2 error messages * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the button sizing css * fix: Add trailing zero to month in date validator (#1357) * fix: Add trailing zero to month in date validator * style: Fix modal padding for ie11 * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Fix width for translated title inputs in modal funding (#1359) * Fix/7797 qamy orcid the import bibtex modal doesnt need side navigation links (#1360) * fix: Remove side-bar in modal bibtex * style: Truncate long title in bibtex modal * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Add code tag and refactor bibtex error messages (#1354) * style: Add code tag and refactor bibtex error messages * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * fix: Remove unused variable * Update src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts Co-authored-by: leomendoza123 * Update src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts Co-authored-by: leomendoza123 * Update src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts Co-authored-by: leomendoza123 Co-authored-by: leomendoza123 * Cache management improvements (#1358) * Cache management improvements * Add TODO * Orcid email verification modal not displayed when signing in (#1361) * 7796-qamy-orcid-email-verification-modal-not-displayed-when-signing-in * handle subscription * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/7794 qa my orcid translated errors partially hidden in add work from doi modal (#1363) * fix: Remove checkbox from public page * fix: Remove footer in external id if there is no work * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Update initial set to start and end dates in affiliation form (#1364) * fix: Update initial set to start and end dates in affiliation form * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Update variables to optional to remove console log errors (#1365) * fix: Update variables to optional to remove console log errors * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the display of biography and names in public record and my orcid (#1367) * Fixed the display of biography and names in public record and my orcid * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed refreshing of names/biography after editing in my-orcid (#1368) * Fixed the display of biography and names in public record and my orcid * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the refreshing of names biography after editing * 🤖 GITHUB ACTIONS: formatting 🤖 * tx pull -f * Fixed the menu item truncated text (#1369) * Fixed the menu item truncated text * 🤖 GITHUB ACTIONS: formatting 🤖 * clear the error before parsing new bibtex file (#1370) * 7774 qamy orcid max character limit error messages missing in affiliations modal (#1371) * Added the max length errors for affiliations * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the missing max-length error for department * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Remove fixed width Bibtex button (#1372) * style: Remove fixed width Bibtex button * style: Fix issues with long translations * Added the new text for Saving external-id modal (#1373) * Improve date validatio (#1374) * Improve date validatio * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Update how reactive form is created (#1376) * fix: Update how reactive form is created * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/314 qamy orcid duplicate email not detected when entered with a different letter case (#1377) * fix: Duplicated email logic * fix: Resend verification button in my orcid * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/relationship translations (#1378) * Improve date validatio * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix work relationship and imrprove date validators * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Disable delete button if is it loading and fix export reactive form… (#1379) * fix: Disable delete button is it loading and fix export reactive form error * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix guard to handle cookie miss match * tx pull -f * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Remove updated string * Fix guard to handle cookie miss match (#1380) * Fix guard to handle cookie miss match * fix comments * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/language refresh redirect fix (#1381) * Fix guard to handle cookie miss match * Fix language guard * Set default redirects * Fix comments * Fix/modal export explorer and safari (#1382) * Fix guard to handle cookie miss match * Fix modal export explorer-safary * Apply translations in es translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'es' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ru' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in it translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'it' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'fr' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * 7815 qa remove redundant required information tag when a section has no mandatory fields (#1383) * Fix guard to handle cookie miss match * Fix modal export explorer-safary * Remove unwanted tag * Revert "Remove unwanted tag" This reverts commit f16aa57be18274227fa9aa008e5c56f6954d8624. * Remove unwanted message * 7809 qamy orcid export works button text not entirely visible in mobile devices (#1384) * Fix guard to handle cookie miss match * update mobile supprot for modals * fix: Add missing text in email verification banner (#1386) * fix: Add missing text in email verification banner * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed multiple modals display after signin (#1385) * Fixed multiple modals display after signin * Second attempt of fixing the multiple display of unverified modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the wrong route for self service (#1387) * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Force pull * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: leomendoza123 Co-authored-by: Daniel Palafox Co-authored-by: Camelia <62257307+Camelia-Orcid@users.noreply.github.com> Co-authored-by: andrej romanov <50377758+auumgn@users.noreply.github.com> --- .gitignore | 3 +- .tx/config | 26 +- .../my-orcid/my-orcid-affiliations.e2e.js | 17 +- .../my-orcid/my-orcid-funding.e2e.js | 2 +- .../my-orcid/my-orcid-main-bar.e2e.js | 2 +- .../my-orcid-side-bar-keywords.e2e.js | 48 +- .../my-orcid/my-orcid-side-bar.e2e.js | 192 +- cypress/support/clean.commands.js | 24 +- guides/example-tx-config.yml | 27 +- package-lock.json | 11 +- package.json | 1 + src/app/app-routing.module.ts | 2 +- .../form-authorize.component.ts | 7 +- .../modal-footer/modal-footer.component.html | 2 +- .../modal-footer/modal-footer.component.scss | 14 +- .../modal-footer/modal-footer.component.ts | 22 +- .../modal-header/modal-header.component.html | 10 +- .../modal-header/modal-header.component.scss | 1 - .../modal-side-bar.component.html | 15 +- .../modal-side-bar.component.scss | 5 + src/app/cdk/modal/modal/modal.component.scss | 13 +- .../my-orcid-alerts.component.html | 19 +- .../panel-element-source.component.html | 10 +- .../panel-element-source.component.ts | 1 + .../panel-source/panel-source.component.html | 8 +- .../panel-source/panel-source.component.ts | 37 +- src/app/cdk/panel/panel.module.ts | 2 + src/app/cdk/panel/panel/panel.component.html | 65 +- src/app/cdk/panel/panel/panel.component.scss | 36 +- .../panel/panel.component.scss-theme.scss | 5 +- src/app/cdk/panel/panel/panel.component.ts | 137 +- .../cdk/panel/panels/panels.component.html | 17 +- .../cdk/panel/panels/panels.component.scss | 4 +- src/app/cdk/panel/panels/panels.component.ts | 58 +- .../privacy-selector.component.html | 99 +- .../privacy-selector.component.scss | 53 + ...privacy-selector.component.scss-theme.scss | 14 +- .../privacy-selector.component.ts | 2 + .../modal-country.component.html | 112 +- .../modal-country.component.scss | 42 +- .../modal-country/modal-country.component.ts | 18 +- .../modal-email/modal-email.component.html | 247 +- .../modal-email/modal-email.component.scss | 53 +- .../modal-email.component.scss-theme.scss | 8 + .../modal-email/modal-email.component.ts | 147 +- .../modal-keyword.component.html | 124 +- .../modal-keyword.component.scss | 56 +- .../modal-keyword/modal-keyword.component.ts | 51 +- .../modal-person-identifiers.component.html | 108 +- .../modal-person-identifiers.component.scss | 46 +- .../modal-person-identifiers.component.ts | 9 +- .../modal-websites.component.html | 247 +- .../modal-websites.component.scss | 98 +- .../modal-websites.component.ts | 94 +- .../source-hit/source-hit.component.html | 8 + .../source-hit/source-hit.component.scss | 0 .../source-hit/source-hit.component.spec.ts | 24 + .../modals/source-hit/source-hit.component.ts | 18 + .../side-bar-id/side-bar-id.component.ts | 2 +- src/app/cdk/side-bar/side-bar.module.ts | 6 +- .../side-bar/side-bar/side-bar.component.html | 37 +- .../side-bar/side-bar/side-bar.component.ts | 2 + src/app/cdk/snackbar/snackbar.service.ts | 22 + .../snackbar/snackbar/snackbar.component.html | 20 +- .../snackbar/snackbar/snackbar.component.scss | 7 +- .../warning-message/warning-message.module.ts | 11 + .../warning-message.component.html | 19 + .../warning-message.component.scss | 17 + .../warning-message.component.scss-theme.scss | 20 + .../warning-message.component.spec.ts | 24 + .../warning-message.component.ts | 34 + src/app/constants.ts | 49 +- src/app/core/inbox/inbox.service.ts | 3 +- src/app/core/open-graph/open-graph.service.ts | 10 +- .../record-affiliations-grouping.service.ts | 48 +- .../record-affiliations.service.ts | 44 +- .../record-biography.service.ts | 3 + .../record-countries.service.ts | 3 + .../record-emails/record-emails.service.ts | 44 +- .../record-fundings.service.ts | 14 + .../record-keyword/record-keyword.service.ts | 3 + .../core/record-names/record-names.service.ts | 3 + .../record-other-names.service.ts | 17 +- .../record-peer-review.service.ts | 47 +- .../record-person/record-person.service.ts | 4 +- .../record-person-identifier.service.ts | 10 +- .../record-research-resource.service.ts | 115 +- .../record-websites.service.ts | 4 + .../core/record-works/record-works.service.ts | 203 +- src/app/core/record/record.service.ts | 216 +- src/app/core/register/register.service.ts | 39 +- src/app/core/sign-in/sign-in.service.ts | 24 +- src/app/core/user/user.service.ts | 125 +- .../verification-email-modal.service.spec.ts | 16 + .../verification-email-modal.service.ts | 40 + src/app/guards/authenticated.guard.ts | 15 +- src/app/guards/language.guard.ts | 46 +- .../institutional/institutional.component.ts | 3 +- src/app/layout/header/header.component.html | 6 +- src/app/layout/header/header.component.ts | 20 +- .../layout/user-menu/user-menu.component.html | 4 +- .../layout/user-menu/user-menu.component.ts | 25 +- .../link-account/link-account.component.html | 2 +- .../affiliation-stack.component.html | 8 +- .../affiliation-stack.component.ts | 13 +- .../affiliation-stacks-groups.component.html | 55 +- .../affiliation-stacks-groups.component.ts | 54 +- .../modal-affiliations.component.html | 153 +- .../modal-affiliations.component.scss | 52 +- .../modal-affiliations.component.ts | 366 ++- .../affiliation/affiliation.component.html | 6 +- .../display-attribute.component.scss | 1 + .../display-external-ids.component.html | 2 +- ...g-external-identifiers-edit.component.html | 107 + ...g-external-identifiers-edit.component.scss | 35 + ...xternal-identifiers-edit.component.spec.ts | 24 + ...ing-external-identifiers-edit.component.ts | 50 + ...ernal-identifiers-view-only.component.html | 26 + ...ernal-identifiers-view-only.component.scss | 12 + ...al-identifiers-view-only.component.spec.ts | 26 + ...xternal-identifiers-view-only.component.ts | 26 + ...onship-view-only.component.scss-theme.scss | 11 + .../funding-stack.component.html | 7 +- .../funding-stack/funding-stack.component.ts | 9 +- .../funding-stacks-groups.component.html | 6 +- .../funding-stacks-groups.component.ts | 24 +- .../modal-funding-search-link.component.html | 18 +- .../modal-funding-search-link.component.ts | 2 + .../modal-funding.component.html | 520 ++-- .../modal-funding.component.scss | 69 +- .../modal-funding.component.scss-theme.scss | 3 + .../modal-funding/modal-funding.component.ts | 384 ++- .../components/funding/funding.component.html | 30 +- .../components/funding/funding.component.scss | 3 + .../modal-delete-items.component.html | 62 +- .../modal-delete-items.component.scss | 25 + .../modal-delete-items.component.ts | 74 +- .../peer-review-stack.component.html | 2 +- .../peer-review-stack.component.ts | 10 +- .../modal-peer-reviews.component.html | 9 +- .../modal-peer-reviews.component.scss | 4 + .../modal-peer-reviews.component.ts | 2 + .../peer-review-stacks-groups.component.html | 15 +- .../peer-review-stacks-groups.component.ts | 42 +- .../research-resource-stack.component.html | 3 +- .../research-resource-stack.component.ts | 10 +- ...earch-resource-stacks-group.component.html | 7 +- ...esearch-resource-stacks-group.component.ts | 16 +- .../top-bar-actions.component.html | 6 +- ...ar-my-public-record-preview.component.html | 10 +- .../top-bar-record-issues.component.html | 16 +- .../top-bar-record-issues.component.ts | 2 +- ...ar-verification-email-modal.component.html | 77 + ...ar-verification-email-modal.component.scss | 20 + ...tion-email-modal.component.scss-theme.scss | 16 + ...verification-email-modal.component.spec.ts | 24 + ...-bar-verification-email-modal.component.ts | 52 + .../top-bar-verification-email.component.html | 79 + .../top-bar-verification-email.component.scss | 24 + ...rification-email.component.scss-theme.scss | 28 + ...p-bar-verification-email.component.spec.ts | 24 + .../top-bar-verification-email.component.ts | 70 + .../modal-biography.component.html | 29 +- .../modal-biography.component.scss | 12 +- .../modal-biography.component.ts | 19 +- .../modal-name/modal-name.component.html | 243 +- .../modal-name/modal-name.component.scss | 77 +- .../modals/modal-name/modal-name.component.ts | 82 +- .../components/top-bar/top-bar.component.html | 69 +- .../components/top-bar/top-bar.component.ts | 74 +- ...k-external-identifiers-edit.component.html | 219 ++ ...k-external-identifiers-edit.component.scss | 40 + ...identifiers-edit.component.scss-theme.scss | 16 + ...xternal-identifiers-edit.component.spec.ts | 24 + ...ork-external-identifiers-edit.component.ts | 72 + ...ernal-identifiers-view-only.component.html | 35 + ...ernal-identifiers-view-only.component.scss | 11 + ...al-identifiers-view-only.component.spec.ts | 24 + ...xternal-identifiers-view-only.component.ts | 27 + ...onship-view-only.component.scss-theme.scss | 11 + .../work-form/work-form.component.html | 734 +++++ .../work-form/work-form.component.scss | 98 + .../work-form.component.scss-theme.scss} | 4 + .../work-form/work-form.component.spec.ts | 24 + .../work-form/work-form.component.ts | 621 ++++ .../work-modal/work-modal.component.html | 769 +---- .../work-modal/work-modal.component.scss | 88 +- .../work-modal/work-modal.component.ts | 367 +-- .../work-bibtex-modal.component.html | 151 + .../work-bibtex-modal.component.scss | 62 + ...ork-bibtex-modal.component.scss-theme.scss | 16 + .../work-bibtex-modal.component.spec.ts | 24 + .../work-bibtex-modal.component.ts | 391 +++ .../work-external-id-modal.component.html | 158 + .../work-external-id-modal.component.scss | 17 + .../work-external-id-modal.component.spec.ts | 24 + .../work-external-id-modal.component.ts | 113 + .../modal-works-search-link.component.html | 21 +- .../modal-works-search-link.component.scss | 0 .../modal-works-search-link.component.spec.ts | 0 .../modal-works-search-link.component.ts | 21 +- .../work-stack-group.component.html | 70 +- .../work-stack-group.component.scss | 29 + .../work-stack-group.component.ts | 97 +- .../work-stack/work-stack.component.html | 10 +- .../work-stack/work-stack.component.ts | 25 +- ...combine-works-with-selector.component.html | 138 + ...combine-works-with-selector.component.scss | 44 + ...ks-with-selector.component.scss-theme.scss | 20 + ...bine-works-with-selector.component.spec.ts | 24 + ...l-combine-works-with-selector.component.ts | 109 + .../modal-combine-works.component.html | 41 +- .../modal-combine-works.component.scss | 1 + .../modal-combine-works.component.ts | 10 +- .../modal-export-works.component.html | 58 +- .../modal-export-works.component.scss | 16 + .../modal-export-works.component.ts | 94 +- .../works-visibility-modal.component.html | 32 +- .../works-visibility-modal.component.ts | 32 +- .../components/work/work.component.html | 64 +- .../components/work/work.component.scss | 3 + .../record/components/work/work.component.ts | 2 + .../pages/my-orcid/my-orcid.component.html | 125 +- .../pages/my-orcid/my-orcid.component.ts | 158 +- src/app/record/record.module.ts | 36 +- .../backend-error.component.html | 2 +- .../backend-error/backend-error.component.ts | 2 +- .../pages/register/register.component.ts | 13 +- src/app/register/register.module.ts | 2 + .../components/results/results.component.html | 4 +- .../shared/pipes/trailing-zeros.pipe.spec.ts | 8 + .../trailing-zeros/trailing-zeros.pipe.ts | 13 + .../visibility-string-label.pipe.specs.ts | 8 + .../visibility-string-label.pipe.ts | 14 + src/app/shared/shared.module.ts | 6 + .../citation/work-citation.validator.ts | 15 + .../shared/validators/date/date.validator.ts | 196 +- .../translated-title.validator.ts | 15 + .../work-identifiers.validator.ts | 41 + .../form-sign-in/form-sign-in.component.ts | 11 +- src/app/types/common.endpoint.ts | 17 +- src/app/types/record-affiliation.endpoint.ts | 18 +- src/app/types/record-funding.endpoint.ts | 17 +- src/app/types/record-peer-review.endpoint.ts | 1 + src/app/types/record-works.endpoint.ts | 18 +- src/app/types/record.endpoint.ts | 1 + src/app/types/record.local.ts | 25 +- src/app/types/userInfo.endpoint.ts | 1 + src/app/types/works.endpoint.ts | 49 +- src/assets/scripts/latexParse.js | 2614 +++++++++++++++++ .../_cdk-drag-drop-theme.scss | 14 + .../cdk-drag-drop.scss | 23 + .../form-field-outline.scss | 17 +- src/assets/scss/material.scss | 2 + src/assets/scss/orcid/_divider-theme.scss | 10 + src/assets/scss/orcid/divider.scss | 1 + src/assets/scss/orcid/urls.scss | 4 + src/locale/properties-mover.properties | 26 + src/locale/properties-mover.py | 84 + .../delegators/delegators.ca.properties | 3 + .../delegators/delegators.uk.properties | 3 + .../environment-banner.ca.properties | 8 + .../environment-banner.uk.properties | 7 +- .../properties/funding/funding.ar.properties | 42 + .../properties/funding/funding.ca.properties | 41 + .../properties/funding/funding.cs.properties | 42 + .../properties/funding/funding.en.properties | 13 +- .../properties/funding/funding.es.properties | 42 + .../properties/funding/funding.fr.properties | 42 + .../properties/funding/funding.it.properties | 42 + .../properties/funding/funding.ja.properties | 42 + .../properties/funding/funding.ko.properties | 42 + .../properties/funding/funding.lr.properties | 10 +- .../properties/funding/funding.pt.properties | 42 + .../properties/funding/funding.rl.properties | 10 +- .../properties/funding/funding.ru.properties | 42 + .../properties/funding/funding.uk.properties | 41 + .../properties/funding/funding.xx.properties | 10 +- .../funding/funding.zh_CN.properties | 42 + .../funding/funding.zh_TW.properties | 42 + src/locale/properties/home/home.ca.properties | 11 + src/locale/properties/home/home.uk.properties | 11 + .../properties/inbox/inbox.ca.properties | 40 + .../properties/inbox/inbox.uk.properties | 46 + .../institutional/institutional.ca.properties | 12 + .../institutional/institutional.uk.properties | 10 + .../properties/layout/layout.ca.properties | 104 + .../properties/layout/layout.uk.properties | 102 +- .../properties/linking/linking.en.properties | 2 +- .../peer-review/peer-review.ar.properties | 1 + .../peer-review/peer-review.ca.properties | 9 - .../peer-review/peer-review.cs.properties | 1 + .../peer-review/peer-review.en.properties | 1 + .../peer-review/peer-review.es.properties | 1 + .../peer-review/peer-review.fr.properties | 3 +- .../peer-review/peer-review.it.properties | 1 + .../peer-review/peer-review.ja.properties | 1 + .../peer-review/peer-review.ko.properties | 1 + .../peer-review/peer-review.lr.properties | 1 + .../peer-review/peer-review.pt.properties | 1 + .../peer-review/peer-review.rl.properties | 1 + .../peer-review/peer-review.ru.properties | 1 + .../peer-review/peer-review.uk.properties | 9 - .../peer-review/peer-review.xx.properties | 1 + .../peer-review/peer-review.zh_CN.properties | 1 + .../peer-review/peer-review.zh_TW.properties | 1 + .../properties/profile/profile.ca.properties | 3 - .../properties/profile/profile.uk.properties | 3 - .../properties/record/record.ar.properties | 51 +- .../properties/record/record.ca.properties | 46 +- .../properties/record/record.cs.properties | 51 +- .../properties/record/record.en.properties | 76 +- .../properties/record/record.es.properties | 51 +- .../properties/record/record.fr.properties | 51 +- .../properties/record/record.it.properties | 55 +- .../properties/record/record.ja.properties | 51 +- .../properties/record/record.ko.properties | 51 +- .../properties/record/record.lr.properties | 61 +- .../properties/record/record.pt.properties | 51 +- .../properties/record/record.rl.properties | 61 +- .../properties/record/record.ru.properties | 51 +- .../properties/record/record.uk.properties | 46 +- .../properties/record/record.xx.properties | 61 +- .../properties/record/record.zh_CN.properties | 69 +- .../properties/record/record.zh_TW.properties | 51 +- .../register/register.ca.properties | 4 - .../register/register.en.properties | 2 +- .../register/register.uk.properties | 4 - .../register/register.zh_CN.properties | 2 +- .../research-resources.ar.properties | 2 +- .../research-resources.ca.properties | 3 + .../research-resources.uk.properties | 3 + .../properties/search/search.ca.properties | 2 - .../properties/search/search.uk.properties | 2 - .../properties/shared/shared.ar.properties | 73 +- .../properties/shared/shared.ca.properties | 77 - .../properties/shared/shared.cs.properties | 61 +- .../properties/shared/shared.en.properties | 45 +- .../properties/shared/shared.es.properties | 67 +- .../properties/shared/shared.fr.properties | 88 +- .../properties/shared/shared.it.properties | 127 +- .../properties/shared/shared.ja.properties | 69 +- .../properties/shared/shared.ko.properties | 71 +- .../properties/shared/shared.lr.properties | 45 + .../properties/shared/shared.pt.properties | 69 +- .../properties/shared/shared.rl.properties | 42 + .../properties/shared/shared.ru.properties | 69 +- .../properties/shared/shared.uk.properties | 78 - .../properties/shared/shared.xx.properties | 42 + .../properties/shared/shared.zh_CN.properties | 71 +- .../properties/shared/shared.zh_TW.properties | 63 +- .../side-bar/side-bar.ar.properties | 34 + .../side-bar/side-bar.cs.properties | 34 + .../side-bar/side-bar.en.properties | 18 +- .../side-bar/side-bar.es.properties | 34 + .../side-bar/side-bar.fr.properties | 34 + .../side-bar/side-bar.it.properties | 34 + .../side-bar/side-bar.ja.properties | 34 + .../side-bar/side-bar.ko.properties | 34 + .../side-bar/side-bar.lr.properties | 6 +- .../side-bar/side-bar.pt.properties | 34 + .../side-bar/side-bar.rl.properties | 6 +- .../side-bar/side-bar.ru.properties | 34 + .../side-bar/side-bar.uk.properties | 2 - .../side-bar/side-bar.xx.properties | 4 +- .../side-bar/side-bar.zh_CN.properties | 34 + .../side-bar/side-bar.zh_TW.properties | 34 + .../properties/signin/signin.ca.properties | 1 - .../properties/signin/signin.uk.properties | 128 +- .../properties/top-bar/top-bar.ar.properties | 44 +- .../properties/top-bar/top-bar.cs.properties | 44 +- .../properties/top-bar/top-bar.en.properties | 46 +- .../properties/top-bar/top-bar.es.properties | 44 +- .../properties/top-bar/top-bar.fr.properties | 44 +- .../properties/top-bar/top-bar.it.properties | 44 +- .../properties/top-bar/top-bar.ja.properties | 44 +- .../properties/top-bar/top-bar.ko.properties | 44 +- .../properties/top-bar/top-bar.lr.properties | 54 +- .../properties/top-bar/top-bar.pt.properties | 44 +- .../properties/top-bar/top-bar.rl.properties | 54 +- .../properties/top-bar/top-bar.ru.properties | 44 +- .../properties/top-bar/top-bar.xx.properties | 54 +- .../top-bar/top-bar.zh_CN.properties | 44 +- .../top-bar/top-bar.zh_TW.properties | 44 +- .../properties/works/works.ar.properties | 116 +- .../properties/works/works.ca.properties | 55 - .../properties/works/works.cs.properties | 116 +- .../properties/works/works.en.properties | 85 +- .../properties/works/works.es.properties | 116 +- .../properties/works/works.fr.properties | 118 +- .../properties/works/works.it.properties | 116 +- .../properties/works/works.ja.properties | 116 +- .../properties/works/works.ko.properties | 116 +- .../properties/works/works.lr.properties | 77 +- .../properties/works/works.pt.properties | 116 +- .../properties/works/works.rl.properties | 77 +- .../properties/works/works.ru.properties | 116 +- .../properties/works/works.uk.properties | 55 - .../properties/works/works.xx.properties | 77 +- .../properties/works/works.zh_CN.properties | 116 +- .../properties/works/works.zh_TW.properties | 116 +- src/styles.scss | 2 +- yarn.lock | 11 +- 403 files changed, 17049 insertions(+), 5096 deletions(-) create mode 100644 src/app/cdk/side-bar/modals/source-hit/source-hit.component.html create mode 100644 src/app/cdk/side-bar/modals/source-hit/source-hit.component.scss create mode 100644 src/app/cdk/side-bar/modals/source-hit/source-hit.component.spec.ts create mode 100644 src/app/cdk/side-bar/modals/source-hit/source-hit.component.ts create mode 100644 src/app/cdk/warning-message/warning-message.module.ts create mode 100644 src/app/cdk/warning-message/warning-message/warning-message.component.html create mode 100644 src/app/cdk/warning-message/warning-message/warning-message.component.scss create mode 100644 src/app/cdk/warning-message/warning-message/warning-message.component.scss-theme.scss create mode 100644 src/app/cdk/warning-message/warning-message/warning-message.component.spec.ts create mode 100644 src/app/cdk/warning-message/warning-message/warning-message.component.ts create mode 100644 src/app/core/verification-email-modal/verification-email-modal.service.spec.ts create mode 100644 src/app/core/verification-email-modal/verification-email-modal.service.ts create mode 100644 src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.html create mode 100644 src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.scss create mode 100644 src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.spec.ts create mode 100644 src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.ts create mode 100644 src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.html create mode 100644 src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.scss create mode 100644 src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.spec.ts create mode 100644 src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.ts create mode 100644 src/app/record/components/funding-external-identifiers-view-only/work-funding-relationship-view-only.component.scss-theme.scss create mode 100644 src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.html create mode 100644 src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.scss create mode 100644 src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.scss-theme.scss create mode 100644 src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.spec.ts create mode 100644 src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.ts create mode 100644 src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.html create mode 100644 src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.scss create mode 100644 src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.scss-theme.scss create mode 100644 src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.spec.ts create mode 100644 src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.ts create mode 100644 src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.html create mode 100644 src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.scss create mode 100644 src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.scss-theme.scss create mode 100644 src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.spec.ts create mode 100644 src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.ts create mode 100644 src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.html create mode 100644 src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.scss create mode 100644 src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.spec.ts create mode 100644 src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.ts create mode 100644 src/app/record/components/work-external-identifiers-view-only/work-modal-relationship-view-only.component.scss-theme.scss create mode 100644 src/app/record/components/work-form/work-form/work-form.component.html create mode 100644 src/app/record/components/work-form/work-form/work-form.component.scss rename src/app/record/components/{work-modal/work-modal.component.scss-theme.scss => work-form/work-form/work-form.component.scss-theme.scss} (91%) create mode 100644 src/app/record/components/work-form/work-form/work-form.component.spec.ts create mode 100644 src/app/record/components/work-form/work-form/work-form.component.ts create mode 100644 src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.html create mode 100644 src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.scss create mode 100644 src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.scss-theme.scss create mode 100644 src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.spec.ts create mode 100644 src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts create mode 100644 src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.html create mode 100644 src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.scss create mode 100644 src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.spec.ts create mode 100644 src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.ts rename src/app/record/components/work-stack-group/modals/{ => work-search-link-modal}/modal-works-search-link.component.html (81%) rename src/app/record/components/work-stack-group/modals/{ => work-search-link-modal}/modal-works-search-link.component.scss (100%) rename src/app/record/components/work-stack-group/modals/{ => work-search-link-modal}/modal-works-search-link.component.spec.ts (100%) rename src/app/record/components/work-stack-group/modals/{ => work-search-link-modal}/modal-works-search-link.component.ts (84%) create mode 100644 src/app/record/components/work/modals/modal-combine-works-with-selector/modal-combine-works-with-selector.component.html create mode 100644 src/app/record/components/work/modals/modal-combine-works-with-selector/modal-combine-works-with-selector.component.scss create mode 100644 src/app/record/components/work/modals/modal-combine-works-with-selector/modal-combine-works-with-selector.component.scss-theme.scss create mode 100644 src/app/record/components/work/modals/modal-combine-works-with-selector/modal-combine-works-with-selector.component.spec.ts create mode 100644 src/app/record/components/work/modals/modal-combine-works-with-selector/modal-combine-works-with-selector.component.ts create mode 100644 src/app/shared/pipes/trailing-zeros.pipe.spec.ts create mode 100644 src/app/shared/pipes/trailing-zeros/trailing-zeros.pipe.ts create mode 100644 src/app/shared/pipes/visibility-string-label/visibility-string-label.pipe.specs.ts create mode 100644 src/app/shared/pipes/visibility-string-label/visibility-string-label.pipe.ts create mode 100644 src/app/shared/validators/citation/work-citation.validator.ts create mode 100644 src/app/shared/validators/translated-title/translated-title.validator.ts create mode 100644 src/app/shared/validators/work-identifiers/work-identifiers.validator.ts create mode 100644 src/assets/scripts/latexParse.js create mode 100644 src/assets/scss/material.orcid.overwrites.scss/_cdk-drag-drop-theme.scss create mode 100644 src/locale/properties-mover.properties create mode 100644 src/locale/properties-mover.py create mode 100644 src/locale/properties/environment-banner/environment-banner.ca.properties create mode 100644 src/locale/properties/inbox/inbox.uk.properties create mode 100644 src/locale/properties/institutional/institutional.ca.properties delete mode 100644 src/locale/properties/peer-review/peer-review.ca.properties delete mode 100644 src/locale/properties/peer-review/peer-review.uk.properties delete mode 100644 src/locale/properties/profile/profile.ca.properties delete mode 100644 src/locale/properties/profile/profile.uk.properties delete mode 100644 src/locale/properties/register/register.ca.properties delete mode 100644 src/locale/properties/register/register.uk.properties delete mode 100644 src/locale/properties/search/search.ca.properties delete mode 100644 src/locale/properties/search/search.uk.properties delete mode 100644 src/locale/properties/shared/shared.ca.properties delete mode 100644 src/locale/properties/shared/shared.uk.properties delete mode 100644 src/locale/properties/side-bar/side-bar.uk.properties delete mode 100644 src/locale/properties/signin/signin.ca.properties delete mode 100644 src/locale/properties/works/works.ca.properties delete mode 100644 src/locale/properties/works/works.uk.properties diff --git a/.gitignore b/.gitignore index e25f164b95..8a781d0f75 100644 --- a/.gitignore +++ b/.gitignore @@ -58,4 +58,5 @@ tx.exe /cypres/cypress.env.js /cypress/videos/* /cypress/screenshots/* -/cypress/reports/** \ No newline at end of file +/cypress/reports/** +cypress.env diff --git a/.tx/config b/.tx/config index 964cf2f469..81e9797815 100644 --- a/.tx/config +++ b/.tx/config @@ -142,9 +142,31 @@ source_lang = en type = UNICODEPROPERTIES -[orcid-angular.src-locale-properties-research-resources-en-properties--transifex] +[orcid-angular.src-locale-properties-research-resources-research-resources-en-properties--transifex] file_filter = src/locale/properties/research-resources/research-resources..properties minimum_perc = 0 source_file = src/locale/properties/research-resources/research-resources.en.properties source_lang = en -type = UNICODEPROPERTIES \ No newline at end of file +type = UNICODEPROPERTIES + + +[orcid-angular.src-locale-properties-funding-funding-en-properties--transifex] +file_filter = src/locale/properties/funding/funding..properties +minimum_perc = 0 +source_file = src/locale/properties/funding/funding.en.properties +source_lang = en +type = UNICODEPROPERTIES + +[orcid-angular.src-locale-properties-side-bar-side-bar-en-properties--transifex] +file_filter = src/locale/properties/side-bar/side-bar..properties +minimum_perc = 0 +source_file = src/locale/properties/side-bar/side-bar.en.properties +source_lang = en +type = UNICODEPROPERTIES + +[orcid-angular.src-locale-properties-works-works-en-properties--transifex] +file_filter = src/locale/properties/works/works..properties +minimum_perc = 0 +source_file = src/locale/properties/works/works.en.properties +source_lang = en +type = UNICODEPROPERTIES diff --git a/cypress/integration/my-orcid/my-orcid-affiliations.e2e.js b/cypress/integration/my-orcid/my-orcid-affiliations.e2e.js index fbf8bd8a28..48b12c0568 100644 --- a/cypress/integration/my-orcid/my-orcid-affiliations.e2e.js +++ b/cypress/integration/my-orcid/my-orcid-affiliations.e2e.js @@ -1,7 +1,8 @@ /// +const runInfo = require('../../helpers/runInfo') -describe.only('Affiliations' + runInfo(), () => { - describe.only('Employment' + runInfo(), () => { +describe('Affiliations' + runInfo(), () => { + describe('Employment' + runInfo(), () => { it('show an option to add more items', () => {}) it('show an option to edit items', () => {}) it('display a user with no items', () => { @@ -42,10 +43,10 @@ describe.only('Affiliations' + runInfo(), () => { }) // REPEAT ALL THE SAME TESTs for the following - describe.only('Distinction' + runInfo(), () => {}) - describe.only('Qualification' + runInfo(), () => {}) - describe.only('Membership' + runInfo(), () => {}) - describe.only('Service' + runInfo(), () => {}) - describe.only('Education' + runInfo(), () => {}) - describe.only('Invited Position' + runInfo(), () => {}) + describe('Distinction' + runInfo(), () => {}) + describe('Qualification' + runInfo(), () => {}) + describe('Membership' + runInfo(), () => {}) + describe('Service' + runInfo(), () => {}) + describe('Education' + runInfo(), () => {}) + describe('Invited Position' + runInfo(), () => {}) }) diff --git a/cypress/integration/my-orcid/my-orcid-funding.e2e.js b/cypress/integration/my-orcid/my-orcid-funding.e2e.js index b8e50b96e7..dbc7d00b7e 100644 --- a/cypress/integration/my-orcid/my-orcid-funding.e2e.js +++ b/cypress/integration/my-orcid/my-orcid-funding.e2e.js @@ -3,7 +3,7 @@ import { environment } from '../../cypress.env' const randomUser = require('../../helpers/randomUser') const runInfo = require('../../helpers/runInfo') -describe.only('Funding' + runInfo(), () => { +describe('Funding' + runInfo(), () => { before(() => { cy.programmaticSignin('testUser') }) diff --git a/cypress/integration/my-orcid/my-orcid-main-bar.e2e.js b/cypress/integration/my-orcid/my-orcid-main-bar.e2e.js index f0eaf7e5fd..7ec852cc8c 100644 --- a/cypress/integration/my-orcid/my-orcid-main-bar.e2e.js +++ b/cypress/integration/my-orcid/my-orcid-main-bar.e2e.js @@ -13,7 +13,7 @@ Cypress.Commands.add( .trigger('mouseup', { force: true }) } ) -describe.only('My Orcid main bar' + runInfo(), () => { +describe('My Orcid main bar' + runInfo(), () => { before(() => { cy.programmaticSignin('testUser') }) diff --git a/cypress/integration/my-orcid/my-orcid-side-bar-keywords.e2e.js b/cypress/integration/my-orcid/my-orcid-side-bar-keywords.e2e.js index e787ed5a50..624669e55d 100644 --- a/cypress/integration/my-orcid/my-orcid-side-bar-keywords.e2e.js +++ b/cypress/integration/my-orcid/my-orcid-side-bar-keywords.e2e.js @@ -17,7 +17,7 @@ Cypress.Commands.add( .trigger('mouseup', { force: true }) } ) -describe.only('My Orcid sidebar - Keywords' + runInfo(), () => { +describe('My Orcid sidebar - Keywords' + runInfo(), () => { before(() => { cy.programmaticSignin('testUser') }) @@ -39,7 +39,7 @@ describe.only('My Orcid sidebar - Keywords' + runInfo(), () => { }) it('display a user with no items', () => { cy.get('#keywords-panel').within(() => { - cy.get('[body=""]').should('not.exist') + cy.get('.body').get('.line').should('not.exist') }) }) it('add item and display it with default privacy', () => { @@ -59,7 +59,7 @@ describe.only('My Orcid sidebar - Keywords' + runInfo(), () => { .wait(1000) .get('#keywords-panel') .within(() => { - cy.get('[body=""]') + cy.get('.body') .children() .should('have.length', 1) .get('app-panel-privacy') @@ -71,7 +71,7 @@ describe.only('My Orcid sidebar - Keywords' + runInfo(), () => { }) .get('#keywords-panel') .within(() => { - cy.get('[body=""]') + cy.get('.body') .children() .should('have.length', 1) .get('.line') @@ -89,9 +89,9 @@ describe.only('My Orcid sidebar - Keywords' + runInfo(), () => { .get('#save-keywords-button') .click() .wait(1000) - .get('#countries-panel') + .get('#keywords-panel') .within(() => { - cy.get('[body=""]').should('not.exist') + cy.get('.body').get('.line').should('not.exist') }) }) it('add multiple keywords', () => { @@ -126,8 +126,8 @@ describe.only('My Orcid sidebar - Keywords' + runInfo(), () => { cy.contains('Keyword1') cy.contains('Keyword2') cy.contains('Keyword3') - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 3) .get('app-panel-privacy') .should( @@ -146,15 +146,17 @@ describe.only('My Orcid sidebar - Keywords' + runInfo(), () => { cy.get('#edit-button').click() }) .get('#modal-container') - .get('.public-button') - .click({ multiple: true }) - .get('#save-keywords-button') - .click() - .wait(1000) + .within(() => { + cy.get('.public-button') + .click({ multiple: true }) + .get('#save-keywords-button') + .click() + .wait(1000) + }) .get('#keywords-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 3) .get('app-panel-privacy') .should('have.attr', 'aria-label', 'PUBLIC') @@ -166,15 +168,17 @@ describe.only('My Orcid sidebar - Keywords' + runInfo(), () => { cy.get('#edit-button').click() }) .get('#modal-container') - .get('.private-button') - .click({ multiple: true }) - .get('#cancel-keywords-button') - .click() - .wait(1000) + .within(() => { + cy.get('.private-button') + .click({ multiple: true }) + .get('#cancel-keywords-button') + .click() + .wait(1000) + }) .get('#keywords-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 3) .get('app-panel-privacy') .should('have.attr', 'aria-label', 'PUBLIC') diff --git a/cypress/integration/my-orcid/my-orcid-side-bar.e2e.js b/cypress/integration/my-orcid/my-orcid-side-bar.e2e.js index 5569021f3e..9e6bac9393 100644 --- a/cypress/integration/my-orcid/my-orcid-side-bar.e2e.js +++ b/cypress/integration/my-orcid/my-orcid-side-bar.e2e.js @@ -17,7 +17,7 @@ Cypress.Commands.add( .trigger('mouseup', { force: true }) } ) -describe.only('My Orcid sidebar' + runInfo(), () => { +describe('My Orcid sidebar' + runInfo(), () => { before(() => { cy.programmaticSignin('testUser') }) @@ -30,13 +30,13 @@ describe.only('My Orcid sidebar' + runInfo(), () => { describe('Orcid id', () => { it('display the users Orcid', () => { cy.get('app-side-bar-id ').within(() => { + cy.contains(`${environment.baseUrl}`) cy.contains(environment.testUser.id) - cy.contains(`https:${environment.baseUrl}/${environment.testUser.id}`) }) }) it('display url to navigate to the public page view', () => {}) }) - describe.only('Emails' + runInfo(), () => { + describe('Emails' + runInfo(), () => { before(() => { cy.cleanEmails() cy.visit(`${environment.baseUrl}/qa/my-orcid`) @@ -50,7 +50,7 @@ describe.only('My Orcid sidebar' + runInfo(), () => { it('display a user with only a primary email "unverified"', () => { cy.get('#emails-panel').within(() => { - cy.get('[body=""]').children().should('have.length', 1) + cy.get('.body').get('.line').should('have.length', 1) }) }) it('display a user with only a primary email "verified"', () => {}) @@ -76,8 +76,8 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .click() .get('#emails-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 2) .get('app-panel-privacy') .eq(1) @@ -97,7 +97,7 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .wait(2000) .get('#emails-panel') .within(() => { - cy.get('[body=""]').children().should('have.length', 1) + cy.get('.body').get('.line').should('have.length', 1) }) }) @@ -131,7 +131,7 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .click() .get('#emails-panel') .within(() => { - cy.get('[body=""]').children().should('have.length', 5) + cy.get('.body').get('.line').should('have.length', 5) }) }) @@ -147,8 +147,8 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .click() .get('#emails-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 5) .get('app-panel-privacy') .should('have.attr', 'aria-label', 'PUBLIC') @@ -183,14 +183,14 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .click() .get('#emails-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 5) .get('app-panel-privacy') .should('have.attr', 'aria-label', 'PUBLIC') }) }) - it.only('open the terms of use on a separate window ', () => { + it('open the terms of use on a separate window ', () => { cy.get('#emails-panel') .within(() => { cy.get('#edit-button').click() @@ -199,6 +199,8 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .within(() => { cy.get('a ').should('have.attr', 'target', '_blank') }) + .get('#cancel-emails-button') + .click() }) }) }) @@ -214,7 +216,7 @@ describe.only('My Orcid sidebar' + runInfo(), () => { }) it('display a user with no items', () => { cy.get('#websites-panel').within(() => { - cy.get('[body=""]').should('not.exist') + cy.get('.body').get('.line').should('not.exist') }) }) it('add items and display those with default privacy', () => { @@ -223,20 +225,22 @@ describe.only('My Orcid sidebar' + runInfo(), () => { cy.get('#edit-button').click() }) .get('#modal-container') - .get('#add-link') - .click() - .get('#description-input') - .click() - .type(description, { delay: 0 }) - .get('#url-input') - .click() - .type(website, { delay: 0 }) - .get('#save-websites-button') - .click() + .within(() => { + cy.get('#add-link') + .click() + .get('#description-input') + .click() + .type(description, { delay: 0 }) + .get('#url-input') + .click() + .type(website, { delay: 0 }) + .get('#save-websites-button') + .click() + }) .get('#websites-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 1) .get('app-panel-privacy') .should( @@ -252,14 +256,16 @@ describe.only('My Orcid sidebar' + runInfo(), () => { cy.get('#edit-button').click() }) .get('#modal-container') - .get('#delete-button') - .click() - .get('#save-websites-button') - .click() - .wait(2000) + .within(() => { + cy.get('#delete-button') + .click() + .get('#save-websites-button') + .click() + .wait(2000) + }) .get('#websites-panel') .within(() => { - cy.get('[body=""]').should('not.exist') + cy.get('.body').get('.line').should('not.exist') }) }) it('add multiple websites', () => { @@ -268,44 +274,46 @@ describe.only('My Orcid sidebar' + runInfo(), () => { cy.get('#edit-button').click() }) .get('#modal-container') - .get('#add-link') - .click() - .get('.mat-form-field-flex') - .eq(0) - .click({ multiple: true }) - .type('Description Website 1', { delay: 0 }) - .get('.mat-form-field-flex') - .eq(1) - .click({ multiple: true }) - .type('https://orcid.org', { delay: 0 }) - .get('#add-link') - .click() - .get('.mat-form-field-flex') - .click({ multiple: true }) - .get('.mat-form-field-flex') - .eq(2) - .click() - .type('Description Website 2', { delay: 0 }) - .get('.mat-form-field-flex') - .eq(3) - .click({ multiple: true }) - .type('https://sandbox.orcid.org', { delay: 0 }) - .get('#add-link') - .click() - .get('.mat-form-field-flex') - .eq(4) - .click() - .type('Description Website 3', { delay: 0 }) - .get('.mat-form-field-flex') - .eq(5) - .click() - .type('https://qa.orcid.org', { delay: 0 }) - .get('#save-websites-button') - .click() + .within(() => { + cy.get('#add-link') + .click() + .get('.mat-form-field-flex') + .eq(0) + .click({ multiple: true }) + .type('Description Website 1', { delay: 0 }) + .get('.mat-form-field-flex') + .eq(1) + .click({ multiple: true }) + .type('https://orcid.org', { delay: 0 }) + .get('#add-link') + .click() + .get('.mat-form-field-flex') + .click({ multiple: true }) + .get('.mat-form-field-flex') + .eq(2) + .click() + .type('Description Website 2', { delay: 0 }) + .get('.mat-form-field-flex') + .eq(3) + .click({ multiple: true }) + .type('https://sandbox.orcid.org', { delay: 0 }) + .get('#add-link') + .click() + .get('.mat-form-field-flex') + .eq(4) + .click() + .type('Description Website 3', { delay: 0 }) + .get('.mat-form-field-flex') + .eq(5) + .click() + .type('https://qa.orcid.org', { delay: 0 }) + .get('#save-websites-button') + .click() + }) .get('#websites-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 3) .get('app-panel-privacy') .should( @@ -324,14 +332,16 @@ describe.only('My Orcid sidebar' + runInfo(), () => { cy.get('#edit-button').click() }) .get('#modal-container') - .get('.public-button') - .click({ multiple: true }) - .get('#save-websites-button') - .click() + .within(() => { + cy.get('.public-button') + .click({ multiple: true }) + .get('#save-websites-button') + .click() + }) .get('#websites-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 3) .get('app-panel-privacy') .should('have.attr', 'aria-label', 'PUBLIC') @@ -343,14 +353,16 @@ describe.only('My Orcid sidebar' + runInfo(), () => { cy.get('#edit-button').click() }) .get('#modal-container') - .get('.private-button') - .click({ multiple: true }) - .get('#cancel-websites-button') - .click() + .within(() => { + cy.get('.private-button') + .click({ multiple: true }) + .get('#cancel-websites-button') + .click() + }) .get('#websites-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 3) .get('app-panel-privacy') .should('have.attr', 'aria-label', 'PUBLIC') @@ -370,7 +382,7 @@ describe.only('My Orcid sidebar' + runInfo(), () => { }) it('display a user with no items', () => { cy.get('#countries-panel').within(() => { - cy.get('[body=""]').should('not.exist') + cy.get('.body').get('.line').should('not.exist') }) }) it('add items and display those with default privacy', () => { @@ -389,8 +401,8 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .click() .get('#countries-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 1) .get('app-panel-privacy') .should( @@ -413,7 +425,7 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .wait(2000) .get('#countries-panel') .within(() => { - cy.get('[body=""]').should('not.exist') + cy.get('.body').get('.line').should('not.exist') }) // Expect changes to be display outside and inside of the modal @@ -452,8 +464,8 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .click() .get('#countries-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 3) .get('app-panel-privacy') .should( @@ -478,8 +490,8 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .click() .get('#countries-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 3) .get('app-panel-privacy') .should('have.attr', 'aria-label', 'PUBLIC') @@ -499,8 +511,8 @@ describe.only('My Orcid sidebar' + runInfo(), () => { .click() .get('#countries-panel') .within(() => { - cy.get('[body=""]') - .children() + cy.get('.body') + .get('.line') .should('have.length', 3) .get('app-panel-privacy') .should('have.attr', 'aria-label', 'PUBLIC') diff --git a/cypress/support/clean.commands.js b/cypress/support/clean.commands.js index 2bfa027cd4..af41a979c0 100644 --- a/cypress/support/clean.commands.js +++ b/cypress/support/clean.commands.js @@ -132,11 +132,33 @@ Cypress.Commands.add('cleanKeywords', () => { }) }) +Cypress.Commands.add('cleanWebsites', () => { + cy.getCookie('XSRF-TOKEN').then((cookie) => { + cy.request({ + method: 'POST', + url: '/my-orcid/websitesForms.json', // baseUrl is prepended to url + body: { + errors: [], + websites: [], + visibility: { + errors: [], + required: true, + getRequiredMessage: null, + visibility: 'LIMITED', + }, + }, + headers: { + 'X-XSRF-TOKEN': cookie.value, + }, + }) + }) +}) + Cypress.Commands.add('cleanPersonalIdentifiers', () => { cy.getCookie('XSRF-TOKEN').then((cookie) => { cy.request({ method: 'POST', - url: '/account/emails.json', // baseUrl is prepended to url + url: '/my-orcid/externalIdentifiers.json', // baseUrl is prepended to url body: { errors: [], externalIdentifiers: [], diff --git a/guides/example-tx-config.yml b/guides/example-tx-config.yml index 5915288d88..cd7e960886 100644 --- a/guides/example-tx-config.yml +++ b/guides/example-tx-config.yml @@ -1,6 +1,3 @@ -## This file is a backup copy of the configuration file of transifex. -## it does not affect the functionality of the integration here in any way. - # filters: - filter_type: file @@ -163,3 +160,27 @@ filters: source_file: src/locale/properties/research-resources/research-resources.en.properties # path expression to translation files, must contain placeholder translation_files_expression: src/locale/properties/research-resources/research-resources..properties + + - filter_type: file + # all supported i18n types: https://docs.transifex.com/formats + file_format: UNICODEPROPERTIES + source_language: en + source_file: src/locale/properties/funding/funding.en.properties + # path expression to translation files, must contain placeholder + translation_files_expression: src/locale/properties/funding/funding..properties + + - filter_type: file + # all supported i18n types: https://docs.transifex.com/formats + file_format: UNICODEPROPERTIES + source_language: en + source_file: src/locale/properties/works/works.en.properties + # path expression to translation files, must contain placeholder + translation_files_expression: src/locale/properties/works/works..properties + + - filter_type: file + # all supported i18n types: https://docs.transifex.com/formats + file_format: UNICODEPROPERTIES + source_language: en + source_file: src/locale/properties/side-bar/side-bar.en.properties + # path expression to translation files, must contain placeholder + translation_files_expression: src/locale/properties/side-bar/side-bar..properties diff --git a/package-lock.json b/package-lock.json index b46e24583b..687f67bf9f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2481,6 +2481,11 @@ } } }, + "@orcid/bibtex-parse-js": { + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/@orcid/bibtex-parse-js/-/bibtex-parse-js-0.0.25.tgz", + "integrity": "sha512-n6VuG5/WjiifC1DoUzq0sUCWNSbAyRZznBgvPcY4jVZ/2eJiMv2tNUAt2NukbnFExOUa0RyTOFsqhH2MGpiLgQ==" + }, "@phenomnomnominal/tsquery": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz", @@ -18687,9 +18692,9 @@ } }, "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", "dev": true, "requires": { "querystringify": "^2.1.1", diff --git a/package.json b/package.json index d2c51d33e6..a656c34aa2 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,7 @@ "@angular/router": "^11.2.5", "@angular/service-worker": "^11.2.5", "@material-extended/mde": "^3.0.0", + "@orcid/bibtex-parse-js": "0.0.25", "@types/gtag.js": "^0.0.3", "browserslist": "^4.16.5", "browserslist-useragent-regexp": "^2.0.1", diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 8929b441e4..d76931f7f2 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -89,7 +89,7 @@ const routes: Routes = [ import('./search/search.module').then((m) => m.SearchModule), }, { - path: ApplicationRoutes.myOrcidTEMP, + path: ApplicationRoutes.myOrcid, canActivateChild: [LanguageGuard, AuthenticatedGuard], loadChildren: () => import('./record/record.module').then((m) => m.RecordModule), diff --git a/src/app/authorize/components/form-authorize/form-authorize.component.ts b/src/app/authorize/components/form-authorize/form-authorize.component.ts index 2793876886..2886b5a84f 100644 --- a/src/app/authorize/components/form-authorize/form-authorize.component.ts +++ b/src/app/authorize/components/form-authorize/form-authorize.component.ts @@ -4,6 +4,7 @@ import { forkJoin, Observable, Subject } from 'rxjs' import { switchMap, take, takeUntil, map, catchError } from 'rxjs/operators' import { PlatformInfoService } from 'src/app/cdk/platform-info' import { WINDOW } from 'src/app/cdk/window' +import { ApplicationRoutes } from 'src/app/constants' import { UserService } from 'src/app/core' import { ErrorHandlerService } from 'src/app/core/error-handler/error-handler.service' import { GoogleAnalyticsService } from 'src/app/core/google-analytics/google-analytics.service' @@ -64,7 +65,7 @@ export class FormAuthorizeComponent implements OnInit, OnDestroy { .get() .pipe(take(1)) .subscribe((platform) => - this._router.navigate(['/signin'], { + this._router.navigate([ApplicationRoutes.signin], { queryParams: platform.queryParameters, }) ) @@ -83,8 +84,8 @@ export class FormAuthorizeComponent implements OnInit, OnDestroy { .singOut() .pipe(switchMap(() => this._platformInfo.get().pipe(take(1)))) .subscribe((platform) => { - this._router.navigate(['/signin'], { - queryParams: platform.queryParameters, + this._router.navigate([ApplicationRoutes.signin], { + queryParams: { ...platform.queryParameters }, }) }) } diff --git a/src/app/cdk/modal/modal-footer/modal-footer.component.html b/src/app/cdk/modal/modal-footer/modal-footer.component.html index 6a85a17dee..e65b5c491d 100644 --- a/src/app/cdk/modal/modal-footer/modal-footer.component.html +++ b/src/app/cdk/modal/modal-footer/modal-footer.component.html @@ -1,3 +1,3 @@ -
+
diff --git a/src/app/cdk/modal/modal-footer/modal-footer.component.scss b/src/app/cdk/modal/modal-footer/modal-footer.component.scss index b47dc28b59..72fe6de068 100644 --- a/src/app/cdk/modal/modal-footer/modal-footer.component.scss +++ b/src/app/cdk/modal/modal-footer/modal-footer.component.scss @@ -2,7 +2,7 @@ border-top: solid 1px; background-color: black; width: 100%; - height: 72px; + min-height: 72px; } .container { @@ -12,6 +12,18 @@ padding: 0 16px 0 16px; } +.handset.container { + flex-direction: column; + align-items: self-start; + padding: 10 px; + height: auto; + min-height: 100px; + ::ng-deep button { + margin-top: 10px; + margin-bottom: 10px; + } +} + :host ::ng-deep .container > button { margin-inline-end: 32px; } diff --git a/src/app/cdk/modal/modal-footer/modal-footer.component.ts b/src/app/cdk/modal/modal-footer/modal-footer.component.ts index cfa4f7e806..d51704344f 100644 --- a/src/app/cdk/modal/modal-footer/modal-footer.component.ts +++ b/src/app/cdk/modal/modal-footer/modal-footer.component.ts @@ -1,4 +1,7 @@ import { Component, OnInit } from '@angular/core' +import { Subject } from 'rxjs' +import { takeUntil } from 'rxjs/operators' +import { PlatformInfoService } from '../../platform-info' @Component({ selector: 'app-modal-footer', @@ -9,7 +12,22 @@ import { Component, OnInit } from '@angular/core' ], }) export class ModalFooterComponent implements OnInit { - constructor() {} + handset: boolean + screenDirection: string + constructor(private _platform: PlatformInfoService) {} + $destroy: Subject = new Subject() - ngOnInit(): void {} + ngOnInit(): void { + this._platform + .get() + .pipe(takeUntil(this.$destroy)) + .subscribe((platform) => { + this.handset = platform.columns4 || platform.columns8 + this.screenDirection = platform.screenDirection + }) + } + ngOnDestroy(): void { + this.$destroy.next() + this.$destroy.unsubscribe() + } } diff --git a/src/app/cdk/modal/modal-header/modal-header.component.html b/src/app/cdk/modal/modal-header/modal-header.component.html index 838b84fb93..c1c206e305 100644 --- a/src/app/cdk/modal/modal-header/modal-header.component.html +++ b/src/app/cdk/modal/modal-header/modal-header.component.html @@ -1,6 +1,12 @@
-
- +
+
- +
+ + +
+ +
@@ -131,6 +138,7 @@ class="orc-font-body-small" [attr.aria-label]="labelSortButton" [matMenuTriggerFor]="menu" + [disabled]="!currentAmount && !total" > sort Sort @@ -159,6 +167,11 @@
+
diff --git a/src/app/cdk/panel/panels/panels.component.scss b/src/app/cdk/panel/panels/panels.component.scss index 3db9955480..684882e5e8 100644 --- a/src/app/cdk/panel/panels/panels.component.scss +++ b/src/app/cdk/panel/panels/panels.component.scss @@ -9,8 +9,8 @@ justify-content: space-between; align-items: center; min-height: 56px; - padding-left: 14px; - padding-right: 14px; + padding-inline-start: 8px; + padding-inline-end: 16px; border-radius: 4px; .text-container, .inline-initial-side { diff --git a/src/app/cdk/panel/panels/panels.component.ts b/src/app/cdk/panel/panels/panels.component.ts index c1122f644f..fa9652739f 100644 --- a/src/app/cdk/panel/panels/panels.component.ts +++ b/src/app/cdk/panel/panels/panels.component.ts @@ -4,13 +4,15 @@ import { ComponentType } from '@angular/cdk/portal' import { MatDialog } from '@angular/material/dialog' import { PlatformInfoService } from '../../platform-info' import { SortData, SortOrderDirection, SortOrderType } from 'src/app/types/sort' -import { ADD_EVENT_ACTION } from 'src/app/constants' +import { ADD_EVENT_ACTION, EXTERNAL_ID_TYPE_WORK } from 'src/app/constants' import { ModalAffiliationsComponent } from '../../../record/components/affiliation-stacks-groups/modals/modal-affiliations/modal-affiliations.component' import { ModalFundingComponent } from '../../../record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component' import { AffiliationType } from 'src/app/types/record-affiliation.endpoint' import { ModalPeerReviewsComponent } from '../../../record/components/peer-review-stacks-groups/modals/modal-peer-reviews/modal-peer-reviews.component' -import { ModalWorksSearchLinkComponent } from '../../../record/components/work-stack-group/modals/modal-works-search-link.component' import { ModalFundingSearchLinkComponent } from '../../../record/components/funding-stacks-groups/modals/modal-funding-search-link/modal-funding-search-link.component' +import { ModalWorksSearchLinkComponent } from '../../../record/components/work-stack-group/modals/work-search-link-modal/modal-works-search-link.component' +import { VerificationEmailModalService } from '../../../core/verification-email-modal/verification-email-modal.service' +import { UserRecord } from '../../../types/record.local' @Component({ selector: 'app-panels', @@ -18,7 +20,9 @@ import { ModalFundingSearchLinkComponent } from '../../../record/components/fund styleUrls: ['./panels.component.scss', './panels.component.scss-theme.scss'], }) export class PanelsComponent implements OnInit { + @Input() loading = false @Input() expandedContent = true + @Output() expandedContentChange: EventEmitter = new EventEmitter() @Input() title @Input() type: | 'employment' @@ -34,11 +38,11 @@ export class PanelsComponent implements OnInit { | 'sub-peer-review' | 'funding' | 'research-resources' = 'activities' + @Input() userRecord: UserRecord @Input() currentAmount @Input() total @Input() isPublicRecord: any = false @Input() selectable = false - @Output() expanded: EventEmitter = new EventEmitter() @Input() sortTypes: SortOrderType[] = ['title', 'start', 'end'] @Input() sortType: SortOrderType = 'end' @Input() sortDirection: SortOrderDirection = 'desc' @@ -51,6 +55,7 @@ export class PanelsComponent implements OnInit { action: ADD_EVENT_ACTION label: string modal?: ComponentType + type?: EXTERNAL_ID_TYPE_WORK }[] = [] @Input() labelAddButton = $localize`:@@shared.sortItems:Sort Items` @@ -59,13 +64,14 @@ export class PanelsComponent implements OnInit { constructor( private _dialog: MatDialog, - private _platform: PlatformInfoService + private _platform: PlatformInfoService, + private _verificationEmailModalService: VerificationEmailModalService ) {} add(type: string, action?: ADD_EVENT_ACTION) { const menuOption = this.addMenuOptions.find((x) => x.action === action) if (menuOption && menuOption.modal) { - this.openModal(menuOption.modal, type) + this.openModal(menuOption.modal, { ...menuOption, type: menuOption.type }) } else { switch (type) { case 'employment': @@ -75,7 +81,7 @@ export class PanelsComponent implements OnInit { case 'distinction': case 'membership': case 'service': - this.openModal(ModalAffiliationsComponent, type) + this.openModal(ModalAffiliationsComponent, { type }) break case 'peer-review': this.openModal(ModalPeerReviewsComponent) @@ -95,19 +101,33 @@ export class PanelsComponent implements OnInit { } } - openModal(modal: ComponentType, type?: string | AffiliationType) { - this._platform - .get() - .pipe(first()) - .subscribe((platform) => { - let modalComponent - modalComponent = this._dialog.open(modal, { - width: '850px', - maxWidth: platform.tabletOrHandset ? '95vw' : '80vw', - }) + openModal( + modal: ComponentType, + options?: { + type?: string | AffiliationType | EXTERNAL_ID_TYPE_WORK + } + ) { + const primaryEmail = this.userRecord?.emails?.emails?.find( + (email) => email.primary + ) + if (primaryEmail && !primaryEmail.verified) { + this._verificationEmailModalService.openVerificationEmailModal( + primaryEmail.value + ) + } else { + this._platform + .get() + .pipe(first()) + .subscribe((platform) => { + let modalComponent + modalComponent = this._dialog.open(modal, { + width: '850px', + maxWidth: platform.tabletOrHandset ? '99%' : '80vw', + }) - modalComponent.componentInstance.type = type - }) + modalComponent.componentInstance.type = options?.type + }) + } } sortChange(by: SortOrderType) { @@ -126,7 +146,7 @@ export class PanelsComponent implements OnInit { } collapse() { this.expandedContent = !this.expandedContent - this.expanded.emit(this.expandedContent) + this.expandedContentChange.emit(this.expandedContent) } multipleMatButton() { diff --git a/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.html b/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.html index 98ea6fc45d..3eb96b71a2 100644 --- a/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.html +++ b/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.html @@ -1,4 +1,4 @@ -
+
+
+
+

+ Who can see this? +

+
+ +

Everyone

+
+
+ +

Trusted parties

+
+
+ +

Only me

+
+ + + More information on + +
+ + visibility settings + +
+
+
diff --git a/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.scss b/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.scss index 117b711670..2784769563 100644 --- a/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.scss +++ b/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.scss @@ -1,4 +1,9 @@ +:host { + position: relative; +} + .panel { + position: relative; border-radius: 50px; display: flex; height: 40px; @@ -13,3 +18,51 @@ button { width: 32px; line-height: 0px; } + +.hide { + display: none; +} + +.privacy-selector { + position: absolute; + width: 152px; + height: auto; + bottom: 110%; + left: 50%; + margin-left: -90px; + overflow: hidden; + -moz-transition: height 450ms; + z-index: 2; + -webkit-transition: height 450ms; + padding: 8px 16px 16px; + border: solid 1px; + border-radius: 4px; + transition: all 500ms ease-in-out; + + div { + align-items: center; + } + + p { + margin: 8px 8px 12px 8px; + } +} + +.privacy-selector.start { + left: unset; + margin: unset; +} + +.privacy-selector.bottom { + bottom: unset; + left: unset; + margin: unset; +} + +.panel:hover + .hide { + display: block; +} + +div.hide:hover { + display: block; +} diff --git a/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.scss-theme.scss b/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.scss-theme.scss index d7b0b43d70..1b76518f2a 100644 --- a/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.scss-theme.scss +++ b/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.scss-theme.scss @@ -10,6 +10,9 @@ .panel { background-color: map-get($background, light-grey); } + .panel.white-background { + background-color: mat-color($foreground, text-light-high); + } ::ng-deep .no-selected svg > g, ::ng-deep .no-selected svg > path { fill: map-get($background, ui-background); @@ -22,14 +25,19 @@ background-color: map-get($foreground, text-light-high); } - ::ng-deep .panel button.private-button.selected { + ::ng-deep button.private-button.selected { background-color: map-get($foreground, visibility-private); } - ::ng-deep .panel button.limited-button.selected { + ::ng-deep button.limited-button.selected { background-color: map-get($foreground, visibility-trusted); } - ::ng-deep .panel button.public-button.selected { + ::ng-deep button.public-button.selected { background-color: map-get($foreground, visibility-everyone); } + + .privacy-selector { + background-color: map-get($foreground, 'text-light-high'); + border-color: mat-color($background, ui-background); + } } @include privacy-selector-theme($orcid-app-theme); diff --git a/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.ts b/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.ts index ff8b489a91..b21e620908 100644 --- a/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.ts +++ b/src/app/cdk/privacy-selector/privacy-selector/privacy-selector.component.ts @@ -26,6 +26,7 @@ import { VisibilityStrings } from 'src/app/types/common.endpoint' export class PrivacySelectorComponent implements OnInit, ControlValueAccessor { private onChange: (value: string) => void private onTouched: (value: string) => void + @Input() whiteBackground = false _privacy: VisibilityStrings @@ -35,6 +36,7 @@ export class PrivacySelectorComponent implements OnInit, ControlValueAccessor { get privacy(): VisibilityStrings { return this._privacy } + @Input() alignment: 'start' | 'bottom' = null privacyChange = new EventEmitter() constructor() {} diff --git a/src/app/cdk/side-bar/modals/modal-country/modal-country.component.html b/src/app/cdk/side-bar/modals/modal-country/modal-country.component.html index c7f9473935..6bc0744adc 100644 --- a/src/app/cdk/side-bar/modals/modal-country/modal-country.component.html +++ b/src/app/cdk/side-bar/modals/modal-country/modal-country.component.html @@ -28,7 +28,7 @@

Add countries to your ORCID record to highlight where you conduct your @@ -39,75 +39,79 @@

-

+

My countries

+
-
- +
+
+
+ - - - - {{ countryCode.key }} - - - - Source: - {{ getSourceName(countriesMap[country.putCode]) }}, - Created: - {{ - countriesMap[country.putCode].createdDate - | monthDayYearDateToString - }} - - -
-
- - + + + + {{ countryCode.key }} + + + + + + +
+
+ + +
+
diff --git a/src/app/cdk/side-bar/modals/modal-country/modal-country.component.scss b/src/app/cdk/side-bar/modals/modal-country/modal-country.component.scss index 67e2dcbd30..f473bfa697 100644 --- a/src/app/cdk/side-bar/modals/modal-country/modal-country.component.scss +++ b/src/app/cdk/side-bar/modals/modal-country/modal-country.component.scss @@ -1,26 +1,20 @@ -.cdk-drag-placeholder { - opacity: 0; -} - .actions-wrapper { flex-wrap: nowrap; } -.cdk-drag-placeholder { - opacity: 0; -} - -::ng-deep .cdk-drag-animating { +.country-list.cdk-drop-list-dragging .country-box:not(.cdk-drag-placeholder) { transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); } .country-input-line { - margin-top: 20px; + margin-top: 10px; + margin-bottom: 4px; img { margin-top: 6px; cursor: move; z-index: 1; - margin-inline-end: 18px; + margin-inline-start: 6px; + margin-inline-end: 10px; } } @@ -41,18 +35,20 @@ } } -::ng-deep .cdk-drop-list-dragging { - cursor: move !important; - .mat-form-field-flex, - .mat-select-trigger, - .mat-button, - .mat-icon-button, - .mat-stroked-button, - .mat-flat-button { - cursor: move !important; - } -} - app-privacy-selector { min-width: 180px; } + +::ng-deep .columns-4-or-8 { + .country-input-line .input-container { + padding-bottom: 30px; + } + + .country-input-line .actions-wrapper { + padding-bottom: 10px; + justify-content: space-between; + } + .actions-wrapper { + width: 100%; + } +} diff --git a/src/app/cdk/side-bar/modals/modal-country/modal-country.component.ts b/src/app/cdk/side-bar/modals/modal-country/modal-country.component.ts index 6bcc6b7533..76e694ee1a 100644 --- a/src/app/cdk/side-bar/modals/modal-country/modal-country.component.ts +++ b/src/app/cdk/side-bar/modals/modal-country/modal-country.component.ts @@ -41,6 +41,7 @@ export class ModalCountryComponent implements OnInit, OnDestroy { private _platform: PlatformInfoService ) {} + id: string addedEmailsCount = 0 countryForm: FormGroup countries: Address[] @@ -104,7 +105,10 @@ export class ModalCountryComponent implements OnInit, OnDestroy { countries.forEach((country) => { group[country.putCode] = new FormGroup({ - country: new FormControl(country.countryName), + country: new FormControl({ + value: country.countryName, + disabled: country.source !== this.id, + }), visibility: new FormControl(country.visibility.visibility, {}), }) }) @@ -122,11 +126,11 @@ export class ModalCountryComponent implements OnInit, OnDestroy { this.countries .map((value) => value.putCode) // Clear empty inputs - .filter((key) => countryForm.value[key].country) + .filter((key) => countryForm.getRawValue()[key].country) .forEach((key, i) => { - const countryName = countryForm.value[key].country - const visibility = countryForm.value[key].visibility - if (countryForm.value[key]) { + const countryName = countryForm.getRawValue()[key].country + const visibility = countryForm.getRawValue()[key].visibility + if (countryForm.getRawValue()[key]) { countries.addresses.push({ putCode: key.indexOf('new-') === 0 ? null : key, countryName, @@ -181,10 +185,6 @@ export class ModalCountryComponent implements OnInit, OnDestroy { this.countryForm.removeControl(putcode) } - getSourceName(address: Address) { - return address.sourceName || address.source - } - ngOnDestroy() { this.$destroy.next(true) this.$destroy.unsubscribe() diff --git a/src/app/cdk/side-bar/modals/modal-email/modal-email.component.html b/src/app/cdk/side-bar/modals/modal-email/modal-email.component.html index 08c15f8aad..5c5c16ad3b 100644 --- a/src/app/cdk/side-bar/modals/modal-email/modal-email.component.html +++ b/src/app/cdk/side-bar/modals/modal-email/modal-email.component.html @@ -1,11 +1,10 @@ - Emails + Emails
-

- Other email address +

+ Other email addresses

@@ -191,6 +243,7 @@

[ngClass]="{ 'email-activated': showEmailAsVerified(email.putCode) }" + *ngIf="!showEmailAsVerified(email.putCode)" > " i18n="@@side-bar.additionalEmailsDuplicate" > - Additional emails can not be duplicated + Additional emails cannot be duplicated + + + An email is required This email is already associated with an ORCID record. + +

-
- + + +
+
+ info +
+
+

+ Adding additional email addresses is not allowed when you are managing + another ORCID record. +

+
+
diff --git a/src/app/cdk/side-bar/modals/modal-email/modal-email.component.scss b/src/app/cdk/side-bar/modals/modal-email/modal-email.component.scss index b7604adbaa..b87544a05b 100644 --- a/src/app/cdk/side-bar/modals/modal-email/modal-email.component.scss +++ b/src/app/cdk/side-bar/modals/modal-email/modal-email.component.scss @@ -1,3 +1,15 @@ +.row .col { + padding-inline-start: 0; +} + +.orcid-works-best { + margin-bottom: 16px; +} + +.terms-of-use { + margin-top: 0; +} + .add-more-email { display: flex; align-items: center; @@ -28,25 +40,38 @@ mat-form-field { width: 100%; } } + .privacy-selector { + justify-content: unset; + padding-inline-start: 8px; + } } .primary-email-label { display: flex; align-items: center; + word-break: break-all; mat-icon { + margin-inline-start: 6px; margin-inline-end: 16px; } + mat-icon, + .other-names { + margin-inline-start: 12px; + } } .email-input-line { margin-top: 5px; - margin-bottom: 20px; + margin-bottom: 8px; img { margin-top: 6px; cursor: move; z-index: 1; margin-inline-end: 18px; } + .email-activated { + margin-bottom: 12px; + } } ::ng-deep .columns-4-or-8 .mat-form-field { @@ -83,7 +108,7 @@ mat-form-field { .email-input-container { padding: 0; max-width: 100%; - padding-inline-end: 0px; + padding-inline-end: 0; } .actions-wrapper, @@ -102,3 +127,27 @@ mat-form-field { padding-bottom: 18px !important; } } + +.only-verified { + padding: 0 4px; +} + +.visibility-hidden { + justify-content: end !important; + button { + margin-inline-end: 8px; + } +} + +.info { + padding: 16px; + margin-top: 32px; + border: solid 2px; + border-radius: 4px; + height: 30px; + display: flex; + align-items: center; + p { + margin: 0; + } +} diff --git a/src/app/cdk/side-bar/modals/modal-email/modal-email.component.scss-theme.scss b/src/app/cdk/side-bar/modals/modal-email/modal-email.component.scss-theme.scss index 906dccbdae..bee96fcc9c 100644 --- a/src/app/cdk/side-bar/modals/modal-email/modal-email.component.scss-theme.scss +++ b/src/app/cdk/side-bar/modals/modal-email/modal-email.component.scss-theme.scss @@ -17,6 +17,14 @@ .add-more { color: mat-color($primary, 700); } + + .info { + border-color: mat-color($foreground, 'state-notice-dark') !important; + + mat-icon { + color: mat-color($foreground, 'state-notice-dark') !important; + } + } } @include modal-email-theme($orcid-app-theme); diff --git a/src/app/cdk/side-bar/modals/modal-email/modal-email.component.ts b/src/app/cdk/side-bar/modals/modal-email/modal-email.component.ts index 2b0f0ae033..6996bdc0de 100644 --- a/src/app/cdk/side-bar/modals/modal-email/modal-email.component.ts +++ b/src/app/cdk/side-bar/modals/modal-email/modal-email.component.ts @@ -13,6 +13,7 @@ import { FormGroup, ValidationErrors, ValidatorFn, + Validators, } from '@angular/forms' import { MatDialogRef } from '@angular/material/dialog' import { cloneDeep } from 'lodash' @@ -20,8 +21,14 @@ import { Subject } from 'rxjs' import { first, takeUntil, tap } from 'rxjs/operators' import { ModalComponent } from 'src/app/cdk/modal/modal/modal.component' import { PlatformInfoService } from 'src/app/cdk/platform-info' +import { SnackbarService } from 'src/app/cdk/snackbar/snackbar.service' import { RecordEmailsService } from 'src/app/core/record-emails/record-emails.service' -import { AssertionVisibilityString, EmailsEndpoint } from 'src/app/types' +import { UserInfoService } from 'src/app/core/user-info/user-info.service' +import { + AssertionVisibilityString, + EmailsEndpoint, + UserInfo, +} from 'src/app/types' import { VisibilityStrings } from 'src/app/types/common.endpoint' import { OrcidValidators } from 'src/app/validators' @@ -45,16 +52,22 @@ export class ModalEmailComponent implements OnInit, OnDestroy { defaultVisibility: VisibilityStrings = 'PRIVATE' isMobile: boolean + userInfo: UserInfo constructor( public dialogRef: MatDialogRef, public _recordEmails: RecordEmailsService, private _changeDetectorRef: ChangeDetectorRef, - private _platform: PlatformInfoService + private _platform: PlatformInfoService, + private _snackBar: SnackbarService, + private _userInfo: UserInfoService ) {} tempPrivacyState = 'PUBLIC' ngOnInit(): void { + this._userInfo.getUserInfo().subscribe((config) => { + this.userInfo = config + }) this._platform .get() .pipe(takeUntil(this.$destroy)) @@ -102,11 +115,8 @@ export class ModalEmailComponent implements OnInit, OnDestroy { private formToBackend( emailForm: FormGroup, emails: AssertionVisibilityString[] - ): EmailsEndpoint { - const endpointCall: EmailsEndpoint = { - errors: [], - emails: [], - } + ): AssertionVisibilityString[] { + const allEmails = [] emails .map((email) => email.putCode) @@ -118,14 +128,14 @@ export class ModalEmailComponent implements OnInit, OnDestroy { const primary = emails[i].primary if (emailForm.value[key]) { - endpointCall.emails.push({ + allEmails.push({ value, visibility, primary, } as AssertionVisibilityString) } }) - return endpointCall + return allEmails } /** @@ -133,14 +143,20 @@ export class ModalEmailComponent implements OnInit, OnDestroy { * This can be either with a existingEmail (with backend data) * or a new empty email input * @param existingEmail: use when adding an email that already exists on the backend + * @param newEmail: use when user is adding an new email */ - addEmail(existingEmail?: AssertionVisibilityString): void { - const newPutCode = 'emailInput-' + this.addedEmailsCount + addEmail( + existingEmail?: AssertionVisibilityString, + newEmail?: boolean + ): void { + const newPutCode = + (newEmail ? 'newEmailInput' : 'emailInput-') + this.addedEmailsCount // Add email to the emails list // backend response come with no email putCode, so here we create one to be able to track those on the frontend this.emails.push({ putCode: newPutCode, + action: existingEmail ? 'UPDATE' : 'ADD', ...existingEmail, } as AssertionVisibilityString) @@ -150,6 +166,7 @@ export class ModalEmailComponent implements OnInit, OnDestroy { new FormGroup({ email: new FormControl(existingEmail ? existingEmail.value : '', { validators: [ + Validators.required, OrcidValidators.email, this.allEmailsAreUnique(newPutCode), ], @@ -163,7 +180,9 @@ export class ModalEmailComponent implements OnInit, OnDestroy { }), visibility: new FormControl( existingEmail ? existingEmail.visibility : this.defaultVisibility, - {} + { + validators: [this.emailsIsUnverified(newPutCode)], + } ), }) ) @@ -222,6 +241,20 @@ export class ModalEmailComponent implements OnInit, OnDestroy { } } + emailsIsUnverified(controlKey): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + if ( + control.value !== 'PRIVATE' && + !this.showEmailAsVerified(controlKey) + ) { + return { + unverified: true, + } + } + return {} + } + } + /** * Remove `duplicated` error on controls that are not listed on the list * @param formGroupKeysWithDuplicatedValues: List of controls with duplicated emails @@ -259,17 +292,18 @@ export class ModalEmailComponent implements OnInit, OnDestroy { // Add errors error on duplicated emails Object.keys(formGroup.controls).forEach((keyX) => { - const emailControlX = (formGroup.controls[keyX] as FormGroup).controls[ - 'email' - ] + let emailControlX: string = (formGroup.controls[keyX] as FormGroup) + .controls['email'].value + emailControlX = emailControlX.toLowerCase().trim() + Object.keys(formGroup.controls).forEach((keyY) => { - const emailControlY = (formGroup.controls[keyY] as FormGroup).controls[ - 'email' - ] + let emailControlY: string = (formGroup.controls[keyY] as FormGroup) + .controls['email'].value + emailControlY = emailControlY.toLowerCase().trim() // Only if both controls are not empty - if (emailControlX.value && emailControlY.value) { - if (emailControlX.value === emailControlY.value && keyX !== keyY) { + if (emailControlX && emailControlY) { + if (emailControlX === emailControlY && keyX !== keyY) { formGroupKeysWithDuplicatedValues.push(keyY) } } @@ -296,8 +330,16 @@ export class ModalEmailComponent implements OnInit, OnDestroy { saveEvent() { if (this.emailsForm.valid) { const data = this.formToBackend(this.emailsForm, this.emails) - this._recordEmails.postEmails(data).pipe(first()).subscribe() + this._recordEmails + .postEmails({ + emails: data, + errors: [], + }) + .pipe(first()) + .subscribe() this.closeEvent() + } else { + this._snackBar.showValidationError() } } @@ -311,25 +353,84 @@ export class ModalEmailComponent implements OnInit, OnDestroy { this.emailsForm.removeControl(controlKey) } - showNonVerifiedData(controlKey: string): boolean { + showNonVerifiedData(controlKey: string, otherEmail?: boolean): boolean { + if (controlKey.startsWith('new')) { + return false + } const formValue = this.emailsForm.value[controlKey]?.email const realEmailBackendContext = this.originalEmailsBackendCopy.find( (email) => email.value === formValue ) + + if ( + formValue && + !(this.verificationsSend.indexOf(formValue) > -1) && + otherEmail && + this.originalEmailsBackendCopy.find((email) => email.value === formValue) + ?.primary + ) { + return false + } + return realEmailBackendContext && !realEmailBackendContext.verified } + showVisibility(controlKey: string, action?: string): boolean { + if (controlKey.startsWith('new')) { + return false + } + const formValue = this.emailsForm.value[controlKey]?.email + const realEmailBackendContext = this.originalEmailsBackendCopy.find( + (email) => email.value === formValue + ) + const result = !!realEmailBackendContext + + if ( + result && + realEmailBackendContext.primary && + this.emailsForm.hasError('duplicated', [controlKey, 'email']) + ) { + return false + } + + if (!result && action === 'UPDATE') { + this.emailsForm.patchValue({ + [controlKey]: { + visibility: 'PRIVATE', + }, + }) + } + return result + } + verificationEmailWasSend(controlKey: string) { + if (controlKey.startsWith('new')) { + return false + } const formValue = this.emailsForm.value[controlKey]?.email return this.verificationsSend.indexOf(formValue) > -1 } showEmailAsVerified(controlKey: string): boolean { + if (controlKey.startsWith('new')) { + return false + } const formValue = this.emailsForm.value[controlKey]?.email const realEmailBackendContext = this.originalEmailsBackendCopy.find( (email) => email.value === formValue ) - return realEmailBackendContext?.verified + + const result = realEmailBackendContext?.verified + + if ( + result && + realEmailBackendContext.primary && + this.emailsForm.hasError('duplicated', [controlKey, 'email']) + ) { + return false + } + + return result } ngOnDestroy() { diff --git a/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.html b/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.html index 8ebf4a6e76..ead187c685 100644 --- a/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.html +++ b/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.html @@ -34,72 +34,96 @@

- +

+ My keywords +

+
-
- -
- - - - Source: - {{ getSourceName(keyword) }}, - Created: - {{ keyword.createdDate | monthDayYearDateToString }} - - -
-
+
- -
+ +
- delete - - + + +
+
diff --git a/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.scss b/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.scss index 386dfce542..de2a69a198 100644 --- a/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.scss +++ b/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.scss @@ -1,26 +1,28 @@ -.cdk-drag-placeholder { - opacity: 0; -} - .actions-wrapper { flex-wrap: nowrap; + display: flex; + justify-content: center; } -.cdk-drag-placeholder { - opacity: 0; +.keyword-list.cdk-drop-list-dragging .keyword-box:not(.cdk-drag-placeholder) { + transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); } -::ng-deep .cdk-drag-animating { - transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); +.icon-drag { + height: 32px; + margin: 4px 0; + cursor: move; + margin-inline-start: 6px; + margin-inline-end: 10px; } .keywords-input-line { - margin-top: 20px; - img { - margin-top: 3px; - cursor: move; - z-index: 1; - margin-inline-end: 18px; + margin-top: 10px; + margin-bottom: 4px; + .image-container { + height: 100%; + display: flex; + justify-content: space-around; } } @@ -45,18 +47,20 @@ } } -::ng-deep .cdk-drop-list-dragging { - cursor: move !important; - .mat-form-field-flex, - .mat-select-trigger, - .mat-button, - .mat-icon-button, - .mat-stroked-button, - .mat-flat-button { - cursor: move !important; - } -} - app-privacy-selector { min-width: 180px; } + +::ng-deep .columns-4-or-8 { + .keywords-input-line .input-container { + padding-bottom: 30px; + } + + .keywords-input-line .actions-wrapper { + padding-bottom: 10px; + justify-content: space-between; + } + .actions-wrapper { + width: 100%; + } +} diff --git a/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.ts b/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.ts index 51bb40e7dd..4c5fbd985e 100644 --- a/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.ts +++ b/src/app/cdk/side-bar/modals/modal-keyword/modal-keyword.component.ts @@ -12,7 +12,7 @@ import { import { Assertion } from '../../../../types' import { UserService } from '../../../../core' import { WINDOW } from '../../../window' -import { FormControl, FormGroup } from '@angular/forms' +import { FormControl, FormGroup, Validators } from '@angular/forms' import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog' import { cloneDeep } from 'lodash' import { Subject } from 'rxjs' @@ -24,6 +24,7 @@ import { RecordKeywordService } from 'src/app/core/record-keyword/record-keyword import { UserRecord } from 'src/app/types/record.local' import { VisibilityStrings } from 'src/app/types/common.endpoint' import { KeywordEndPoint } from 'src/app/types/record-keyword.endpoint' +import { SnackbarService } from 'src/app/cdk/snackbar/snackbar.service' @Component({ selector: 'app-modal-keyword', @@ -37,6 +38,7 @@ export class ModalKeywordComponent implements OnInit, OnDestroy { $destroy: Subject = new Subject() @ViewChildren('keywordInput') inputs: QueryList + id: string addedKeywordsCount = 0 userRecord: UserRecord keywordsForm: FormGroup @@ -48,6 +50,7 @@ export class ModalKeywordComponent implements OnInit, OnDestroy { loadingKeywords = true userSession: UserSession platform: PlatformInfo + keywordMaxLength = 99 ngOrcidKeyword = $localize`:@@topBar.keyword:Keyword` @@ -58,6 +61,7 @@ export class ModalKeywordComponent implements OnInit, OnDestroy { private _recordKeywordService: RecordKeywordService, private _changeDetectorRef: ChangeDetectorRef, private _platform: PlatformInfoService, + private _snackBar: SnackbarService, private _userService: UserService ) { this._platform @@ -95,7 +99,16 @@ export class ModalKeywordComponent implements OnInit, OnDestroy { keywords.forEach((keyword) => { group[keyword.putCode] = new FormGroup({ - content: new FormControl(keyword.content), + content: new FormControl( + { + value: keyword.content, + disabled: keyword.source !== this.id, + }, + { + validators: [Validators.maxLength(this.keywordMaxLength)], + updateOn: 'change', + } + ), visibility: new FormControl(keyword.visibility.visibility, {}), }) }) @@ -112,11 +125,11 @@ export class ModalKeywordComponent implements OnInit, OnDestroy { toBackendKeywords.reverse() toBackendKeywords .map((value) => value.putCode) - .filter((key) => keywordsForm.value[key].content) + .filter((key) => keywordsForm.getRawValue()[key].content) .forEach((key, i) => { - const content = keywordsForm.value[key].content - const visibility = keywordsForm.value[key].visibility - if (keywordsForm.value[key]) { + const content = keywordsForm.getRawValue()[key].content.trim() + const visibility = keywordsForm.getRawValue()[key].visibility + if (keywordsForm.getRawValue()[key]) { keywords.keywords.push({ putCode: key.indexOf('new-') === 0 ? null : key, content: content, @@ -132,12 +145,16 @@ export class ModalKeywordComponent implements OnInit, OnDestroy { } saveEvent() { - this.loadingKeywords = true - this._recordKeywordService - .postKeywords(this.formToBackend(this.keywordsForm)) - .subscribe((response) => { - this.closeEvent() - }) + if (this.keywordsForm.valid) { + this.loadingKeywords = true + this._recordKeywordService + .postKeywords(this.formToBackend(this.keywordsForm)) + .subscribe((response) => { + this.closeEvent() + }) + } else { + this._snackBar.showValidationError() + } } closeEvent() { @@ -150,11 +167,13 @@ export class ModalKeywordComponent implements OnInit, OnDestroy { addKeyword() { const newPutCode = 'new-' + this.addedKeywordsCount - this.keywordsForm.addControl( newPutCode, new FormGroup({ - content: new FormControl(), + content: new FormControl('', { + validators: [Validators.maxLength(this.keywordMaxLength)], + updateOn: 'change', + }), visibility: new FormControl(this.defaultVisibility, {}), }) ) @@ -174,10 +193,6 @@ export class ModalKeywordComponent implements OnInit, OnDestroy { this.keywordsForm.removeControl(putcode) } - getSourceName(keyword: Assertion) { - return keyword.sourceName || keyword.source - } - ngOnDestroy() { this.$destroy.next(true) this.$destroy.unsubscribe() diff --git a/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.html b/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.html index 60825f26a9..504b534a8a 100644 --- a/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.html +++ b/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.html @@ -1,6 +1,6 @@ Personal identifiersOther IDs
- +

+ My other identifiers +

+
+
- - - -
- +
- delete + + delete + +
+
diff --git a/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.scss b/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.scss index 44688ec226..01dac6cc1a 100644 --- a/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.scss +++ b/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.scss @@ -1,19 +1,7 @@ -.cdk-drag-placeholder { - opacity: 0; -} - .actions-wrapper { flex-wrap: nowrap; } -.cdk-drag-placeholder { - opacity: 0; -} - -::ng-deep .cdk-drag-animating { - transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); -} - ::ng-deep .columns-4-or-8 .mat-form-field { width: 100%; margin-inline-end: auto; @@ -38,27 +26,30 @@ } .personal-identifier-input-line { - margin-top: 20px; + margin-top: 10px; + margin-bottom: 4px; img { margin-top: 3px; cursor: move; z-index: 1; - margin-inline-end: 18px; + margin-inline-start: 6px; + margin-inline-end: 10px; } -} -::ng-deep .cdk-drop-list-dragging { - cursor: move !important; - .mat-form-field-flex, - .mat-select-trigger, - .mat-button, - .mat-icon-button, - .mat-stroked-button, - .mat-flat-button { - cursor: move !important; + .person-identifier { + display: flex; + flex-direction: column; + a { + word-break: break-all; + } } } +.person-identifiers-list.cdk-drop-list-dragging + .person-identifiers-box:not(.cdk-drag-placeholder) { + transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); +} + app-privacy-selector { min-width: 180px; } @@ -69,10 +60,17 @@ app-privacy-selector { } .icon-drag { + cursor: move; height: 32px; margin: 4px; } .find-out { display: inline; + margin-top: 8px; +} + +.line { + overflow-wrap: break-word; + word-break: break-word; } diff --git a/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.ts b/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.ts index d5b80bc3f8..a8ad216b80 100644 --- a/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.ts +++ b/src/app/cdk/side-bar/modals/modal-person-identifiers/modal-person-identifiers.component.ts @@ -15,6 +15,7 @@ import { PersonIdentifierEndpoint } from 'src/app/types/record-person-identifier selector: 'app-modal-person-identifiers', templateUrl: './modal-person-identifiers.component.html', styleUrls: ['./modal-person-identifiers.component.scss'], + preserveWhitespaces: true, }) export class ModalPersonIdentifiersComponent implements OnInit, OnDestroy { $destroy: Subject = new Subject() @@ -59,10 +60,6 @@ export class ModalPersonIdentifiersComponent implements OnInit, OnDestroy { personIdentifiers.forEach((personId) => { group[personId.putCode] = new FormGroup({ - identifier: new FormControl({ - value: personId.commonName + ': ' + personId.reference, - disabled: true, - }), visibility: new FormControl(personId.visibility.visibility, {}), }) }) @@ -122,10 +119,6 @@ export class ModalPersonIdentifiersComponent implements OnInit, OnDestroy { this.personIdentifiersForm.removeControl(putCode) } - getSourceName(address: Assertion) { - return address.sourceName || address.source - } - ngOnDestroy() { this.$destroy.next(true) this.$destroy.unsubscribe() diff --git a/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.html b/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.html index 18ee9c19d6..60832fab63 100644 --- a/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.html +++ b/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.html @@ -39,117 +39,184 @@

- +

+ My links +

+
-
- -
- - - - -
+
+
+
+ - +
+
- An URL is required - - {{ website.urlName }} +
+ + - Invalid URL - - + + Must be less than 355 characters + + +
- URL can not be duplicated - - {{ website.url.value }} + + + URL can not be duplicated + + + + +
+ - Source: - {{ getSourceName(website) }}, - Created: - {{ website.createdDate | monthDayYearDateToString }} - - + + + An URL is required + + + Invalid URL + + + URL can not be duplicated + + + + + +
-
-
- - + + +
+
diff --git a/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.scss b/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.scss index 63b8fe796e..ace7200e14 100644 --- a/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.scss +++ b/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.scss @@ -7,19 +7,7 @@ margin-inline-end: auto; } -::ng-deep .cdk-drop-list-dragging { - cursor: move !important; - .mat-form-field-flex, - .mat-select-trigger, - .mat-button, - .mat-icon-button, - .mat-stroked-button, - .mat-flat-button { - cursor: move !important; - } -} - -::ng-deep .cdk-drag-animating { +.websites-list.cdk-drop-list-dragging .websites-box:not(.cdk-drag-placeholder) { transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); } @@ -36,17 +24,21 @@ } .websites-input-line { - margin: 10px 0 20px 0; - height: 120px; - img { - cursor: move; - z-index: 1; - margin: auto 1.45vh; - margin-inline-end: 8px; + .image-container { + height: 80%; + display: flex; + align-items: center; + justify-content: space-around; + img { + cursor: move; + margin-inline-start: 6px; + margin-inline-end: 10px; + } } .input-container { - margin: 18px 0; + margin-top: 10px; + margin-bottom: 4px; } button { @@ -55,6 +47,7 @@ .privacy { width: 100%; + max-height: 60px; margin: 0; button { @@ -64,7 +57,6 @@ app-privacy-selector { min-width: 180px; - margin: auto 7vh; } .selector { @@ -72,27 +64,36 @@ } } +::ng-deep .columns-4-or-8 { + .websites-input-line .input-container { + padding-bottom: 30px; + } +} + .icon-drag { height: 32px; margin: 4px; } -.cdk-drag-placeholder { - opacity: 0; -} - .actions-wrapper { flex-wrap: nowrap; + display: flex; + align-items: center; + height: 80%; } - -.cdk-drag-placeholder { - opacity: 0; +::ng-deep .columns-4-or-8 { + .websites-input-line .actions-wrapper { + padding-bottom: 10px; + } } .mat-form-field { width: 100%; margin-inline-end: 32px; } +::ng-deep .columns-4-or-8 .mat-form-field { + margin-inline-end: 0; +} .website-input { text-align: right !important; @@ -106,3 +107,42 @@ padding-left: 6px; } } + +.drag-placeholder { + min-height: 120px; +} + +.actions-wrapper { + padding: 0 32px; +} + +.web-site-input-container { + display: flex; + flex-direction: column; + p { + margin: 0; + padding-bottom: 6px; + } + ::ng-deep .mat-form-field-subscript-wrapper { + top: 0; + position: relative; + margin-top: 0; + } + .not-editable-url { + display: flex; + flex-direction: column; + padding-bottom: 15px; + a { + word-break: break-all; + } + } + .not-editable-description { + padding-top: 15px; + } +} + +::ng-deep .columns-4-or-8 { + .actions-wrapper { + padding: 0; + } +} diff --git a/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.ts b/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.ts index 6ea8ef72c6..c83b0b372c 100644 --- a/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.ts +++ b/src/app/cdk/side-bar/modals/modal-websites/modal-websites.component.ts @@ -1,3 +1,4 @@ +import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop' import { ChangeDetectorRef, Component, @@ -8,11 +9,6 @@ import { QueryList, ViewChildren, } from '@angular/core' -import { Subject } from 'rxjs' -import { MatDialogRef } from '@angular/material/dialog' -import { ModalComponent } from '../../../modal/modal/modal.component' -import { PlatformInfo, PlatformInfoService } from '../../../platform-info' -import { RecordWebsitesService } from '../../../../core/record-websites/record-websites.service' import { AbstractControl, FormControl, @@ -21,17 +17,23 @@ import { ValidatorFn, Validators, } from '@angular/forms' -import { VisibilityStrings } from '../../../../types/common.endpoint' -import { WINDOW } from '../../../window' -import { first, takeUntil } from 'rxjs/operators' -import { WebsitesEndPoint } from '../../../../types/record-websites.endpoint' -import { Assertion } from '../../../../types' -import { UserSession } from '../../../../types/session.local' -import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop' +import { MatDialogRef } from '@angular/material/dialog' import { cloneDeep } from 'lodash' import * as _ from 'lodash' -import { UserService } from '../../../../core' +import { Subject } from 'rxjs' +import { first, takeUntil } from 'rxjs/operators' +import { SnackbarService } from 'src/app/cdk/snackbar/snackbar.service' + import { URL_REGEXP, URL_REGEXP_BACKEND } from '../../../../constants' +import { UserService } from '../../../../core' +import { RecordWebsitesService } from '../../../../core/record-websites/record-websites.service' +import { Assertion } from '../../../../types' +import { VisibilityStrings } from '../../../../types/common.endpoint' +import { WebsitesEndPoint } from '../../../../types/record-websites.endpoint' +import { UserSession } from '../../../../types/session.local' +import { ModalComponent } from '../../../modal/modal/modal.component' +import { PlatformInfo, PlatformInfoService } from '../../../platform-info' +import { WINDOW } from '../../../window' @Component({ selector: 'app-modal-websites', @@ -43,6 +45,7 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { $destroy: Subject = new Subject() + id: string websitesForm: FormGroup platform: PlatformInfo defaultVisibility: VisibilityStrings @@ -53,6 +56,7 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { screenDirection = 'ltr' addedWebsiteCount = 0 loadingWebsites = true + urlMaxLength = 354 ngOrcidDescription = $localize`:@@topBar.description:Link Title` ngOrcidUrl = $localize`:@@topBar.url:Link URL` @@ -63,7 +67,8 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { private _changeDetectorRef: ChangeDetectorRef, private _platform: PlatformInfoService, private _userService: UserService, - private _recordWebsitesService: RecordWebsitesService + private _recordWebsitesService: RecordWebsitesService, + private _snackBar: SnackbarService ) { this._platform .get() @@ -107,8 +112,11 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { websites.forEach((website) => { group[website.putCode] = new FormGroup({ - description: new FormControl(website.urlName), - url: new FormControl(website.url.value, { + description: new FormControl(website.urlName.toLowerCase().trim(), { + validators: [Validators.maxLength(this.urlMaxLength)], + updateOn: 'change', + }), + url: new FormControl(website.url.value.toLowerCase().trim(), { validators: [ Validators.required, Validators.pattern(URL_REGEXP_BACKEND), @@ -119,6 +127,7 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { visibility: new FormControl(website.visibility.visibility, {}), }) }) + this.websitesForm = new FormGroup(group) } @@ -132,12 +141,12 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { this.websites.reverse() this.websites .map((value) => value.putCode) - .filter((key) => websitesForm.value[key].url) + .filter((key) => websitesForm.getRawValue()[key].url) .forEach((key, i) => { - const urlName = websitesForm.value[key].description - const url = websitesForm.value[key].url - const visibility = websitesForm.value[key].visibility - if (websitesForm.value[key]) { + const urlName = websitesForm.getRawValue()[key].description.trim() + const url = websitesForm.getRawValue()[key].url.trim() + const visibility = websitesForm.getRawValue()[key].visibility + if (websitesForm.getRawValue()[key]) { websites.websites.push({ putCode: key.indexOf('new-') === 0 ? null : key, url: url, @@ -155,6 +164,8 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { saveEvent() { this.websitesForm.markAllAsTouched() + this.websitesForm.updateValueAndValidity() + if (this.websitesForm.valid) { this.loadingWebsites = true this._recordWebsitesService @@ -165,6 +176,8 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { }, (error) => {} ) + } else { + this._snackBar.showValidationError() } } @@ -181,7 +194,10 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { this.websitesForm.addControl( newPutCode, new FormGroup({ - description: new FormControl(), + description: new FormControl('', { + validators: [Validators.maxLength(this.urlMaxLength)], + updateOn: 'change', + }), url: new FormControl('', { validators: [ Validators.required, @@ -210,10 +226,6 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { this.websitesForm.removeControl(putCode) } - getSourceName(website: Assertion) { - return website.sourceName || website.source - } - toMyLinks() { this.window.document.getElementById('my-links').scrollIntoView() } @@ -248,17 +260,20 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { // Add errors error on duplicated urls Object.keys(formGroup.controls).forEach((keyX) => { - const urlControlX = (formGroup.controls[keyX] as FormGroup).controls[ - 'url' - ] + let urlControlX: string = (formGroup.controls[keyX] as FormGroup) + .controls['url'].value + urlControlX = urlControlX.toLowerCase().trim() + urlControlX = this.removeProtocol(urlControlX) + Object.keys(formGroup.controls).forEach((keyY) => { - const urlControlY = (formGroup.controls[keyY] as FormGroup).controls[ - 'url' - ] + let urlControlY: string = (formGroup.controls[keyY] as FormGroup) + .controls['url'].value + urlControlY = urlControlY.toLowerCase().trim() + urlControlY = this.removeProtocol(urlControlY) // Only if both controls are not empty - if (urlControlX.value && urlControlY.value) { - if (urlControlX.value === urlControlY.value && keyX !== keyY) { + if (urlControlX && urlControlY) { + if (urlControlX === urlControlY && keyX !== keyY) { formGroupKeysWithDuplicatedValues.push(keyY) } } @@ -290,4 +305,15 @@ export class ModalWebsitesComponent implements OnInit, OnDestroy { this.$destroy.next(true) this.$destroy.unsubscribe() } + + removeProtocol(urlControlX: string): string { + let response = urlControlX + if (urlControlX.indexOf('http://') === 0) { + response = response.replace('http://', '') + } + if (urlControlX.indexOf('https://') === 0) { + response = response.replace('https://', '') + } + return response + } } diff --git a/src/app/cdk/side-bar/modals/source-hit/source-hit.component.html b/src/app/cdk/side-bar/modals/source-hit/source-hit.component.html new file mode 100644 index 0000000000..8bcaa06799 --- /dev/null +++ b/src/app/cdk/side-bar/modals/source-hit/source-hit.component.html @@ -0,0 +1,8 @@ +Source: + + {{ assertion }} + via + +{{ source }}, +Created: +{{ createdDate | monthDayYearDateToString }} diff --git a/src/app/cdk/side-bar/modals/source-hit/source-hit.component.scss b/src/app/cdk/side-bar/modals/source-hit/source-hit.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/cdk/side-bar/modals/source-hit/source-hit.component.spec.ts b/src/app/cdk/side-bar/modals/source-hit/source-hit.component.spec.ts new file mode 100644 index 0000000000..defdbdd2a3 --- /dev/null +++ b/src/app/cdk/side-bar/modals/source-hit/source-hit.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SourceHitComponent } from './source-hit.component' + +describe('SourceHitComponent', () => { + let component: SourceHitComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [SourceHitComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent(SourceHitComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/cdk/side-bar/modals/source-hit/source-hit.component.ts b/src/app/cdk/side-bar/modals/source-hit/source-hit.component.ts new file mode 100644 index 0000000000..fa9d0af6d7 --- /dev/null +++ b/src/app/cdk/side-bar/modals/source-hit/source-hit.component.ts @@ -0,0 +1,18 @@ +import { Component, Input, OnInit } from '@angular/core' +import { MonthDayYearDate } from 'src/app/types' + +@Component({ + selector: 'app-source-hit', + templateUrl: './source-hit.component.html', + styleUrls: ['./source-hit.component.scss'], + preserveWhitespaces: true, +}) +export class SourceHitComponent implements OnInit { + @Input() createdDate: MonthDayYearDate + @Input() source: string + @Input() assertion: string + + constructor() {} + + ngOnInit(): void {} +} diff --git a/src/app/cdk/side-bar/side-bar-id/side-bar-id.component.ts b/src/app/cdk/side-bar/side-bar-id/side-bar-id.component.ts index 03d1e7eba9..b860c9242e 100644 --- a/src/app/cdk/side-bar/side-bar-id/side-bar-id.component.ts +++ b/src/app/cdk/side-bar/side-bar-id/side-bar-id.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, Input, OnDestroy } from '@angular/core' -import { Subject } from 'rxjs/internal/Subject' +import { Subject } from 'rxjs' import { takeUntil } from 'rxjs/operators' import { PlatformInfo, PlatformInfoService } from '../../platform-info' import { environment } from '../../../../environments/environment' diff --git a/src/app/cdk/side-bar/side-bar.module.ts b/src/app/cdk/side-bar/side-bar.module.ts index e5679228f4..7842db1fa4 100644 --- a/src/app/cdk/side-bar/side-bar.module.ts +++ b/src/app/cdk/side-bar/side-bar.module.ts @@ -19,6 +19,8 @@ import { ModalWebsitesComponent } from './modals/modal-websites/modal-websites.c import { ModalKeywordComponent } from './modals/modal-keyword/modal-keyword.component' import { ModalPersonIdentifiersComponent } from './modals/modal-person-identifiers/modal-person-identifiers.component' import { SharedModule } from 'src/app/shared/shared.module' +import { FormDirectivesModule } from '../form-directives/form-directives.module' +import { SourceHitComponent } from './modals/source-hit/source-hit.component' @NgModule({ declarations: [ @@ -29,6 +31,7 @@ import { SharedModule } from 'src/app/shared/shared.module' ModalWebsitesComponent, ModalKeywordComponent, ModalPersonIdentifiersComponent, + SourceHitComponent, ], imports: [ CommonModule, @@ -45,7 +48,8 @@ import { SharedModule } from 'src/app/shared/shared.module' DragDropModule, MatSelectModule, A11yLinkModule, + FormDirectivesModule, ], - exports: [SideBarComponent], + exports: [SideBarComponent, SourceHitComponent], }) export class SideBarModule {} diff --git a/src/app/cdk/side-bar/side-bar/side-bar.component.html b/src/app/cdk/side-bar/side-bar/side-bar.component.html index ffa460700f..9a73605f6f 100644 --- a/src/app/cdk/side-bar/side-bar/side-bar.component.html +++ b/src/app/cdk/side-bar/side-bar/side-bar.component.html @@ -14,6 +14,7 @@ [isPublicRecord]="isPublicRecord" [elements]="userRecord.emails.emails" [editModalComponent]="modalEmailComponent" + [email]="true" [type]="'side-bar'" class="side-bar" id="emails-panel" @@ -22,8 +23,9 @@ userRecord?.emails?.emails && (!isPublicRecord || userRecord.emails.emails.length > 0) " + [userRecord]="userRecord" > -

Emails

+

Emails

Emails *ngIf="emailsOpenState" [name]="email.sourceName || email.source" [date]="email.createdDate | monthDayYearDateToString" + [assertion]=" + email.assertionOriginName || email.assertionOriginOrcid + " > @@ -53,13 +58,15 @@

Emails

class="side-bar" id="websites-panel" [(openState)]="websiteOpenState" + [id]="userInfo?.EFFECTIVE_USER_ORCID" + [userRecord]="userRecord" *ngIf=" userRecord?.website?.websites && (!isPublicRecord || userRecord.website.websites.length > 0) " > -

- Website and social links +

+ Websites & social links

*ngIf="websiteOpenState" [name]="website.sourceName || website.source" [date]="website.createdDate | monthDayYearDateToString" + [assertion]=" + website.assertionOriginName || website.assertionOriginOrcid + " > @@ -100,6 +110,7 @@

class="side-bar" id="personal-identifiers-panel" [(openState)]="externalIdentifierOpenState" + [userRecord]="userRecord" >

Other IDs

Other IDs *ngIf="externalIdentifierOpenState" [name]="externalIdentifier.sourceName || externalIdentifier.source" [date]="externalIdentifier.createdDate | monthDayYearDateToString" + [assertion]=" + externalIdentifier.assertionOriginName || + externalIdentifier.assertionOriginOrcid + " > @@ -149,6 +164,8 @@

Other IDs

class="side-bar" id="keywords-panel" [(openState)]="keywordOpenState" + [id]="userInfo?.EFFECTIVE_USER_ORCID" + [userRecord]="userRecord" >

Keywords

@@ -165,6 +182,9 @@

Keywords

*ngIf="keywordOpenState" [name]="keyword.sourceName || keyword.source" [date]="keyword.createdDate | monthDayYearDateToString" + [assertion]=" + keyword.assertionOriginName || keyword.assertionOriginOrcid + " > @@ -186,6 +206,9 @@

Keywords

*ngIf="keywordOpenState" [name]="keyword.sourceName || keyword.source" [date]="keyword.createdDate | monthDayYearDateToString" + [assertion]=" + keyword.assertionOriginName || keyword.assertionOriginOrcid + " > @@ -209,6 +232,8 @@

Keywords

class="side-bar" id="countries-panel" [(openState)]="addressOpenState" + [id]="userInfo?.EFFECTIVE_USER_ORCID" + [userRecord]="userRecord" >

Countries

@@ -227,6 +252,9 @@

Countries

[isLastItem]="last" [name]="address.sourceName || address.source" [date]="address.createdDate | monthDayYearDateToString" + [assertion]=" + address.assertionOriginName || address.assertionOriginOrcid + " > @@ -247,6 +275,9 @@

Countries

[isLastItem]="last" [name]="address.sourceName || address.source" [date]="address.createdDate | monthDayYearDateToString" + [assertion]=" + address.assertionOriginName || address.assertionOriginOrcid + " > diff --git a/src/app/cdk/side-bar/side-bar/side-bar.component.ts b/src/app/cdk/side-bar/side-bar/side-bar.component.ts index e6518c8a61..dac9a6add4 100644 --- a/src/app/cdk/side-bar/side-bar/side-bar.component.ts +++ b/src/app/cdk/side-bar/side-bar/side-bar.component.ts @@ -48,6 +48,7 @@ export class SideBarComponent implements OnInit, OnDestroy { orcidUrl: string loggedIn: boolean } + userInfo: UserInfo userRecord: UserRecord platform: PlatformInfo @@ -95,6 +96,7 @@ export class SideBarComponent implements OnInit, OnDestroy { this.onlyOrcidId = true } this.userRecord = userRecord + this.userInfo = userRecord?.userInfo }) } diff --git a/src/app/cdk/snackbar/snackbar.service.ts b/src/app/cdk/snackbar/snackbar.service.ts index 3e7ce67d86..781bd39c95 100644 --- a/src/app/cdk/snackbar/snackbar.service.ts +++ b/src/app/cdk/snackbar/snackbar.service.ts @@ -74,6 +74,28 @@ export class SnackbarService { } } + showValidationError( + message: string = $localize`:@@shared.pleaseReviewInvalidForm:Please review the form and fix the issues before saving`, + title: string = $localize`:@@shared.invalidForm:Form validation error` + ) { + const mappedDisplay = { + contentDirection: this.contentDirection, + closable: true, + title, + message, + } + + this._snackBar.openFromComponent(SnackbarComponent, { + data: { + displayMessage: mappedDisplay, + }, + horizontalPosition: this.horizontalPosition, + verticalPosition: 'bottom', + panelClass: 'orcid-error', + duration: 15 * 1000, + }) + } + showSuccessMessage(message: DisplayMessage) { this._snackBar.openFromComponent(SnackbarComponent, { data: { diff --git a/src/app/cdk/snackbar/snackbar/snackbar.component.html b/src/app/cdk/snackbar/snackbar/snackbar.component.html index d09139b5dc..a2ac4675cf 100644 --- a/src/app/cdk/snackbar/snackbar/snackbar.component.html +++ b/src/app/cdk/snackbar/snackbar/snackbar.component.html @@ -1,12 +1,14 @@ -error - +error +
+ +
{{ data.displayMessage.title }}
diff --git a/src/app/cdk/snackbar/snackbar/snackbar.component.scss b/src/app/cdk/snackbar/snackbar/snackbar.component.scss index 472b73a634..5d37daf12a 100644 --- a/src/app/cdk/snackbar/snackbar/snackbar.component.scss +++ b/src/app/cdk/snackbar/snackbar/snackbar.component.scss @@ -4,16 +4,17 @@ overflow-wrap: anywhere; } -button { +.close-button-container { position: absolute; right: 0; - top: 0; + top: 4px; [dir='rtl'] & { left: 0; } + width: 50px; } -mat-icon { +mat-icon.errorGroup { margin-top: 8px; font-size: 30px; height: 30px; diff --git a/src/app/cdk/warning-message/warning-message.module.ts b/src/app/cdk/warning-message/warning-message.module.ts new file mode 100644 index 0000000000..50634665fe --- /dev/null +++ b/src/app/cdk/warning-message/warning-message.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { WarningMessageComponent } from './warning-message/warning-message.component' +import { MatIconModule } from '@angular/material/icon' + +@NgModule({ + declarations: [WarningMessageComponent], + imports: [CommonModule, MatIconModule], + exports: [WarningMessageComponent], +}) +export class WarningMessageModule {} diff --git a/src/app/cdk/warning-message/warning-message/warning-message.component.html b/src/app/cdk/warning-message/warning-message/warning-message.component.html new file mode 100644 index 0000000000..bc8c53f23f --- /dev/null +++ b/src/app/cdk/warning-message/warning-message/warning-message.component.html @@ -0,0 +1,19 @@ +
+
+ {{ icon }} +
+
+ + + +

+ +

+
+
diff --git a/src/app/cdk/warning-message/warning-message/warning-message.component.scss b/src/app/cdk/warning-message/warning-message/warning-message.component.scss new file mode 100644 index 0000000000..854c6a3fd6 --- /dev/null +++ b/src/app/cdk/warning-message/warning-message/warning-message.component.scss @@ -0,0 +1,17 @@ +.container-text-and-icon { + display: flex; + flex-direction: row; + .text-container { + display: flex; + flex-direction: column; + p { + margin-bottom: 0; + margin-top: 4px; + } + } +} +:host { + border: 1px solid; + padding: 14px; + width: 100%; +} diff --git a/src/app/cdk/warning-message/warning-message/warning-message.component.scss-theme.scss b/src/app/cdk/warning-message/warning-message/warning-message.component.scss-theme.scss new file mode 100644 index 0000000000..88be79a3bc --- /dev/null +++ b/src/app/cdk/warning-message/warning-message/warning-message.component.scss-theme.scss @@ -0,0 +1,20 @@ +@import '~@angular/material/theming'; +@import 'src/assets/scss/material.orcid-theme.scss'; + +@mixin warning-message-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, accent); + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + :host { + border-color: mat-color($foreground, 'state-notice-dark') !important; + } + .container-text-and-icon { + mat-icon { + color: mat-color($foreground, 'state-notice-dark') !important; + } + } +} + +@include warning-message-theme($orcid-app-theme); diff --git a/src/app/cdk/warning-message/warning-message/warning-message.component.spec.ts b/src/app/cdk/warning-message/warning-message/warning-message.component.spec.ts new file mode 100644 index 0000000000..6a252fb4e3 --- /dev/null +++ b/src/app/cdk/warning-message/warning-message/warning-message.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WarningMessageComponent } from './warning-message.component' + +describe('WarningMessageComponent', () => { + let component: WarningMessageComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [WarningMessageComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent(WarningMessageComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/cdk/warning-message/warning-message/warning-message.component.ts b/src/app/cdk/warning-message/warning-message/warning-message.component.ts new file mode 100644 index 0000000000..08e432ac02 --- /dev/null +++ b/src/app/cdk/warning-message/warning-message/warning-message.component.ts @@ -0,0 +1,34 @@ +import { Component, Input, OnDestroy, OnInit } from '@angular/core' +import { Subject } from 'rxjs' +import { takeUntil } from 'rxjs/operators' +import { PlatformInfoService } from '../../platform-info' + +@Component({ + selector: 'app-warning-message', + templateUrl: './warning-message.component.html', + styleUrls: [ + './warning-message.component.scss', + 'warning-message.component.scss-theme.scss', + ], + preserveWhitespaces: false, +}) +export class WarningMessageComponent implements OnInit, OnDestroy { + @Input() icon = 'info' + isMobile: boolean + $destroy: Subject = new Subject() + + constructor(_platform: PlatformInfoService) { + _platform + .get() + .pipe(takeUntil(this.$destroy)) + .subscribe((platform) => { + this.isMobile = platform.columns4 || platform.columns8 + }) + } + + ngOnDestroy() { + this.$destroy.next(true) + this.$destroy.unsubscribe() + } + ngOnInit(): void {} +} diff --git a/src/app/constants.ts b/src/app/constants.ts index 8d80409c13..f67e511642 100644 --- a/src/app/constants.ts +++ b/src/app/constants.ts @@ -1,5 +1,11 @@ import { Address, MonthDayYearDate } from './types' import { UrlMatchResult, UrlSegment } from '@angular/router' +import { + AbstractControl, + FormControl, + FormGroup, + FormArray, +} from '@angular/forms' export { COUNTRY_NAMES_TO_COUNTRY_CODES } from './constants-country-codes' @@ -14,8 +20,8 @@ export const ORCID_REGEXP = /(\d{4}[- ]{0,}){3}\d{3}[\dX]$/i // https://regex101.com/r/V95col/6 // tslint:disable-next-line: max-line-length export const ORCID_URI_REGEXP = /(orcid\.org\/|qa\.orcid\.org\/|sandbox\.orcid\.org\/|dev\.orcid\.org\/|localhost.*)(\d{4}[- ]{0,}){3}\d{3}[\dX]$/i -// https://regex101.com/r/elR7iL/1 -export const URL_REGEXP = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+\\,;=.]+$/ +// https://regex101.com/r/xkIlf0/1 +export const URL_REGEXP = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#%[\]@!\$&'\(\)\*\+\\,;=.><]+$/ // https://regex101.com/r/GEaSMo/2 export const URL_REGEXP_BACKEND = /^(((https?):\/\/)(%[0-9A-Fa-f]{2}|[-()_.!~*';/?:@&=+$,A-Za-z0-9])+)([).!';/?:,][[:blank:]])?$/ // https://www.regextester.com/96577 @@ -26,10 +32,11 @@ export const HAS_NUMBER = /(?=.*[0-9]).*/ export const HAS_LETTER_OR_SYMBOL = /(?=.*[^\d\s]).*/ // https://regex101.com/r/gznzc6/1 strips params for OJS links export const REDIRECT_URI_REGEXP = /(?=redirect_uri=)(.*?)(?=orcidapi)|(?=redirect_uri=)(.*?)$/ +// https://regex101.com/r/EP7uWn/1 +export const AMOUNT_REGEXP = /^[0-9.,]*$/ export const ApplicationRoutes = { myOrcid: 'my-orcid', - myOrcidTEMP: 'qa/my-orcid', twoFactor: '2fa-signin', institutionalLinking: 'institutional-linking', social: 'social-linking', @@ -110,6 +117,11 @@ export enum ADD_EVENT_ACTION { bibText, } +export enum EXTERNAL_ID_TYPE_WORK { + doi, + pubMed, +} + export const VISIBILITY_OPTIONS = ['PUBLIC', 'LIMITED', 'PRIVATE'] export const AMOUNT_OF_RETRIEVE_NOTIFICATIONS_PER_CALL = 10 @@ -201,3 +213,34 @@ export function ArrayFlat(arr) { } export const DEFAULT_PAGE_SIZE = 50 +export const MAX_LENGTH_LESS_THAN_ONE_THOUSAND = 999 +export const MAX_LENGTH_LESS_THAN_FIVE_THOUSAND = 4999 +export const MAX_LENGTH_LESS_THAN_TWO_THOUSAND = 1999 +export const MAX_LENGTH_LESS_THAN_TWO_HUNDRED_FIFTY_FIVE = 254 +export const MAX_LENGTH_LESS_THAN_TWO_THOUSAND_EIGHTY_FOUR = 2083 + +export function GetFormErrors(form: AbstractControl) { + if (form instanceof FormControl) { + return form.errors ?? null + } + if (form instanceof FormGroup) { + const groupErrors = form.errors + const formErrors = groupErrors ? { groupErrors } : {} + Object.keys(form.controls).forEach((key) => { + const error = GetFormErrors(form.get(key)) + if (error !== null) { + formErrors[key] = error + } + }) + return Object.keys(formErrors).length > 0 ? formErrors : null + } + if (form instanceof FormArray) { + const groupErrors = form.errors + const formErrors = groupErrors ? [groupErrors] : [] + form.controls.forEach((control) => { + const error = GetFormErrors(control) + formErrors.push(error) + }) + return formErrors.length > 0 ? formErrors : null + } +} diff --git a/src/app/core/inbox/inbox.service.ts b/src/app/core/inbox/inbox.service.ts index c86baa9325..c02e3bafa6 100644 --- a/src/app/core/inbox/inbox.service.ts +++ b/src/app/core/inbox/inbox.service.ts @@ -1,8 +1,7 @@ import { HttpClient, HttpHeaders } from '@angular/common/http' import { Injectable } from '@angular/core' import { Observable, ReplaySubject } from 'rxjs' -import { retry } from 'rxjs/internal/operators/retry' -import { catchError, map, switchMap, tap } from 'rxjs/operators' +import { catchError, map, switchMap, tap, retry } from 'rxjs/operators' import { AMOUNT_OF_RETRIEVE_NOTIFICATIONS_PER_CALL } from 'src/app/constants' import { ERROR_REPORT } from 'src/app/errors' import { environment } from 'src/environments/environment' diff --git a/src/app/core/open-graph/open-graph.service.ts b/src/app/core/open-graph/open-graph.service.ts index 736199f185..9b8880524b 100644 --- a/src/app/core/open-graph/open-graph.service.ts +++ b/src/app/core/open-graph/open-graph.service.ts @@ -21,14 +21,18 @@ export class OpenGraphService { constructor(private meta: Meta, private _titleService: Title) {} - addOpenGraphData(record: UserRecord): HTMLMetaElement[] { + addOpenGraphData( + record: UserRecord, + options?: { force?: boolean } + ): HTMLMetaElement[] { if ( record.userInfo && record.names !== undefined && - !this.openGraphDataSet && record.userInfo !== undefined && - !record.userInfo.RECORD_WITH_ISSUES + !record.userInfo.RECORD_WITH_ISSUES && + (!this.openGraphDataSet || options.force) ) { + this.removeOpenGraphData() this.openGraphDataSet = true try { const { displayedNameWithId, displayedName } = this.getDisplayNames( diff --git a/src/app/core/record-affiliations-affiliations-grouping/record-affiliations-grouping.service.ts b/src/app/core/record-affiliations-affiliations-grouping/record-affiliations-grouping.service.ts index 152a29db9f..3184f73788 100644 --- a/src/app/core/record-affiliations-affiliations-grouping/record-affiliations-grouping.service.ts +++ b/src/app/core/record-affiliations-affiliations-grouping/record-affiliations-grouping.service.ts @@ -31,28 +31,32 @@ export class RecordAffiliationsGroupingService { } transform(value: AffiliationsEndpoint, args?: any): AffiliationUIGroup[] { - return Object.keys(this.expectedUiOrderGroups).map( - (expectedUiOrderGroup) => { - return { - type: expectedUiOrderGroup, - affiliationGroup: this.expectedUiOrderGroups[expectedUiOrderGroup] - .map((AffiliationGroupsTypeName) => { - return Object.keys(value.affiliationGroups) - .filter((key) => { - return key === AffiliationGroupsTypeName - }) - .map((key) => value.affiliationGroups[key]) - }) - // Reduce all elements with different AffiliationGroupsTypeName on the same expectedUiOrderGroup - .reduce((accumulator, currentValue) => - accumulator.concat(currentValue) - ) - // Concatenates affiliations lists - .reduce((accumulator, currentValue) => - accumulator.concat(currentValue) - ), + if (Object.keys(value.affiliationGroups).length) { + return Object.keys(this.expectedUiOrderGroups).map( + (expectedUiOrderGroup) => { + return { + type: expectedUiOrderGroup, + affiliationGroup: this.expectedUiOrderGroups[expectedUiOrderGroup] + .map((AffiliationGroupsTypeName) => { + return Object.keys(value.affiliationGroups) + .filter((key) => { + return key === AffiliationGroupsTypeName + }) + .map((key) => value.affiliationGroups[key]) + }) + // Reduce all elements with different AffiliationGroupsTypeName on the same expectedUiOrderGroup + .reduce((accumulator, currentValue) => + accumulator.concat(currentValue) + ) + // Concatenates affiliations lists + .reduce((accumulator, currentValue) => + accumulator.concat(currentValue) + ), + } } - } - ) + ) + } else { + return [] + } } } diff --git a/src/app/core/record-affiliations/record-affiliations.service.ts b/src/app/core/record-affiliations/record-affiliations.service.ts index ff06e26ae0..48fba9f635 100644 --- a/src/app/core/record-affiliations/record-affiliations.service.ts +++ b/src/app/core/record-affiliations/record-affiliations.service.ts @@ -1,12 +1,13 @@ import { HttpClient, HttpHeaders } from '@angular/common/http' import { Injectable } from '@angular/core' -import { Observable, of, ReplaySubject } from 'rxjs' +import { BehaviorSubject, Observable, of, ReplaySubject } from 'rxjs' import { catchError, map, retry, switchMap, tap } from 'rxjs/operators' import { AffiliationUIGroup, AffiliationsEndpoint, Affiliation, Organization, + DisambiguatedOrganization, } from 'src/app/types/record-affiliation.endpoint' import { environment } from 'src/environments/environment' @@ -21,7 +22,6 @@ import { VisibilityStrings } from '../../types/common.endpoint' providedIn: 'root', }) export class RecordAffiliationService { - affiliationsSubject = new ReplaySubject(1) lastEmittedValue: AffiliationUIGroup[] headers = new HttpHeaders({ 'Access-Control-Allow-Origin': '*', @@ -29,6 +29,10 @@ export class RecordAffiliationService { }) $affiliations: ReplaySubject + private _$loading = new BehaviorSubject(true) + public get $loading() { + return this._$loading.asObservable() + } constructor( private _http: HttpClient, @@ -48,12 +52,18 @@ export class RecordAffiliationService { return this.$affiliations } + if (options.cleanCacheIfExist && this.$affiliations) { + this.$affiliations.next(undefined) + } + + this._$loading.next(true) this.getGroupAndSortAffiliations(options) .pipe( retry(3), catchError((error) => this._errorHandler.handleError(error)), catchError(() => of([])), tap((value) => { + this._$loading.next(false) this.lastEmittedValue = cloneDeep(value) this.$affiliations.next(value) }) @@ -186,6 +196,22 @@ export class RecordAffiliationService { ) } + getOrganizationDisambiguated( + id: string + ): Observable { + return this._http + .get( + environment.API_WEB + 'affiliations/disambiguated/id/' + id, + { + headers: this.headers, + } + ) + .pipe( + retry(3), + catchError((error) => this._errorHandler.handleError(error)) + ) + } + updateVisibility( putCode: string, visibility: VisibilityStrings @@ -219,4 +245,18 @@ export class RecordAffiliationService { tap(() => this.getAffiliations({ forceReload: true })) ) } + + updatePreferredSource(putCode: string): Observable { + return this._http + .get( + environment.API_WEB + + 'affiliations/updateToMaxDisplay.json?putCode=' + + putCode + ) + .pipe( + retry(3), + catchError((error) => this._errorHandler.handleError(error)), + tap(() => this.getAffiliations({ forceReload: true })) + ) + } } diff --git a/src/app/core/record-biography/record-biography.service.ts b/src/app/core/record-biography/record-biography.service.ts index 6fd3dfec08..3517bda324 100644 --- a/src/app/core/record-biography/record-biography.service.ts +++ b/src/app/core/record-biography/record-biography.service.ts @@ -40,6 +40,9 @@ export class RecordBiographyService { } else if (!options.forceReload) { return this.$biography } + if (options.cleanCacheIfExist && this.$biography) { + this.$biography.next(undefined) + } this._http .get( diff --git a/src/app/core/record-countries/record-countries.service.ts b/src/app/core/record-countries/record-countries.service.ts index 14281b9adc..c210dad487 100644 --- a/src/app/core/record-countries/record-countries.service.ts +++ b/src/app/core/record-countries/record-countries.service.ts @@ -66,6 +66,9 @@ export class RecordCountriesService { } else if (!options.forceReload) { return this.$addresses } + if (options.cleanCacheIfExist && this.$addresses) { + this.$addresses.next(undefined) + } this._http .get( diff --git a/src/app/core/record-emails/record-emails.service.ts b/src/app/core/record-emails/record-emails.service.ts index 753d50f89d..66256d7b68 100644 --- a/src/app/core/record-emails/record-emails.service.ts +++ b/src/app/core/record-emails/record-emails.service.ts @@ -5,7 +5,7 @@ import { AsyncValidatorFn, ValidationErrors, } from '@angular/forms' -import { Observable, of, ReplaySubject } from 'rxjs' +import { EMPTY, Observable, of, ReplaySubject } from 'rxjs' import { catchError, map, retry, switchMap, tap } from 'rxjs/operators' import { Assertion, @@ -49,6 +49,9 @@ export class RecordEmailsService { } else if (!options.forceReload) { return this.$emailsSubject } + if (options.cleanCacheIfExist) { + this.$emailsSubject.next(EMPTY) + } this._http .get(environment.API_WEB + `account/emails.json`, { @@ -73,11 +76,11 @@ export class RecordEmailsService { return this.$emailsSubject } - postEmails(otherNames: EmailsEndpoint): Observable { + postEmails(emails: EmailsEndpoint): Observable { return this._http .post( environment.API_WEB + `account/emails.json`, - otherNames, + emails, { headers: this.headers, } @@ -89,22 +92,27 @@ export class RecordEmailsService { ) } - addEmail(email: Assertion): Observable { + editEmail(original: string, edited: string): Observable { return this._http - .post(environment.API_WEB + `account/addEmail.json`, email, { - headers: this.headers, - }) + .post( + environment.API_WEB + `account/email/edit.json`, + { original, edited }, + { + headers: this.headers, + } + ) .pipe( retry(3), catchError((error) => this._errorHandler.handleError(error)), - switchMap(() => this.getEmails()) + switchMap(() => this.getEmails({ forceReload: true })) ) } - verifyEmail(email: String): Observable { + verifyEmail(email: string): Observable { return this._http .get( - environment.API_WEB + `account/verifyEmail.json?email=${email}`, + environment.API_WEB + + `account/verifyEmail.json?email=${encodeURIComponent(email)}`, { headers: this.headers, } @@ -116,19 +124,17 @@ export class RecordEmailsService { ) } - setAsPrimaryEmail(email: Assertion): Observable { + visibility(email): Observable { + const encoded_data = JSON.stringify(email) + return this._http - .post( - environment.API_WEB + `account/email/setPrimary`, - email, - { - headers: this.headers, - } - ) + .post(environment.API_WEB + `account/email/visibility`, encoded_data, { + headers: this.headers, + }) .pipe( retry(3), catchError((error) => this._errorHandler.handleError(error)), - switchMap(() => this.getEmails()) + switchMap(() => this.getEmails({ forceReload: true })) ) } diff --git a/src/app/core/record-fundings/record-fundings.service.ts b/src/app/core/record-fundings/record-fundings.service.ts index f3757d56a0..3823694b66 100644 --- a/src/app/core/record-fundings/record-fundings.service.ts +++ b/src/app/core/record-fundings/record-fundings.service.ts @@ -189,4 +189,18 @@ export class RecordFundingsService { environment.API_WEB + 'workspace/retrieve-funding-import-wizards.json' ) } + + updatePreferredSource(putCode: string): Observable { + return this._http + .get( + environment.API_WEB + + 'fundings/updateToMaxDisplay.json?putCode=' + + putCode + ) + .pipe( + retry(3), + catchError((error) => this._errorHandler.handleError(error)), + tap(() => this.getFundings({ forceReload: true })) + ) + } } diff --git a/src/app/core/record-keyword/record-keyword.service.ts b/src/app/core/record-keyword/record-keyword.service.ts index baa91e3300..db5fc6e895 100644 --- a/src/app/core/record-keyword/record-keyword.service.ts +++ b/src/app/core/record-keyword/record-keyword.service.ts @@ -40,6 +40,9 @@ export class RecordKeywordService { } else if (!options.forceReload) { return this.$keywords } + if (options.cleanCacheIfExist && this.$keywords) { + this.$keywords.next(undefined) + } this._http .get( diff --git a/src/app/core/record-names/record-names.service.ts b/src/app/core/record-names/record-names.service.ts index 2c5bfe7527..f507cf91cb 100644 --- a/src/app/core/record-names/record-names.service.ts +++ b/src/app/core/record-names/record-names.service.ts @@ -39,6 +39,9 @@ export class RecordNamesService { } else if (!options.forceReload) { return this.$names } + if (options.cleanCacheIfExist && this.$names) { + this.$names.next(undefined) + } this._http .get(environment.API_WEB + `account/nameForm.json`, { diff --git a/src/app/core/record-other-names/record-other-names.service.ts b/src/app/core/record-other-names/record-other-names.service.ts index 60b6567d79..4d8c3c0792 100644 --- a/src/app/core/record-other-names/record-other-names.service.ts +++ b/src/app/core/record-other-names/record-other-names.service.ts @@ -7,6 +7,7 @@ import { OtherNamesEndPoint } from '../../types/record-other-names.endpoint' import { environment } from '../../../environments/environment' import { UserRecordOptions } from 'src/app/types/record.local' import { RecordPublicSideBarService } from '../record-public-side-bar/record-public-side-bar.service' +import { flatMap, groupBy } from 'lodash' @Injectable({ providedIn: 'root', @@ -30,14 +31,24 @@ export class RecordOtherNamesService { } ): Observable { if (options.publicRecordId) { - return this._recordPublicSidebar - .getPublicRecordSideBar(options) - .pipe(map((value) => value.otherNames)) + return this._recordPublicSidebar.getPublicRecordSideBar(options).pipe( + map((value) => value.otherNames), + map((value) => { + value.otherNames = flatMap( + groupBy(value.otherNames, (item) => + item.content.toLowerCase().trim() + ) + ) + return value + }) + ) } if (!this.$otherNames) { this.$otherNames = new ReplaySubject(1) } else if (!options.forceReload) { return this.$otherNames + } else if (options.cleanCacheIfExist && this.$otherNames) { + this.$otherNames.next(undefined) } this._http diff --git a/src/app/core/record-peer-review/record-peer-review.service.ts b/src/app/core/record-peer-review/record-peer-review.service.ts index e0188117e8..ce55a7eb1f 100644 --- a/src/app/core/record-peer-review/record-peer-review.service.ts +++ b/src/app/core/record-peer-review/record-peer-review.service.ts @@ -6,8 +6,9 @@ import { environment } from '../../../environments/environment' import { PeerReview } from '../../types/record-peer-review.endpoint' import { UserRecordOptions } from 'src/app/types/record.local' import { RecordImportWizard } from '../../types/record-peer-review-import.endpoint' -import { retry, catchError, switchMap, tap } from 'rxjs/operators' +import { retry, catchError, tap } from 'rxjs/operators' import { VisibilityStrings } from '../../types/common.endpoint' +import { cloneDeep } from 'lodash' @Injectable({ providedIn: 'root', @@ -26,7 +27,7 @@ export class RecordPeerReviewService { ) {} getPeerReviewGroups(options: UserRecordOptions): Observable { - if (options.publicRecordId) { + if (options?.publicRecordId) { this._http .get( environment.API_WEB + @@ -37,15 +38,25 @@ export class RecordPeerReviewService { .pipe( retry(3), catchError((error) => this._errorHandler.handleError(error)), - catchError((error) => of([])), + catchError(() => of([])), tap((data) => { this.lastEmittedValue = data this.$peer.next(data) - }), - switchMap((data) => this.$peer.asObservable()) + }) ) .subscribe() + return this.$peer.asObservable() } else { + if (!this.$peer) { + this.$peer = new ReplaySubject(1) + } else if (!options.forceReload) { + return this.$peer + } + + if (options.cleanCacheIfExist && this.$peer) { + this.$peer.next(undefined) + } + this._http .get( environment.API_WEB + @@ -55,15 +66,15 @@ export class RecordPeerReviewService { .pipe( retry(3), catchError((error) => this._errorHandler.handleError(error)), - tap((data) => { - this.lastEmittedValue = data - this.$peer.next(data) - }), - switchMap((data) => this.$peer.asObservable()) + catchError(() => of([])), + tap((value) => { + this.lastEmittedValue = cloneDeep(value) + this.$peer.next(value) + }) ) .subscribe() + return this.$peer.asObservable() } - return this.$peer.asObservable() } changeUserRecordContext(userRecordContext: UserRecordOptions) { @@ -118,4 +129,18 @@ export class RecordPeerReviewService { tap(() => this.getPeerReviewGroups({ forceReload: true })) ) } + + updatePreferredSource(putCode: string): Observable { + return this._http + .get( + environment.API_WEB + + 'peer-reviews/updateToMaxDisplay.json?putCode=' + + putCode + ) + .pipe( + retry(3), + catchError((error) => this._errorHandler.handleError(error)), + tap(() => this.getPeerReviewGroups({ forceReload: true })) + ) + } } diff --git a/src/app/core/record-person/record-person.service.ts b/src/app/core/record-person/record-person.service.ts index 2421e85816..766b82fc3c 100644 --- a/src/app/core/record-person/record-person.service.ts +++ b/src/app/core/record-person/record-person.service.ts @@ -1,9 +1,7 @@ import { HttpClient } from '@angular/common/http' import { Injectable } from '@angular/core' import { Observable, ReplaySubject } from 'rxjs' -import { catchError } from 'rxjs/internal/operators/catchError' -import { retry } from 'rxjs/internal/operators/retry' -import { first, map, switchMap, tap } from 'rxjs/operators' +import { catchError, first, map, switchMap, tap, retry } from 'rxjs/operators' import { Person } from 'src/app/types' import { UserRecordOptions } from 'src/app/types/record.local' import { environment } from 'src/environments/environment' diff --git a/src/app/core/record-personal-identifiers/record-person-identifier.service.ts b/src/app/core/record-personal-identifiers/record-person-identifier.service.ts index 383762481f..84728ffdf1 100644 --- a/src/app/core/record-personal-identifiers/record-person-identifier.service.ts +++ b/src/app/core/record-personal-identifiers/record-person-identifier.service.ts @@ -37,20 +37,24 @@ export class RecordPersonIdentifierService { .pipe(map((value) => value.externalIdentifier)) } - return this.getPrivateRecordIdentifiers(options.forceReload).asObservable() + return this.getPrivateRecordIdentifiers(options).asObservable() } private getPrivateRecordIdentifiers( - forceReload: boolean + options: UserRecordOptions ): ReplaySubject { if (!this.$privatePersonIdentifier) { this.$privatePersonIdentifier = new ReplaySubject( 1 ) - } else if (!forceReload) { + } else if (!options.forceReload) { return this.$privatePersonIdentifier } + if (options.cleanCacheIfExist && this.$privatePersonIdentifier) { + this.$privatePersonIdentifier.next(undefined) + } + this._http .get( environment.API_WEB + `my-orcid/externalIdentifiers.json`, diff --git a/src/app/core/record-research-resource/record-research-resource.service.ts b/src/app/core/record-research-resource/record-research-resource.service.ts index 12295f4bc0..ac8f0295f2 100644 --- a/src/app/core/record-research-resource/record-research-resource.service.ts +++ b/src/app/core/record-research-resource/record-research-resource.service.ts @@ -1,7 +1,7 @@ import { HttpClient, HttpHeaders } from '@angular/common/http' import { Injectable } from '@angular/core' import { Observable, of, ReplaySubject } from 'rxjs' -import { catchError, map, retry, take, tap } from 'rxjs/operators' +import { catchError, map, retry, tap } from 'rxjs/operators' import { UserRecordOptions } from 'src/app/types/record.local' import { environment } from '../../../environments/environment' @@ -17,7 +17,7 @@ import { DEFAULT_PAGE_SIZE } from 'src/app/constants' providedIn: 'root', }) export class RecordResearchResourceService { - $researchResourcesSubject: ReplaySubject + $researchResourcesSubject: ReplaySubject = new ReplaySubject() headers = new HttpHeaders({ 'Access-Control-Allow-Origin': '*', @@ -35,76 +35,53 @@ export class RecordResearchResourceService { options.pageSize = options.pageSize || DEFAULT_PAGE_SIZE options.offset = options.offset || 0 + let url if (options.publicRecordId) { - return this._http - .get( - environment.API_WEB + - options.publicRecordId + - '/researchResourcePage.json?offset=' + - options.offset + - '&sort=' + - (options.sort != null ? options.sort : 'date') + - '&sortAsc=' + - (options.sortAsc != null ? options.sortAsc : false) + - '&pageSize=' + - options.pageSize - ) - .pipe( - catchError((error) => this._errorHandler.handleError(error)), - catchError(() => of({ groups: [] } as ResearchResourcesEndpoint)), - map((data) => { - data.pageSize = options.pageSize - data.pageIndex = options.offset - ? Math.floor(options.offset / options.pageSize) - : 0 - return data - }) - ) + url = options.publicRecordId + '/researchResourcePage.json' } else { - if (!this.$researchResourcesSubject) { - this.$researchResourcesSubject = new ReplaySubject( - 1 - ) - } else if (!options.forceReload) { - return this.$researchResourcesSubject - } + url = 'research-resources/researchResourcePage.json' + } - this._http - .get( - environment.API_WEB + - 'research-resources/researchResourcePage.json?offset=' + - options.offset + - '&sort=' + - (options.sort != null ? options.sort : 'date') + - '&sortAsc=' + - (options.sortAsc != null ? options.sortAsc : true) + - '&pageSize=' + - options.pageSize - ) - .pipe( - retry(3), - catchError((error) => this._errorHandler.handleError(error)), - catchError(() => of({ groups: [] } as ResearchResourcesEndpoint)), - map((data) => { - data.pageSize = options.pageSize - data.pageIndex = options.offset - ? Math.floor(options.offset / options.pageSize) - : 0 - return data - }), - tap((value) => { - this.$researchResourcesSubject.next(value) - }) - ) - .subscribe() + if (options.cleanCacheIfExist && this.$researchResourcesSubject) { + this.$researchResourcesSubject.next(undefined) } + + this._http + .get( + environment.API_WEB + + url + + '?offset=' + + options.offset + + '&sort=' + + (options.sort != null ? options.sort : 'date') + + '&sortAsc=' + + (options.sortAsc != null ? options.sortAsc : false) + + '&pageSize=' + + options.pageSize + ) + .pipe( + retry(3), + catchError((error) => this._errorHandler.handleError(error)), + catchError(() => of({ groups: [] } as ResearchResourcesEndpoint)), + map((data) => { + data.pageSize = options.pageSize + data.pageIndex = options.offset + ? Math.floor(options.offset / options.pageSize) + : 0 + return data + }), + tap((data) => { + this.$researchResourcesSubject.next(data) + }) + ) + .subscribe() return this.$researchResourcesSubject.asObservable() } changeUserRecordContext( event: UserRecordOptions ): Observable { - return this.getResearchResourcePage(event).pipe(take(1)) + return this.getResearchResourcePage(event) } getResearchResourceById(putCode: string): Observable { @@ -151,4 +128,18 @@ export class RecordResearchResourceService { tap(() => this.getResearchResourcePage({ forceReload: true })) ) } + + updatePreferredSource(putCode: string): Observable { + return this._http + .get( + environment.API_WEB + + 'research-resources/updateToMaxDisplay.json?putCode=' + + putCode + ) + .pipe( + retry(3), + catchError((error) => this._errorHandler.handleError(error)), + tap(() => this.getResearchResourcePage({ forceReload: true })) + ) + } } diff --git a/src/app/core/record-websites/record-websites.service.ts b/src/app/core/record-websites/record-websites.service.ts index 84c9a3dbda..ddfa28cda4 100644 --- a/src/app/core/record-websites/record-websites.service.ts +++ b/src/app/core/record-websites/record-websites.service.ts @@ -40,6 +40,10 @@ export class RecordWebsitesService { return this.$websites } + if (options.cleanCacheIfExist && this.$websites) { + this.$websites.next(undefined) + } + this._http .get( environment.API_WEB + `my-orcid/websitesForms.json`, diff --git a/src/app/core/record-works/record-works.service.ts b/src/app/core/record-works/record-works.service.ts index e2724c4d0c..6ebcdc6339 100644 --- a/src/app/core/record-works/record-works.service.ts +++ b/src/app/core/record-works/record-works.service.ts @@ -1,15 +1,19 @@ import { HttpClient } from '@angular/common/http' import { Injectable } from '@angular/core' -import { Observable, of, ReplaySubject } from 'rxjs' +import { EMPTY, Observable, of, ReplaySubject } from 'rxjs' import { catchError, map, retry, switchMap, take, tap } from 'rxjs/operators' import { Work, WorksEndpoint } from 'src/app/types/record-works.endpoint' import { UserRecordOptions } from 'src/app/types/record.local' -import { WorkIdType, WorkIdTypeValidation } from 'src/app/types/works.endpoint' +import { + GroupingSuggestions, + WorkIdType, + WorkIdTypeValidation, +} from 'src/app/types/works.endpoint' import { environment } from 'src/environments/environment' import { ErrorHandlerService } from '../error-handler/error-handler.service' import { VisibilityStrings } from '../../types/common.endpoint' -import { DEFAULT_PAGE_SIZE } from 'src/app/constants' +import { DEFAULT_PAGE_SIZE, EXTERNAL_ID_TYPE_WORK } from 'src/app/constants' import { RecordImportWizard } from '../../types/record-peer-review-import.endpoint' @Injectable({ @@ -17,10 +21,11 @@ import { RecordImportWizard } from '../../types/record-peer-review-import.endpoi }) export class RecordWorksService { lastEmittedValue: WorksEndpoint = null - workSubject = new ReplaySubject(1) + groupingSuggestionsSubjectInitialized = false + groupingSuggestionsSubject = new ReplaySubject(1) + $workSubject = new ReplaySubject(1) offset = 0 - $works: ReplaySubject userRecordOptions: UserRecordOptions = {} constructor( @@ -44,9 +49,9 @@ export class RecordWorksService { return this.getWorksData(offset, sort, sortAsc, orcidId).pipe( map((data) => { this.lastEmittedValue = data - this.workSubject.next(data) + this.$workSubject.next(data) }), - switchMap((data) => this.workSubject.asObservable()) + switchMap((data) => this.$workSubject.asObservable()) ) } /** @@ -56,79 +61,56 @@ export class RecordWorksService { * @param id user Orcid id */ getWorks(options: UserRecordOptions): Observable { + if (options.cleanCacheIfExist && this.$workSubject) { + this.$workSubject.next(undefined) + } + options.pageSize = options.pageSize || DEFAULT_PAGE_SIZE options.offset = options.offset || 0 + let url if (options.publicRecordId) { - return this._http - .get( - environment.API_WEB + - options.publicRecordId + - '/worksPage.json?offset=' + - options.offset + - '&sort=' + - (options.sort != null ? options.sort : 'date') + - '&sortAsc=' + - (options.sortAsc != null ? options.sortAsc : false) + - `&pageSize=` + - options.pageSize - ) - - .pipe( - retry(3), - catchError((error) => this._errorHandler.handleError(error)), - catchError(() => of({ groups: [] } as WorksEndpoint)), - map((data) => { - data.pageSize = options.pageSize - data.pageIndex = options.offset - ? Math.floor(options.offset / options.pageSize) - : 0 - return data - }), - tap((data) => { - this.lastEmittedValue = data - this.workSubject.next(data) - }), - switchMap((data) => this.workSubject.asObservable()) - ) + url = options.publicRecordId + '/worksPage.json' } else { - if (!this.$works) { - this.$works = new ReplaySubject(1) - } else if (!options.forceReload) { - return this.$works - } - - this._http - .get( - environment.API_WEB + - 'works/worksPage.json?offset=' + - options.offset + - '&sort=' + - (options.sort != null ? options.sort : 'date') + - '&sortAsc=' + - (options.sortAsc != null ? options.sortAsc : true) + - `&pageSize=` + - options.pageSize - ) - .pipe( - retry(3), - catchError((error) => this._errorHandler.handleError(error)), - map((data) => { - data.pageSize = options.pageSize - data.pageIndex = options.offset - ? Math.floor(options.offset / options.pageSize) - : 0 - return data - }), - tap((data) => { - this.lastEmittedValue = data - this.$works.next(data) - }) - ) - .subscribe() - - return this.$works.asObservable() + url = 'works/worksPage.json' } + + this._http + .get( + environment.API_WEB + + url + + '?offset=' + + options.offset + + '&sort=' + + (options.sort != null ? options.sort : 'date') + + '&sortAsc=' + + (options.sortAsc != null ? options.sortAsc : false) + + `&pageSize=` + + options.pageSize + ) + .pipe( + retry(3), + catchError((error) => this._errorHandler.handleError(error)), + catchError(() => of({ groups: [] } as WorksEndpoint)), + map((data) => { + data.pageSize = options.pageSize + data.pageIndex = options.offset + ? Math.floor(options.offset / options.pageSize) + : 0 + return data + }), + tap((data) => { + this.lastEmittedValue = data + this.$workSubject.next(data) + }), + tap(() => { + if (!options.publicRecordId) { + this.getWorksGroupingSuggestions({ force: true }) + } + }) + ) + .subscribe() + return this.$workSubject.asObservable() } changeUserRecordContext( @@ -163,10 +145,10 @@ export class RecordWorksService { return work }) }) - this.workSubject.next(this.lastEmittedValue) + this.$workSubject.next(this.lastEmittedValue) }), switchMap(() => { - return this.workSubject.asObservable() + return this.$workSubject.asObservable() }) ) } @@ -204,25 +186,25 @@ export class RecordWorksService { ) } - save(work: Work) { + save(work: Work, bibtex?: boolean) { return this._http .post(environment.API_WEB + `works/work.json`, work) .pipe( retry(3), catchError((error) => this._errorHandler.handleError(error)), - switchMap(() => { - if (work.putCode?.value) { - return this.getDetails(work.putCode.value) - } else { - return this.getWorks({ forceReload: true }) - } - }) + switchMap(() => + bibtex === false ? EMPTY : this.getWorks({ forceReload: true }) + ) ) } getWork(): Observable { return this._http.get(environment.API_WEB + `works/work.json`).pipe( retry(3), + map((x) => { + x.workExternalIdentifiers = [] + return x + }), catchError((error) => this._errorHandler.handleError(error)) ) } @@ -298,8 +280,12 @@ export class RecordWorksService { } combine(putCodes: string[]): Observable { + return this.combinePutCodes(putCodes.join(',')) + } + + combinePutCodes(putCodes: string): Observable { return this._http - .post(environment.API_WEB + 'works/group/' + putCodes.join(','), {}) + .post(environment.API_WEB + 'works/group/' + putCodes, {}) .pipe( retry(3), catchError((error) => this._errorHandler.handleError(error)), @@ -348,4 +334,51 @@ export class RecordWorksService { environment.API_WEB + 'workspace/retrieve-work-import-wizards.json' ) } + + loadExternalId( + externalId: string, + type: EXTERNAL_ID_TYPE_WORK + ): Observable { + let url = 'works/resolve/doi?value=' + if (type === EXTERNAL_ID_TYPE_WORK.pubMed) { + const regex = new RegExp(/((.*[\/,\\](pmc))|(PMC)\d{5})/g) + const result = regex.exec(externalId) + url = result ? 'works/resolve/pmc/?value=' : 'works/resolve/pmid?value=' + } + + return this._http.get(environment.API_WEB + url + externalId) + } + + worksValidate(obj): Observable { + return this._http.post( + environment.API_WEB + 'works/worksValidate.json', + JSON.stringify(obj), + { + headers: { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + }, + } + ) + } + + getWorksGroupingSuggestions( + options: { force: boolean } = { force: false } + ): Observable { + if (options.force || !this.groupingSuggestionsSubjectInitialized) { + this.groupingSuggestionsSubjectInitialized = true + this._http + .get( + environment.API_WEB + 'works/groupingSuggestions.json', + { + headers: { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + }, + } + ) + .subscribe((x) => this.groupingSuggestionsSubject.next(x)) + } + return this.groupingSuggestionsSubject.asObservable() + } } diff --git a/src/app/core/record/record.service.ts b/src/app/core/record/record.service.ts index 923a3ca9da..040535cc43 100644 --- a/src/app/core/record/record.service.ts +++ b/src/app/core/record/record.service.ts @@ -1,7 +1,14 @@ import { HttpClient, HttpHeaders } from '@angular/common/http' import { Injectable } from '@angular/core' -import { combineLatest, Observable, of, ReplaySubject } from 'rxjs' -import { catchError, map, retry, startWith, tap } from 'rxjs/operators' +import { combineLatest, Observable, of, ReplaySubject, Subject } from 'rxjs' +import { + catchError, + map, + retry, + startWith, + takeUntil, + tap, +} from 'rxjs/operators' import { EmailsEndpoint, ExternalIdentifier, @@ -47,6 +54,7 @@ import { UserInfoService } from '../user-info/user-info.service' }) export class RecordService { recordSubject$: ReplaySubject + private readonly $destroy = new Subject() constructor( private _http: HttpClient, @@ -74,6 +82,7 @@ export class RecordService { 'Content-Type': 'application/json', }) + subscriptionSourceCountDebugger = 0 /** * @param options: * - use `forceReload` to force all server calls. @@ -85,104 +94,122 @@ export class RecordService { * @returns And subject with all the require data from private or public orcid record */ getRecord(options?: UserRecordOptions): Observable { - if (!this.recordSubject$ || options.forceReload) { + if (!this.recordSubject$) { this.recordSubject$ = new ReplaySubject(1) - if (environment.debugger) { - this.recordSubject$.subscribe((value) => { - console.debug(value) - }) - } + this.attachDebugger() + } else if (!options?.forceReload) { + return this.recordSubject$.asObservable() + } - combineLatest([ - this._recordEmailsService - .getEmails(options) - .pipe(startWith(undefined)), - this._recordOtherNamesService - .getOtherNames(options) - .pipe(startWith(undefined)), - this._recordCountryService - .getAddresses(options) - .pipe(startWith(undefined)), - this._recordKeywordService - .getKeywords(options) - .pipe(startWith(undefined)), - this._recordWebsitesService - .getWebsites(options) - .pipe(startWith(undefined)), - this._recordPersonalIdentifier - .getPersonalIdentifiers(options) - .pipe(startWith(undefined)), - this._recordNamesService - .getNames(options) - .pipe(startWith(undefined)), - this._recordBiographyService - .getBiography(options) - .pipe(startWith(undefined)), - this._recordAffiliations - .getAffiliations(options) - .pipe(startWith(undefined)), - this._recordFundings - .getFundings(options) - .pipe(startWith(undefined)), - this.getPreferences(options).pipe(startWith(undefined)), - this._recordPeerReviewService - .getPeerReviewGroups(options) - .pipe(startWith(undefined)), - this._recordResearchResourceService - .getResearchResourcePage(options) - .pipe(startWith(undefined)), - this._recordWorkService - .getWorks(options) - .pipe(startWith(undefined)), - this.getLastModifiedTime(options).pipe(startWith(undefined)), - this._userInfo.getUserInfo(options).pipe(startWith(undefined)), - ]) - .pipe( - tap( - ([ - emails, - otherNames, - countries, - keyword, - website, - externalIdentifier, - names, - biography, - affiliations, - fundings, - preferences, - peerReviews, - researchResources, - works, - lastModifiedTime, - userInfo, - ]) => { - this.recordSubject$.next({ - emails: emails as EmailsEndpoint, - otherNames: otherNames as OtherNamesEndPoint, - countries: countries as CountriesEndpoint, - keyword: keyword as KeywordEndPoint, - website: website as WebsitesEndPoint, - externalIdentifier: externalIdentifier as PersonIdentifierEndpoint, - names: names as NamesEndPoint, - biography: biography as BiographyEndPoint, - affiliations: affiliations as AffiliationUIGroup[], - fundings: fundings as FundingGroup[], - preferences: preferences as Preferences, - peerReviews: peerReviews as PeerReview[], - researchResources: researchResources as ResearchResourcesEndpoint, - works: works as WorksEndpoint, - lastModifiedTime: lastModifiedTime as any, - userInfo: userInfo as UserInfo, - }) - } - ) - ) - .subscribe() + if (this.recordSubject$ && options?.cleanCacheIfExist) { + this.recordSubject$.next(undefined) } + const subscriptionCount = this.subscriptionSourceCountDebugger + this.subscriptionSourceCountDebugger = + this.subscriptionSourceCountDebugger + 1 + + // Un-subscribe from previous combineLatest subscriptions + this.$destroy.next() + // Subscribe to a new combineLatest http calls subscription + combineLatest([ + this._recordEmailsService + .getEmails(options) + .pipe(startWith(undefined)), + this._recordOtherNamesService + .getOtherNames(options) + .pipe(startWith(undefined)), + this._recordCountryService + .getAddresses(options) + .pipe(startWith(undefined)), + this._recordKeywordService + .getKeywords(options) + .pipe(startWith(undefined)), + this._recordWebsitesService + .getWebsites(options) + .pipe(startWith(undefined)), + this._recordPersonalIdentifier + .getPersonalIdentifiers(options) + .pipe(startWith(undefined)), + this._recordNamesService + .getNames(options) + .pipe(startWith(undefined)), + this._recordBiographyService + .getBiography(options) + .pipe(startWith(undefined)), + this._recordAffiliations + .getAffiliations(options) + .pipe(startWith(undefined)), + this._recordFundings + .getFundings(options) + .pipe(startWith(undefined)), + this.getPreferences(options)?.pipe(startWith(undefined)), + this._recordPeerReviewService + .getPeerReviewGroups(options) + .pipe(startWith(undefined)), + this._recordResearchResourceService + .getResearchResourcePage(options) + .pipe(startWith(undefined)), + this._recordWorkService + .getWorks(options) + .pipe(startWith(undefined)), + this.getLastModifiedTime(options).pipe(startWith(undefined)), + this._userInfo.getUserInfo(options).pipe(startWith(undefined)), + ]) + .pipe( + tap( + ([ + emails, + otherNames, + countries, + keyword, + website, + externalIdentifier, + names, + biography, + affiliations, + fundings, + preferences, + peerReviews, + researchResources, + works, + lastModifiedTime, + userInfo, + ]) => { + this.recordSubject$.next({ + subscriptionCount: subscriptionCount, + emails: emails as EmailsEndpoint, + otherNames: otherNames as OtherNamesEndPoint, + countries: countries as CountriesEndpoint, + keyword: keyword as KeywordEndPoint, + website: website as WebsitesEndPoint, + externalIdentifier: externalIdentifier as PersonIdentifierEndpoint, + names: names as NamesEndPoint, + biography: biography as BiographyEndPoint, + affiliations: affiliations as AffiliationUIGroup[], + fundings: fundings as FundingGroup[], + preferences: preferences as Preferences, + peerReviews: peerReviews as PeerReview[], + researchResources: researchResources as ResearchResourcesEndpoint, + works: works as WorksEndpoint, + lastModifiedTime: lastModifiedTime as any, + userInfo: userInfo as UserInfo, + }) + } + ), + takeUntil(this.$destroy) + ) + + .subscribe() return this.recordSubject$.asObservable() } + attachDebugger() { + if (environment.debugger) { + this.recordSubject$.subscribe((value) => { + console.debug(value) + }) + } + } getExternalIdentifier(): Observable { return this._http @@ -245,6 +272,7 @@ export class RecordService { if (options.publicRecordId) { return of(undefined) } + return this._http .get( environment.API_WEB + `account/preferences.json`, diff --git a/src/app/core/register/register.service.ts b/src/app/core/register/register.service.ts index 748e4cdd5b..1f90b7d24d 100644 --- a/src/app/core/register/register.service.ts +++ b/src/app/core/register/register.service.ts @@ -1,7 +1,7 @@ import { HttpClient } from '@angular/common/http' import { Injectable } from '@angular/core' import { FormGroup } from '@angular/forms' -import { Observable, of } from 'rxjs' +import { Observable } from 'rxjs' import { catchError, first, map, retry, switchMap } from 'rxjs/operators' import { PlatformInfo, PlatformInfoService } from 'src/app/cdk/platform-info' import { RequestInfoForm } from 'src/app/types' @@ -80,7 +80,7 @@ export class RegisterService extends _RegisterServiceMixingBase { StepC: FormGroup, reactivation: ReactivationLocal, requestInfoForm?: RequestInfoForm, - updateUserService = false + updateUserService = true ): Observable { this.backendRegistrationForm.valNumClient = this.backendRegistrationForm.valNumServer / 2 @@ -130,27 +130,20 @@ export class RegisterService extends _RegisterServiceMixingBase { this._errorHandler.handleError(error, ERROR_REPORT.REGISTER) ), switchMap((value) => { - // At the moment by default the userService wont be refreshed, only on the oauth login - // other logins that go outside this application, wont require to refresh the user service - if (updateUserService) { - // call refreshUserSession with force session update to handle register actions from sessions with a logged in user - return this._userService.refreshUserSession(true, true).pipe( - first(), - map((userStatus) => { - if (!userStatus.loggedIn && !value.errors) { - // sanity check the user should be logged - // sanity check the user should be logged - this._errorHandler.handleError( - new Error('registerSanityIssue'), - ERROR_REPORT.REGISTER - ) - } - return value - }) - ) - } else { - return of(value) - } + return this._userService.refreshUserSession(true, true).pipe( + first(), + map((userStatus) => { + if (!userStatus.loggedIn && !value.errors) { + // sanity check the user should be logged + // sanity check the user should be logged + this._errorHandler.handleError( + new Error('registerSanityIssue'), + ERROR_REPORT.REGISTER + ) + } + return value + }) + ) }) ) }) diff --git a/src/app/core/sign-in/sign-in.service.ts b/src/app/core/sign-in/sign-in.service.ts index 385e14e2bf..5f32951782 100644 --- a/src/app/core/sign-in/sign-in.service.ts +++ b/src/app/core/sign-in/sign-in.service.ts @@ -1,6 +1,5 @@ import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http' import { Injectable } from '@angular/core' -import { of } from 'rxjs' import { catchError, map, retry, switchMap, first } from 'rxjs/operators' import { environment } from '../../../environments/environment' @@ -31,12 +30,12 @@ export class SignInService { } /** * @param SignInLocal sign in information - * @param updateUserSession default false, set to true if after successfully signing Orcid Angular will still be open + * @param updateUserSession default true, set to true if after successfully signing Orcid Angular will still be open * @param forceSessionUpdate default false, set to true if the user session should be updated even when the user status does not change */ signIn( signInLocal: SignInLocal, - updateUserSession = false, + updateUserSession = true, forceSessionUpdate = false ) { let loginUrl = 'signin/auth.json' @@ -68,18 +67,13 @@ export class SignInService { retry(3), catchError((error) => this._errorHandler.handleError(error)), switchMap((response) => { - // At the moment by default the userService wont be refreshed, only on the oauth login - // other logins that go outside this application, wont require to refresh the user service - if (updateUserSession) { - return this._userService - .refreshUserSession(forceSessionUpdate, true) - .pipe( - first(), - map(() => response) - ) - } else { - return of(response) - } + // call refreshUserSession with force session update to handle register actions from sessions with a logged in user + return this._userService + .refreshUserSession(forceSessionUpdate, true) + .pipe( + first(), + map(() => response) + ) }) ) } diff --git a/src/app/core/user/user.service.ts b/src/app/core/user/user.service.ts index 445653466f..8a880ac1ea 100644 --- a/src/app/core/user/user.service.ts +++ b/src/app/core/user/user.service.ts @@ -1,6 +1,7 @@ -import { HttpClient, HttpHeaders } from '@angular/common/http' +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http' import { Injectable } from '@angular/core' import { + BehaviorSubject, combineLatest, merge, Observable, @@ -21,6 +22,7 @@ import { startWith, switchMap, take, + takeUntil, tap, } from 'rxjs/operators' import { PlatformInfoService } from 'src/app/cdk/platform-info' @@ -72,6 +74,13 @@ export class UserService { private $userSessionSubject = new ReplaySubject(1) sessionInitialized = false keepRefreshingUserSession = true + private hiddenTab = false + private ONE_MINUTE = 60 * 1000 + private FIVE_MINUTES = 5 * 60 * 1000 + private interval$: BehaviorSubject = new BehaviorSubject( + this.ONE_MINUTE + ) + private reset$ = new Subject() _recheck = new Subject<{ forceSessionUpdate: boolean @@ -117,52 +126,57 @@ export class UserService { return this.$userSessionSubject } else { this.sessionInitialized = true - // trigger every 60 seconds or on _recheck subject event - merge( - timer(0, 60 * 1000).pipe( - map((timerUpdate) => { - return { timerUpdate } - }) - ), - this._recheck - ) - .pipe( - // Check user status only when needed - filter((value) => this.keepRefreshingUserSession), - // Check for updates on userStatus.json - switchMap((checkTrigger) => - this.getUserStatus().pipe( - map((loggedIn) => { - return { loggedIn, checkTrigger } - }) - ) - ), - // Filter followup calls if the user status has no change - // - // Also turns on the flag loggingStateComesFromTheServer - // indicating that the current logging state is taken from the server, - // and not the initial assumption. (more on this on the following pipe) - filter((result: UserSessionUpdateParameters) => { - this.loggingStateComesFromTheServer = true - return this.userStatusHasChange(result) - }), - // At the very beginning assumes the user is logged in, - // this is to avoid waiting for userStatus.json before calling userInfo.json and nameForm.json on the first load - startWith({ loggedIn: true, checkTrigger: { timerUpdate: -1 } }), - switchMap((updateParameters) => - this.handleUserDataUpdate(updateParameters) - ), - map((data) => this.computesUpdatedUserData(data)), - // Debugger for the user session on development time - tap((session) => - environment.debugger ? console.debug(session) : null + // trigger every 60 seconds if tab active or every 5 minutes if tab hidden or + // on _recheck subject event + this.interval$.subscribe((duration) => { + merge( + timer(0, duration).pipe( + takeUntil(this.reset$), + map((timerUpdate) => { + return { timerUpdate } + }) ), - tap((session) => { - this.$userSessionSubject.next(session) - }) + this._recheck ) - .subscribe() - return this.$userSessionSubject + .pipe( + // Check user status only when needed + filter((value) => this.keepRefreshingUserSession), + // Check for updates on userStatus.json + switchMap((checkTrigger) => + this.getUserStatus().pipe( + map((loggedIn) => { + return { loggedIn, checkTrigger } + }) + ) + ), + // Filter followup calls if the user status has no change + // + // Also turns on the flag loggingStateComesFromTheServer + // indicating that the current logging state is taken from the server, + // and not the initial assumption. (more on this on the following pipe) + filter((result: UserSessionUpdateParameters) => { + this.loggingStateComesFromTheServer = true + return this.userStatusHasChange(result) + }), + // At the very beginning assumes the user is logged in, + // this is to avoid waiting for userStatus.json before calling userInfo.json and nameForm.json on the first load + startWith({ loggedIn: true, checkTrigger: { timerUpdate: -1 } }), + switchMap((updateParameters) => + this.handleUserDataUpdate(updateParameters) + ), + map((data) => this.computesUpdatedUserData(data)), + // Debugger for the user session on development time + tap((session) => + environment.debugger ? console.debug(session) : null + ), + tap((session) => { + this.$userSessionSubject.next(session) + }) + ) + .subscribe() + }) + + return this.$userSessionSubject.asObservable() } } @@ -434,10 +448,14 @@ export class UserService { // and we also trigger a reload, to reload the oauth page // there might be some scenarios where these two different request might not work as expected. switchAccount(delegator: Delegator) { - const body = 'username=' + delegator.giverOrcid.path + const params = new HttpParams().append( + 'username', + delegator.giverOrcid.path + ) return this._http - .post(`${environment.API_WEB}switch-user`, body, { + .post(`${environment.API_WEB}switch-user`, '', { headers: this.headers, + params: params, }) .pipe( catchError((error) => { @@ -456,4 +474,17 @@ export class UserService { }) ) } + + setTimerAsHiddenState(hiddenTab: boolean) { + // only reset the timer when the visibility is changed + if (hiddenTab && !this.hiddenTab) { + this.hiddenTab = hiddenTab + this.reset$.next() + this.interval$.next(this.FIVE_MINUTES) + } else if (!hiddenTab && this.hiddenTab) { + this.hiddenTab = hiddenTab + this.reset$.next() + this.interval$.next(this.ONE_MINUTE) + } + } } diff --git a/src/app/core/verification-email-modal/verification-email-modal.service.spec.ts b/src/app/core/verification-email-modal/verification-email-modal.service.spec.ts new file mode 100644 index 0000000000..d1720b2084 --- /dev/null +++ b/src/app/core/verification-email-modal/verification-email-modal.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing' + +import { VerificationEmailModalService } from './verification-email-modal.service' + +describe('VerificationEmailModalService', () => { + let service: VerificationEmailModalService + + beforeEach(() => { + TestBed.configureTestingModule({}) + service = TestBed.inject(VerificationEmailModalService) + }) + + it('should be created', () => { + expect(service).toBeTruthy() + }) +}) diff --git a/src/app/core/verification-email-modal/verification-email-modal.service.ts b/src/app/core/verification-email-modal/verification-email-modal.service.ts new file mode 100644 index 0000000000..b5818c5579 --- /dev/null +++ b/src/app/core/verification-email-modal/verification-email-modal.service.ts @@ -0,0 +1,40 @@ +import { Injectable } from '@angular/core' +import { MatDialog } from '@angular/material/dialog' +import { PlatformInfoService } from '../../cdk/platform-info' +import { first } from 'rxjs/operators' +import { TopBarVerificationEmailModalComponent } from '../../record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component' + +@Injectable({ + providedIn: 'root', +}) +export class VerificationEmailModalService { + constructor( + private _dialog: MatDialog, + private _platform: PlatformInfoService + ) {} + + alreadyOpenVerificacionModal = false + + openVerificationEmailModal(primaryEmail: string) { + this._platform + .get() + .pipe(first()) + .subscribe((platform) => { + if (!this.alreadyOpenVerificacionModal) { + this.alreadyOpenVerificacionModal = true + const modalComponent = this._dialog.open( + TopBarVerificationEmailModalComponent, + { + width: '850px', + maxWidth: platform.tabletOrHandset ? '99%' : '80vw', + } + ) + modalComponent.componentInstance.primaryEmail = primaryEmail + + modalComponent + .afterClosed() + .subscribe((x) => (this.alreadyOpenVerificacionModal = false)) + } + }) + } +} diff --git a/src/app/guards/authenticated.guard.ts b/src/app/guards/authenticated.guard.ts index 0863b6183c..2ebbb748d5 100644 --- a/src/app/guards/authenticated.guard.ts +++ b/src/app/guards/authenticated.guard.ts @@ -25,14 +25,13 @@ export class AuthenticatedGuard implements CanActivateChild { | Promise | boolean | UrlTree { - return this._userInfo - .getUserSession() - .pipe( - map( - (value) => - value.loggedIn || - this._router.createUrlTree([ApplicationRoutes.signin]) + return this._userInfo.getUserSession().pipe( + map((value) => { + return ( + value.loggedIn || + this._router.createUrlTree([ApplicationRoutes.signin]) ) - ) + }) + ) } } diff --git a/src/app/guards/language.guard.ts b/src/app/guards/language.guard.ts index bc98bd2d79..23d33b73a9 100644 --- a/src/app/guards/language.guard.ts +++ b/src/app/guards/language.guard.ts @@ -14,7 +14,7 @@ import { UserService } from '../core' import { ErrorHandlerService } from '../core/error-handler/error-handler.service' import { LanguageService } from '../core/language/language.service' import { LanguageContext } from '../types/language.locale' - +const GUARD_COOKIE_CHECK = 'lang_refresh' @Injectable({ providedIn: 'root', }) @@ -32,7 +32,6 @@ export class LanguageGuard implements CanActivateChild { state: RouterStateSnapshot ): Observable { let langContext: LanguageContext - // Wait the user session so the language cookie is declared from the backend return this._user.getUserSession().pipe( tap(() => { @@ -43,27 +42,46 @@ export class LanguageGuard implements CanActivateChild { console.debug('language context', langContext) } }), + /// HANDLE LANGUAGE CHANGE BY QUERY PARAMETERS, like `https://orcid.org/signin?lang=pt` switchMap(() => { - // The browser cookie language might already right if (this.currentAppLanguageMatchTheParamLanguage(langContext)) { + this._cookies.delete(GUARD_COOKIE_CHECK) return of(true) } else { - // the browser needs to be reloaded to set the right cookie and reload. - return this._languageService - .changeLanguage(langContext.param) - .pipe( - switchMap(() => - of(this.window.location.reload()).pipe(switchMap(() => NEVER)) + // the browser needs to be reloaded to set the right cookie. + return this._languageService.changeLanguage(langContext.param).pipe( + switchMap(() => + // Redirect the user to the destiny LOCAL (without using the router) + of((this.window.location.href = state?.url || '/')).pipe( + switchMap(() => NEVER) ) ) + ) } }), + /// HANDLE LANGUAGE COOKIE UPDATES, like when a user login into a `spanish` user from a `english` signin page. switchMap(() => { - // A weird tomcat or cloudflare scenario where the the wrong translated app is downloaded - if (!this.currentAppLanguageMatchCookieLanguage(langContext)) { - return this._errorHandler.handleError( - new Error('cacheIssueDetected/') - ) + if (this.currentAppLanguageMatchCookieLanguage(langContext)) { + this._cookies.delete(GUARD_COOKIE_CHECK) + return of(true) + } else { + if ( + !this._cookies.check(GUARD_COOKIE_CHECK) || + this._cookies.get(GUARD_COOKIE_CHECK) !== langContext.cookie + ) { + // the browser needs to be reloaded to set the right cookie. + this._cookies.set(GUARD_COOKIE_CHECK, langContext.cookie) + // Redirect the user to the destiny LOCAL (without using the router) + return of((this.window.location.href = state?.url || '/')).pipe( + switchMap(() => NEVER) + ) + } else { + // Weird event where `GUARD_COOKIE_CHECK` was already set, the app was already reloaded + // But the current app language do not match the cookie language + return this._errorHandler.handleError( + new Error('cacheIssueDetected/') + ) + } } }), catchError(() => of(true)) // Allow to continue if the language change fails diff --git a/src/app/institutional/pages/institutional/institutional.component.ts b/src/app/institutional/pages/institutional/institutional.component.ts index 0adb8884ec..9bc8ea7463 100644 --- a/src/app/institutional/pages/institutional/institutional.component.ts +++ b/src/app/institutional/pages/institutional/institutional.component.ts @@ -12,6 +12,7 @@ import { CookieService } from 'ngx-cookie-service' import { Observable } from 'rxjs' import { first, map, startWith, tap } from 'rxjs/operators' import { PlatformInfoService } from 'src/app/cdk/platform-info' +import { ApplicationRoutes } from 'src/app/constants' import { environment } from '../../../../environments/environment' import { WINDOW } from '../../../cdk/window' @@ -98,7 +99,7 @@ export class InstitutionalComponent implements OnInit { .get() .pipe(first()) .subscribe((platform) => { - this._router.navigate(['/signin'], { + this._router.navigate([ApplicationRoutes.signin], { queryParams: platform.queryParameters, }) }) diff --git a/src/app/layout/header/header.component.html b/src/app/layout/header/header.component.html index 65c4ada858..92335dea2d 100644 --- a/src/app/layout/header/header.component.html +++ b/src/app/layout/header/header.component.html @@ -145,11 +145,7 @@ class="col no-gutters" *ngIf="checkMenuItemRequirements({ logging: true })" > - - diff --git a/src/app/layout/user-menu/user-menu.component.ts b/src/app/layout/user-menu/user-menu.component.ts index bf60b17849..b84d1c309d 100644 --- a/src/app/layout/user-menu/user-menu.component.ts +++ b/src/app/layout/user-menu/user-menu.component.ts @@ -4,9 +4,10 @@ import { environment } from 'src/environments/environment' import { UserInfo } from 'src/app/types' import { PlatformInfoService, PlatformInfo } from 'src/app/cdk/platform-info' import { WINDOW } from 'src/app/cdk/window' -import { TogglzService } from '../../core/togglz/togglz.service' import { Router } from '@angular/router' import { ApplicationRoutes } from 'src/app/constants' +import { SignInService } from 'src/app/core/sign-in/sign-in.service' +import { switchMap, take } from 'rxjs/operators' @Component({ selector: 'app-user-menu', @@ -21,7 +22,6 @@ export class UserMenuComponent implements OnInit { userInfo: UserInfo displayName: string platform: PlatformInfo - togglzOrcidAngularInbox: boolean labelSigninRegister = $localize`:@@layout.ariaLabelSigninRegister:sign in or register` labelUserMenu = $localize`:@@layout.ariaLabelUserMenu:User menu` @@ -30,7 +30,8 @@ export class UserMenuComponent implements OnInit { _userInfo: UserService, @Inject(WINDOW) private window: Window, _platform: PlatformInfoService, - _togglz: TogglzService + private _signingService: SignInService, + private _platformInfo: PlatformInfoService ) { _userInfo.getUserSession().subscribe((data) => { if (data.loggedIn) { @@ -44,20 +45,28 @@ export class UserMenuComponent implements OnInit { _platform.get().subscribe((data) => { this.platform = data }) - _togglz - .getStateOf('ORCID_ANGULAR_INBOX') - .subscribe((value) => (this.togglzOrcidAngularInbox = value)) } ngOnInit() {} goto(url) { - if (url === 'signin') { + if (url === 'my-orcid') { + this._router.navigate([ApplicationRoutes.myOrcid]) + } else if (url === 'signin') { this._router.navigate([ApplicationRoutes.signin]) - } else if (url === 'inbox' && this.togglzOrcidAngularInbox) { + } else if (url === 'inbox') { this._router.navigate([ApplicationRoutes.inbox]) } else { this.window.location.href = environment.BASE_URL + url } } + + signOut() { + this._signingService + .singOut() + .pipe(switchMap(() => this._platformInfo.get().pipe(take(1)))) + .subscribe((platform) => { + this._router.navigate([ApplicationRoutes.signin]) + }) + } } diff --git a/src/app/link-account/pages/link-account/link-account.component.html b/src/app/link-account/pages/link-account/link-account.component.html index 20569e60d1..a94dd9a6e2 100644 --- a/src/app/link-account/pages/link-account/link-account.component.html +++ b/src/app/link-account/pages/link-account/link-account.component.html @@ -55,7 +55,7 @@ class="mat-button-font" i18n="@@linking.knowledgebase" href="https://support.orcid.org/hc/en-us/articles/360006972693" - >Visit our knowledgebase + >Visit our knowledge base

+

@@ -44,9 +50,9 @@

{ this.setDefaultPanelsDisplay(affiliation, force) this.setDefaultPanelDetailsState(affiliation, force) @@ -165,8 +173,9 @@ export class AffiliationStackComponent implements OnInit { } makePrimaryCard(affiliation: Affiliation) { - // TODO - console.warn(this.stackPanelsDisplay) + this._affiliationService + .updatePreferredSource(affiliation.putCode.value) + .subscribe() } changeTopPanelOfTheStack(affiliation: Affiliation) { diff --git a/src/app/record/components/affiliation-stacks-groups/affiliation-stacks-groups.component.html b/src/app/record/components/affiliation-stacks-groups/affiliation-stacks-groups.component.html index d71294a2dc..ff55148015 100644 --- a/src/app/record/components/affiliation-stacks-groups/affiliation-stacks-groups.component.html +++ b/src/app/record/components/affiliation-stacks-groups/affiliation-stacks-groups.component.html @@ -6,16 +6,18 @@ ) " > - + - + @@ -126,8 +137,9 @@ ) " > - + @@ -188,18 +206,20 @@ ) " > - + diff --git a/src/app/record/components/affiliation-stacks-groups/affiliation-stacks-groups.component.ts b/src/app/record/components/affiliation-stacks-groups/affiliation-stacks-groups.component.ts index 40d38bebf1..4b10f61fab 100644 --- a/src/app/record/components/affiliation-stacks-groups/affiliation-stacks-groups.component.ts +++ b/src/app/record/components/affiliation-stacks-groups/affiliation-stacks-groups.component.ts @@ -1,6 +1,6 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' import { isEmpty } from 'lodash' -import { Subject } from 'rxjs' +import { Observable, Subject } from 'rxjs' import { takeUntil } from 'rxjs/operators' import { RecordAffiliationService } from 'src/app/core/record-affiliations/record-affiliations.service' import { RecordService } from 'src/app/core/record/record.service' @@ -9,7 +9,11 @@ import { AffiliationUIGroup, AffiliationUIGroupsTypes, } from 'src/app/types/record-affiliation.endpoint' -import { UserRecord, UserRecordOptions } from 'src/app/types/record.local' +import { + MainPanelsState, + UserRecord, + UserRecordOptions, +} from 'src/app/types/record.local' import { SortData } from 'src/app/types/sort' import { UserInfo } from '../../../types' @@ -33,9 +37,7 @@ export class AffiliationStacksGroupsComponent implements OnInit { userRecordContext: UserRecordOptions = {} @Input() userInfo: UserInfo @Input() isPublicRecord: string = null - @Input() expandedContent: boolean @Output() total: EventEmitter = new EventEmitter() - @Output() expanded: EventEmitter = new EventEmitter() expandedEducation: boolean expandedEmployment: boolean @@ -46,6 +48,10 @@ export class AffiliationStacksGroupsComponent implements OnInit { userRecord: UserRecord affiliationsCount: number + $loading: Observable + @Input() expandedContent: MainPanelsState + @Output() + expandedContentChange: EventEmitter = new EventEmitter() constructor( private _record: RecordService, @@ -53,13 +59,14 @@ export class AffiliationStacksGroupsComponent implements OnInit { ) {} ngOnInit(): void { + this.$loading = this._recordAffiliationService.$loading this._record .getRecord({ publicRecordId: this.isPublicRecord, }) .pipe(takeUntil(this.$destroy)) .subscribe((userRecord) => { - if (!isEmpty(userRecord.affiliations)) { + if (!isEmpty(userRecord?.affiliations)) { this.userRecord = userRecord this.profileAffiliationUiGroups = this.userRecord.affiliations this.affiliationsCount = @@ -104,43 +111,6 @@ export class AffiliationStacksGroupsComponent implements OnInit { } } - expandedClicked(type: string, expanded: boolean) { - switch (type) { - case 'employment': - this.expandedEmployment = expanded - break - case 'education': - this.expandedEducation = expanded - break - case 'invited-position': - this.expandedInvited = expanded - break - case 'membership': - this.expandedMembership = expanded - break - } - - if ( - this.expandedEmployment !== undefined && - this.expandedEducation !== undefined && - this.expandedInvited !== undefined && - this.expandedMembership !== undefined - ) { - if ( - (this.expandedEmployment && - this.expandedEducation && - this.expandedInvited && - this.expandedMembership) || - (!this.expandedEmployment && - !this.expandedEducation && - !this.expandedInvited && - !this.expandedMembership) - ) { - this.expanded.emit({ type: 'affiliations', expanded }) - } - } - } - sortEvent(event: SortData, type: string) { this.userRecordContext.publicRecordId = this.isPublicRecord this.userRecordContext.sort = event.type diff --git a/src/app/record/components/affiliation-stacks-groups/modals/modal-affiliations/modal-affiliations.component.html b/src/app/record/components/affiliation-stacks-groups/modals/modal-affiliations/modal-affiliations.component.html index 8e7109072a..a2a3b92227 100644 --- a/src/app/record/components/affiliation-stacks-groups/modals/modal-affiliations/modal-affiliations.component.html +++ b/src/app/record/components/affiliation-stacks-groups/modals/modal-affiliations/modal-affiliations.component.html @@ -174,20 +174,42 @@ formControlName="organization" [matAutocomplete]="auto" /> - - -
- {{ option.value }} -
-
- {{ option.city }} {{ option.region }} {{ option.country }} -
-
+ + + +
+ {{ option.value }} +
+
+ {{ option.city }} {{ option.region }} {{ option.country }} +
+
+
+ + Identify as: + {{ selectedOrganizationFromDatabase.value }} + + + Unidentified organization + +

-

Added

+

Added

{{ affiliation.createdDate | monthDayYearDateToString }}
@@ -105,7 +105,7 @@

Added

-

+

Last modified

{{ affiliation.lastModified | monthDayYearDateToString }}
diff --git a/src/app/record/components/display-attribute/display-attribute.component.scss b/src/app/record/components/display-attribute/display-attribute.component.scss index 3e53a5065c..1c1430fb9b 100644 --- a/src/app/record/components/display-attribute/display-attribute.component.scss +++ b/src/app/record/components/display-attribute/display-attribute.component.scss @@ -9,4 +9,5 @@ :host { display: block; margin-bottom: 15px; + word-break: break-word; } diff --git a/src/app/record/components/display-external-ids/display-external-ids.component.html b/src/app/record/components/display-external-ids/display-external-ids.component.html index 680848a681..8ac5b52d59 100644 --- a/src/app/record/components/display-external-ids/display-external-ids.component.html +++ b/src/app/record/components/display-external-ids/display-external-ids.component.html @@ -3,7 +3,7 @@ [prefixTitle]="workExternal?.relationship?.value" title="{{ workExternal.externalIdentifierType.value + ':' | uppercase }}" [content]="workExternal.externalIdentifierId?.value || undefinedIdLabel" - [url]="workExternal.url?.value || workExternal.normalizedUrl?.value" + [url]="workExternal.normalizedUrl?.value || workExternal.url?.value" [titleMargin]="false" [secondaryText]="true" [marginBotton]="false" diff --git a/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.html b/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.html new file mode 100644 index 0000000000..5fa9136757 --- /dev/null +++ b/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.html @@ -0,0 +1,107 @@ +
+ + + +
+
+ +
+ + + + Must be less than 2084 characters + + +
+ + +
+ +
+ + + + + A link to more information about the funding award + + + Invalid URL + + + Must be less than 2000 characters + + + + +
+
+ +
+ +
+ + + {{ value | recordFundingRelationshipLabel }} + + {{ value | recordFundingRelationshipHintLabel }} + + + +
+
+
diff --git a/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.scss b/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.scss new file mode 100644 index 0000000000..924726e6cd --- /dev/null +++ b/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.scss @@ -0,0 +1,35 @@ +.mat-form-field { + width: 100%; +} + +.title { + p { + margin: 6px 0; + } +} +label.mat-caption { + margin-bottom: 8px; +} + +.mat-form-field { + width: 100%; +} + +.side-bar { + text-decoration: underline; +} + +mat-radio-group { + display: flex; + flex-direction: column; +} + +.top-bar { + display: flex; + justify-content: space-between; + margin-bottom: 16px; +} + +.input-container { + max-width: 402px; +} diff --git a/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.spec.ts b/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.spec.ts new file mode 100644 index 0000000000..bb5738a5d0 --- /dev/null +++ b/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FundingExternalIdentifiersEditComponent } from './funding-external-identifiers-edit.component' + +describe('ExternalIdentifiersEditComponent', () => { + let component: FundingExternalIdentifiersEditComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [FundingExternalIdentifiersEditComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent(FundingExternalIdentifiersEditComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.ts b/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.ts new file mode 100644 index 0000000000..ce3698f074 --- /dev/null +++ b/src/app/record/components/funding-external-identifiers-edit/funding-external-identifiers-edit.component.ts @@ -0,0 +1,50 @@ +import { + AfterViewInit, + ChangeDetectorRef, + Component, + ElementRef, + EventEmitter, + Input, + OnInit, + Output, + ViewChild, +} from '@angular/core' +import { FormGroup } from '@angular/forms' +import { FundingRelationships } from 'src/app/types/record-funding.endpoint' +import { WorkRelationships } from 'src/app/types/works.endpoint' + +@Component({ + selector: 'app-funding-external-identifiers-edit', + templateUrl: './funding-external-identifiers-edit.component.html', + styleUrls: ['./funding-external-identifiers-edit.component.scss'], +}) +export class FundingExternalIdentifiersEditComponent + implements OnInit, AfterViewInit { + @ViewChild('grantNumber') grantNumberRef: ElementRef + @Input() grantForm: FormGroup + @Input() index: number + @Output() cancelEvent = new EventEmitter() + workRelationships: WorkRelationships[] = Object.keys( + WorkRelationships + ) as WorkRelationships[] + backupValue: any + + fundingRelationships: FundingRelationships[] = Object.keys( + FundingRelationships + ) as FundingRelationships[] + + constructor(private changeDedectionRef: ChangeDetectorRef) {} + + ngOnInit(): void { + this.backupValue = this.grantForm.value + } + ngAfterViewInit() { + this.grantNumberRef.nativeElement.focus() + this.changeDedectionRef.detectChanges() + } + + cancel() { + this.grantForm.setValue(this.backupValue) + this.cancelEvent.emit() + } +} diff --git a/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.html b/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.html new file mode 100644 index 0000000000..0f1eb89cbe --- /dev/null +++ b/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.html @@ -0,0 +1,26 @@ +
+ + + + + + + +
+
+ Edit + Delete +
diff --git a/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.scss b/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.scss new file mode 100644 index 0000000000..825f3b6d9c --- /dev/null +++ b/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.scss @@ -0,0 +1,12 @@ +:host { + display: flex; +} +.externalIds { + width: 100%; +} + +.controls { + a { + margin-inline-start: 16px; + } +} diff --git a/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.spec.ts b/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.spec.ts new file mode 100644 index 0000000000..9a8922d70b --- /dev/null +++ b/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.spec.ts @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FundingExternalIdentifiersViewOnlyComponent } from './funding-external-identifiers-view-only.component' + +describe('ExternalIdentifiersViewOnlyComponent', () => { + let component: FundingExternalIdentifiersViewOnlyComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [FundingExternalIdentifiersViewOnlyComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent( + FundingExternalIdentifiersViewOnlyComponent + ) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.ts b/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.ts new file mode 100644 index 0000000000..845154d10a --- /dev/null +++ b/src/app/record/components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component.ts @@ -0,0 +1,26 @@ +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' +import { FundingRelationships } from 'src/app/types/record-funding.endpoint' + +@Component({ + selector: 'app-funding-external-identifiers-view-only', + templateUrl: './funding-external-identifiers-view-only.component.html', + styleUrls: ['./funding-external-identifiers-view-only.component.scss'], +}) +export class FundingExternalIdentifiersViewOnlyComponent implements OnInit { + grantNumberLabel = $localize`:@@funding.grantNumberColon:Grant number:` + grantUrlLabel = $localize`:@@funding.grantUrlColon:Grant URL:` + fundingRelationshipLabel = $localize`:@@shared.relationshipColon:Relationship:` + + @Output() edit = new EventEmitter() + @Output() delete = new EventEmitter() + + @Input() grant: { + grantNumber: string + grantUrl: string + fundingRelationship: FundingRelationships + } + + constructor() {} + + ngOnInit(): void {} +} diff --git a/src/app/record/components/funding-external-identifiers-view-only/work-funding-relationship-view-only.component.scss-theme.scss b/src/app/record/components/funding-external-identifiers-view-only/work-funding-relationship-view-only.component.scss-theme.scss new file mode 100644 index 0000000000..99b7d1052a --- /dev/null +++ b/src/app/record/components/funding-external-identifiers-view-only/work-funding-relationship-view-only.component.scss-theme.scss @@ -0,0 +1,11 @@ +:host { + display: flex; +} +.externalIds { + width: 100%; +} +.controls { + a { + margin-inline-start: 16px; + } +} diff --git a/src/app/record/components/funding-stack/funding-stack.component.html b/src/app/record/components/funding-stack/funding-stack.component.html index 6286d8c0b9..f4f11a65cd 100644 --- a/src/app/record/components/funding-stack/funding-stack.component.html +++ b/src/app/record/components/funding-stack/funding-stack.component.html @@ -9,6 +9,9 @@ @@ -35,9 +40,9 @@

= new EventEmitter() + @Output() total: EventEmitter = new EventEmitter() - @Output() expanded: EventEmitter = new EventEmitter() userRecordContext: UserRecordOptions = {} - + userRecord: UserRecord $destroy: Subject = new Subject() userSession: UserSession fundings: FundingGroup[] = [] @@ -60,10 +65,9 @@ export class FundingStacksGroupsComponent implements OnInit { }) .pipe(takeUntil(this.$destroy)) .subscribe((userRecord) => { - if (userRecord.fundings !== undefined) { + this.userRecord = userRecord + if (userRecord?.fundings !== undefined) { this.loading = false - } - if (!isEmpty(userRecord.fundings)) { this._recordCountryService .getCountryCodes() .pipe(first()) @@ -93,10 +97,6 @@ export class FundingStacksGroupsComponent implements OnInit { return item.activePutCode } - expandedClicked(expanded: boolean) { - this.expanded.emit({ type: 'fundings', expanded }) - } - sortEvent(event: SortData) { this.userRecordContext.publicRecordId = this.isPublicRecord this.userRecordContext.sort = event.type diff --git a/src/app/record/components/funding-stacks-groups/modals/modal-funding-search-link/modal-funding-search-link.component.html b/src/app/record/components/funding-stacks-groups/modals/modal-funding-search-link/modal-funding-search-link.component.html index d4c7223f46..1f1095c7cb 100644 --- a/src/app/record/components/funding-stacks-groups/modals/modal-funding-search-link/modal-funding-search-link.component.html +++ b/src/app/record/components/funding-stacks-groups/modals/modal-funding-search-link/modal-funding-search-link.component.html @@ -1,6 +1,6 @@ - Link funding + Link funding
@@ -14,18 +14,22 @@ class="underline" rel="noopener noreferrer" target="_blank" - href="https://support.orcid.org/hc/en-us/articles/360006973653-Add-works-by-direct-import-from-other-systems" - target="_blank" - rel="noopener noreferrer" - i18n="@@record.linkFundingMoreInfo" + href="https://support.orcid.org/hc/en-us/articles/360006897214-Add-funding-information-to-your-ORCID-record" + i18n="@@funding.linkFundingMoreInfo" > More information about linking funding to your ORCID record
-

Available Search & Link wizards

- +

+ Available Search & Link wizards + ({{ total }}) +

+ +
, @@ -35,6 +36,7 @@ export class ModalFundingSearchLinkComponent implements OnInit, OnDestroy { this.recordImportWizardsOriginal = recordImportWizards this.recordImportWizards = this.recordImportWizardsOriginal this.loadingFunding = false + this.total = this.recordImportWizardsOriginal.length }) } diff --git a/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.html b/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.html index aab086ba8b..4cd4a24352 100644 --- a/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.html +++ b/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.html @@ -51,7 +51,7 @@
+
+ + Must be less than 255 characters +
-
-
+
+
-
+
- +
+ + Amount should be a numeric value with format 1,234,567.89 + +
+
+ + Please select a currency +
-
+
-
-
- - +
+
+ - Year - - {{ year }} - - - -
- -
- - + Year + + {{ year }} + + + +
+ +
+ - Month - - {{ month }} - - - + + Month + + {{ month | trailingZeros }} + + + +
@@ -415,50 +517,59 @@
-
-
- - +
+
+ - Year - - {{ year }} - - - -
- -
- - + Year + + {{ year }} + + + +
+ +
+ - Month - - {{ month }} - - - + + Month + + {{ month | trailingZeros }} + + + +
Invalid date + + End date must come after start date +
@@ -515,7 +626,7 @@
{{ option.value }} @@ -542,10 +653,23 @@ > Please enter an agency name + + Must be less than 1000 characters +
-
@@ -573,10 +703,24 @@
+ + Must be less than 1000 characters +
-

-
- - - -
-
- -
- - - -
- - -
- - - - - - - A link to more information about the funding award - - - Invalid URL - - -
- - -
-
- -
- -
- - - {{ value | recordFundingRelationshipLabel }} - - {{ value | recordFundingRelationshipHintLabel }} - - - -
- -
-
-
+ + -
-
- + + + +
-
- + + @@ -770,12 +833,15 @@
-

- Who can see your funding. The default visibility setting is Private. +

+ {{ ngOrcidDefaultVisibilityLabel }} + {{ defaultVisibility | visibilityStringLabel }}.

diff --git a/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.scss b/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.scss index 8b07365f56..facc52898d 100644 --- a/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.scss +++ b/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.scss @@ -2,6 +2,10 @@ display: none; } +label.mat-caption { + margin-bottom: 8px; +} + mat-form-field { width: 100%; } @@ -13,13 +17,10 @@ mat-form-field { hr { height: 2px; border: 0; - margin: 0; - margin-bottom: 20px; + margin: 0 0 20px; } .title { - margin-top: 16px; - p { margin: 6px 0; } @@ -44,8 +45,6 @@ mat-radio-button { } .date-container { - display: flex; - flex-direction: row; display: flex; flex-direction: row; flex-wrap: nowrap; @@ -55,10 +54,18 @@ mat-radio-button { } } +.no-margin { + margin: 0; +} .add-more { + margin-bottom: 27px; + padding-inline-start: 0; + a { + margin: 0; + } span { margin: auto; - padding-left: 6px; + padding-inline-start: 6px; } } @@ -66,34 +73,26 @@ mat-radio-button { margin-top: 26px; } -.translate-title { - margin-bottom: 26px; -} - .required-information { margin-left: auto !important; - margin-top: 10px !important; + display: flex; + align-items: center; span { margin-right: 3px !important; } } -.larger-input-margin { - margin-bottom: 20px; -} - mat-radio-group { display: flex; flex-direction: column; } - -.date { - ::ng-deep .mat-form-field-wrapper { - padding-bottom: 0px !important; +:host { + .date-group { + .date-input { + padding-left: 0; + } } - padding-bottom: 1.475em; - padding-left: 0; } .project-link-mobile { @@ -108,3 +107,29 @@ mat-radio-group { align-content: end; justify-content: flex-end; } + +.error-out-input-context { + padding: 0 8px; +} + +.input-container { + max-width: 402px; +} + +.externalIdBox { + padding-bottom: 16px; + margin-bottom: 16px; +} + +.language { + padding-bottom: 1.475em; + + ::ng-deep .mat-form-field-wrapper { + padding-bottom: 0 !important; + } + + mat-error { + padding: 0 1em; + margin-top: 0.2em; + } +} diff --git a/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.scss-theme.scss b/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.scss-theme.scss index 28e9c589f4..8332996960 100644 --- a/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.scss-theme.scss +++ b/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.scss-theme.scss @@ -42,5 +42,8 @@ .mat-select { font-size: mat-font-size($config, body-1) !important; } + .externalIdBox { + border-bottom: dashed mat-color($background, ui-background-light) 1px; + } } @include modal-funding-theme($orcid-app-theme); diff --git a/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.ts b/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.ts index dc62924029..e357cf9bae 100644 --- a/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.ts +++ b/src/app/record/components/funding-stacks-groups/modals/modal-funding/modal-funding.component.ts @@ -7,10 +7,23 @@ import { FormGroup, Validators, FormArray, + AbstractControl, } from '@angular/forms' -import { dateMonthYearValidator } from '../../../../../shared/validators/date/date.validator' +import { + dateMonthYearValidator, + endDateMonthYearValidator, +} from '../../../../../shared/validators/date/date.validator' +import { translatedTitleValidator } from '../../../../../shared/validators/translated-title/translated-title.validator' -import { URL_REGEXP } from '../../../../../constants' +import { + AMOUNT_REGEXP, + MAX_LENGTH_LESS_THAN_FIVE_THOUSAND, + MAX_LENGTH_LESS_THAN_ONE_THOUSAND, + MAX_LENGTH_LESS_THAN_TWO_HUNDRED_FIFTY_FIVE, + MAX_LENGTH_LESS_THAN_TWO_THOUSAND, + MAX_LENGTH_LESS_THAN_TWO_THOUSAND_EIGHTY_FOUR, + URL_REGEXP, +} from '../../../../../constants' import { UserRecord } from '../../../../../types/record.local' import { RecordCountriesService } from '../../../../../core/record-countries/record-countries.service' import { EMPTY, Subject } from 'rxjs' @@ -21,6 +34,7 @@ import { import { VisibilityStrings, Organization, + ExternalIdentifier, } from '../../../../../types/common.endpoint' import { RecordCountryCodesEndpoint } from '../../../../../types' import { Observable } from 'rxjs/internal/Observable' @@ -45,6 +59,8 @@ import { FundingExternalIndentifierType, } from 'src/app/types/record-funding.endpoint' import { Title } from '@angular/platform-browser' +import { SnackbarService } from 'src/app/cdk/snackbar/snackbar.service' +import { RecordService } from 'src/app/core/record/record.service' @Component({ selector: 'app-modal-funding', @@ -69,7 +85,6 @@ export class ModalFundingComponent implements OnInit, OnDestroy { userRecord: UserRecord userSession: UserSession isMobile: boolean - defaultVisibility: VisibilityStrings filteredOptions: Observable loadingFunding = true startDateValid: boolean @@ -82,7 +97,7 @@ export class ModalFundingComponent implements OnInit, OnDestroy { fundingProjectTitle = '' fundingProjectLink = '' description = '' - visibility = 'PRIVATE' + defaultVisibility: VisibilityStrings agencyName = '' city = '' region = '' @@ -91,6 +106,8 @@ export class ModalFundingComponent implements OnInit, OnDestroy { amount = '' currencyCode = '' grantsArray: FormArray + grantsArrayDisplayState: boolean[] = [] + disambiguatedFundingSourceId = '' disambiguatedFundingSource = '' translatedTitleContent = '' @@ -116,6 +133,9 @@ export class ModalFundingComponent implements OnInit, OnDestroy { ngOrcidYear = $localize`:@@shared.year:Year` ngOrcidMonth = $localize`:@@shared.month:Month` + ngOrcidFundingType = $localize`:@@funding.selectAType:Select a funding type` + ngOrcidSelectLanguage = $localize`:@@shared.selectLanguage:Select a language` + ngOrcidDefaultVisibilityLabel = $localize`:@@shared.visibilityDescription:Control who can see this information by setting the visibility. Your default visibility is` constructor( @Inject(WINDOW) private window: Window, @@ -126,7 +146,9 @@ export class ModalFundingComponent implements OnInit, OnDestroy { private _userService: UserService, private _recordCountryService: RecordCountriesService, private _fundingsService: RecordFundingsService, - private _formBuilder: FormBuilder + private _formBuilder: FormBuilder, + private _snackBar: SnackbarService, + private _record: RecordService ) { this._platform.get().subscribe((platform) => { this.platform = platform @@ -143,95 +165,118 @@ export class ModalFundingComponent implements OnInit, OnDestroy { ngOnInit(): void { this.initialValues() - - this.fundingForm = this._formBuilder.group({ - fundingType: new FormControl(this.fundingType, { - validators: [Validators.required], - }), - fundingSubtype: new FormControl(this.fundingSubtype, {}), - fundingProjectTitle: new FormControl(this.fundingProjectTitle, { - validators: [Validators.required], - }), - translatedTitleContent: [this.translatedTitleContent, []], - translatedTitleLanguage: [this.translatedTitleLanguage, []], - fundingProjectLink: new FormControl(this.fundingProjectLink, { - validators: [Validators.pattern(URL_REGEXP)], - }), - description: new FormControl(this.description, { - validators: [Validators.required], - }), - amount: new FormControl(this.amount, {}), - currencyCode: new FormControl(this.currencyCode, {}), - startDateGroup: this._formBuilder.group( - { - startDateMonth: [''], - startDateYear: [''], - }, - { validator: dateMonthYearValidator('startDate') } - ), - endDateGroup: this._formBuilder.group( - { - endDateMonth: [''], - endDateYear: [''], - }, - { validator: dateMonthYearValidator('endDate') } - ), - agencyName: new FormControl(this.agencyName, { - validators: [Validators.required], - }), - city: new FormControl(this.city, { - validators: [Validators.required], - }), - region: new FormControl(this.region, {}), - country: new FormControl(this.country, { - validators: [Validators.required], - }), - grants: new FormArray([ - this._formBuilder.group({ - grantNumber: ['', []], - grantUrl: ['', [Validators.pattern(URL_REGEXP)]], - fundingRelationship: [FundingRelationships.self, []], + this.fundingForm = this._formBuilder.group( + { + fundingType: new FormControl(this.fundingType, { + validators: [Validators.required], }), - ]), - visibility: new FormControl(this.visibility, { - validators: [Validators.required], - }), - }) - - if (this.funding) { - if (this.funding.endDate.year) { - this.fundingForm.patchValue({ - endDateGroup: { - endDateYear: Number(this.funding.endDate.year), - endDateMonth: Number(this.funding.endDate.month), + fundingSubtype: new FormControl(this.fundingSubtype, { + validators: [ + Validators.maxLength(MAX_LENGTH_LESS_THAN_TWO_HUNDRED_FIFTY_FIVE), + ], + }), + fundingProjectTitle: new FormControl(this.fundingProjectTitle, { + validators: [ + Validators.required, + Validators.maxLength(MAX_LENGTH_LESS_THAN_ONE_THOUSAND), + ], + }), + translatedTitleGroup: this._formBuilder.group( + { + translatedTitleContent: new FormControl('', { + validators: [ + Validators.maxLength(MAX_LENGTH_LESS_THAN_ONE_THOUSAND), + ], + }), + translatedTitleLanguage: [''], }, - }) - } - - if (this.funding.startDate.year) { - this.fundingForm.patchValue({ - startDateGroup: { - startDateYear: Number(this.funding.startDate.year), - startDateMonth: Number(this.funding.startDate.month), + { + validators: [ + translatedTitleValidator, + Validators.maxLength(MAX_LENGTH_LESS_THAN_ONE_THOUSAND), + ], + } + ), + fundingProjectLink: new FormControl(this.fundingProjectLink, { + validators: [ + Validators.pattern(URL_REGEXP), + Validators.maxLength(MAX_LENGTH_LESS_THAN_TWO_THOUSAND), + ], + }), + description: new FormControl(this.description, { + validators: [ + Validators.maxLength(MAX_LENGTH_LESS_THAN_FIVE_THOUSAND), + ], + }), + amount: new FormControl(this.amount, { + validators: [Validators.pattern(AMOUNT_REGEXP)], + }), + currencyCode: new FormControl(this.currencyCode, {}), + startDateGroup: this._formBuilder.group( + { + startDateMonth: [''], + startDateYear: [''], }, - }) + { validator: [dateMonthYearValidator('startDate')] } + ), + endDateGroup: this._formBuilder.group( + { + endDateMonth: [''], + endDateYear: [''], + }, + { validator: dateMonthYearValidator('endDate') } + ), + agencyName: new FormControl(this.agencyName, { + validators: [ + Validators.required, + Validators.maxLength(MAX_LENGTH_LESS_THAN_ONE_THOUSAND), + ], + }), + city: new FormControl(this.city, { + validators: [ + Validators.required, + Validators.maxLength(MAX_LENGTH_LESS_THAN_ONE_THOUSAND), + ], + }), + region: new FormControl(this.region, { + validators: [Validators.maxLength(MAX_LENGTH_LESS_THAN_ONE_THOUSAND)], + }), + country: new FormControl(this.country, { + validators: [ + Validators.required, + Validators.maxLength(MAX_LENGTH_LESS_THAN_ONE_THOUSAND), + ], + }), + grants: new FormArray([]), + visibility: new FormControl(this.defaultVisibility, { + validators: [Validators.required], + }), + }, + { + validator: endDateMonthYearValidator(), } - } - + ) this.grantsArray = this.fundingForm.controls.grants as FormArray - let i = 0 - this.funding?.externalIdentifiers?.forEach((extIdentifier) => { - this.grantsArray.controls.push( - this._formBuilder.group({ - grantNumber: [extIdentifier.externalIdentifierId.value, []], - grantUrl: [extIdentifier.url.value, [Validators.pattern(URL_REGEXP)]], - fundingRelationship: [extIdentifier.relationship.value, []], + + if (this.funding) { + this.initFormValues() + } + this._record + .getPreferences() + .pipe(first()) + .subscribe((userPreferences) => { + this.defaultVisibility = userPreferences.default_visibility + this.fundingForm.patchValue({ + visibility: this.funding?.visibility?.visibility + ? this.funding?.visibility?.visibility + : this.defaultVisibility, }) - ) - this.checkGrantsChanges(i) - i++ - }) + }) + this.listenFormChanges() + this.getCountryCodes() + } + private getCountryCodes() { this._recordCountryService .getCountryCodes() .pipe(first()) @@ -258,6 +303,18 @@ export class ModalFundingComponent implements OnInit, OnDestroy { }) } }) + } + + private listenFormChanges() { + this.fundingForm.controls['fundingProjectLink'].valueChanges.subscribe( + (value) => { + if (this.fundingForm.controls['fundingProjectLink'].valid) { + this.appendProtocolToTheURL( + this.fundingForm.controls['fundingProjectLink'] + ) + } + } + ) this.filteredOptions = this.fundingForm.get('agencyName').valueChanges.pipe( startWith(''), @@ -266,6 +323,55 @@ export class ModalFundingComponent implements OnInit, OnDestroy { return this._filter(val || '') }) ) + + this.fundingForm.controls['amount'].valueChanges.subscribe((value) => { + if (value) { + this.fundingForm.controls['currencyCode'].setValidators( + Validators.required + ) + this.fundingForm.controls['currencyCode'].updateValueAndValidity() + } + }) + } + + private initFormValues() { + if (this.funding.endDate.year) { + this.fundingForm.patchValue({ + endDateGroup: { + endDateYear: Number(this.funding.endDate.year), + endDateMonth: Number(this.funding.endDate.month), + }, + }) + } + + if (this.funding.startDate.year) { + this.fundingForm.patchValue({ + startDateGroup: { + startDateYear: Number(this.funding.startDate.year), + startDateMonth: Number(this.funding.startDate.month), + }, + }) + } + + if (this.funding.visibility?.visibility) { + this.fundingForm.patchValue({ + visibility: this.funding.visibility.visibility, + }) + } + if (this.funding.fundingTitle?.translatedTitle) { + this.fundingForm.patchValue({ + translatedTitleGroup: { + translatedTitleContent: this.funding.fundingTitle?.translatedTitle + .content, + translatedTitleLanguage: this.funding.fundingTitle?.translatedTitle + .languageCode, + }, + }) + } + + this.funding.externalIdentifiers.forEach((grant) => { + this.addAnotherGrant(grant) + }) } initialValues() { @@ -304,10 +410,6 @@ export class ModalFundingComponent implements OnInit, OnDestroy { this.translatedTitleLanguage = this.funding.fundingTitle?.translatedTitle?.languageCode this.fundingProjectLink = this.funding.url?.value this.description = this.funding.description?.value - this.visibility = this.funding.visibility?.visibility - ? this.funding.visibility.visibility - : this.defaultVisibility - this.agencyName = this.funding.fundingName?.value this.currencyCode = this.funding.currencyCode?.value this.amount = this.funding.amount?.value @@ -321,7 +423,7 @@ export class ModalFundingComponent implements OnInit, OnDestroy { } } - formToBackendAffiliation(): Funding { + formToBackendFunding(): Funding { return { visibility: { visibility: this.fundingForm.get('visibility').value @@ -335,8 +437,12 @@ export class ModalFundingComponent implements OnInit, OnDestroy { title: this.fundingForm.value.fundingProjectTitle, errors: [], translatedTitle: { - content: this.fundingForm.value.translatedTitleContent, - languageCode: this.fundingForm.value.translatedTitleLanguage, + content: this.fundingForm.get( + 'translatedTitleGroup.translatedTitleContent' + ).value, + languageCode: this.fundingForm.get( + 'translatedTitleGroup.translatedTitleLanguage' + ).value, errors: [], }, }, @@ -363,16 +469,26 @@ export class ModalFundingComponent implements OnInit, OnDestroy { value: this.fundingForm.value.fundingProjectLink, }, startDate: { - month: this.addTrailingZero( - this.fundingForm.get('startDateGroup.startDateMonth').value - ), - year: this.fundingForm.get('startDateGroup.startDateYear').value, + day: '', + month: this.fundingForm.get('startDateGroup.startDateMonth').value + ? this.addTrailingZero( + this.fundingForm.get('startDateGroup.startDateMonth').value + ) + : '', + year: this.fundingForm.get('startDateGroup.startDateYear').value + ? this.fundingForm.get('startDateGroup.startDateYear').value + : '', }, endDate: { - month: this.addTrailingZero( - this.fundingForm.get('endDateGroup.endDateMonth').value - ), - year: this.fundingForm.get('endDateGroup.endDateYear').value, + day: '', + month: this.fundingForm.get('endDateGroup.endDateMonth').value + ? this.addTrailingZero( + this.fundingForm.get('endDateGroup.endDateMonth').value + ) + : '', + year: this.fundingForm.get('endDateGroup.endDateYear').value + ? this.fundingForm.get('endDateGroup.endDateYear').value + : '', }, externalIdentifiers: this.fundingForm.value.grants.map((grant) => { return { @@ -407,36 +523,57 @@ export class ModalFundingComponent implements OnInit, OnDestroy { assertionOriginName: this.funding?.assertionOriginName, assertionOriginOrcid: this.funding?.assertionOriginOrcid, countryForDisplay: this.funding?.countryForDisplay, - fundingTypeForDisplay: this.funding?.fundingTypeForDisplay, } } onSubmit() {} - addAnotherGrant() { - this.grantsArray.controls.push( + addAnotherGrant(existingGrant?: ExternalIdentifier) { + if (existingGrant) { + this.grantsArrayDisplayState.push(false) + } else { + this.grantsArrayDisplayState.push(true) + } + + this.grantsArray.push( this._formBuilder.group({ - grantNumber: ['', []], - grantUrl: ['', [Validators.pattern(URL_REGEXP)]], - fundingRelationship: [FundingRelationships.self, []], + grantNumber: [ + existingGrant?.externalIdentifierId?.value || '', + [Validators.maxLength(MAX_LENGTH_LESS_THAN_TWO_THOUSAND_EIGHTY_FOUR)], + ], + grantUrl: [ + existingGrant?.url?.value || '', + [ + Validators.pattern(URL_REGEXP), + Validators.maxLength(MAX_LENGTH_LESS_THAN_TWO_THOUSAND), + ], + ], + fundingRelationship: [ + existingGrant?.relationship?.value || FundingRelationships.self, + [], + ], }) ) + this.checkGrantsChanges(this.grantsArray.controls.length - 1) } deleteGrant(id: number) { this.grantsArray.removeAt(id) + this.grantsArrayDisplayState.splice(id, 1) } saveEvent() { this.fundingForm.markAllAsTouched() if (this.fundingForm.valid) { this._fundingsService - .save(this.formToBackendAffiliation()) + .save(this.formToBackendFunding()) .pipe(first()) .subscribe(() => { this.closeEvent() }) + } else { + this._snackBar.showValidationError() } } @@ -474,7 +611,9 @@ export class ModalFundingComponent implements OnInit, OnDestroy { const formGroup = this.grantsArray.controls[index] as FormGroup formGroup.controls.grantNumber.valueChanges.subscribe((value) => { if (value) { - formGroup.controls.grantNumber.setValidators([]) + formGroup.controls.grantNumber.setValidators([ + Validators.maxLength(MAX_LENGTH_LESS_THAN_TWO_THOUSAND_EIGHTY_FOUR), + ]) formGroup.controls.grantNumber.updateValueAndValidity({ emitEvent: false, }) @@ -490,10 +629,14 @@ export class ModalFundingComponent implements OnInit, OnDestroy { if (value) { formGroup.controls.grantUrl.setValidators([ Validators.pattern(URL_REGEXP), + Validators.maxLength(MAX_LENGTH_LESS_THAN_TWO_THOUSAND), ]) formGroup.controls.grantUrl.updateValueAndValidity({ emitEvent: false, }) + if (formGroup.controls.grantUrl.valid) { + this.appendProtocolToTheURL(formGroup.controls.grantUrl) + } } else { formGroup.controls.grantUrl.clearValidators() formGroup.controls.grantUrl.updateValueAndValidity({ @@ -515,6 +658,15 @@ export class ModalFundingComponent implements OnInit, OnDestroy { } }) } + appendProtocolToTheURL(grantUrl: AbstractControl) { + if ( + grantUrl.value && + !(grantUrl.value as string).startsWith('http://') && + !(grantUrl.value as string).startsWith('https://') + ) { + grantUrl.patchValue('http://' + grantUrl.value) + } + } closeEvent() { this.dialogRef.close() @@ -536,6 +688,18 @@ export class ModalFundingComponent implements OnInit, OnDestroy { this.window.document.getElementById('funding-identifiers').scrollIntoView() } + cancelExternalIdEdit(id: number) { + if ( + this.grantsArray.controls[id] && + !this.grantsArray.controls[id].value.grantUrl && + !this.grantsArray.controls[id].value.grantNumber + ) { + this.deleteGrant(id) + } else { + this.grantsArrayDisplayState[id] = false + } + } + ngOnDestroy() { this.$destroy.next(true) this.$destroy.unsubscribe() diff --git a/src/app/record/components/funding/funding.component.html b/src/app/record/components/funding/funding.component.html index cde18c56bc..938f713111 100644 --- a/src/app/record/components/funding/funding.component.html +++ b/src/app/record/components/funding/funding.component.html @@ -31,7 +31,7 @@ > | - {{ funding.fundingType.value | titlecase }} + {{ funding.fundingType.value | recordFundingTypesLabel }}
@@ -41,8 +41,8 @@ }}, {{ funding.region?.value }}, {{ funding.countryForDisplay }}, {{ funding.country?.value }})
@@ -131,11 +131,17 @@

" > -

- Translated title -

-
- ({{ funding.fundingTitle.translatedTitle.languageName }}) +
+ + Translated title  + + ({{ funding.fundingTitle.translatedTitle?.languageName }}) +
{{ funding.fundingTitle.translatedTitle.content }} @@ -151,9 +157,7 @@

Description

-
- {{ funding.description.value }} -
+
@@ -179,7 +183,7 @@

-

Added

+

Added

{{ funding.createdDate | monthDayYearDateToString }}
@@ -187,7 +191,7 @@

Added

-

+

Last modified

{{ funding.lastModified | monthDayYearDateToString }}
diff --git a/src/app/record/components/funding/funding.component.scss b/src/app/record/components/funding/funding.component.scss index b9bc65ea45..4f1708078e 100644 --- a/src/app/record/components/funding/funding.component.scss +++ b/src/app/record/components/funding/funding.component.scss @@ -1,3 +1,6 @@ :host { width: 100%; } +.translated-title-label { + font-weight: bold; +} diff --git a/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.html b/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.html index 4e348f1bd9..07ab691bb7 100644 --- a/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.html +++ b/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.html @@ -1,15 +1,16 @@ - + - Delete items + Delete items @@ -34,7 +35,7 @@ info

-

+

Deleting items permanently removes them from your ORCID record. Please review the items selected for deletion.

@@ -42,7 +43,7 @@

- + Selected items to delete ({{ selectedItems.length }}) @@ -50,7 +51,11 @@

- +

-
+
" formControlName="checked" > -

+

{{ item?.affiliationName?.value }} @@ -126,14 +140,40 @@

- Source: + Source: + + {{ item?.assertionOriginName || item?.assertionOriginOrcid }} + via + {{ item.sourceName || item.source }} - Added : - {{ item.createdDate | monthDayYearDateToString }} + +
+ + Added : + {{ item.createdDate | monthDayYearDateToString }} +
+
+ error + No items selected. + +

diff --git a/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.scss b/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.scss index 3446a6c4a1..db0a7c0bbf 100644 --- a/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.scss +++ b/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.scss @@ -1,4 +1,15 @@ +.title { + width: 48em; + overflow: hidden; + text-overflow: ellipsis; +} + +.title.mobile { + width: 14em; +} + .info { + display: flex; padding: 16px; margin-top: 16px; border: solid 2px; @@ -19,6 +30,10 @@ .added { margin-left: 16px; } + + .added.mobile { + margin-inline-start: 0; + } } .no-info { @@ -38,3 +53,13 @@ .capitalize { text-transform: capitalize; } + +.no-info { + display: flex; + margin-top: 20px; + align-items: center; + + mat-icon { + margin-inline-end: 4px; + } +} diff --git a/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.ts b/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.ts index dcb31fe6c0..7f1456f683 100644 --- a/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.ts +++ b/src/app/record/components/modals/modal-delete-item/modal-delete-items.component.ts @@ -1,5 +1,11 @@ -import { Component, Input, OnDestroy, OnInit } from '@angular/core' -import { Subject } from 'rxjs' +import { + ChangeDetectorRef, + Component, + Input, + OnDestroy, + OnInit, +} from '@angular/core' +import { forkJoin, Subject } from 'rxjs' import { FormControl, FormGroup } from '@angular/forms' import { MatDialogRef } from '@angular/material/dialog' import { ModalComponent } from '../../../../cdk/modal/modal/modal.component' @@ -10,7 +16,7 @@ import { RecordAffiliationService } from '../../../../core/record-affiliations/r import { RecordFundingsService } from '../../../../core/record-fundings/record-fundings.service' import { RecordResearchResourceService } from '../../../../core/record-research-resource/record-research-resource.service' import { RecordPeerReviewService } from '../../../../core/record-peer-review/record-peer-review.service' -import { Work } from '../../../../types/record-works.endpoint' +import { SnackbarService } from '../../../../cdk/snackbar/snackbar.service' @Component({ selector: 'app-modal-delete-items', @@ -52,15 +58,18 @@ export class ModalDeleteItemsComponent implements OnInit, OnDestroy { constructor( public dialogRef: MatDialogRef, + private _changeDetectorRef: ChangeDetectorRef, private _platform: PlatformInfoService, private _recordAffiliationService: RecordAffiliationService, private _recordFundingsService: RecordFundingsService, private _recordWorksService: RecordWorksService, private _recordResearchResourceService: RecordResearchResourceService, - private _recordPeerReviewService: RecordPeerReviewService + private _recordPeerReviewService: RecordPeerReviewService, + private _snackBar: SnackbarService ) {} ngOnInit(): void { + this.deleteForm = new FormGroup({}) const group: { [key: string]: FormGroup } = {} this._platform @@ -70,7 +79,7 @@ export class ModalDeleteItemsComponent implements OnInit, OnDestroy { this.isMobile = platform.columns4 || platform.columns8 }) - if (this.item && this.items.length === 0) { + if (this.item && this.putCodes?.length === 0) { this.items.push(this.item) this.items.forEach((i) => { group[i?.putCode?.value || i.putCode] = new FormGroup({ @@ -82,21 +91,19 @@ export class ModalDeleteItemsComponent implements OnInit, OnDestroy { if (this.putCodes.length > 0) { this.loadingItems = true - this.putCodes.forEach((putCode, index) => { - this._recordWorksService - .getWorkInfo(putCode) - .subscribe((work: Work) => { - this.items.push(work) - if (index === this.putCodes.length - 1) { - this.items.forEach((w) => { - group[w.putCode.value] = new FormGroup({ - checked: new FormControl(false), - }) - }) - this.deleteForm = new FormGroup(group) - this.loadingItems = false - } + const works$ = [] + this.putCodes.forEach((putCode) => { + works$.push(this._recordWorksService.getWorkInfo(putCode)) + }) + forkJoin(...works$).subscribe((works) => { + works.forEach((w) => { + this.items.push(w) + group[w.putCode.value] = new FormGroup({ + checked: new FormControl(false), }) + }) + this.deleteForm = new FormGroup(group) + this.loadingItems = false }) } } @@ -108,7 +115,7 @@ export class ModalDeleteItemsComponent implements OnInit, OnDestroy { if ( this.deleteForm.value[ this.type === 'research-resources' ? item.putCode : item.putCode.value - ].checked + ]?.checked ) { putCode = this.type === 'research-resources' ? item.putCode : item.putCode.value @@ -117,7 +124,14 @@ export class ModalDeleteItemsComponent implements OnInit, OnDestroy { } } }) - this.delete(putCodesDelete.length === 0 ? putCode : putCodesDelete) + if (putCode || putCodesDelete.length > 0) { + this.delete(putCodesDelete.length === 0 ? putCode : putCodesDelete) + } else { + this._snackBar.showValidationError( + $localize`:@@shared.youHaveNotSelected:You haven’t selected any items to delete.`, + $localize`:@@shared.pleaseReview:Please review and fix the issue` + ) + } } delete(putCode) { @@ -184,14 +198,9 @@ export class ModalDeleteItemsComponent implements OnInit, OnDestroy { } updateCheckAll() { + this.selectedItems = [] this.putCodes.forEach((value) => { - if (this.selectedItems.includes(value)) { - if (!!this.selectAll === false) { - this.selectedItems = this.selectedItems.filter( - (putCode) => putCode !== value - ) - } - } else { + if (this.selectAll) { this.selectedItems.push(value) } this.deleteForm.patchValue({ @@ -200,15 +209,14 @@ export class ModalDeleteItemsComponent implements OnInit, OnDestroy { }, }) }) + this._changeDetectorRef.detectChanges() } updateCheck(putCode: string) { if (this.selectedItems.includes(putCode)) { - if (!!this.selectAll === false) { - this.selectedItems = this.selectedItems.filter( - (value) => value !== putCode - ) - } + this.selectedItems = this.selectedItems.filter( + (value) => value !== putCode + ) } else { this.selectedItems.push(putCode) } diff --git a/src/app/record/components/peer-review-stack/peer-review-stack.component.html b/src/app/record/components/peer-review-stack/peer-review-stack.component.html index 99dd238414..c8d5773fed 100644 --- a/src/app/record/components/peer-review-stack/peer-review-stack.component.html +++ b/src/app/record/components/peer-review-stack/peer-review-stack.component.html @@ -99,9 +99,9 @@ > = new EventEmitter() - @Output() expanded: EventEmitter = new EventEmitter() stackPanelsDisplay: { [key: string]: { topPanelOfTheStack: boolean } } = {} panelDetailsState: { @@ -136,7 +136,9 @@ export class PeerReviewStackComponent implements OnInit { } makePrimaryCard(peerReview: PeerReview) { - // TODO + this._recordPeerReviewService + .updatePreferredSource(peerReview.putCode.value) + .subscribe() } changeTopPanelOfTheStack(peerReview: PeerReview) { @@ -197,8 +199,4 @@ export class PeerReviewStackComponent implements OnInit { collapse(peerReview: PeerReview) { peerReview.showDetails = !peerReview.showDetails } - - expandedClicked(expanded: boolean) { - this.expanded.emit({ type: 'peer-review', expanded }) - } } diff --git a/src/app/record/components/peer-review-stacks-groups/modals/modal-peer-reviews/modal-peer-reviews.component.html b/src/app/record/components/peer-review-stacks-groups/modals/modal-peer-reviews/modal-peer-reviews.component.html index 73a4aab08b..327c66391b 100644 --- a/src/app/record/components/peer-review-stacks-groups/modals/modal-peer-reviews/modal-peer-reviews.component.html +++ b/src/app/record/components/peer-review-stacks-groups/modals/modal-peer-reviews/modal-peer-reviews.component.html @@ -24,8 +24,13 @@

-

Available Search & Link wizards

- +

+ Available Search & Link wizards + ({{ total }}) +

+
, @@ -30,6 +31,7 @@ export class ModalPeerReviewsComponent implements OnInit, OnDestroy { .subscribe((data) => { this.recordImportWizards = data this.loadingPeerReviews = false + this.total = data.length }) } diff --git a/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.html b/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.html index 72478dd86d..d921b85ce7 100644 --- a/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.html +++ b/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.html @@ -3,10 +3,11 @@ class="row" [title]="ngOrcidPeerReview" [type]="'peer-review'" + [userRecord]="userRecord" [currentAmount]="peerReviews.length" [isPublicRecord]="isPublicRecord" - [expandedContent]="expandedContent" - (expanded)="expandedClicked($event)" + [(expandedContent)]="expandedContent['PEER_REVIEW']" + (expandedContentChange)="expandedContentChange.emit(expandedContent)" [labelAddButton]="labelAddButton" [labelSortButton]="labelSortButton" [sortTypes]="['order']" @@ -25,6 +26,10 @@ [expandButtonsPosition]="'left'" [isPublicRecord]="isPublicRecord" (openStateChange)="expandedClicked($event, peerReview)" + [showVisibilityControl]="true" + [stackSiblings]="peerReview.peerReviewDuplicateGroups" + [visibility]="getVisibility(peerReview)" + [visibilityError]="peerReview.visibilityError" >
@@ -39,8 +44,9 @@

- {{ peerReview.type }} - , + + {{ peerReview.type + (peerReview.description ? ',' : '') }} + {{ peerReview.description }}

@@ -61,6 +67,7 @@
{ this.platform = platformInfo }) @@ -109,7 +113,9 @@ export class ResearchResourceStackComponent implements OnInit { } makePrimaryCard(researchResource: ResearchResource) { - // TODO + this._recordResearchResourceService + .updatePreferredSource(researchResource.putCode) + .subscribe() } changeTopPanelOfTheStack(researchResource: ResearchResource) { diff --git a/src/app/record/components/research-resource-stacks-group/research-resource-stacks-group.component.html b/src/app/record/components/research-resource-stacks-group/research-resource-stacks-group.component.html index af8562dbb9..b74e1b2290 100644 --- a/src/app/record/components/research-resource-stacks-group/research-resource-stacks-group.component.html +++ b/src/app/record/components/research-resource-stacks-group/research-resource-stacks-group.component.html @@ -1,4 +1,4 @@ - + = new EventEmitter() - @Output() expanded: EventEmitter = new EventEmitter() + @Input() expandedContent: MainPanelsState + @Output() expandedContentChange = new EventEmitter() + @Output() total: EventEmitter = new EventEmitter() userRecordContext: UserRecordOptions = {} displayTheStackClass = false @@ -94,12 +94,12 @@ export class ResearchResourceStacksGroupComponent implements OnInit { if (!isEmpty(userRecord?.researchResources)) { this.paginationLoading = false this.researchResources = userRecord.researchResources - this.total.emit(this.researchResources.groups.length) + this.total.emit(this.researchResources.groups?.length || 0) this.paginationTotalAmountOfResearchResources = userRecord.researchResources.totalGroups this.paginationIndex = userRecord.researchResources.pageIndex this.paginationPageSize = userRecord.researchResources.pageSize - this.total.emit(userRecord.researchResources.groups.length) + this.total.emit(userRecord.researchResources.groups?.length || 0) } }) } @@ -134,8 +134,4 @@ export class ResearchResourceStacksGroupComponent implements OnInit { this.paginationLoading = false }) } - - expandedClicked(expanded: boolean) { - this.expanded.emit({ type: 'research-resources', expanded }) - } } diff --git a/src/app/record/components/top-bar-actions/top-bar-actions.component.html b/src/app/record/components/top-bar-actions/top-bar-actions.component.html index 4a0c20f11f..0c107676b4 100644 --- a/src/app/record/components/top-bar-actions/top-bar-actions.component.html +++ b/src/app/record/components/top-bar-actions/top-bar-actions.component.html @@ -4,10 +4,10 @@ *ngIf="isPublicRecord && !userStatus?.loggedIn && !onlyShowPrintButton" > account_circle -

Is this you?

+

Is this you?

Sign in to start editing @@ -19,7 +19,7 @@ (click)="printRecord()" > print - + Printable version diff --git a/src/app/record/components/top-bar-my-public-record-preview/top-bar-my-public-record-preview.component.html b/src/app/record/components/top-bar-my-public-record-preview/top-bar-my-public-record-preview.component.html index 7cbe9f5519..d8ffad5336 100644 --- a/src/app/record/components/top-bar-my-public-record-preview/top-bar-my-public-record-preview.component.html +++ b/src/app/record/components/top-bar-my-public-record-preview/top-bar-my-public-record-preview.component.html @@ -7,14 +7,14 @@ preview
You are previewing a public version of this record
You are previewing the public version of your record @@ -25,7 +25,7 @@ alt="orcid logo" /> {{ effectiveRecord }} - Edit this record
@@ -49,7 +49,7 @@ preview
You are managing this ORCID record as a trusted individual @@ -57,7 +57,7 @@
You are managing your ORCID record diff --git a/src/app/record/components/top-bar-record-issues/top-bar-record-issues.component.html b/src/app/record/components/top-bar-record-issues/top-bar-record-issues.component.html index 96e9c4854a..4d485db7fd 100644 --- a/src/app/record/components/top-bar-record-issues/top-bar-record-issues.component.html +++ b/src/app/record/components/top-bar-record-issues/top-bar-record-issues.component.html @@ -2,24 +2,30 @@ error This ORCID Record is deactivated - +
This ORCID Record is locked

- + This account has been deprecated, please see account {{ 'https:' + baseUrl + userInfo.PRIMARY_RECORD }} - for the latest information

diff --git a/src/app/record/components/top-bar-record-issues/top-bar-record-issues.component.ts b/src/app/record/components/top-bar-record-issues/top-bar-record-issues.component.ts index 71fc13a08c..b0512ca025 100644 --- a/src/app/record/components/top-bar-record-issues/top-bar-record-issues.component.ts +++ b/src/app/record/components/top-bar-record-issues/top-bar-record-issues.component.ts @@ -26,7 +26,7 @@ export class TopBarRecordIssuesComponent implements OnInit, OnDestroy { }) .pipe(takeUntil(this.$destroy)) .subscribe((userRecord) => { - this.userInfo = userRecord.userInfo + this.userInfo = userRecord?.userInfo }) } ngOnDestroy() { diff --git a/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.html b/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.html new file mode 100644 index 0000000000..8088f7ca08 --- /dev/null +++ b/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.html @@ -0,0 +1,77 @@ + + + info + + Please verify your primary email address + + +
+
+

+ You need to verify your primary email address in order to access all of + ORCID’s editing features. +

+

+ + To verify your email please click the link in the message we have sent + to: + +
+ + {{ primaryEmail }} + +

+

+ + I don’t have the verification email + +
+ + Click the button below and we will send you a new one. + +

+
+
+ +
+
+

+ Need help? +
+ Visit our + knowledge base + or contact the support team at +
+ + https://support.orcid.org/hc/en-us/requests/new + +

+
+
+
diff --git a/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.scss b/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.scss new file mode 100644 index 0000000000..3a97ad6bf6 --- /dev/null +++ b/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.scss @@ -0,0 +1,20 @@ +app-modal { + ::ng-deep .content-wrapper { + padding-bottom: 20px !important; + } +} + +.info { + margin-inline-end: 10px; +} + +.resend-verification { + margin: 20px 0 30px 0; +} + +.need-help { + p { + margin-top: 4px; + margin-inline-end: 0; + } +} diff --git a/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.scss-theme.scss b/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.scss-theme.scss new file mode 100644 index 0000000000..a218f15449 --- /dev/null +++ b/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.scss-theme.scss @@ -0,0 +1,16 @@ +@import '~@angular/material/theming'; +@import 'src/assets/scss/material.orcid-theme.scss'; + +@mixin top-bar-verification-modal-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, accent); + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + + .info { + color: mat-color($foreground, 'state-notice-dark') !important; + } +} + +@include top-bar-verification-modal-theme($orcid-app-theme); diff --git a/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.spec.ts b/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.spec.ts new file mode 100644 index 0000000000..e5bcb9dd75 --- /dev/null +++ b/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TopBarVerificationEmailModalComponent } from './top-bar-verification-email-modal.component' + +describe('TopBarVerificationEmailModalComponent', () => { + let component: TopBarVerificationEmailModalComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TopBarVerificationEmailModalComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent(TopBarVerificationEmailModalComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.ts b/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.ts new file mode 100644 index 0000000000..1d644e9adb --- /dev/null +++ b/src/app/record/components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component.ts @@ -0,0 +1,52 @@ +import { Component, OnDestroy, OnInit } from '@angular/core' +import { first, takeUntil } from 'rxjs/operators' +import { PlatformInfoService } from '../../../../../cdk/platform-info' +import { Subject } from 'rxjs' +import { RecordEmailsService } from '../../../../../core/record-emails/record-emails.service' +import { MatDialogRef } from '@angular/material/dialog' +import { ModalComponent } from '../../../../../cdk/modal/modal/modal.component' + +@Component({ + selector: 'app-top-bar-verification-email-modal', + templateUrl: './top-bar-verification-email-modal.component.html', + styleUrls: [ + './top-bar-verification-email-modal.component.scss', + './top-bar-verification-email-modal.component.scss-theme.scss', + ], + preserveWhitespaces: true, +}) +export class TopBarVerificationEmailModalComponent + implements OnInit, OnDestroy { + $destroy: Subject = new Subject() + + primaryEmail: string + isMobile: boolean + + constructor( + public dialogRef: MatDialogRef, + private _platform: PlatformInfoService, + private _recordEmailsService: RecordEmailsService + ) { + this._platform + .get() + .pipe(takeUntil(this.$destroy)) + .subscribe((platform) => { + this.isMobile = platform.columns4 || platform.columns8 + }) + } + + verifyEmail() { + this._recordEmailsService + .verifyEmail(this.primaryEmail) + .pipe(first()) + .subscribe(() => { + this.dialogRef.close() + }) + } + + ngOnDestroy() { + this.$destroy.next(true) + this.$destroy.unsubscribe() + } + ngOnInit(): void {} +} diff --git a/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.html b/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.html new file mode 100644 index 0000000000..e69cd16b9d --- /dev/null +++ b/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.html @@ -0,0 +1,79 @@ +
+
+ info + verified +
+
+ +

+ Thank you for registering with ORCID +

+

+ We have sent verification messages to each of your registered email + addresses. You will need to verify your primary email address before you + can begin adding information manually to your ORCID record. +

+ +
+ +

+ Please verify your primary email address! +

+

+ + You need to verify your primary email in order to access all of + ORCID’s editing features. + +
+ + To verify your email, click the link in the message sent to: + +

+
+ +

+ Need help?
+ Visit our + knowledge base + + or contact + + support. + +

+
+
+ +

+ Thank you for verifying your email +

+
+
+
diff --git a/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.scss b/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.scss new file mode 100644 index 0000000000..695e702ebd --- /dev/null +++ b/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.scss @@ -0,0 +1,24 @@ +:host { + width: 100%; + box-sizing: border-box; +} + +.info { + display: flex; + padding: 16px; + border: solid 2px; + border-radius: 4px; + + h2 { + margin: 0; + } + p { + margin-top: 0; + } + p.you-need { + margin: 0; + } + p.email-container { + margin: 16px 0 16px 0; + } +} diff --git a/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.scss-theme.scss b/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.scss-theme.scss new file mode 100644 index 0000000000..596cc6e042 --- /dev/null +++ b/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.scss-theme.scss @@ -0,0 +1,28 @@ +@import '~@angular/material/theming'; +@import 'src/assets/scss/material.orcid-theme.scss'; + +@mixin top-bar-verification-email-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, accent); + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + + .just-registered { + border-color: mat-color($foreground, 'state-notice-dark') !important; + + mat-icon { + color: mat-color($foreground, 'state-notice-dark') !important; + } + } + + .email-verified { + border-color: mat-color($accent, 400) !important; + + mat-icon { + color: mat-color($accent, 400); + } + } +} + +@include top-bar-verification-email-theme($orcid-app-theme); diff --git a/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.spec.ts b/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.spec.ts new file mode 100644 index 0000000000..bff63503e4 --- /dev/null +++ b/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TopBarVerificationEmailComponent } from './top-bar-verification-email.component' + +describe('TopBarVerificationEmailComponent', () => { + let component: TopBarVerificationEmailComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [TopBarVerificationEmailComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent(TopBarVerificationEmailComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.ts b/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.ts new file mode 100644 index 0000000000..e42775feca --- /dev/null +++ b/src/app/record/components/top-bar-verification-email/top-bar-verification-email.component.ts @@ -0,0 +1,70 @@ +import { Component, Input, OnDestroy, OnInit } from '@angular/core' +import { first, takeUntil } from 'rxjs/operators' +import { PlatformInfoService } from '../../../cdk/platform-info' +import { Subject } from 'rxjs' +import { MatDialog } from '@angular/material/dialog' +import { RecordEmailsService } from '../../../core/record-emails/record-emails.service' +import { RecordService } from '../../../core/record/record.service' + +@Component({ + selector: 'app-top-bar-verification-email', + templateUrl: './top-bar-verification-email.component.html', + styleUrls: [ + './top-bar-verification-email.component.scss', + './top-bar-verification-email.component.scss-theme.scss', + ], + preserveWhitespaces: true, +}) +export class TopBarVerificationEmailComponent implements OnInit, OnDestroy { + $destroy: Subject = new Subject() + + @Input() justRegistered: boolean + @Input() emailVerified: boolean + + primaryEmail: string + verifyEmailSend: boolean + isMobile: boolean + + constructor( + private _dialog: MatDialog, + private _platform: PlatformInfoService, + private _record: RecordService, + private _recordEmails: RecordEmailsService, + private _recordEmailsService: RecordEmailsService + ) { + _platform + .get() + .pipe(takeUntil(this.$destroy)) + .subscribe((platform) => { + this.isMobile = platform.columns4 || platform.columns8 + }) + } + + ngOnInit(): void { + this._record + .getRecord() + .pipe(takeUntil(this.$destroy)) + .subscribe((userRecord) => { + const primaryEmail = userRecord?.emails?.emails?.filter( + (email) => email.primary + )[0] + if (!primaryEmail?.verified) { + this.primaryEmail = primaryEmail?.value + } + }) + } + + verifyEmail() { + this._recordEmailsService + .verifyEmail(this.primaryEmail) + .pipe(first()) + .subscribe(() => { + this.verifyEmailSend = true + }) + } + + ngOnDestroy() { + this.$destroy.next(true) + this.$destroy.unsubscribe() + } +} diff --git a/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.html b/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.html index aadd7e9c25..e267da71a6 100644 --- a/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.html +++ b/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.html @@ -57,21 +57,20 @@ - {{ biographyForm.get('biography').value.length }}/5000 - Invalid characters or format -

-

- Who can see your biography. The default visibility setting is Private. +

+ {{ ngOrcidDefaultVisibilityLabel }} + {{ defaultVisibility | visibilityStringLabel }}.

-
- +
+
+ + +
diff --git a/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.scss b/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.scss index 20c4aa3b1f..ae32b523e1 100644 --- a/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.scss +++ b/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.scss @@ -9,13 +9,15 @@ hr { } .title { - margin-top: 16px; - p { margin: 6px 0; } } +label.mat-caption { + margin-bottom: 8px; +} + .mat-form-field { width: 100%; } @@ -23,9 +25,3 @@ hr { .side-bar { text-decoration: underline; } - -.biography { - ::ng-deep .mat-form-field-appearance-outline .mat-form-field-flex { - padding: 0px 0.5em 0 0.5em; - } -} diff --git a/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.ts b/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.ts index fefe1b6e24..7e8c09aa18 100644 --- a/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.ts +++ b/src/app/record/components/top-bar/modals/modal-biography/modal-biography.component.ts @@ -10,11 +10,6 @@ import { ModalComponent } from '../../../../../cdk/modal/modal/modal.component' import { FormControl, FormGroup } from '@angular/forms' import { UserRecord } from '../../../../../types/record.local' import { RecordBiographyService } from '../../../../../core/record-biography/record-biography.service' -import { OrcidValidators } from '../../../../../validators' -import { - ILLEGAL_NAME_CHARACTERS_REGEXP, - URL_REGEXP, -} from '../../../../../constants' import { BiographyEndPoint } from '../../../../../types/record-biography.endpoint' import { Visibility, @@ -48,6 +43,7 @@ export class ModalBiographyComponent implements OnInit, OnDestroy { platform: PlatformInfo ngOrcidAddYourBiography = $localize`:@@topBar.addYourBiography:Add you biography` + ngOrcidDefaultVisibilityLabel = $localize`:@@shared.whoCanSeeBio:Control who can see your biography by setting the visibility. Your default visibility setting is` constructor( @Inject(WINDOW) private window: Window, @@ -68,20 +64,15 @@ export class ModalBiographyComponent implements OnInit, OnDestroy { ngOnInit(): void { this.loadingBiography = false this.userRecord = this.data - this.biographyVisibility = this.userRecord.preferences.default_visibility + this.defaultVisibility = this.userRecord.preferences.default_visibility + this.biographyVisibility = this.defaultVisibility if (this.userRecord.biography && this.userRecord.biography.biography) { this.biography = this.userRecord.biography.biography.value this.biographyVisibility = this.userRecord.biography.visibility.visibility } - this.biographyForm = new FormGroup({ - biography: new FormControl(this.biography, { - validators: [ - OrcidValidators.notPattern(ILLEGAL_NAME_CHARACTERS_REGEXP), - OrcidValidators.notPattern(URL_REGEXP), - ], - }), - visibility: new FormControl(this.biographyVisibility, {}), + biography: new FormControl(this.biography), + visibility: new FormControl(this.biographyVisibility), }) } diff --git a/src/app/record/components/top-bar/modals/modal-name/modal-name.component.html b/src/app/record/components/top-bar/modals/modal-name/modal-name.component.html index 3366cb59fc..9403a5373a 100644 --- a/src/app/record/components/top-bar/modals/modal-name/modal-name.component.html +++ b/src/app/record/components/top-bar/modals/modal-name/modal-name.component.html @@ -4,31 +4,13 @@ - - Given and family names + + Your names - - Published name - - - - - Visibility - - - - - Other names + + Also known as @@ -63,9 +45,7 @@ >

- - Given and family names - + Your names *

@@ -77,10 +57,28 @@


-

- Your given and family names. These are used on your ORCID record by - default. +

+ ORCID has a number of options for adding and managing your names.

+ + Find out more about managing names in your ORCID record + +
+

+ Your given and family names +

+
@@ -127,24 +131,35 @@ formControlName="familyName" placeholder=" {{ ngOrcidAddFamilyName }}" /> + + Please enter your first/given name + + + Invalid name characters or format + + + Must be less than 100 characters +
-
+

- Published name + Your published name

-
-

- Your preferred name format and structure. If added the published name will - be used instead of your given and family names. +

+ How you prefer your name to appear when credited. Adding a published name + lets you control how your name is displayed in your ORCID record.

-
+

- Visibility + Who can see your names

-
-

- Who can see your name. The default visibility setting is Private. +

+ {{ ngOrcidDefaultVisibilityLabel }} + {{ publicVisibility | visibilityStringLabel }}.

-
+
@@ -200,73 +215,91 @@


-

- You can add variants of your name, such as an abbreviated first name, +

+ Add other names you may be known by. These can include abbreviated names, middle names, former names or names in a different character set or language. Adding other names can help people find your record when they search the ORCID registry.

-
- -
-
- - - - - Source: - {{ getSourceName(otherName) }} - - -
+
- -
+
- delete - - + + +
+
diff --git a/src/app/record/components/top-bar/modals/modal-name/modal-name.component.scss b/src/app/record/components/top-bar/modals/modal-name/modal-name.component.scss index d874c11c1b..1ffefd4b32 100644 --- a/src/app/record/components/top-bar/modals/modal-name/modal-name.component.scss +++ b/src/app/record/components/top-bar/modals/modal-name/modal-name.component.scss @@ -6,11 +6,20 @@ label { margin: 6px 0 3px 0; } +hr.dashed-line { + margin-bottom: 0 !important; +} + ::ng-deep .columns-4-or-8 .mat-form-field { width: 100%; margin-inline-end: auto; } +.other-names-list.cdk-drop-list-dragging + .other-names-box:not(.cdk-drag-placeholder) { + transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); +} + .required { margin-left: 3px; } @@ -23,11 +32,14 @@ label { margin-right: 3px !important; } } - .input-container { max-width: 402px; } +.names-visibility { + margin-bottom: 18px; +} + .other-names-input-line { margin-top: 20px; img { @@ -63,44 +75,26 @@ label { margin: 4px; } -.cdk-drag-placeholder { - opacity: 0; -} - .actions-wrapper { flex-wrap: nowrap; } -.cdk-drag-placeholder { - opacity: 0; -} - -::ng-deep .cdk-drop-list-dragging { - cursor: move !important; - .mat-form-field-flex, - .mat-select-trigger, - .mat-button, - .mat-icon-button, - .mat-stroked-button, - .mat-flat-button { - cursor: move !important; - } -} - -::ng-deep .cdk-drag-animating { - transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); -} - .mat-form-field { width: 100%; } .title { - margin-top: 16px; - p { margin: 6px 0; } + + .your-given-names { + margin-bottom: 10px; + } +} + +label.mat-caption { + margin-bottom: 8px; } .mat-form-field { @@ -109,7 +103,6 @@ label { .input-box { flex-grow: 1; - max-width: 402px; input { width: 100%; height: 40px; @@ -119,6 +112,9 @@ label { padding: 0 12px; } } +hr { + margin-bottom: 16px; +} .family-names { margin-top: 18px; @@ -132,6 +128,10 @@ label { margin: 20px 0 30px 0; } +.orcid-has-number { + margin-bottom: 0; +} + .add-more { margin-top: 16px; @@ -145,10 +145,23 @@ label { margin-top: 4px; } -::ng-deep .mat-form-field-appearance-outline .mat-form-field-subscript-wrapper { - padding-left: 2px !important; -} - .side-bar { text-decoration: underline; } + +::ng-deep .columns-4-or-8 { + .other-names-input-line .input-container { + padding-bottom: 30px; + } + + .other-names-input-line .actions-wrapper { + padding-bottom: 10px; + justify-content: space-between; + } + .actions-wrapper { + width: 100%; + } + .columns-4-or-8 .cdk-drag-placeholder { + opacity: 0; + } +} diff --git a/src/app/record/components/top-bar/modals/modal-name/modal-name.component.ts b/src/app/record/components/top-bar/modals/modal-name/modal-name.component.ts index d05ef1376e..183c4fe7b6 100644 --- a/src/app/record/components/top-bar/modals/modal-name/modal-name.component.ts +++ b/src/app/record/components/top-bar/modals/modal-name/modal-name.component.ts @@ -2,15 +2,19 @@ import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop' import { ChangeDetectorRef, Component, + ElementRef, Inject, OnDestroy, OnInit, + QueryList, + ViewChildren, } from '@angular/core' import { FormControl, FormGroup, Validators } from '@angular/forms' import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog' import { cloneDeep } from 'lodash' import { Subject } from 'rxjs' import { first, switchMap, take, takeUntil } from 'rxjs/operators' +import { SnackbarService } from 'src/app/cdk/snackbar/snackbar.service' import { ModalComponent } from '../../../../../cdk/modal/modal/modal.component' import { @@ -42,8 +46,10 @@ import { OrcidValidators } from '../../../../../validators' ], }) export class ModalNameComponent implements OnInit, OnDestroy { + @ViewChildren('nameInput') inputs: QueryList $destroy: Subject = new Subject() + id: string platform: PlatformInfo namesForm: FormGroup otherNamesForm: FormGroup @@ -53,14 +59,18 @@ export class ModalNameComponent implements OnInit, OnDestroy { originalBackendOtherNames: OtherNamesEndPoint isMobile: boolean defaultVisibility: VisibilityStrings + publicVisibility: VisibilityStrings otherNamesDefaultVisibility: VisibilityStrings addedOtherNameCount = 0 loadingNames = true + nameMaxLength = 99 + otherNameMaxLength = 254 ngOrcidAddGivenName = $localize`:@@topBar.addGivenName:Add given name` ngOrcidAddFamilyName = $localize`:@@topBar.addFamilyName:Add family name` ngOrcidAddPublishedName = $localize`:@@topBar.addPublishedName:Add a published or credit name` ngOrcidAddOtherName = $localize`:@@topBar.addOtherName:Add other name` + ngOrcidDefaultVisibilityLabel = $localize`:@@topBar.manageWhoCanSee:Control who can see your given, family and published names by setting the visibility. The default visibility for your names is` constructor( @Inject(WINDOW) private window: Window, @@ -71,7 +81,8 @@ export class ModalNameComponent implements OnInit, OnDestroy { private _recordNameService: RecordNamesService, private _recordOtherNamesService: RecordOtherNamesService, private _changeDetectorRef: ChangeDetectorRef, - private _userSession: UserService + private _userSession: UserService, + private _snackBar: SnackbarService ) { this._platform.get().subscribe((platform) => { this.platform = platform @@ -88,6 +99,7 @@ export class ModalNameComponent implements OnInit, OnDestroy { ngOnInit(): void { this.userRecord = this.data + this.publicVisibility = 'PUBLIC' this._recordNameService .getNames() .pipe(first()) @@ -121,7 +133,13 @@ export class ModalNameComponent implements OnInit, OnDestroy { otherNames.forEach((otherName) => { group[otherName.putCode] = new FormGroup({ - otherName: new FormControl(otherName.content), + otherName: new FormControl( + { + value: otherName.content, + disabled: otherName.source !== this.id, + }, + [Validators.maxLength(this.otherNameMaxLength)] + ), visibility: new FormControl(otherName.visibility.visibility, {}), }) }) @@ -145,6 +163,7 @@ export class ModalNameComponent implements OnInit, OnDestroy { Validators.required, OrcidValidators.notPattern(ILLEGAL_NAME_CHARACTERS_REGEXP), OrcidValidators.notPattern(URL_REGEXP), + Validators.maxLength(this.nameMaxLength), ], }) ) @@ -154,12 +173,15 @@ export class ModalNameComponent implements OnInit, OnDestroy { validators: [ OrcidValidators.notPattern(URL_REGEXP), OrcidValidators.notPattern(ILLEGAL_NAME_CHARACTERS_REGEXP), + Validators.maxLength(this.nameMaxLength), ], }) ) this.namesForm.addControl( 'publishedName', - new FormControl(publishedName, {}) + new FormControl(publishedName, { + validators: [Validators.maxLength(this.nameMaxLength)], + }) ) this.namesForm.addControl('visibility', new FormControl(visibilityName, {})) } @@ -168,9 +190,9 @@ export class ModalNameComponent implements OnInit, OnDestroy { const visibility = namesForm.get('visibility').value return { errors: [], - givenNames: namesForm.get('givenNames').value, - familyName: namesForm.get('familyName').value, - creditName: namesForm.get('publishedName').value, + givenNames: namesForm.get('givenNames').value.trim(), + familyName: namesForm.get('familyName').value.trim(), + creditName: namesForm.get('publishedName').value.trim(), visibility: { visibility, }, @@ -187,11 +209,11 @@ export class ModalNameComponent implements OnInit, OnDestroy { this.otherNames.reverse() this.otherNames .map((value) => value.putCode) - .filter((key) => namesForm.value[key].otherName) + .filter((key) => namesForm.getRawValue()[key].otherName) .forEach((key, i) => { - const otherName = namesForm.value[key].otherName - const visibility = namesForm.value[key].visibility - if (namesForm.value[key]) { + const otherName = namesForm.getRawValue()[key].otherName.trim() + const visibility = namesForm.getRawValue()[key].visibility + if (namesForm.getRawValue()[key]) { otherNames.otherNames.push({ putCode: key.indexOf('new-') === 0 ? null : key, content: otherName, @@ -227,6 +249,8 @@ export class ModalNameComponent implements OnInit, OnDestroy { }, (error) => {} ) + } else { + this._snackBar.showValidationError() } } @@ -242,8 +266,10 @@ export class ModalNameComponent implements OnInit, OnDestroy { this.namesForm.addControl( 'new-' + this.addedOtherNameCount, new FormGroup({ - otherName: new FormControl(), - visibility: new FormControl(this.otherNamesDefaultVisibility, {}), + otherName: new FormControl('', [ + Validators.maxLength(this.otherNameMaxLength), + ]), + visibility: new FormControl(this.otherNamesDefaultVisibility), }) ) this.otherNames.push({ @@ -253,6 +279,8 @@ export class ModalNameComponent implements OnInit, OnDestroy { this.addedOtherNameCount++ this._changeDetectorRef.detectChanges() + const input = this.inputs.last + input.nativeElement.focus() } deleteOtherName(putCode: string) { @@ -261,36 +289,6 @@ export class ModalNameComponent implements OnInit, OnDestroy { this.namesForm.removeControl(putCode) } - getSourceName(names: Assertion) { - if (names.sourceName) { - if (names.lastModified) { - return ( - names.sourceName + - ' ' + - names.lastModified.year + - '-' + - names.lastModified.month + - '-' + - names.lastModified.day - ) - } else { - return names.sourceName - } - } else if (names.source) { - if (names.lastModified) { - return ( - names.source + - ' ' + - names.lastModified.year + - '-' + - names.lastModified.month + - '-' + - names.lastModified.day - ) - } - } - } - toGivenNames() { this.window.document.getElementById('given-names').scrollIntoView() } diff --git a/src/app/record/components/top-bar/top-bar.component.html b/src/app/record/components/top-bar/top-bar.component.html index c4758f3940..c30f9e78ef 100644 --- a/src/app/record/components/top-bar/top-bar.component.html +++ b/src/app/record/components/top-bar/top-bar.component.html @@ -15,7 +15,33 @@ [onlyShowPrintButton]="!platform.columns12" > + + + + Your account has been locked + Please contact + ORCID support + if you believe this account was locked in error. + + + -

Names

+

Names

- + Published Name

@@ -38,7 +66,7 @@

Names

- Name + Name
{{ givenNames + ' ' + familyName }}
@@ -69,7 +97,7 @@

Names

[type]="'top-bar'" id="biography-panel" > -

Biography

+

Biography

Biography

*ngIf="userRecord?.names || userRecord?.otherNames" >
-
+
Published Name

{{ creditName }}

@@ -107,7 +135,7 @@

{{ creditName }}

class="published-name" *ngIf="!creditName && (givenNames || familyName)" > -
Name
+
Name

{{ givenNames + ' ' + familyName }}

@@ -123,7 +151,7 @@

*ngIf="creditName" >
-
Name
+
Name
{{ givenNames + ' ' }} @@ -153,14 +181,13 @@

Also known as

- {{ - getOtherNames(userRecord.otherNames?.otherNames).join(', ') - }} + {{ getOtherNamesUnique(userRecord.otherNames?.otherNames) }}

@@ -169,13 +196,17 @@

{{ otherNames.content }}

-
- Source -
-
- {{ otherNames.sourceName || otherNames.source }} - {{ otherNames.createdDate | monthDayYearDateToString }} -
+ +

@@ -203,7 +234,7 @@

class="div biography-container" *ngIf="userRecord?.biography?.biography" > -

Biography

+

Biography

= new Subject() @Input() isPublicRecord: string + userInfo: UserInfo userRecord: UserRecord userStatus: UserStatus @@ -35,18 +40,32 @@ export class TopBarComponent implements OnInit, OnDestroy { creditName = '' expandedContent = false recordWithIssues: boolean + justRegistered: boolean + emailVerified: boolean + checkEmailValidated: boolean + inDelegationMode: boolean @Input() loadingUserRecord = true constructor( - private _platform: PlatformInfoService, + _dialog: MatDialog, + _platform: PlatformInfoService, private _user: UserService, - private _record: RecordService + private _record: RecordService, + private _recordEmails: RecordEmailsService, + private _verificationEmailModalService: VerificationEmailModalService ) { _platform .get() .pipe(takeUntil(this.$destroy)) .subscribe((data) => { this.platform = data + if (this.platform.queryParameters.hasOwnProperty('justRegistered')) { + this.justRegistered = true + } + + if (this.platform.queryParameters.hasOwnProperty('emailVerified')) { + this.emailVerified = true + } }) _user .getUserSession() @@ -61,10 +80,32 @@ export class TopBarComponent implements OnInit, OnDestroy { .getRecord({ publicRecordId: this.isPublicRecord || undefined, }) - .pipe(takeUntil(this.$destroy)) + .pipe( + tap((record) => { + if (record?.userInfo && !this.isPublicRecord) { + const checkEmailValidated = + record.userInfo?.IS_PRIMARY_EMAIL_VERIFIED === 'true' + const inDelegationMode = + record.userInfo.IN_DELEGATION_MODE === 'true' + if (!checkEmailValidated && !inDelegationMode) { + if (record.emails) { + const primaryEmail = record.emails.emails.filter( + (email) => email.primary + )[0] + if (!primaryEmail?.verified) { + this.resendVerificationEmailModal(primaryEmail.value) + } + } + } + } + }), + takeUntil(this.$destroy) + ) .subscribe((userRecord) => { this.recordWithIssues = userRecord?.userInfo?.RECORD_WITH_ISSUES this.userRecord = userRecord + this.userInfo = userRecord.userInfo + if (!isEmpty(userRecord.otherNames)) { this.setNames(userRecord) } @@ -83,10 +124,23 @@ export class TopBarComponent implements OnInit, OnDestroy { : '' } - getOtherNames(otherNames: Assertion[]): string[] { - return otherNames.map((otherName) => { - return otherName.content - }) + getOtherNamesUnique(otherNames: Assertion[]): string { + return otherNames + .map((otherName) => { + return otherName.content + }) + .filter(function (item, pos, array) { + return ( + array + .map((x) => x.toLowerCase().trim()) + .indexOf(item.toLowerCase().trim()) === pos + ) + }) + .join(', ') + } + + resendVerificationEmailModal(email: string) { + this._verificationEmailModalService.openVerificationEmailModal(email) } collapse(): void { diff --git a/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.html b/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.html new file mode 100644 index 0000000000..ba67fd3e05 --- /dev/null +++ b/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.html @@ -0,0 +1,219 @@ +

+ + Identifier ({{ + index + 1 + }}) + Cancel +
+ + +
+
+ +
+
+ + + + Select an identifier type + + + + {{ item.description }} + + + The type of identifier associated with the work, such as an ISBN, DOI + or PMID. + + +
+
+ + +
+
+ +
+ + + + + + Invalid id for the selected identifier type + + + + warning + + + + We couldn't find a resource that matches the identifier you entered. + Please check the value or enter a valid link to the resource. + + + + + The identifier associated with the work. The format will depend on + the type of identifier selected. + + Please enter an external ID + +
+ + +
+
+ +
+ + + + + The URL that the identifier resolves to, for example + https://doi.org/10.23640/07243.c.4232246 + + + Invalid url + + +
+ + + +
+
+ +
+ + + + {{ value | recordWorkRelationshipLabel }} + + {{ value | recordWorkRelationshipHintLabel }} + + + + + + Only identifier types "grant number", "doi", "uri" or "proposal id" are + allowed when using "funded-by" identifiers + + + At least one "self" identifier is required when using "version-of" + identifiers +
+
diff --git a/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.scss b/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.scss new file mode 100644 index 0000000000..e281ba9280 --- /dev/null +++ b/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.scss @@ -0,0 +1,40 @@ +.mat-form-field { + width: 100%; +} + +.title { + p { + margin: 6px 0; + } +} + +label.mat-caption { + margin-bottom: 8px; +} + +.mat-form-field { + width: 100%; +} + +.side-bar { + text-decoration: underline; +} + +mat-radio-group { + display: flex; + flex-direction: column; +} + +.top-bar { + display: flex; + justify-content: space-between; + margin-bottom: 16px; +} + +.input-container { + max-width: 402px; +} + +.fundingIdErrors { + padding-top: 5px; +} diff --git a/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.scss-theme.scss b/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.scss-theme.scss new file mode 100644 index 0000000000..2b39032ae8 --- /dev/null +++ b/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.scss-theme.scss @@ -0,0 +1,16 @@ +@import '~@angular/material/theming'; +@import 'src/assets/scss/material.orcid-theme.scss'; + +@mixin work-external-identifiers-edit-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, accent); + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + $config: mat-typography-config(); + + .error { + color: map-get($foreground, 'state-warning-dark'); + } +} +@include work-external-identifiers-edit-theme($orcid-app-theme); diff --git a/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.spec.ts b/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.spec.ts new file mode 100644 index 0000000000..fa1abcd399 --- /dev/null +++ b/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WorkExternalIdentifiersEditComponent } from './work-external-identifiers-edit.component' + +describe('ExternalIdentifiersEditComponent', () => { + let component: WorkExternalIdentifiersEditComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [WorkExternalIdentifiersEditComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent(WorkExternalIdentifiersEditComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.ts b/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.ts new file mode 100644 index 0000000000..96cc7ea768 --- /dev/null +++ b/src/app/record/components/work-external-identifiers-edit/work-external-identifiers-edit.component.ts @@ -0,0 +1,72 @@ +import { + AfterViewInit, + ChangeDetectorRef, + Component, + EventEmitter, + Input, + OnInit, + Output, + ViewChild, +} from '@angular/core' +import { FormControl, FormGroup } from '@angular/forms' +import { ErrorStateMatcher } from '@angular/material/core' +import { MatSelect, MatSelectChange } from '@angular/material/select' +import { WorkIdType, WorkRelationships } from 'src/app/types/works.endpoint' + +@Component({ + selector: 'app-work-external-identifiers-edit', + templateUrl: './work-external-identifiers-edit.component.html', + styleUrls: [ + './work-external-identifiers-edit.component.scss', + 'work-external-identifiers-edit.component.scss-theme.scss', + ], +}) +export class WorkExternalIdentifiersEditComponent + implements OnInit, AfterViewInit { + @ViewChild('externalIdentifierType') externalIdentifierTypeRef: MatSelect + @Input() externalIdForm: FormGroup + @Input() index: number + @Input() workIdTypes: WorkIdType[] + @Output() cancelEvent = new EventEmitter() + @Output() updateExternalEvent = new EventEmitter() + workExternalIdErrorMatcher = new WorkExternalIdErrorMatcher() + + unResolvedTooltip = $localize`:@@works.unResolved:We couldn't find a resource that matches the identifier you entered. + Please check the value or enter a valid link to the resource.` + + workRelationships: WorkRelationships[] = Object.keys( + WorkRelationships + ) as WorkRelationships[] + backupValue: any + + ngOrcidSelectIdentifierType = $localize`:@@works.selectAnIdentifier:Select an identifier type` + + constructor(private changeDedectionRef: ChangeDetectorRef) {} + + ngOnInit(): void { + this.backupValue = this.externalIdForm.value + } + + updateExternal(event: MatSelectChange): void { + this.updateExternalEvent.emit(event.value) + } + + ngAfterViewInit() { + this.externalIdentifierTypeRef.focus() + this.changeDedectionRef.detectChanges() + } + + cancel() { + this.externalIdForm.setValue(this.backupValue) + this.cancelEvent.emit() + } +} + +export class WorkExternalIdErrorMatcher implements ErrorStateMatcher { + isErrorState(control: FormControl | null): boolean { + return ( + (control.hasError('required') || control.hasError('validFormat')) && + control.touched + ) + } +} diff --git a/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.html b/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.html new file mode 100644 index 0000000000..ff7e7b610a --- /dev/null +++ b/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.html @@ -0,0 +1,35 @@ +
+ + + + + + + + + + +
+
+ Edit + Delete +
diff --git a/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.scss b/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.scss new file mode 100644 index 0000000000..99b7d1052a --- /dev/null +++ b/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.scss @@ -0,0 +1,11 @@ +:host { + display: flex; +} +.externalIds { + width: 100%; +} +.controls { + a { + margin-inline-start: 16px; + } +} diff --git a/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.spec.ts b/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.spec.ts new file mode 100644 index 0000000000..59d5abe14f --- /dev/null +++ b/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WorkExternalIdentifiersViewOnlyComponent } from './work-external-identifiers-view-only.component' + +describe('ExternalIdentifiersViewOnlyComponent', () => { + let component: WorkExternalIdentifiersViewOnlyComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [WorkExternalIdentifiersViewOnlyComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent(WorkExternalIdentifiersViewOnlyComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.ts b/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.ts new file mode 100644 index 0000000000..29b9d6ec2b --- /dev/null +++ b/src/app/record/components/work-external-identifiers-view-only/work-external-identifiers-view-only.component.ts @@ -0,0 +1,27 @@ +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' +import { WorkRelationships } from 'src/app/types/works.endpoint' + +@Component({ + selector: 'app-work-external-identifiers-view-only', + templateUrl: './work-external-identifiers-view-only.component.html', + styleUrls: ['./work-external-identifiers-view-only.component.scss'], +}) +export class WorkExternalIdentifiersViewOnlyComponent implements OnInit { + typeLabel = $localize`:@@works.typeColon:Type:` + valueLabel = $localize`:@@works.value:Value:` + urlLabel = $localize`:@@works.urlColon:URL:` + relationshipLabel = $localize`:@@shared.relationshipColon:Relationship:` + + @Output() edit = new EventEmitter() + @Output() delete = new EventEmitter() + + @Input() workIdentifier: { + externalIdentifierId: string + externalIdentifierType: string + externalIdentifierUrl: string + externalRelationship: WorkRelationships + } + constructor() {} + + ngOnInit(): void {} +} diff --git a/src/app/record/components/work-external-identifiers-view-only/work-modal-relationship-view-only.component.scss-theme.scss b/src/app/record/components/work-external-identifiers-view-only/work-modal-relationship-view-only.component.scss-theme.scss new file mode 100644 index 0000000000..99b7d1052a --- /dev/null +++ b/src/app/record/components/work-external-identifiers-view-only/work-modal-relationship-view-only.component.scss-theme.scss @@ -0,0 +1,11 @@ +:host { + display: flex; +} +.externalIds { + width: 100%; +} +.controls { + a { + margin-inline-start: 16px; + } +} diff --git a/src/app/record/components/work-form/work-form/work-form.component.html b/src/app/record/components/work-form/work-form/work-form.component.html new file mode 100644 index 0000000000..f531aaa04e --- /dev/null +++ b/src/app/record/components/work-form/work-form/work-form.component.html @@ -0,0 +1,734 @@ +
+
+

+ Work details +

+

+ * + Required information +

+
+
+ + +
+ + +
+ + + + {{ item.value | recordWorkCategoryLabel }} + + + + Select a work category + + +
+
+ +
+ + + + + {{ item.value | recordWorkTypeLabel }} + + + + Select a work type + + +
+ + +
+
+ +
+ + + + + Set a work title + + + Must be less than 1000 characters + + +
+ + + + +
+
+
+ +
+ + + + + + Please enter a translated title + + + Must be less than 1000 characters + +
+ + +
+
+ +
+
+ + + + {{ item.key }} + + + + + Please select a language + +
+
+
+ + + +
+
+ +
+ + + + + Must be less than 1000 characters + + +
+ + +
+
+ +
+ + + + + Must be less than 1000 characters + + +
+ + +
+ +
+
+
+ + + Year + + {{ year }} + + + +
+
+ + + Month + + {{ month | trailingZeros }} + + + +
+
+ + + Day + + {{ day | trailingZeros }} + + + +
+ + Invalid date + +
+
+ + + +
+
+ +
+ + + + + Invalid url + + + Must be less than 2000 characters + + A link to more information about the work. Links should be in the full + URL format e.g. http://www.website.com/page.html + + +
+ + + + + +
+

+ Citation +

+
+ +
+ + +
+
+ +
+
+ + + + Select a citation type + + + + {{ item.value }} + + + + + Select a citation type + +
+ + +
+
+ +
+ + + + + Select a citation + +
+ + +
+
+ +
+ + + + Must be less than 5000 characters + + +
+
+ + + + + +
+

+ Work identifiers +

+
+
+ + + + + + + +
+

+ Other information +

+
+
+ + +
+
+ +
+
+ + + + {{ item.key }} + + + +
+
+ + +
+
+ +
+
+ + + + {{ item.key }} + + + +
+
+ + + + + +
+

+ Visibility +

+
+
+ + +
+

+ {{ ngOrcidDefaultVisibilityLabel }} + {{ defaultVisibility | visibilityStringLabel }}. +

+
+
+ + +
+
+
+
diff --git a/src/app/record/components/work-form/work-form/work-form.component.scss b/src/app/record/components/work-form/work-form/work-form.component.scss new file mode 100644 index 0000000000..cc629b17bf --- /dev/null +++ b/src/app/record/components/work-form/work-form/work-form.component.scss @@ -0,0 +1,98 @@ +.hide { + display: none; +} + +mat-form-field { + width: 100%; +} + +:host { + width: 100%; +} + +.title { + p { + margin: 6px 0; + } +} + +label { + display: block; + padding-bottom: 8px; +} + +.mat-form-field { + width: 100%; +} + +.side-bar { + text-decoration: underline; +} + +.date-container { + display: flex; + flex-direction: row; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + mat-form-field { + width: 120px; + margin-left: 4px; + } +} + +.align-icon { + display: flex; + flex-direction: row; + align-items: center; +} + +.required-information { + margin-left: auto !important; + margin-top: 10px !important; + + span { + margin-right: 3px !important; + } +} + +.date { + ::ng-deep .mat-form-field-wrapper { + padding-bottom: 0px !important; + } + padding-bottom: 1.475em; + padding-left: 0; +} + +.add-more { + margin-bottom: 27px; + padding-inline-start: 0; + a { + margin: 0; + } + span { + margin: auto; + padding-inline-start: 6px; + } +} + +.input-container { + max-width: 402px; +} +.externalIdBox { + padding-bottom: 16px; + margin-bottom: 16px; +} + +.select-error { + padding-bottom: 1.475em; + + ::ng-deep .mat-form-field-wrapper { + padding-bottom: 0 !important; + } + + mat-error { + padding: 0 1em; + margin-top: 0.2em; + } +} diff --git a/src/app/record/components/work-modal/work-modal.component.scss-theme.scss b/src/app/record/components/work-form/work-form/work-form.component.scss-theme.scss similarity index 91% rename from src/app/record/components/work-modal/work-modal.component.scss-theme.scss rename to src/app/record/components/work-form/work-form/work-form.component.scss-theme.scss index 4fca06835a..aaab8b62c7 100644 --- a/src/app/record/components/work-modal/work-modal.component.scss-theme.scss +++ b/src/app/record/components/work-form/work-form/work-form.component.scss-theme.scss @@ -42,5 +42,9 @@ .mat-select { font-size: mat-font-size($config, body-1) !important; } + + .externalIdBox { + border-bottom: dashed mat-color($background, ui-background-light) 1px; + } } @include work-modal-theme($orcid-app-theme); diff --git a/src/app/record/components/work-form/work-form/work-form.component.spec.ts b/src/app/record/components/work-form/work-form/work-form.component.spec.ts new file mode 100644 index 0000000000..77379431bf --- /dev/null +++ b/src/app/record/components/work-form/work-form/work-form.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WorkFormComponent } from './work-form.component' + +describe('WorkFormComponent', () => { + let component: WorkFormComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [WorkFormComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent(WorkFormComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/record/components/work-form/work-form/work-form.component.ts b/src/app/record/components/work-form/work-form/work-form.component.ts new file mode 100644 index 0000000000..92dd12583d --- /dev/null +++ b/src/app/record/components/work-form/work-form/work-form.component.ts @@ -0,0 +1,621 @@ +import { Component, Inject, Input, OnInit } from '@angular/core' +import { + AbstractControl, + AsyncValidatorFn, + FormArray, + FormBuilder, + FormGroup, + Validators, +} from '@angular/forms' +import { + PlatformInfo, + PlatformInfoService, +} from '../../../../cdk/platform-info' +import { Work } from '../../../../types/record-works.endpoint' +import { + CitationTypes, + LanguageMap, + WorkCategories, + WorkConferenceTypes, + WorkIdType, + WorkIntellectualPropertyTypes, + WorkOtherOutputTypes, + WorkPublicationTypes, + WorkRelationships, + WorksTitleName, + WorkTypesByCategory, + WorkTypesTitle, +} from '../../../../types/works.endpoint' +import { RecordCountryCodesEndpoint } from '../../../../types' +import { RecordWorksService } from '../../../../core/record-works/record-works.service' +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog' +import { ModalComponent } from '../../../../cdk/modal/modal/modal.component' +import { RecordCountriesService } from '../../../../core/record-countries/record-countries.service' +import { WINDOW } from '../../../../cdk/window' +import { UserRecord } from '../../../../types/record.local' +import { first, map, startWith } from 'rxjs/operators' +import { dateValidator } from '../../../../shared/validators/date/date.validator' +import { GetFormErrors, URL_REGEXP } from '../../../../constants' +import { + ExternalIdentifier, + VisibilityStrings, +} from '../../../../types/common.endpoint' +import { SnackbarService } from 'src/app/cdk/snackbar/snackbar.service' +import { WorkIdentifiers } from 'src/app/shared/validators/work-identifiers/work-identifiers.validator' +import { workCitationValidator } from 'src/app/shared/validators/citation/work-citation.validator' +import { translatedTitleValidator } from 'src/app/shared/validators/translated-title/translated-title.validator' +import { MatSelectChange } from '@angular/material/select' +import { merge, Subject } from 'rxjs' +import { RecordService } from 'src/app/core/record/record.service' + +@Component({ + selector: 'app-work-form', + templateUrl: './work-form.component.html', + styleUrls: [ + './work-form.component.scss', + './work-form.component.scss-theme.scss', + ], +}) +export class WorkFormComponent implements OnInit { + @Input() work: Work + $workTypeUpdateEvent = new Subject() + + loading = true + workForm: FormGroup + platform: PlatformInfo + + showTranslationTitle = false + + languageMap = LanguageMap + workCategories = WorkCategories + yearOptions = Array(110) + .fill(0) + .map((i, idx) => idx + new Date().getFullYear() - 109) + .reverse() + yearsEndDate = Array(120) + .fill(0) + .map((i, idx) => idx + new Date().getFullYear() - 109) + .reverse() + monthOptions = Array(12) + .fill(0) + .map((i, idx) => idx + 1) + dayOptions = Array(31) + .fill(0) + .map((i, idx) => idx + 1) + + MAX_LENGTH_TITLE = 999 + MAX_LENGTH_DESCRIPTION = 4999 + MAX_LENGTH_URL = 1999 + + citationTypes = CitationTypes + + dynamicTitle = WorksTitleName.journalTitle + workIdTypes: WorkIdType[] + workIdentifiersFormArray: FormArray = new FormArray([]) + workIdentifiersFormArrayDisplayState: boolean[] = [] + externalIdentifier: string + + ngOrcidYear = $localize`:@@shared.year:Year` + ngOrcidMonth = $localize`:@@shared.month:Month` + ngOrcidDay = $localize`:@@shared.day:Day` + ngOrcidSelectLanguage = $localize`:@@shared.selectLanguage:Select a language` + ngOrcidSelectACountry = $localize`:@@shared.selectACountry:Select a country` + ngOrcidDefaultVisibilityLabel = $localize`:@@shared.visibilityDescription:Control who can see this information by setting the visibility. Your default visibility is` + defaultVisibility: VisibilityStrings + + workTypes: + | typeof WorkConferenceTypes + | typeof WorkPublicationTypes + | typeof WorkIntellectualPropertyTypes + | typeof WorkOtherOutputTypes + | {} = {} + originalCountryCodes: RecordCountryCodesEndpoint + + constructor( + private _fb: FormBuilder, + private _platform: PlatformInfoService, + private _workService: RecordWorksService, + private _dialogRef: MatDialogRef, + private _recordCountryService: RecordCountriesService, + private _snackBar: SnackbarService, + private _record: RecordService, + + @Inject(WINDOW) private _window: Window, + @Inject(MAT_DIALOG_DATA) public data: UserRecord + ) {} + + ngOnInit(): void { + this._recordCountryService + .getCountryCodes() + .pipe(first()) + .subscribe((codes) => { + this.originalCountryCodes = codes + }) + + this._platform.get().subscribe((value) => { + this.platform = value + }) + + this.loadWorkForm(this.work) + + // + this._record.getPreferences().subscribe((userRecord) => { + this.defaultVisibility = userRecord.default_visibility + }) + this.observeFormChanges() + + this._workService.loadWorkIdTypes().subscribe((value) => { + this.workIdTypes = value + }) + } + + private observeFormChanges() { + this.workForm + .get('workCategory') + .valueChanges.pipe(startWith(this.workForm.value['workCategory'])) + .subscribe((value) => { + if (value) { + this.workTypes = WorkTypesByCategory[value as WorkCategories] + } + }) + + this.workForm + .get('workType') + .valueChanges.pipe(startWith(this.workForm.value['workType'])) + .subscribe((value) => { + if (value && this.workForm.value['workCategory']) { + this.dynamicTitle = + WorkTypesTitle[this.workForm.value['workCategory']][value] + } else { + this.dynamicTitle = WorksTitleName.journalTitle + } + }) + } + + private loadWorkForm(currentWork: Work): void { + this.workForm = this._fb.group({ + workCategory: [ + currentWork?.workCategory?.value || '', + [Validators.required], + ], + workType: [currentWork?.workType?.value || '', [Validators.required]], + title: [ + currentWork?.title?.value || '', + [Validators.required, Validators.maxLength(this.MAX_LENGTH_TITLE)], + ], + translatedTitleGroup: this._fb.group( + { + translatedTitleContent: [ + currentWork?.translatedTitle?.content || '', + [Validators.maxLength(this.MAX_LENGTH_TITLE)], + ], + translatedTitleLanguage: [ + currentWork?.translatedTitle?.languageCode || '', + [], + ], + }, + { validator: translatedTitleValidator } + ), + subtitle: [ + currentWork?.subtitle?.value || '', + [Validators.maxLength(this.MAX_LENGTH_TITLE)], + ], + journalTitle: [ + currentWork?.journalTitle?.value || '', + [Validators.maxLength(this.MAX_LENGTH_TITLE)], + ], + publicationDate: this._fb.group( + { + publicationDay: [Number(currentWork?.publicationDate?.day) || '', []], + publicationMonth: [ + Number(currentWork?.publicationDate?.month) || '', + [], + ], + publicationYear: [ + Number(currentWork?.publicationDate?.year) || '', + [], + ], + }, + { validator: dateValidator('publication') } + ), + url: [ + currentWork?.url?.value || '', + [ + Validators.pattern(URL_REGEXP), + Validators.maxLength(this.MAX_LENGTH_URL), + ], + ], + citationGroup: this._fb.group( + { + citationType: [currentWork?.citation?.citationType.value || '', []], + citation: [currentWork?.citation?.citation.value || '', []], + shortDescription: [ + currentWork?.shortDescription?.value || '', + [Validators.maxLength(this.MAX_LENGTH_DESCRIPTION)], + ], + }, + { validator: workCitationValidator } + ), + workIdentifiers: new FormArray([]), + languageCode: [currentWork?.languageCode?.value || '', []], + countryCode: [currentWork?.countryCode?.value || '', []], + + visibility: [ + currentWork?.visibility?.visibility || + currentWork.visibility.visibility, + [], + ], + }) + this.workIdentifiersFormArray = this.workForm.controls + .workIdentifiers as FormArray + + currentWork.workExternalIdentifiers.forEach((workExternalId) => { + this.addOtherWorkId(workExternalId) + }) + } + + private externalIdentifierTypeAsyncValidator( + formGroup: FormGroup, + externalIdentifierType: string + ): AsyncValidatorFn { + return (control: AbstractControl) => { + return this._workService + .validateWorkIdTypes(externalIdentifierType, control.value) + .pipe( + map((value) => { + if (value.generatedUrl) { + formGroup.controls.externalIdentifierUrl.setValue( + decodeURI(value.generatedUrl) + ) + } else { + formGroup.controls.externalIdentifierUrl.setValue('') + } + + if (!value.resolved && value.attemptedResolution) { + return { + unResolved: !value.resolved, + } + } + if (!value.validFormat) { + return { + validFormat: !value.validFormat, + } + } + }) + ) + } + } + + private checkWorkIdentifiersChanges( + index: number, + workIdentifiersArray: FormArray + ) { + const formGroup = this.workIdentifiersFormArray.controls[index] as FormGroup + merge( + this.$workTypeUpdateEvent, + formGroup.controls.externalIdentifierType.valueChanges + ) + .pipe( + startWith(formGroup.controls.externalIdentifierType.value), + // Maps evert value to externalIdentifierTyp since $workTypeUpdateEvent trigger null events + map((x) => formGroup.controls.externalIdentifierType.value) + ) + .subscribe((externalIdentifierType) => { + this.manageWorkIdentifierTypeUpdates(externalIdentifierType, formGroup) + }) + + formGroup.controls.externalIdentifierId.valueChanges.subscribe((id) => { + this.manageWorkIdentifierIdUpdates(id, formGroup) + }) + + formGroup.controls.externalRelationship.valueChanges.subscribe(() => { + this.manageWorkIdentyfiersRelationshipUpdates( + workIdentifiersArray, + formGroup + ) + }) + } + + private manageWorkIdentifierTypeUpdates( + externalIdentifierType: any, + formGroup: FormGroup + ) { + if (externalIdentifierType !== '') { + formGroup.controls.externalIdentifierId.setValidators([ + Validators.required, + ]) + formGroup.controls.externalIdentifierId.setAsyncValidators( + this.externalIdentifierTypeAsyncValidator( + formGroup, + externalIdentifierType + ) + ) + formGroup.controls.externalIdentifierId.updateValueAndValidity() + const suggestedRelationship = this.getOrcidRecommendedRelationShip( + externalIdentifierType + ) + + if (suggestedRelationship) { + formGroup.controls.externalRelationship.setValue(suggestedRelationship) + } + } else { + formGroup.controls.externalIdentifierId.clearValidators() + formGroup.controls.externalIdentifierId.clearAsyncValidators() + formGroup.controls.externalIdentifierId.updateValueAndValidity() + } + } + + private manageWorkIdentifierIdUpdates(value: any, formGroup: FormGroup) { + if (value) { + formGroup.controls.externalIdentifierType.setValidators([ + Validators.required, + ]) + formGroup.controls.externalIdentifierType.updateValueAndValidity({ + emitEvent: false, + }) + } else { + formGroup.controls.externalIdentifierType.clearValidators() + formGroup.controls.externalIdentifierType.updateValueAndValidity({ + emitEvent: false, + }) + } + } + + private manageWorkIdentyfiersRelationshipUpdates( + workIdentifiersArray: FormArray, + formGroup: FormGroup + ) { + workIdentifiersArray.controls.forEach((element: FormGroup) => { + // Updates the value and validity of all the external identifier relationships on the array + // Since those depend on each other to validate the `versionOfInvalidRelationship` validator + if ( + !Object.is( + element.controls.externalRelationship, + formGroup.controls.externalRelationship + ) + ) { + element.controls.externalRelationship.updateValueAndValidity({ + emitEvent: false, + }) + } + }) + } + + addOtherWorkId(existingExternalId?: ExternalIdentifier) { + if (existingExternalId) { + this.workIdentifiersFormArrayDisplayState.push(false) + } else { + this.workIdentifiersFormArrayDisplayState.push(true) + } + const workIdentifierForm = this._fb.group({ + externalIdentifierType: [ + existingExternalId?.externalIdentifierType?.value || '', + [], + ], + externalIdentifierId: [ + existingExternalId?.externalIdentifierId?.value || '', + [], + ], + externalIdentifierUrl: [ + existingExternalId?.url?.value || '', + [Validators.pattern(URL_REGEXP)], + ], + externalRelationship: [ + existingExternalId?.relationship?.value || WorkRelationships.self, + [], + ], + }) + workIdentifierForm.setValidators([ + WorkIdentifiers.fundedByInvalidRelationship(), + WorkIdentifiers.versionOfInvalidRelationship( + this.workIdentifiersFormArray + ), + ]) + this.workIdentifiersFormArray.push(workIdentifierForm) + + this.checkWorkIdentifiersChanges( + this.workIdentifiersFormArray.controls.length - 1, + this.workIdentifiersFormArray + ) + } + deleteWorkId(id: number) { + this.workIdentifiersFormArrayDisplayState.splice(id, 1) + this.workIdentifiersFormArray.removeAt(id) + } + + saveEvent() { + this.workForm.markAllAsTouched() + const formErrors = GetFormErrors(this.workForm) + + const allowInvalidForm = this.formHasOnlyAllowError(formErrors) + + if (this.workForm.valid || allowInvalidForm) { + const work: Work = { + visibility: { + visibility: this.workForm.value.visibility, + }, + publicationDate: { + month: this.workForm.value.publicationDate.publicationMonth, + day: this.workForm.value.publicationDate.publicationDay, + year: this.workForm.value.publicationDate.publicationYear, + }, + shortDescription: { + value: this.workForm.get('citationGroup.shortDescription').value, + }, + url: { + value: this.workForm.value.url, + }, + journalTitle: { + value: this.workForm.value.journalTitle, + }, + languageCode: { + value: this.workForm.value.languageCode + ? this.workForm.value.languageCode + : null, + }, + citation: { + citation: { + value: this.workForm.get('citationGroup.citation').value, + }, + citationType: { + value: this.workForm.get('citationGroup.citationType').value, + }, + }, + countryCode: { + value: this.workForm.value.countryCode, + }, + workExternalIdentifiers: this.workIdentifiersFormArray.value.map( + (workExternalId) => { + return { + externalIdentifierId: { + value: workExternalId.externalIdentifierId, + }, + externalIdentifierType: { + value: workExternalId.externalIdentifierType, + }, + url: { + value: workExternalId.externalIdentifierUrl, + }, + relationship: { + value: workExternalId.externalRelationship, + }, + } + } + ), + title: { + value: this.workForm.value.title, + }, + subtitle: { + value: this.workForm.value.subtitle, + }, + translatedTitle: { + content: this.workForm.get( + 'translatedTitleGroup.translatedTitleContent' + ).value, + languageCode: this.workForm.get( + 'translatedTitleGroup.translatedTitleLanguage' + ).value, + errors: [], + }, + workCategory: { + value: this.workForm.value.workCategory, + }, + workType: { + value: this.workForm.value.workType, + }, + } + if (this.work?.putCode) { + work.putCode = this.work.putCode + } + if (this.work?.source) { + work.source = this.work.source + } + this._workService.save(work).subscribe((value) => { + this._dialogRef.close() + }) + } else { + this._snackBar.showValidationError() + } + } + + /** + * Return true only if the errors found are only of the type unResolved + */ + private formHasOnlyAllowError(formErrors) { + if ( + formErrors !== null && + Object.keys(formErrors).length === 1 && + formErrors.workIdentifiers?.length + ) { + return (formErrors.workIdentifiers as { + [key: string]: { [key: string]: boolean } + }[]).every( + (x) => + x && + Object.keys(x).length === 1 && + x.externalIdentifierId && + Object.keys(x.externalIdentifierId).length === 1 && + x.externalIdentifierId.unResolved + ) + } else { + return false + } + } + + cancelExternalIdEdit(id: number) { + if ( + this.workIdentifiersFormArray.controls[id] && + !this.workIdentifiersFormArray.controls[id].value + .externalIdentifierType && + !this.workIdentifiersFormArray.controls[id].value.externalIdentifierId + ) { + this.deleteWorkId(id) + } else { + this.workIdentifiersFormArrayDisplayState[id] = false + } + } + + updateType(event: MatSelectChange) { + switch (event.value) { + case WorkCategories.conference: + this.workForm.patchValue({ + workType: WorkConferenceTypes.conferencePaper, + }) + break + case WorkCategories.intellectual_property: + this.workForm.patchValue({ + workType: WorkIntellectualPropertyTypes.patent, + }) + break + case WorkCategories.other_output: + this.workForm.patchValue({ + workType: WorkOtherOutputTypes.dataSet, + }) + break + case WorkCategories.publication: + this.workForm.patchValue({ + workType: WorkPublicationTypes.journalArticle, + }) + break + } + this.$workTypeUpdateEvent.next() + } + + getOrcidRecommendedRelationShip(externalIdentifier) { + let workRelationship = null + const workType = this.workForm.get('workType').value + + if (externalIdentifier && workType) { + if (externalIdentifier === 'isbn' && workType === 'book-chapter') { + workRelationship = WorkRelationships['part-of'] + } else if (externalIdentifier === 'isbn' && workType === 'book') { + workRelationship = WorkRelationships.self + } else if (externalIdentifier === 'issn') { + workRelationship = WorkRelationships['part-of'] + } else if ( + externalIdentifier === 'isbn' && + ['dictionary-entry', 'conference-paper', 'encyclopedia-entry'].indexOf( + workType + ) >= 0 + ) { + workRelationship = WorkRelationships['part-of'] + } + } + if ( + externalIdentifier === 'grant_number' || + externalIdentifier === 'proposal-id' + ) { + workRelationship = WorkRelationships['funded-by'] + } + + return workRelationship + } + + closeEvent() { + this._dialogRef.close() + } + + returnZero() { + return 0 + } +} diff --git a/src/app/record/components/work-modal/work-modal.component.html b/src/app/record/components/work-modal/work-modal.component.html index a0c3f4722f..30b2c1f310 100644 --- a/src/app/record/components/work-modal/work-modal.component.html +++ b/src/app/record/components/work-modal/work-modal.component.html @@ -35,10 +35,10 @@ -
-
-

- Work details -

-

- * - Required information -

-
-
- - -
-
- -
- -
- - - - {{ item.value | recordWorkCategoryLabel }} - - - - Select a work category - - -
-
- -
- - - - - {{ item.value | recordWorkTypeLabel }} - - - - Select a work type - - -
- - -
-
- -
- - - - - Set a work title - - -
- - - - -
-
-
- -
- - - - -
- - -
-
- -
-
- - - - {{ item.key }} - - - -
-
-
- - - -
-
- -
- - - - -
- - -
-
- -
- - - - -
- - -
- -
-
-
- - - Year - - {{ year }} - - - -
-
- - - Month - - {{ month }} - - - -
-
- - - Day - - {{ day }} - - - -
- - Invalid date - -
-
- - - -
-
- -
- - - - - Invalid url - - A link to more information about the work. Links should be in the - full URL format e.g. http://www.website.com/page.html - - -
- - - - - -
-

- Citation -

-
- -
- - - -
-
- -
-
- - - - Select a citation type - - - - {{ item.value }} - - - - Select a citation type - - -
-
- - -
-
- -
- - - - Describe this citation - - -
- - -
-
- -
- - - -
- - - - - -
-

- Work identifiers -

-
-
- -
- - - -
-
- -
-
- - - - Select an identifier type - - - - {{ item.description }} - - The type of identifier associated with the work, such as an - ISBN, DOI or PMID. - - - -
-
- - -
-
- -
- - - - Invalid id for the selected identifier type - - - We couldn't find a resource that matches the identifier you - entered. Please check the value or enter a valid link to the - resource. - - The identifier associated with the work. The format will depend - on the type of identifier selected. - - -
- - -
- - - - - - The URL that the identifier resolves to, for example - https://doi.org/10.23640/07243.c.4232246 - - - Invalid url - - -
- - - -
-
- -
- - - - {{ value | recordWorkRelationshipLabel }} - - {{ value | recordWorkRelationshipHintLabel }} - - - - - -
-
- -
-
- - - -
- - - - - -
-

- Other information -

-
-
- - -
-
- -
-
- - - - {{ item.key }} - - - -
-
- - -
-
- -
-
- - - - {{ item.key }} - - - -
-
- - - - - -
-

- Visibility -

-
-
- - -
-

- Manage who can see this information in your record. -

-
- -
-
-
+ + diff --git a/src/app/record/components/work-modal/work-modal.component.scss b/src/app/record/components/work-modal/work-modal.component.scss index c1aa4a0bbe..a51a809d80 100644 --- a/src/app/record/components/work-modal/work-modal.component.scss +++ b/src/app/record/components/work-modal/work-modal.component.scss @@ -1,87 +1,3 @@ -.hide { - display: none; -} - -mat-form-field { - width: 100%; -} - -:host { - width: 100%; -} - -hr { - height: 2px; - border: 0; - margin: 0; - margin-bottom: 20px; -} - -.title { - margin-top: 16px; - - p { - margin: 6px 0; - } -} - -.mat-form-field { - width: 100%; -} - -.side-bar { - text-decoration: underline; -} - -.date-container { - display: flex; - flex-direction: row; - display: flex; - flex-direction: row; - flex-wrap: nowrap; - mat-form-field { - width: 120px; - margin-left: 4px; - } -} - -.align-icon { - display: flex; - flex-direction: row; - align-items: center; -} - -.required-information { - margin-left: auto !important; - margin-top: 10px !important; - - span { - margin-right: 3px !important; - } -} - -.larger-input-margin { - margin-bottom: 20px; -} - -mat-radio-group { - display: flex; - flex-direction: column; -} - -.date { - ::ng-deep .mat-form-field-wrapper { - padding-bottom: 0px !important; - } - padding-bottom: 1.475em; - padding-left: 0; -} - -.add-more { - margin-bottom: 26px; - - span { - margin: auto; - padding-left: 6px; - } +label.mat-caption { + margin-bottom: 8px; } diff --git a/src/app/record/components/work-modal/work-modal.component.ts b/src/app/record/components/work-modal/work-modal.component.ts index cc81a2a965..2bc6ff4cfe 100644 --- a/src/app/record/components/work-modal/work-modal.component.ts +++ b/src/app/record/components/work-modal/work-modal.component.ts @@ -1,118 +1,36 @@ -import { Component, Inject, OnInit } from '@angular/core' -import { - AbstractControl, - AsyncValidatorFn, - FormArray, - FormBuilder, - FormGroup, - Validators, -} from '@angular/forms' -import { first, map, startWith } from 'rxjs/operators' +import { Component, Inject, Input, OnInit, ViewChild } from '@angular/core' import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog' import { Observable } from 'rxjs' import { ModalComponent } from 'src/app/cdk/modal/modal/modal.component' -import { PlatformInfo, PlatformInfoService } from 'src/app/cdk/platform-info' +import { PlatformInfo } from 'src/app/cdk/platform-info' import { WINDOW } from 'src/app/cdk/window' -import { URL_REGEXP } from 'src/app/constants' -import { RecordCountriesService } from 'src/app/core/record-countries/record-countries.service' import { RecordWorksService } from 'src/app/core/record-works/record-works.service' -import { dateValidator } from 'src/app/shared/validators/date/date.validator' -import { RecordCountryCodesEndpoint } from 'src/app/types' -import { ExternalIdentifier } from 'src/app/types/common.endpoint' import { Work } from 'src/app/types/record-works.endpoint' import { UserRecord } from 'src/app/types/record.local' -import { - CitationTypes, - LanguageMap, - WorkCategories, - WorkConferenceTypes, - WorkIdType, - WorkIntellectualPropertyTypes, - WorkOtherOutputTypes, - WorkPublicationTypes, - WorkRelationships, - WorksTitleName, - WorkTypesByCategory, - WorkTypesTitle, -} from 'src/app/types/works.endpoint' +import { WorkFormComponent } from '../work-form/work-form/work-form.component' @Component({ selector: 'app-work-modal', templateUrl: './work-modal.component.html', - styleUrls: [ - './work-modal.component.scss', - './work-modal.component.scss-theme.scss', - ], + styleUrls: ['./work-modal.component.scss'], }) export class WorkModalComponent implements OnInit { + @ViewChild('workFormComponent') workFormComponent: WorkFormComponent + @Input() options: { createACopy: boolean } loading = true - workForm: FormGroup platform: PlatformInfo work: Work showTranslationTitle = false - languageMap = LanguageMap - workCategories = WorkCategories - yearOptions = Array(110) - .fill(0) - .map((i, idx) => idx + new Date().getFullYear() - 109) - .reverse() - yearsEndDate = Array(120) - .fill(0) - .map((i, idx) => idx + new Date().getFullYear() - 109) - .reverse() - monthOptions = Array(12) - .fill(0) - .map((i, idx) => idx + 1) - dayOptions = Array(31) - .fill(0) - .map((i, idx) => idx + 1) - citationTypes = CitationTypes - - workRelationships: WorkRelationships[] = Object.keys( - WorkRelationships - ) as WorkRelationships[] - - dynamicTitle = WorksTitleName.journalTitle - workIdTypes: WorkIdType[] - workIdentifiersFormArray: FormArray = new FormArray([]) - - ngOrcidYear = $localize`:@@shared.year:Year` - ngOrcidMonth = $localize`:@@shared.month:Month` - ngOrcidDay = $localize`:@@shared.day:Day` - - workTypes: - | typeof WorkConferenceTypes - | typeof WorkPublicationTypes - | typeof WorkIntellectualPropertyTypes - | typeof WorkOtherOutputTypes - | {} = {} - originalCountryCodes: RecordCountryCodesEndpoint - constructor( - private _fb: FormBuilder, - private _platform: PlatformInfoService, private _workService: RecordWorksService, private _dialogRef: MatDialogRef, - private _recordCountryService: RecordCountriesService, @Inject(WINDOW) private _window: Window, @Inject(MAT_DIALOG_DATA) public data: UserRecord ) {} ngOnInit(): void { - this._recordCountryService - .getCountryCodes() - .pipe(first()) - .subscribe((codes) => { - this.originalCountryCodes = codes - }) - - this._platform.get().subscribe((value) => { - this.platform = value - }) - // Load an empty work or the current work been edited - let workObs: Observable if (this.work?.putCode) { workObs = this._workService.getWorkInfo(this.work.putCode.value) @@ -121,279 +39,14 @@ export class WorkModalComponent implements OnInit { } workObs.subscribe((currentWork) => { - this.loadWorkForm(currentWork) - this.observeFormChanges() - - this._workService.loadWorkIdTypes().subscribe((value) => { - this.workIdTypes = value - }) - }) - } - - private observeFormChanges() { - this.workForm - .get('workCategory') - .valueChanges.pipe(startWith(this.workForm.value['workCategory'])) - .subscribe((value) => { - if (value) { - this.workTypes = WorkTypesByCategory[value as WorkCategories] - } - }) - - this.workForm - .get('workType') - .valueChanges.pipe(startWith(this.workForm.value['workType'])) - .subscribe((value) => { - if (value && this.workForm.value['workCategory'] && value) { - this.dynamicTitle = - WorkTypesTitle[this.workForm.value['workCategory']][value] - } - }) - this.workForm - .get('citationType') - .valueChanges.pipe(startWith(this.workForm.value['citationType'])) - .subscribe((value) => { - if (value !== '') { - this.workForm.controls.citation.setValidators([Validators.required]) - this.workForm.controls.citation.updateValueAndValidity() - } else { - this.workForm.controls.citation.clearValidators() - this.workForm.controls.citation.updateValueAndValidity() - } - }) - } - - private loadWorkForm(currentWork: Work) { - this.loading = false - this.workForm = this._fb.group({ - workCategory: [ - currentWork?.workCategory?.value || '', - [Validators.required], - ], - workType: [currentWork?.workType?.value || '', [Validators.required]], - title: [currentWork?.title?.value || '', [Validators.required]], - translatedTitleContent: [currentWork?.translatedTitle?.content || '', []], - translatedTitleLanguage: [ - currentWork?.translatedTitle?.languageCode || '', - [], - ], - subtitle: [currentWork?.subtitle?.value || '', []], - journalTitle: [currentWork?.journalTitle?.value || '', []], - publicationDate: this._fb.group( - { - publicationDay: [currentWork?.publicationDate?.day || '', []], - publicationMonth: [currentWork.publicationDate?.month || '', []], - publicationYear: [currentWork?.publicationDate?.year || '', []], - }, - { validator: dateValidator('publication') } - ), - url: [currentWork?.url?.value || '', [Validators.pattern(URL_REGEXP)]], - citationType: [currentWork?.citation?.citationType.value || '', []], - citation: [currentWork?.citation?.citation.value || '', []], - shortDescription: [currentWork?.shortDescription?.value || '', []], - workIdentifiers: new FormArray([]), - languageCode: [currentWork?.languageCode?.value || '', []], - countryCode: [currentWork?.countryCode?.value || '', []], - - visibility: [ - currentWork?.visibility?.visibility || - currentWork.visibility.visibility, - [], - ], - }) - this.workIdentifiersFormArray = this.workForm.controls - .workIdentifiers as FormArray - - currentWork.workExternalIdentifiers.forEach((workExternalId) => { - this.addOtherWorkId(workExternalId) - }) - } - - private externalIdentifierTypeAsyncValidator( - formGroup: FormGroup, - externalIdentifierType: string - ): AsyncValidatorFn { - return (control: AbstractControl) => { - return this._workService - .validateWorkIdTypes(externalIdentifierType, control.value) - .pipe( - map((value) => { - if (!value.resolved && value.attemptedResolution) { - return { - unResolved: !value.resolved, - } - } - if (!value.validFormat) { - return { - validFormat: !value.validFormat, - } - } - if (value.generatedUrl) { - formGroup.controls.externalIdentifierUrl.setValue( - value.generatedUrl - ) - } else { - formGroup.controls.externalIdentifierUrl.setValue(null) - } - }) - ) - } - } - - private checkWorkIdentifiersChanges(index: number) { - const formGroup = this.workIdentifiersFormArray.controls[index] as FormGroup - formGroup.controls.externalIdentifierType.valueChanges.subscribe( - (externalIdentifierType) => { - if (externalIdentifierType !== '') { - formGroup.controls.externalIdentifierId.setValidators([ - Validators.required, - ]) - formGroup.controls.externalIdentifierId.setAsyncValidators( - this.externalIdentifierTypeAsyncValidator( - formGroup, - externalIdentifierType - ) - ) - formGroup.controls.externalIdentifierId.updateValueAndValidity() - } else { - formGroup.controls.externalIdentifierId.clearValidators() - formGroup.controls.externalIdentifierId.clearAsyncValidators() - formGroup.controls.externalIdentifierId.updateValueAndValidity() - } - } - ) - - formGroup.controls.externalIdentifierId.valueChanges.subscribe((value) => { - if (value) { - formGroup.controls.externalIdentifierType.setValidators([ - Validators.required, - ]) - formGroup.controls.externalIdentifierType.updateValueAndValidity({ - emitEvent: false, - }) - } else { - formGroup.controls.externalIdentifierType.clearValidators() - formGroup.controls.externalIdentifierType.updateValueAndValidity({ - emitEvent: false, - }) + if (this.options?.createACopy) { + currentWork.putCode = null } + this.work = currentWork + this.loading = false }) } - addOtherWorkId(externalId?: ExternalIdentifier) { - this.workIdentifiersFormArray.push( - this._fb.group({ - externalIdentifierType: [ - externalId?.externalIdentifierType?.value || '', - [], - ], - externalIdentifierId: [ - externalId?.externalIdentifierId?.value || '', - [], - ], - externalIdentifierUrl: [ - externalId?.url?.value || '', - [Validators.pattern(URL_REGEXP)], - ], - externalRelationship: [ - externalId?.relationship?.value || WorkRelationships.self, - [], - ], - }) - ) - - this.checkWorkIdentifiersChanges( - this.workIdentifiersFormArray.controls.length - 1 - ) - } - deleteWorkId(id: number) { - this.workIdentifiersFormArray.removeAt(id) - } - - saveEvent() { - this.workForm.markAllAsTouched() - if (this.workForm.valid) { - const work: Work = { - visibility: { - visibility: this.workForm.value.visibility, - }, - publicationDate: { - month: this.workForm.value.publicationDate.publicationMonth, - day: this.workForm.value.publicationDate.publicationDay, - year: this.workForm.value.publicationDate.publicationYear, - }, - shortDescription: { - value: this.workForm.value.shortDescription, - }, - url: { - value: this.workForm.value.url, - }, - journalTitle: { - value: this.workForm.value.journalTitle, - }, - languageCode: { - value: this.workForm.value.languageCode - ? this.workForm.value.languageCode - : null, - }, - citation: { - citation: { - value: this.workForm.value.citation, - }, - citationType: { - value: this.workForm.value.citationType, - }, - }, - countryCode: { - value: this.workForm.value.countryCode, - }, - workExternalIdentifiers: this.workIdentifiersFormArray.value.map( - (workExternalId) => { - return { - externalIdentifierId: { - value: workExternalId.externalIdentifierId, - }, - externalIdentifierType: { - value: workExternalId.externalIdentifierType, - }, - url: { - value: workExternalId.externalIdentifierUrl, - }, - relationship: { - value: workExternalId.externalRelationship, - }, - } - } - ), - title: { - value: this.workForm.value.title, - }, - subtitle: { - value: this.workForm.value.subtitle, - }, - translatedTitle: { - content: this.workForm.value.translatedTitleContent, - languageCode: this.workForm.value.translatedTitleLanguage, - }, - workCategory: { - value: this.workForm.value.workCategory, - }, - workType: { - value: this.workForm.value.workType, - }, - } - if (this.work?.putCode) { - work.putCode = this.work.putCode - } - if (this.work?.source) { - work.source = this.work.source - } - this._workService.save(work).subscribe((value) => { - this._dialogRef.close() - }) - } - } - closeEvent() { this._dialogRef.close() } diff --git a/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.html b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.html new file mode 100644 index 0000000000..7117ec55bb --- /dev/null +++ b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.html @@ -0,0 +1,151 @@ + + + + Works - Import BibTeX + + + + + +
+
+

+ Import citations from BibTex (.bib) files, including files exported from + Google Scholar. +

+ + More information on importing BibTeX files into ORCID + +
+
+
+ + +
+
+ + + This file cannot be read. Please check the BibTeX formatting and try + again. + + + Error parsing Bibtex. No Bibtex entries found in file + + +
+
+ {{ bibtexErrorParsingText }} +
+ +
+

+ + Works found in BibTeX + + ({{ selectedWorks.length }}) +

+ +
+
+

+ + + Select all + + + ({{ selectedWorks.length }}) + Selected + + +

+
+
+ +
+ +
+
+ +

+ {{ work?.title?.value }} +

+

+ {{ work?.journalTitle?.value }} +

+

+ {{ work?.publicationDate | monthDayYearDateToString }} + | + {{ work?.workType?.value }} +

+ +

+ URL: + + {{ work?.url?.value }} +

+
+
+
+ +
+
+
+
+
diff --git a/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.scss b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.scss new file mode 100644 index 0000000000..6cc7eea8dc --- /dev/null +++ b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.scss @@ -0,0 +1,62 @@ +.choose-bibtex { + padding: 0; + margin-top: 16px; + margin-bottom: 6px; + + button { + min-width: 237px; + } +} + +.work-info { + margin-bottom: 16px; + width: 100%; + word-break: break-word; + + div { + word-break: break-word; + + h2 { + width: 48em; + overflow: hidden; + text-overflow: ellipsis; + margin-bottom: 0; + } + + p { + margin: 0; + } + + ::ng-deep .mat-checkbox-inner-container { + margin: 0 !important; + margin-right: 8px !important; + } + + .details { + margin-left: 24px; + } + + .added { + margin-left: 16px; + } + } +} + +.no-info { + display: flex; + margin-top: 20px; + align-items: center; + + mat-icon { + margin-inline-end: 4px; + } +} + +.bibtex-error { + margin: 6px 2px; + + code { + border-radius: 3px; + padding: 6px; + } +} diff --git a/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.scss-theme.scss b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.scss-theme.scss new file mode 100644 index 0000000000..343caa5ca7 --- /dev/null +++ b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.scss-theme.scss @@ -0,0 +1,16 @@ +@import '~@angular/material/theming'; +@import 'src/assets/scss/material.orcid-theme.scss'; + +@mixin work-bibtex-modal-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warn: map-get($theme, accent); + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + $config: mat-typography-config(); + + code { + background-color: mat-color($background, ui-background-light); + } +} +@include work-bibtex-modal-theme($orcid-app-theme); diff --git a/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.spec.ts b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.spec.ts new file mode 100644 index 0000000000..c0ae2c29fe --- /dev/null +++ b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WorkBibtexModalComponent } from './work-bibtex-modal.component' + +describe('WorkDoiBibtexModalComponent', () => { + let component: WorkBibtexModalComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [WorkBibtexModalComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent(WorkBibtexModalComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts new file mode 100644 index 0000000000..652bee7ad5 --- /dev/null +++ b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts @@ -0,0 +1,391 @@ +import { Component, Inject, OnDestroy, OnInit } from '@angular/core' +import { Subject } from 'rxjs' +import { MatDialogRef } from '@angular/material/dialog' +import { ModalComponent } from '../../../../../cdk/modal/modal/modal.component' +import { RecordWorksService } from '../../../../../core/record-works/record-works.service' +import { Work } from '../../../../../types/record-works.endpoint' +import { first } from 'rxjs/operators' +import { FormControl, FormGroup } from '@angular/forms' +import bibtexParse from '@orcid/bibtex-parse-js' +import latexParse from 'src/assets/scripts/latexParse.js' +import { WINDOW } from 'src/app/cdk/window' + +@Component({ + selector: 'app-work-doi-bibtex-modal', + templateUrl: './work-bibtex-modal.component.html', + styleUrls: [ + './work-bibtex-modal.component.scss', + './work-bibtex-modal.component.scss-theme.scss', + ], +}) +export class WorkBibtexModalComponent implements OnInit, OnDestroy { + $destroy: Subject = new Subject() + + importForm: FormGroup + loadingWorks = false + bibtexErrorParsingText = '' + bibtexErrorParsing = false + bibtexErrorNoEntries = false + worksFromBibtex: Work[] = [] + selectedWorks: Work[] = [] + selectAll: false + group: { [key: string]: FormGroup } = {} + addedWorkCount = 0 + + constructor( + public dialogRef: MatDialogRef, + private _recordWorksService: RecordWorksService, + @Inject(WINDOW) private _window: Window + ) {} + + ngOnInit(): void {} + + bibTexInputChange($fileInputEvent: any) { + this.bibtexErrorParsingText = undefined + this.bibtexErrorParsing = false + this.loadingWorks = true + const textFiles = $fileInputEvent.target.files + for (const bibtex of textFiles) { + const reader = new FileReader() + reader.readAsText(bibtex) + + const that = this + + reader.onloadend = function (e) { + let parsed = null + try { + parsed = bibtexParse.toJSON(reader.result) + if ( + typeof parsed === 'string' && + parsed.substring(0, 5).toLowerCase().indexOf('error') > -1 + ) { + that.bibtexErrorParsingText = parsed + that.bibtexErrorParsing = true + that.loadingWorks = false + } else { + if (parsed) { + const newWorks = [] + if (parsed.length === 0) { + that.bibtexErrorNoEntries = true + that.loadingWorks = false + } + while (parsed.length > 0) { + const cur = parsed.shift() + const bibtexEntry = cur.entryType.toLowerCase() + if (bibtexEntry !== 'preamble' && bibtexEntry !== 'comment') { + newWorks.push(that.populateWork(cur)) + } + } + if (newWorks.length > 0) { + that._recordWorksService + .worksValidate(newWorks) + .pipe(first()) + .subscribe((data) => { + data.forEach((work) => { + that.worksFromBibtex.push(work) + }) + that.worksFromBibtex.forEach((w) => { + const newPutCode = 'new-' + that.addedWorkCount++ + w.putCode = { + value: newPutCode, + } + that.group[newPutCode] = new FormGroup({ + checked: new FormControl(false), + }) + }) + that.importForm = new FormGroup(that.group) + that.loadingWorks = false + }) + } + } + } + } catch (e) { + that.bibtexErrorParsingText = e + that.bibtexErrorParsing = true + that.loadingWorks = false + } + } + } + } + + populateWork(bibJSON): Work { + const work = {} as Work + const bibtex = bibtexParse.toBibtex([bibJSON]) + work.citation = { + citation: { value: bibtex }, + citationType: { value: 'bibtex' }, + } + + // set the work type based off the entry type + if (bibJSON.entryType) { + const type = bibJSON.entryType.toLowerCase() + + if (bibToWorkTypeMap.hasOwnProperty(type)) { + work.workCategory = { + value: latexParse.decodeLatex(bibToWorkTypeMap[type][0]), + } + work.workType = { + value: bibToWorkTypeMap[type][1], + } + } + } + // tags we mapped + if (bibJSON.entryTags) { + // create a lower case create a reference map + const tags = bibJSON.entryTags + const lowerKeyTags = {} + for (const key in tags) { + if (tags.hasOwnProperty(key)) { + lowerKeyTags[key.toLowerCase()] = tags[key] + } + } + + if (lowerKeyTags.hasOwnProperty('booktitle')) { + if (!lowerKeyTags.hasOwnProperty('title')) { + work.title = { + value: latexParse.decodeLatex(lowerKeyTags['booktitle']), + } + } else if (!lowerKeyTags.hasOwnProperty('journal')) { + work.journalTitle = { + value: latexParse.decodeLatex(lowerKeyTags['booktitle']), + } + } + } + + if (lowerKeyTags.hasOwnProperty('doi')) { + this.externalIdentifierId(work, 'doi', lowerKeyTags['doi']) + } + + if (lowerKeyTags.hasOwnProperty('pmid')) { + this.externalIdentifierId(work, 'pmid', lowerKeyTags['pmid']) + } + + if ( + lowerKeyTags.hasOwnProperty('eprint') && + lowerKeyTags.hasOwnProperty('eprinttype') && + lowerKeyTags['eprinttype'] === 'arxiv' + ) { + this.externalIdentifierId(work, 'arxiv', tags['eprint']) + } + + if (lowerKeyTags.hasOwnProperty('isbn')) { + this.externalIdentifierId(work, 'isbn', lowerKeyTags['isbn']) + } + + if (lowerKeyTags.hasOwnProperty('issn')) { + this.externalIdentifierId(work, 'issn', lowerKeyTags['issn']) + } + + // pissn, eissn and lissn are all issn's + if (lowerKeyTags.hasOwnProperty('pissn')) { + this.externalIdentifierId(work, 'issn', lowerKeyTags['pissn']) + } + + if (lowerKeyTags.hasOwnProperty('eissn')) { + this.externalIdentifierId(work, 'issn', lowerKeyTags['eissn']) + } + + if (lowerKeyTags.hasOwnProperty('lissn')) { + this.externalIdentifierId(work, 'issn', lowerKeyTags['lissn']) + } + + if (lowerKeyTags.hasOwnProperty('url')) { + this.externalIdentifierId(work, 'uri', lowerKeyTags['url']) + } + + if (lowerKeyTags.hasOwnProperty('journal')) { + work.journalTitle = { + value: latexParse.decodeLatex(lowerKeyTags['journal']), + } + } + + if (lowerKeyTags.hasOwnProperty('title')) { + work.title = { + value: latexParse.decodeLatex(lowerKeyTags['title']), + } + } + + if (lowerKeyTags.hasOwnProperty('year')) { + if (!isNaN(lowerKeyTags['year'])) { + work.publicationDate = { + year: lowerKeyTags['year'].trim(), + } + } + } + + // only set month if year provided + if ( + lowerKeyTags.hasOwnProperty('month') && + lowerKeyTags.hasOwnProperty('year') + ) { + if ( + !isNaN(lowerKeyTags['year']) && + lowerKeyTags['year'].trim() !== '' + ) { + let month = lowerKeyTags['month'].trim() + if (bibMonths.indexOf(month.trim().substring(0, 3)) >= 0) { + month = bibMonths.indexOf(month.trim().substring(0, 3)) + 1 + } + if (!isNaN(month) && month > 0 && month <= 12) { + work.publicationDate = { + year: lowerKeyTags['year'].trim(), + month: this.pad(month, 2), + } + } + } + } + + if (lowerKeyTags.hasOwnProperty('url')) { + work.url = { + value: lowerKeyTags['url'], + } + } + } + return work + } + + externalIdentifierId(work, idType, value) { + if (!value) { + console.warn('Empty value for ext id: ' + idType) + return + } + + // Define relationship type based on work type + let relationship = 'self' + if (idType === 'issn') { + if (work.workType.value !== 'book') { + relationship = 'part-of' + } + } else if (idType === 'isbn') { + const isbnWorkSelfWorkTypes = ['book', 'manual', 'report', 'other_output'] + if (isbnWorkSelfWorkTypes.indexOf(work.workType.value) < 0) { + relationship = 'part-of' + } + } + + const ident = { + externalIdentifierId: { + value: value, + }, + externalIdentifierType: { + value: idType, + }, + relationship: { + value: relationship, + }, + } + if (work.workExternalIdentifiers === undefined) { + work.workExternalIdentifiers = [] + work.workExternalIdentifiers[0] = ident + } else if ( + work.workExternalIdentifiers[0]?.externalIdentifierId?.value == null + ) { + work.workExternalIdentifiers[0] = ident + // Only adds the url if there is no other identifier + } else if (idType !== 'uri') { + work.workExternalIdentifiers.push(ident) + } + } + + pad(num: number, size: number): string { + let s = num + '' + while (s.length < size) { + s = '0' + s + } + return s + } + + updateCheckAll() { + this.worksFromBibtex.forEach((work) => { + if ( + this.selectedWorks.some((w) => w.putCode.value === work.putCode.value) + ) { + if (!!this.selectAll === false) { + this.selectedWorks = this.selectedWorks.filter( + (w) => w.putCode.value !== work.putCode.value + ) + } + } else { + this.selectedWorks.push(work) + } + this.importForm.patchValue({ + [work.putCode.value]: { + checked: !!this.selectAll, + }, + }) + }) + } + + updateCheck(work: Work) { + if ( + this.selectedWorks.some((w) => w.putCode.value === work.putCode.value) + ) { + this.selectedWorks = this.selectedWorks.filter( + (value) => value.putCode.value !== work.putCode.value + ) + } else { + this.selectedWorks.push(work) + } + } + + saveEvent() { + this.loadingWorks = true + if (this.selectedWorks.length > 0) { + this.selectedWorks.forEach((work, index) => { + work.putCode = null + this._recordWorksService + .save(work, index === this.selectedWorks.length - 1) + .subscribe(() => { + if (index === this.selectedWorks.length - 1) { + this.loadingWorks = false + this.worksFromBibtex = [] + this.closeEvent() + } + }) + }) + } + } + + closeEvent() { + this.dialogRef.close() + } + + ngOnDestroy() { + this.$destroy.next(true) + this.$destroy.unsubscribe() + } +} + +export const bibMonths = [ + 'jan', + 'feb', + 'mar', + 'apr', + 'may', + 'jun', + 'jul', + 'aug', + 'sep', + 'oct', + 'nov', + 'dec', +] + +export const bibToWorkTypeMap = {} +bibToWorkTypeMap['article'] = ['publication', 'journal-article'] +bibToWorkTypeMap['book'] = ['publication', 'book'] +bibToWorkTypeMap['booklet'] = ['other_output', 'other'] +bibToWorkTypeMap['conference'] = ['conference', 'conference-paper'] +bibToWorkTypeMap['inbook'] = ['publication', 'book-chapter'] +bibToWorkTypeMap['incollection'] = ['publication', 'book-chapter'] +bibToWorkTypeMap['inproceedings'] = ['conference', 'conference-paper'] +bibToWorkTypeMap['manual'] = ['publication', 'manual'] +bibToWorkTypeMap['mastersthesis'] = [ + 'publication', + 'supervised-student-publication', +] +bibToWorkTypeMap['misc'] = ['other_output', 'other'] +bibToWorkTypeMap['phdthesis'] = ['publication', 'dissertation-thesis'] +bibToWorkTypeMap['proceedings'] = ['conference', 'conference-paper'] +bibToWorkTypeMap['techreport'] = ['publication', 'report'] +bibToWorkTypeMap['unpublished'] = ['other_output', 'other'] diff --git a/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.html b/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.html new file mode 100644 index 0000000000..b9eccdee28 --- /dev/null +++ b/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.html @@ -0,0 +1,158 @@ + + + + Works - Add work from DOI + + + Works - Add work from PubMed + + + + + + Work Details + + + + + Identifiers + + + + + Citation + + + + + Other information + + + + + Visibility + + + + + + + +
+
+
+

+ + You can use the full DOI URL or just the identifier value. + + + Type or paste the full PubMed URL or just the identifier value + +

+
+
+
+ +
+
+ + + + Invalid id for the selected identifier type + + + Unable to import using this identifier. Please add work using a + different option. + + +
+
+ +
+
+ +
diff --git a/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.scss b/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.scss new file mode 100644 index 0000000000..4f9505d795 --- /dev/null +++ b/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.scss @@ -0,0 +1,17 @@ +.input-container { + max-width: 500px; + ::ng-deep .mat-form-field-wrapper { + padding-bottom: 25px !important; + } +} + +.mat-form-field { + width: 100%; +} + +.retrieve-work { + padding: 0; + button { + max-width: 500px; + } +} diff --git a/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.spec.ts b/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.spec.ts new file mode 100644 index 0000000000..7593bd72e9 --- /dev/null +++ b/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WorkExternalIdModalComponent } from './work-external-id-modal.component' + +describe('WorkDoiModalComponent', () => { + let component: WorkExternalIdModalComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [WorkExternalIdModalComponent], + }).compileComponents() + }) + + beforeEach(() => { + fixture = TestBed.createComponent(WorkExternalIdModalComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.ts b/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.ts new file mode 100644 index 0000000000..d71205ae49 --- /dev/null +++ b/src/app/record/components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component.ts @@ -0,0 +1,113 @@ +import { + Component, + ElementRef, + Inject, + Input, + OnDestroy, + OnInit, + ViewChild, +} from '@angular/core' +import { Subject } from 'rxjs' +import { RecordImportWizard } from '../../../../../types/record-peer-review-import.endpoint' +import { MatDialogRef } from '@angular/material/dialog' +import { ModalComponent } from '../../../../../cdk/modal/modal/modal.component' +import { RecordWorksService } from '../../../../../core/record-works/record-works.service' +import { first } from 'rxjs/operators' +import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms' +import { EXTERNAL_ID_TYPE_WORK, URL_REGEXP } from '../../../../../constants' +import { Work } from '../../../../../types/record-works.endpoint' +import { WorkFormComponent } from '../../../work-form/work-form/work-form.component' +import { WINDOW } from 'src/app/cdk/window' + +@Component({ + selector: 'app-work-doi-modal', + templateUrl: './work-external-id-modal.component.html', + styleUrls: ['./work-external-id-modal.component.scss'], +}) +export class WorkExternalIdModalComponent implements OnInit, OnDestroy { + $destroy: Subject = new Subject() + + @ViewChild('workFormComponent') workFormComponent: WorkFormComponent + @ViewChild('externalIdRef') externalIdElement: ElementRef + + @Input() type: EXTERNAL_ID_TYPE_WORK + EXTERNAL_ID_TYPE_WORK = EXTERNAL_ID_TYPE_WORK + + loading = false + recordImportWizardsOriginal: RecordImportWizard[] + recordImportWizards: RecordImportWizard[] + externalIdentifierForm: FormGroup + work: Work + metadataNotFound = false + + constructor( + public dialogRef: MatDialogRef, + private _formBuilder: FormBuilder, + private _recordWorksService: RecordWorksService, + @Inject(WINDOW) private _window: Window + ) {} + + ngOnInit(): void { + this.externalIdentifierForm = this._formBuilder.group({ + externalId: new FormControl(''), + }) + if (this.type === EXTERNAL_ID_TYPE_WORK.doi) { + this.externalIdentifierForm.controls.externalId.setValidators([ + Validators.pattern(URL_REGEXP), + ]) + } + } + + ngAfterViewInit() { + this.externalIdElement.nativeElement.focus() + } + + retrieveWork() { + if (this.externalIdentifierForm.valid) { + this.loading = true + this._recordWorksService + .loadExternalId( + this.externalIdentifierForm.get('externalId').value, + this.type + ) + .pipe(first()) + .subscribe((work) => { + if (!work) { + this.externalIdentifierForm + .get('externalId') + .setErrors({ metadataNotFound: true }) + this.metadataNotFound = true + } else { + this.work = work + } + this.loading = false + }) + } + } + + closeEvent() { + this.dialogRef.close() + } + + ngOnDestroy() { + this.$destroy.next(true) + this.$destroy.unsubscribe() + } + toWorkDetails() { + this._window.document.getElementById('workDetails').scrollIntoView() + } + + toIdentifiers() { + this._window.document.getElementById('identifiers').scrollIntoView() + } + + toCitation() { + this._window.document.getElementById('citation').scrollIntoView() + } + toOtherInformation() { + this._window.document.getElementById('otherInformation').scrollIntoView() + } + toVisibility() { + this._window.document.getElementById('visibility').scrollIntoView() + } +} diff --git a/src/app/record/components/work-stack-group/modals/modal-works-search-link.component.html b/src/app/record/components/work-stack-group/modals/work-search-link-modal/modal-works-search-link.component.html similarity index 81% rename from src/app/record/components/work-stack-group/modals/modal-works-search-link.component.html rename to src/app/record/components/work-stack-group/modals/work-search-link-modal/modal-works-search-link.component.html index 5c5739548c..a906e3b562 100644 --- a/src/app/record/components/work-stack-group/modals/modal-works-search-link.component.html +++ b/src/app/record/components/work-stack-group/modals/work-search-link-modal/modal-works-search-link.component.html @@ -1,6 +1,6 @@ - Link works + Link works
@@ -17,21 +17,26 @@ href="https://support.orcid.org/hc/en-us/articles/360006973653-Add-works-by-direct-import-from-other-systems" target="_blank" rel="noopener noreferrer" - i18n="@@record.linkWorksMoreInfo" + i18n="@@works.linkWorksMoreInfo" > More information about linking works to your ORCID record
-

Available Search & Link wizards

- +

+ Available Search & Link wizards + ({{ total }}) +

+
error - No items selected.
diff --git a/src/app/record/components/work/modals/works-visibility-modal/works-visibility-modal.component.ts b/src/app/record/components/work/modals/works-visibility-modal/works-visibility-modal.component.ts index 0d06138403..3492df9897 100644 --- a/src/app/record/components/work/modals/works-visibility-modal/works-visibility-modal.component.ts +++ b/src/app/record/components/work/modals/works-visibility-modal/works-visibility-modal.component.ts @@ -4,7 +4,11 @@ import { Work } from '../../../../../types/record-works.endpoint' import { MatDialogRef } from '@angular/material/dialog' import { ModalComponent } from '../../../../../cdk/modal/modal/modal.component' import { RecordWorksService } from '../../../../../core/record-works/record-works.service' -import { FormControl, FormGroup } from '@angular/forms' +import { FormControl, FormGroup, Validators } from '@angular/forms' +import { PlatformInfoService } from '../../../../../cdk/platform-info' +import { takeUntil } from 'rxjs/operators' +import { VisibilityStrings } from 'src/app/types/common.endpoint' +import { RecordService } from 'src/app/core/record/record.service' @Component({ selector: 'app-works-visibility-modal', @@ -15,18 +19,40 @@ export class WorksVisibilityModalComponent implements OnInit, OnDestroy { $destroy: Subject = new Subject() worksForm: FormGroup + defaultVisibility: VisibilityStrings + isMobile: boolean loadingWorks = false putCodes: string[] = [] works: Work[] = [] + ngOrcidDefaultVisibilityLabel = $localize`:@@shared.visibilityDescription:Control who can see this information by setting the visibility. Your default visibility is` constructor( public dialogRef: MatDialogRef, - private _recordWorksService: RecordWorksService + private _platform: PlatformInfoService, + private _recordWorksService: RecordWorksService, + private _record: RecordService ) {} ngOnInit(): void { + this._platform + .get() + .pipe(takeUntil(this.$destroy)) + .subscribe((platform) => { + this.isMobile = platform.columns4 || platform.columns8 + }) + this.worksForm = new FormGroup({ - visibility: new FormControl('PRIVATE', {}), + visibility: new FormControl(this.defaultVisibility, { + validators: [Validators.required], + }), + }) + + // + this._record.getPreferences().subscribe((userRecord) => { + this.defaultVisibility = userRecord.default_visibility + this.worksForm.patchValue({ + visibility: this.defaultVisibility, + }) }) if (this.putCodes.length > 0) { diff --git a/src/app/record/components/work/work.component.html b/src/app/record/components/work/work.component.html index 32830f74b3..90672099b6 100644 --- a/src/app/record/components/work/work.component.html +++ b/src/app/record/components/work/work.component.html @@ -10,11 +10,36 @@ >{{ work.publicationDate | monthDayYearDateToString }} | - {{ work.workType.value }} + {{ work.workType.value | recordWorkTypeLabel }}
+
+ CONTRIBUTORS : + + {{ + contributor.creditName.value + + (!last && index !== maxNumberContributors - 1 ? ',' : '') + }} + + + + {{ work.contributors.length - maxNumberContributors }} + more + +
@@ -40,14 +65,15 @@ -

- Translated title -

- ({{ work.translatedTitle?.languageName }}) +
+ + Translated title  + ({{ work.translatedTitle.languageName }}) + +
{{ work.translatedTitle.content }} @@ -57,7 +83,7 @@

- Language + Language

@@ -68,7 +94,7 @@

- Subtitle + Subtitle

@@ -79,7 +105,7 @@

-

URL

+

URL

-

+

Contributors

@@ -120,7 +146,7 @@

- Citation + Citation ({{ work.citation?.citationType?.value }}) @@ -133,11 +159,9 @@

-

Description

+

Description

-
- {{ work.shortDescription.value }} -
+
@@ -152,7 +176,7 @@

-

Added

+

Added

{{ work.createdDate | monthDayYearDateToString }}
@@ -160,7 +184,7 @@

Added

-

+

Last modified

{{ work.lastModified | monthDayYearDateToString }}
diff --git a/src/app/record/components/work/work.component.scss b/src/app/record/components/work/work.component.scss index e69de29bb2..30e6218b74 100644 --- a/src/app/record/components/work/work.component.scss +++ b/src/app/record/components/work/work.component.scss @@ -0,0 +1,3 @@ +.translated-title-label { + font-weight: bold; +} diff --git a/src/app/record/components/work/work.component.ts b/src/app/record/components/work/work.component.ts index 7afedcf286..9fbed31164 100644 --- a/src/app/record/components/work/work.component.ts +++ b/src/app/record/components/work/work.component.ts @@ -17,6 +17,8 @@ export class WorkComponent implements OnInit { @Output() toggleDetails = new EventEmitter() @Input() stackMode @Input() orgDisambiguated: OrgDisambiguated + @Input() togglzWorksContributors: boolean + maxNumberContributors = 10 constructor() {} diff --git a/src/app/record/pages/my-orcid/my-orcid.component.html b/src/app/record/pages/my-orcid/my-orcid.component.html index 061ac35f42..6ad36e833a 100644 --- a/src/app/record/pages/my-orcid/my-orcid.component.html +++ b/src/app/record/pages/my-orcid/my-orcid.component.html @@ -24,67 +24,72 @@ [hideOrcidId]="true" > -
-

- Activities -

-
- - + +
+

+ Activities +

+
+ + +
-
- - - - - + + + + + +
= new Subject() + private readonly $destroy = new Subject() platform: PlatformInfo publicOrcid: string affiliations: number userInfo: UserInfo userRecord: UserRecord - expandedContent = true + expandedContent: MainPanelsState = { + EMPLOYMENT: true, + EDUCATION_AND_QUALIFICATION: true, + INVITED_POSITION_AND_DISTINCTION: true, + MEMBERSHIP_AND_SERVICE: true, + FUNDING: true, + PEER_REVIEW: true, + RESEARCH_RESOURCE: true, + WORK: true, + } + + researchResourcePresent: boolean + expandedButton = true - expandedAffiliations: boolean - expandedFundings: boolean - expandedWorks: boolean - expandedResearchResources: boolean - expandedPeerReview: boolean + recordWithIssues: boolean userNotFound: boolean loadingUserRecord: boolean + globalExpandState = true + initMyOrcidParameter = false constructor( _userInfoService: UserInfoService, @@ -44,10 +54,9 @@ export class MyOrcidComponent implements OnInit, OnDestroy { private route: ActivatedRoute, private _record: RecordService, private _openGraph: OpenGraphService, - private _robotsMeta: RobotsMetaTagsService - ) { - this.checkIfThisIsAPublicOrcid() - } + private _robotsMeta: RobotsMetaTagsService, + private _router: Router + ) {} private checkIfThisIsAPublicOrcid() { if (this.getRouteOrcidID()) { @@ -57,35 +66,39 @@ export class MyOrcidComponent implements OnInit, OnDestroy { } private getRouteOrcidID(): string { - // checks first and second URL segment to find - // `/qa/` (used only during QA ) - // od `/` (used while the app is live ) if (this.route.parent.snapshot.url) { - const firstParameter = this.route.parent.snapshot.url[0] - const secondParameter = this.route.parent.snapshot.url[1] + const firstUrlSegment = this.route.parent.snapshot.url[0] if ( - firstParameter && - firstParameter.toString() && - ORCID_REGEXP.test(firstParameter.toString()) + firstUrlSegment && + firstUrlSegment.toString() && + ORCID_REGEXP.test(firstUrlSegment.toString()) ) { - return firstParameter.toString() - } else if ( - secondParameter && - secondParameter.toString() && - ORCID_REGEXP.test(secondParameter.toString()) - ) { - return secondParameter.toString() + return firstUrlSegment.toString() } - return null } } ngOnInit(): void { + this.checkIfThisIsAPublicOrcid() + this.affiliations = 0 this._platform.get().subscribe((value) => (this.platform = value)) this._record .getRecord({ publicRecordId: this.publicOrcid || undefined, + forceReload: true, + /// TODO + // cleaning the cache is only require when the user login or register *** (To make sure not previous session is displayed) + // This means that we can later figure out a way to NOT CLEAN cache when the user is navigating between the app router features. + // In that way we KEEP THE forceReload (meaning that any update is loaded as done right now) + // but also the cache is used to pain the my-orcid page super fast (With cache data) + // + // This could be archive using a local-storage parameter or a query parameter, + // to know if the user just login or registered and the cache must be clean. + // + // at the moment the cache will always bee cleaned, + // as a quick solution to not show cache data when a user logouts/login with different accounts. + cleanCacheIfExist: true, }) .pipe(takeUntil(this.$destroy)) .subscribe((userRecord) => { @@ -94,67 +107,64 @@ export class MyOrcidComponent implements OnInit, OnDestroy { this.recordWithIssues = userRecord?.userInfo?.RECORD_WITH_ISSUES this.userNotFound = userRecord?.userInfo?.USER_NOT_FOUND this.userRecord = userRecord + + if (!this.publicOrcid && userRecord?.userInfo) { + this.setMyOrcidIdQueryParameter() + } + if (this.publicOrcid && (this.recordWithIssues || this.userNotFound)) { this._robotsMeta.disallowRobots() } - this._openGraph.addOpenGraphData(userRecord) + this._openGraph.addOpenGraphData(userRecord, { force: true }) }) } + private setMyOrcidIdQueryParameter() { + if (this.userInfo?.EFFECTIVE_USER_ORCID && !this.initMyOrcidParameter) { + this.initMyOrcidParameter = true + + if (!this.platform.queryParameters.hasOwnProperty('justRegistered')) { + this._router.navigate(['/my-orcid'], { + queryParams: { orcid: this.userInfo.EFFECTIVE_USER_ORCID }, + }) + } else { + this._router.navigate(['/my-orcid'], { + queryParams: { + orcid: this.userInfo.EFFECTIVE_USER_ORCID, + justRegistered: '', + }, + }) + } + } + } + ngOnDestroy(): void { if (this.publicOrcid) { - this._openGraph.removeOpenGraphData() this._robotsMeta.restoreEnvironmentRobotsConfig() } + this._openGraph.removeOpenGraphData() + this.$destroy.next(true) + this.$destroy.complete() } - collapse() { - this.expandedContent = !this.expandedContent + switchPanelsState() { + this.globalExpandState = !this.globalExpandState + Object.keys(this.expandedContent).forEach((key) => { + this.expandedContent[key] = this.globalExpandState + }) } - affiliationsCount(itemsCount: Event) { - this.affiliations = this.affiliations + +itemsCount + expandedContentUpdate(expandedContent: MainPanelsState) { + this.globalExpandState = !Object.keys(expandedContent) + .filter((x) => x !== 'RESEARCH_RESOURCE' || this.researchResourcePresent) + .map((key) => expandedContent[key]) + .some((x) => !x) } - expandedByType(event) { - switch (event.type) { - case 'affiliations': - this.expandedAffiliations = event.expanded - break - case 'fundings': - this.expandedFundings = event.expanded - break - case 'works': - this.expandedWorks = event.expanded - break - case 'research-resources': - this.expandedResearchResources = event.expanded - break - case 'peer-review': - this.expandedPeerReview = event.expanded - break - } - - if ( - this.expandedAffiliations !== undefined && - this.expandedFundings !== undefined && - this.expandedWorks !== undefined && - this.expandedResearchResources !== undefined && - this.expandedPeerReview !== undefined - ) { - if ( - (this.expandedAffiliations && - this.expandedFundings && - this.expandedWorks && - this.expandedPeerReview) || - (!this.expandedAffiliations && - !this.expandedFundings && - !this.expandedWorks && - !this.expandedResearchResources && - !this.expandedPeerReview) - ) { - this.collapse() - } + affiliationsCount(itemsCount: number, type?: string) { + this.affiliations = this.affiliations + itemsCount + if (type === 'RESEARCH_RESOURCE') { + this.researchResourcePresent = !!itemsCount } } diff --git a/src/app/record/record.module.ts b/src/app/record/record.module.ts index 6225a815e5..66c9bd3a61 100644 --- a/src/app/record/record.module.ts +++ b/src/app/record/record.module.ts @@ -13,6 +13,7 @@ import { MatInputModule } from '@angular/material/input' import { MatMenuModule } from '@angular/material/menu' import { MatPaginatorModule } from '@angular/material/paginator' import { MatProgressBarModule } from '@angular/material/progress-bar' + import { MatRadioModule } from '@angular/material/radio' import { MatSelectModule } from '@angular/material/select' @@ -51,18 +52,31 @@ import { TopBarRecordIssuesComponent } from './components/top-bar-record-issues/ import { ModalBiographyComponent } from './components/top-bar/modals/modal-biography/modal-biography.component' import { ModalNameComponent } from './components/top-bar/modals/modal-name/modal-name.component' import { TopBarComponent } from './components/top-bar/top-bar.component' -import { WorkModalComponent } from './components/work-modal/work-modal.component' import { WorkStackGroupComponent } from './components/work-stack-group/work-stack-group.component' import { WorkStackComponent } from './components/work-stack/work-stack.component' import { ModalCombineWorksComponent } from './components/work/modals/modal-combine-works/modal-combine-works.component' -import { ModalExportWorksComponent } from './components/work/modals/modal-export-works/modal-export-works.component' import { WorkComponent } from './components/work/work.component' import { MyOrcidComponent } from './pages/my-orcid/my-orcid.component' import { RecordRoutingModule } from './record-routing.module' -import { ModalWorksSearchLinkComponent } from './components/work-stack-group/modals/modal-works-search-link.component' import { ModalFundingSearchLinkComponent } from './components/funding-stacks-groups/modals/modal-funding-search-link/modal-funding-search-link.component' import { SearchLinkWizardComponent } from './components/search-link-wizard/search-link-wizard.component' import { WorksVisibilityModalComponent } from './components/work/modals/works-visibility-modal/works-visibility-modal.component' +import { WorkBibtexModalComponent } from './components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component' +import { ModalWorksSearchLinkComponent } from './components/work-stack-group/modals/work-search-link-modal/modal-works-search-link.component' +import { WorkExternalIdModalComponent } from './components/work-stack-group/modals/work-external-id-modal/work-external-id-modal.component' +import { WorkFormComponent } from './components/work-form/work-form/work-form.component' +import { WorkExternalIdentifiersEditComponent } from './components/work-external-identifiers-edit/work-external-identifiers-edit.component' +import { FundingExternalIdentifiersEditComponent } from './components/funding-external-identifiers-edit/funding-external-identifiers-edit.component' +import { ModalExportWorksComponent } from './components/work/modals/modal-export-works/modal-export-works.component' +import { WorkModalComponent } from './components/work-modal/work-modal.component' +import { FundingExternalIdentifiersViewOnlyComponent } from './components/funding-external-identifiers-view-only/funding-external-identifiers-view-only.component' +import { WorkExternalIdentifiersViewOnlyComponent } from './components/work-external-identifiers-view-only/work-external-identifiers-view-only.component' +import { TextFieldModule } from '@angular/cdk/text-field' +import { WarningMessageModule } from '../cdk/warning-message/warning-message.module' +import { TopBarVerificationEmailComponent } from './components/top-bar-verification-email/top-bar-verification-email.component' +import { TopBarVerificationEmailModalComponent } from './components/top-bar-verification-email/modals/top-bar-verification-email-modal/top-bar-verification-email-modal.component' +import { VerificationEmailModalService } from '../core/verification-email-modal/verification-email-modal.service' +import { ModalCombineWorksWithSelectorComponent } from './components/work/modals/modal-combine-works-with-selector/modal-combine-works-with-selector.component' @NgModule({ declarations: [ @@ -89,7 +103,6 @@ import { WorksVisibilityModalComponent } from './components/work/modals/works-vi TopBarMyPublicRecordPreviewComponent, TopBarRecordIssuesComponent, NotFoundComponent, - WorkModalComponent, ModalAffiliationsComponent, OrgIdentifierComponent, ModalFundingComponent, @@ -104,6 +117,18 @@ import { WorksVisibilityModalComponent } from './components/work/modals/works-vi ModalFundingSearchLinkComponent, SearchLinkWizardComponent, WorksVisibilityModalComponent, + WorkBibtexModalComponent, + WorkExternalIdModalComponent, + WorkFormComponent, + WorkExternalIdentifiersEditComponent, + WorkExternalIdentifiersViewOnlyComponent, + FundingExternalIdentifiersEditComponent, + FundingExternalIdentifiersViewOnlyComponent, + WorkFormComponent, + WorkModalComponent, + TopBarVerificationEmailComponent, + TopBarVerificationEmailModalComponent, + ModalCombineWorksWithSelectorComponent, ], imports: [ CommonModule, @@ -135,6 +160,9 @@ import { WorksVisibilityModalComponent } from './components/work/modals/works-vi MatAutocompleteModule, MatRadioModule, MatCheckboxModule, + TextFieldModule, + WarningMessageModule, ], + providers: [VerificationEmailModalService], }) export class RecordModule {} diff --git a/src/app/register/components/backend-error/backend-error.component.html b/src/app/register/components/backend-error/backend-error.component.html index 273dfd28a2..d08320c6bb 100644 --- a/src/app/register/components/backend-error/backend-error.component.html +++ b/src/app/register/components/backend-error/backend-error.component.html @@ -19,7 +19,7 @@ *ngIf="recognizedError[errorCode] === 2" i18n="@@register.additionalEmailMatch" > - Additional emails can not be duplicated + Additional emails cannot be duplicated diff --git a/src/app/register/components/backend-error/backend-error.component.ts b/src/app/register/components/backend-error/backend-error.component.ts index 0c4f8497cd..fc8dbc92f5 100644 --- a/src/app/register/components/backend-error/backend-error.component.ts +++ b/src/app/register/components/backend-error/backend-error.component.ts @@ -66,7 +66,7 @@ export class BackendErrorComponent implements OnInit { .get() .pipe(take(1)) .subscribe((platform) => { - return this._router.navigate(['/signin'], { + return this._router.navigate([ApplicationRoutes.signin], { // keeps all parameters to support Oauth request // and set show login to true queryParams: { ...platform.queryParameters, email, show_login: true }, diff --git a/src/app/register/pages/register/register.component.ts b/src/app/register/pages/register/register.component.ts index aad950f150..5332133cfa 100644 --- a/src/app/register/pages/register/register.component.ts +++ b/src/app/register/pages/register/register.component.ts @@ -151,7 +151,7 @@ export class RegisterComponent implements OnInit, AfterViewInit { this.FormGroupStepC, this.reactivation, this.requestInfoForm, - !!this.requestInfoForm // request client service to be update (only when the next navigation wont go outside this app) + true ) }) ) @@ -203,7 +203,16 @@ export class RegisterComponent implements OnInit, AfterViewInit { } }) } else { - this.window.location.href = response.url + if ( + response.url.indexOf('orcid.org/my-orcid') > 0 && + response.url.indexOf('justRegistered') > 0 + ) { + this._router.navigate(['/my-orcid'], { + queryParams: { justRegistered: true }, + }) + } else { + this.window.location.href = response.url + } } } diff --git a/src/app/register/register.module.ts b/src/app/register/register.module.ts index 951eb5fbe4..3115000c6a 100644 --- a/src/app/register/register.module.ts +++ b/src/app/register/register.module.ts @@ -31,6 +31,7 @@ import { BackendErrorComponent } from './components/backend-error/backend-error. import { MatProgressBarModule } from '@angular/material/progress-bar' import { FormDirectivesModule } from '../cdk/form-directives/form-directives.module' import { TopBarRecordIssuesComponent } from './components/top-bar-record-issues/top-bar-record-issues.component' +import { WarningMessageModule } from '../cdk/warning-message/warning-message.module' @NgModule({ declarations: [ RegisterComponent, @@ -67,6 +68,7 @@ import { TopBarRecordIssuesComponent } from './components/top-bar-record-issues/ A11yLinkModule, MatProgressBarModule, FormDirectivesModule, + WarningMessageModule, ], }) export class RegisterModule {} diff --git a/src/app/search/components/results/results.component.html b/src/app/search/components/results/results.component.html index 302ccbc01a..1b84e59b3b 100644 --- a/src/app/search/components/results/results.component.html +++ b/src/app/search/components/results/results.component.html @@ -23,7 +23,9 @@ - {{ orcid['orcid-id'] }} + + {{ orcid['orcid-id'] }} {{ orcid['given-names'] }} {{ orcid['family-names'] }} diff --git a/src/app/shared/pipes/trailing-zeros.pipe.spec.ts b/src/app/shared/pipes/trailing-zeros.pipe.spec.ts new file mode 100644 index 0000000000..34441e1892 --- /dev/null +++ b/src/app/shared/pipes/trailing-zeros.pipe.spec.ts @@ -0,0 +1,8 @@ +import { TrailingZerosPipe } from './trailing-zeros.pipe' + +describe('TrailingZerosPipe', () => { + it('create an instance', () => { + const pipe = new TrailingZerosPipe() + expect(pipe).toBeTruthy() + }) +}) diff --git a/src/app/shared/pipes/trailing-zeros/trailing-zeros.pipe.ts b/src/app/shared/pipes/trailing-zeros/trailing-zeros.pipe.ts new file mode 100644 index 0000000000..681954cd17 --- /dev/null +++ b/src/app/shared/pipes/trailing-zeros/trailing-zeros.pipe.ts @@ -0,0 +1,13 @@ +import { Pipe, PipeTransform } from '@angular/core' + +@Pipe({ + name: 'trailingZeros', +}) +export class TrailingZerosPipe implements PipeTransform { + transform(date: number): string { + if (date && Number(date) < 10) { + return '0' + date.toString() + } + return date.toString() + } +} diff --git a/src/app/shared/pipes/visibility-string-label/visibility-string-label.pipe.specs.ts b/src/app/shared/pipes/visibility-string-label/visibility-string-label.pipe.specs.ts new file mode 100644 index 0000000000..8aaeab1e12 --- /dev/null +++ b/src/app/shared/pipes/visibility-string-label/visibility-string-label.pipe.specs.ts @@ -0,0 +1,8 @@ +import { VisibilityStringLabelPipe } from './visibility-string-label.pipe' + +describe('VisibilityStringLabelPipe', () => { + it('create an instance', () => { + const pipe = new VisibilityStringLabelPipe() + expect(pipe).toBeTruthy() + }) +}) diff --git a/src/app/shared/pipes/visibility-string-label/visibility-string-label.pipe.ts b/src/app/shared/pipes/visibility-string-label/visibility-string-label.pipe.ts new file mode 100644 index 0000000000..c74019e08f --- /dev/null +++ b/src/app/shared/pipes/visibility-string-label/visibility-string-label.pipe.ts @@ -0,0 +1,14 @@ +import { Pipe, PipeTransform } from '@angular/core' +import { + VisibilityStrings, + VisibilityStringLabel, +} from 'src/app/types/common.endpoint' + +@Pipe({ + name: 'visibilityStringLabel', +}) +export class VisibilityStringLabelPipe implements PipeTransform { + transform(value: VisibilityStrings): unknown { + return VisibilityStringLabel[value] + } +} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index bb4373ebe8..3cabdb752b 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -27,6 +27,8 @@ import { RecordWorkRelationshipLabelPipe } from './pipes/record-work-relationshi import { RecordWorkTitleNameLabelPipe } from './pipes/record-work-title-name-label/record-work-title-name-label.pipe' import { RecordWorkTypeLabelPipe } from './pipes/record-work-type-label/record-work-type-label.pipe' import { SafeHtmlPipe } from './pipes/safe-html/safe-html.pipe' +import { TrailingZerosPipe } from './pipes/trailing-zeros/trailing-zeros.pipe' +import { VisibilityStringLabelPipe } from './pipes/visibility-string-label/visibility-string-label.pipe' @NgModule({ imports: [ @@ -54,6 +56,8 @@ import { SafeHtmlPipe } from './pipes/safe-html/safe-html.pipe' RecordFundingRelationshipHintLabelPipe, RecordFundingTypeLabelPipe, AffiliationTypeLabelPipe, + TrailingZerosPipe, + VisibilityStringLabelPipe, ], exports: [ CommonModule, @@ -79,6 +83,8 @@ import { SafeHtmlPipe } from './pipes/safe-html/safe-html.pipe' RecordFundingRelationshipHintLabelPipe, RecordFundingTypeLabelPipe, AffiliationTypeLabelPipe, + TrailingZerosPipe, + VisibilityStringLabelPipe, ], providers: [], // Should not provide anything }) diff --git a/src/app/shared/validators/citation/work-citation.validator.ts b/src/app/shared/validators/citation/work-citation.validator.ts new file mode 100644 index 0000000000..9b455b96c7 --- /dev/null +++ b/src/app/shared/validators/citation/work-citation.validator.ts @@ -0,0 +1,15 @@ +import { FormGroup } from '@angular/forms' + +export function workCitationValidator({ + value, +}: FormGroup): { [key: string]: any } { + const workCitation = value?.citation + const workCitationType = value?.citationType + if (workCitation && !workCitationType) { + return { citationType: true } + } else if (!workCitation && workCitationType) { + return { citation: true } + } else { + return null + } +} diff --git a/src/app/shared/validators/date/date.validator.ts b/src/app/shared/validators/date/date.validator.ts index 5f8a28a45e..979496609a 100644 --- a/src/app/shared/validators/date/date.validator.ts +++ b/src/app/shared/validators/date/date.validator.ts @@ -17,12 +17,23 @@ export function dateValidator(dateType: string) { } if (year && month && !day) { - date = new Date(year + '/' + month) + date = new Date(year + '-' + (month < 10 ? '0' + month : month)) } if (year && month && day) { - date = new Date(year + '/' + month + '/' + day) + date = new Date(year, month - 1, day) + + if ( + date.getFullYear() === year && + date.getMonth() === month - 1 && + date.getDate() === day + ) { + return null + } else { + return { date: true } + } } + if (date && !isNaN(date.getTime())) { return null } @@ -36,7 +47,7 @@ export function dateMonthYearValidator(dateType: string) { const year = c.get(dateType + 'Year').value const month = c.get(dateType + 'Month').value - if (year === '' && month === '') { + if (!year && !month) { return null } @@ -47,11 +58,7 @@ export function dateMonthYearValidator(dateType: string) { } if (year && month) { - date = new Date(year + '/' + month) - } - - if (year && month) { - date = new Date(year + '/' + month) + date = new Date(year + '-' + (month < 10 ? '0' + month : month)) } if (date && !isNaN(date.getTime())) { @@ -61,3 +68,176 @@ export function dateMonthYearValidator(dateType: string) { return { date: true } } } + +export function endDateMonthYearValidator() { + return (c: AbstractControl): { [key: string]: any } | null => { + const endDateExistingErrors = Object.keys( + c.get('endDateGroup').errors || {} + ) + const startDateExistingErrors = Object.keys( + c.get('startDateGroup').errors || {} + ) + if (endDateExistingErrors.length || startDateExistingErrors.length) { + // both date has to be valid to validate end date congruence + return null + } + + const endDateYear = c.get('endDateGroup.endDateYear').value + const endDateMonth = c.get('endDateGroup.endDateMonth').value + + const startDateYear = c.get('startDateGroup.startDateYear').value + const startDateMonth = c.get('startDateGroup.startDateMonth').value + + if (!endDateYear || !startDateYear) { + return null + } + + const dates = startAndEndDate( + startDateYear, + endDateYear, + startDateMonth, + endDateMonth + ) + + // Cloning old app and backend behaviour. + // if the end-month is defined and the start-year and end-year are the same, start-month MUST be defined + if ( + endDateMonth && + !startDateMonth && + startDateYear && + endDateYear && + startDateYear === endDateYear + ) { + return { invalidEndDate: true } + } + + if (dates.endDate < dates.startDate) { + return { invalidEndDate: true } + } + + if (dates.endDate < dates.startDate) { + return { invalidEndDate: true } + } + + return null + } +} + +export function endDateValidator() { + return (c: AbstractControl): { [key: string]: any } | null => { + const endDateExistingErrors = Object.keys( + c.get('endDateGroup').errors || {} + ) + const startDateExistingErrors = Object.keys( + c.get('startDateGroup').errors || {} + ) + if (endDateExistingErrors.length || startDateExistingErrors.length) { + // both date has to be valid to validate end date congruence + return null + } + + const endDateYear = c.get('endDateGroup.endDateYear').value + const endDateMonth = c.get('endDateGroup.endDateMonth').value + const endDateDay = c.get('endDateGroup.endDateDay').value + + const startDateYear = c.get('startDateGroup.startDateYear').value + const startDateMonth = c.get('startDateGroup.startDateMonth').value + const startDateDay = c.get('startDateGroup.startDateDay').value + + if (!endDateYear || !startDateYear) { + return null + } + + const dates = startAndEndDate( + startDateYear, + endDateYear, + startDateMonth, + endDateMonth, + startDateDay, + endDateDay + ) + // Cloning old app and backend behaviour. + // if the end-month is defined and the start-year and end-year are the same, start-month MUST be defined + if ( + endDateMonth && + !startDateMonth && + startDateYear && + endDateYear && + startDateYear === endDateYear + ) { + return { invalidEndDate: true } + } + // Cloning old app and backend behaviour. + // if the end-day is defined and the start-year/month and end-year/month are the same, start-month MUST be defined + if ( + endDateDay && + !startDateDay && + startDateYear && + endDateYear && + endDateMonth && + endDateDay && + startDateYear === endDateYear && + endDateMonth === endDateDay + ) { + return { invalidEndDate: true } + } + + if (dates.endDate < dates.startDate) { + return { invalidEndDate: true } + } + + return null + } +} + +function startAndEndDate( + startDateYear: number, + endDateYear: number, + startDateMonth: number, + endDateMonth: number, + startDateDay?: number, + endDateDay?: number +): { startDate: Date; endDate: Date } { + if ( + startDateYear && + endDateYear && + startDateMonth && + endDateMonth && + startDateDay && + endDateDay + ) { + const startDate = getDateFromNumbers( + startDateYear, + startDateMonth, + startDateDay + ) + const endDate = getDateFromNumbers(endDateYear, endDateMonth, endDateDay) + + return { startDate, endDate } + } + if (startDateYear && startDateMonth && endDateYear && endDateMonth) { + const startDate = getDateFromNumbers(startDateYear, startDateMonth) + const endDate = getDateFromNumbers(endDateYear, endDateMonth) + + return { startDate, endDate } + } + + if (startDateYear && endDateYear) { + const startDate = getDateFromNumbers(startDateYear) + const endDate = getDateFromNumbers(endDateYear) + + return { startDate, endDate } + } +} +function getDateFromNumbers(year: number, month?: number, day?: number): Date { + let date: Date + + if (year && month && day) { + date = new Date(year, month ? month - 1 : undefined, day) + } else if (year && month) { + date = new Date(year + '-' + (month < 10 ? '0' + month : month)) + } else { + date = new Date(year + '') + } + return date +} diff --git a/src/app/shared/validators/translated-title/translated-title.validator.ts b/src/app/shared/validators/translated-title/translated-title.validator.ts new file mode 100644 index 0000000000..fb95d374ee --- /dev/null +++ b/src/app/shared/validators/translated-title/translated-title.validator.ts @@ -0,0 +1,15 @@ +import { FormGroup } from '@angular/forms' + +export function translatedTitleValidator({ + value, +}: FormGroup): { [key: string]: any } { + const translatedTitleContent = value?.translatedTitleContent + const translatedTitleLanguage = value?.translatedTitleLanguage + if (translatedTitleContent && !translatedTitleLanguage) { + return { invalidTranslatedTitleLanguage: true } + } else if (!translatedTitleContent && translatedTitleLanguage) { + return { invalidTranslatedTitleContent: true } + } else { + return null + } +} diff --git a/src/app/shared/validators/work-identifiers/work-identifiers.validator.ts b/src/app/shared/validators/work-identifiers/work-identifiers.validator.ts new file mode 100644 index 0000000000..14dc07ab96 --- /dev/null +++ b/src/app/shared/validators/work-identifiers/work-identifiers.validator.ts @@ -0,0 +1,41 @@ +import { AbstractControl, FormArray, ValidatorFn } from '@angular/forms' + +export class WorkIdentifiers { + static fundedByInvalidRelationship(): ValidatorFn { + return (c: AbstractControl): { [key: string]: boolean } | null => { + if (c.get('externalRelationship')?.value === 'funded-by') { + if ( + ['grant_number', 'doi', 'uri', 'proposal-id'].indexOf( + c.get('externalIdentifierType')?.value + ) >= 0 + ) { + return null + } + + return { funded_by_invalid: true } + } + + return null + } + } + static versionOfInvalidRelationship( + identifiersArray: FormArray + ): ValidatorFn { + return (c: AbstractControl): { [key: string]: boolean } | null => { + if (c.get('externalRelationship')?.value === 'version-of') { + let hasASelfRelationShip = false + // The array needs a `self` relation when there is a `version-of` relationship. + identifiersArray.controls.forEach((control: AbstractControl) => { + if (control.get('externalRelationship')?.value === 'self') { + hasASelfRelationShip = true + } + }) + if (!hasASelfRelationShip) { + return { version_of_invalid: true } + } + } + + return null + } + } +} diff --git a/src/app/sign-in/components/form-sign-in/form-sign-in.component.ts b/src/app/sign-in/components/form-sign-in/form-sign-in.component.ts index c574876621..1316c7a9a7 100644 --- a/src/app/sign-in/components/form-sign-in/form-sign-in.component.ts +++ b/src/app/sign-in/components/form-sign-in/form-sign-in.component.ts @@ -148,11 +148,10 @@ export class FormSignInComponent implements OnInit, AfterViewInit { const isOauth = this.signInLocal.isOauth const willNotNavigateOutOrcidAngular = isOauth - const forceSessionUpdate = isOauth const $signIn = this._signIn.signIn( this.signInLocal, willNotNavigateOutOrcidAngular, - forceSessionUpdate + true ) $signIn.subscribe((data) => { this.printError = false @@ -348,7 +347,11 @@ export class FormSignInComponent implements OnInit, AfterViewInit { this.authorizationForm.get('username').updateValueAndValidity() } - navigateTo(val) { - this.window.location.href = val + navigateTo(val: string): void { + if (val.indexOf('orcid.org/my-orcid')) { + this._router.navigate(['/my-orcid']) + } else { + this.window.location.href = val + } } } diff --git a/src/app/types/common.endpoint.ts b/src/app/types/common.endpoint.ts index 6a0ef96dc7..be663fe86a 100644 --- a/src/app/types/common.endpoint.ts +++ b/src/app/types/common.endpoint.ts @@ -1,3 +1,5 @@ +import { WorkRelationships } from './works.endpoint' + export interface LastModifiedDate { value: number } @@ -124,11 +126,18 @@ export interface ExternalIdentifier { externalIdentifierId: ExternalIdentifierId externalIdentifierType: Value url: Value - relationship: Value + relationship: RelationshipValue normalized: Value normalizedUrl: Value } +export interface RelationshipValue { + errors?: any[] // TODO is this always empty? + value: WorkRelationships + required?: boolean + getRequiredMessage?: any +} + export interface ExternalIdentifierId { errors: any[] value: string @@ -182,6 +191,12 @@ export type ScopesStrings = export type VisibilityStrings = 'PUBLIC' | 'LIMITED' | 'PRIVATE' +export const VisibilityStringLabel = { + PUBLIC: $localize`:@@shared.everyone:Everyone`, + LIMITED: $localize`:@@shared.trustedParties:Trusted parties`, + PRIVATE: $localize`:@@shared.onlyMe:Only me`, +} + export type DeprecatedScopesStrings = | '/orcid-works/read-limited' | '/orcid-bio/read-limited' diff --git a/src/app/types/record-affiliation.endpoint.ts b/src/app/types/record-affiliation.endpoint.ts index 02a137ecc6..ef883bc3d6 100644 --- a/src/app/types/record-affiliation.endpoint.ts +++ b/src/app/types/record-affiliation.endpoint.ts @@ -47,8 +47,8 @@ export interface AffiliationGroup { groupId: string activeVisibility: string // TODO is this always empty? userVersionPresent: boolean - externalIdentifiers: [any] // TODO is this always empty? - affiliationType: string // Todo make an enum + externalIdentifiers: ExternalIdentifier[] + affiliationType: AffiliationGroupsTypes } export interface Affiliation extends AssertionBase { @@ -93,6 +93,20 @@ export interface Organization { value: string } +export interface DisambiguatedOrganization { + sourceId: string + country: string + orgType: string + countryForDisplay: string + disambiguatedAffiliationIdentifier?: any + city: string + sourceType: string + region: string + value: string + url?: string + affiliationKey: string +} + export interface AffiliationTypeValue { errors?: any[] value: AffiliationType diff --git a/src/app/types/record-funding.endpoint.ts b/src/app/types/record-funding.endpoint.ts index 874c9cda37..c1983a8eb0 100644 --- a/src/app/types/record-funding.endpoint.ts +++ b/src/app/types/record-funding.endpoint.ts @@ -13,13 +13,20 @@ export interface OrganizationDefinedFundingSubType { subtype: Value } +export interface FundingType { + errors?: any[] + value: FundingTypes + required?: boolean + getRequiredMessage?: any +} + export interface FundingGroup { - fundings: [Funding] + fundings: Funding[] activePutCode: number groupId: string activeVisibility: string // TODO is this always empty? userVersionPresent: boolean - externalIdentifiers: [any] // TODO is this always empty? + externalIdentifiers: ExternalIdentifier[] defaultFunding: Funding } @@ -29,7 +36,7 @@ export interface Funding extends AssertionBase { fundingTitle: Title description: Value fundingName: Value - fundingType: Value + fundingType: FundingType organizationDefinedFundingSubType: OrganizationDefinedFundingSubType currencyCode: Value amount: Value @@ -44,7 +51,7 @@ export interface Funding extends AssertionBase { region: Value country: Value countryForDisplay?: string - fundingTypeForDisplay?: string + typeForDisplay?: string dateSortString?: MonthDayYearDate fullyLoaded?: boolean } @@ -53,7 +60,7 @@ export enum FundingTypes { award = 'award', contract = 'contract', grant = 'grant', - salary_award = 'salary_award', + salary_award = 'salary-award', } export const FundingTypesLabel = { diff --git a/src/app/types/record-peer-review.endpoint.ts b/src/app/types/record-peer-review.endpoint.ts index 40b5a89f55..8ede3b3127 100644 --- a/src/app/types/record-peer-review.endpoint.ts +++ b/src/app/types/record-peer-review.endpoint.ts @@ -24,6 +24,7 @@ export interface PeerReview extends AssertionBase { name: string peerReviewDuplicateGroups: PeerReviewDuplicateGroup[] showDetails: boolean + visibilityError: boolean } export interface PeerReviewDuplicateGroup { diff --git a/src/app/types/record-works.endpoint.ts b/src/app/types/record-works.endpoint.ts index 852ae0179e..e253aec3a6 100644 --- a/src/app/types/record-works.endpoint.ts +++ b/src/app/types/record-works.endpoint.ts @@ -6,6 +6,12 @@ import { VisibilityStrings, } from './common.endpoint' import { AssertionBase } from './record.endpoint' +import { + WorkPublicationTypes, + WorkConferenceTypes, + WorkIntellectualPropertyTypes, + WorkOtherOutputTypes, +} from './works.endpoint' export interface Work extends AssertionBase { publicationDate: MonthDayYearDate @@ -21,10 +27,20 @@ export interface Work extends AssertionBase { subtitle?: Value translatedTitle?: TranslatedTitle workCategory?: Value - workType: Value + workType: WorkType dateSortString?: MonthDayYearDate userSource?: boolean } +interface WorkType { + errors?: any[] + required?: boolean + getRequiredMessage?: any + value: + | WorkPublicationTypes + | WorkConferenceTypes + | WorkIntellectualPropertyTypes + | WorkOtherOutputTypes +} export interface TranslatedTitle { errors?: any diff --git a/src/app/types/record.endpoint.ts b/src/app/types/record.endpoint.ts index 90ab8145f5..bb2680bf3b 100644 --- a/src/app/types/record.endpoint.ts +++ b/src/app/types/record.endpoint.ts @@ -116,6 +116,7 @@ export interface Assertion extends AssertionBase { export interface AssertionVisibilityString extends AssertionBase { visibility?: VisibilityStrings + action?: 'ADD' | 'UPDATE' } export interface GroupBase { diff --git a/src/app/types/record.local.ts b/src/app/types/record.local.ts index ac2409b207..e4f0ebd408 100644 --- a/src/app/types/record.local.ts +++ b/src/app/types/record.local.ts @@ -29,6 +29,8 @@ export interface SideBarPublicUserRecord { export interface UserRecord { // person: Person + // TODO remove subscriptionCount only use to debug on QA the subscription management + subscriptionCount: number emails: EmailsEndpoint otherNames: OtherNamesEndPoint countries: CountriesEndpoint @@ -37,12 +39,12 @@ export interface UserRecord { externalIdentifier: PersonIdentifierEndpoint names: NamesEndPoint biography: BiographyEndPoint - preferences: Preferences - affiliations: AffiliationUIGroup[] + preferences?: Preferences + affiliations?: AffiliationUIGroup[] fundings?: FundingGroup[] - peerReviews: PeerReview[] - researchResources: ResearchResourcesEndpoint - works: WorksEndpoint + peerReviews?: PeerReview[] + researchResources?: ResearchResourcesEndpoint + works?: WorksEndpoint lastModifiedTime: any userInfo: UserInfo } @@ -55,4 +57,17 @@ export interface UserRecordOptions { sort?: SortOrderType offset?: number pageSize?: number + cleanUp?: boolean + cleanCacheIfExist?: boolean +} + +export interface MainPanelsState { + EMPLOYMENT: boolean + EDUCATION_AND_QUALIFICATION: boolean + INVITED_POSITION_AND_DISTINCTION: boolean + MEMBERSHIP_AND_SERVICE: boolean + FUNDING: boolean + PEER_REVIEW: boolean + RESEARCH_RESOURCE: boolean + WORK: boolean } diff --git a/src/app/types/userInfo.endpoint.ts b/src/app/types/userInfo.endpoint.ts index 58d3e03f81..bf3761f916 100644 --- a/src/app/types/userInfo.endpoint.ts +++ b/src/app/types/userInfo.endpoint.ts @@ -16,4 +16,5 @@ export interface UserInfo { SELF_SERVICE_MENU?: string RECORD_WITH_ISSUES: boolean USER_NOT_FOUND: boolean + DELEGATED_BY_ADMIN: 'true' | undefined } diff --git a/src/app/types/works.endpoint.ts b/src/app/types/works.endpoint.ts index 79ac18376a..0e8f99f31e 100644 --- a/src/app/types/works.endpoint.ts +++ b/src/app/types/works.endpoint.ts @@ -73,7 +73,7 @@ export enum WorkOtherOutputTypes { export const WorkCategoriesLabel = { [WorkCategories.conference]: $localize`:@@works.conference:Conference`, [WorkCategories.intellectual_property]: $localize`:@@works.intellectual:Intellectual property`, - [WorkCategories.other_output]: $localize`:@@works.other:Other output`, + [WorkCategories.other_output]: $localize`:@@works.other:Other`, [WorkCategories.publication]: $localize`:@@works.publication:Publication`, } @@ -105,7 +105,7 @@ export const WorkTypesLabels = { [WorkPublicationTypes.test]: $localize`:@@works.test:Test`, [WorkPublicationTypes.translation]: $localize`:@@works.translation:Translation`, [WorkPublicationTypes.website]: $localize`:@@works.website:Website`, - [WorkPublicationTypes.workingPaper]: $localize`:@@works.working paperAA:Working paper`, + [WorkPublicationTypes.workingPaper]: $localize`:@@works.working:Working paper`, }, [WorkCategories.intellectual_property]: { @@ -118,10 +118,10 @@ export const WorkTypesLabels = { [WorkCategories.other_output]: { [WorkOtherOutputTypes.annotation]: $localize`:@@works.annotation:Annotation`, [WorkOtherOutputTypes.artisticPerformance]: $localize`:@@works.artisticPerformance:Artistic performance`, - [WorkOtherOutputTypes.dataManagementPlan]: $localize`:@@works.AAA:Data management plan`, + [WorkOtherOutputTypes.dataManagementPlan]: $localize`:@@works.dataManagementPlan:Data management plan`, [WorkOtherOutputTypes.dataSet]: $localize`:@@works.plan:Data set`, [WorkOtherOutputTypes.invention]: $localize`:@@works.invention:Invention`, - [WorkOtherOutputTypes.lectureSpeech]: $localize`:@@works.speech:Lecture speech`, + [WorkOtherOutputTypes.lectureSpeech]: $localize`:@@works.speech:Lecture/speech`, [WorkOtherOutputTypes.physicalObject]: $localize`:@@works.object:Physical object`, [WorkOtherOutputTypes.researchTechnique]: $localize`:@@works.technique:Research technique`, [WorkOtherOutputTypes.software]: $localize`:@@works.software:software`, @@ -139,21 +139,23 @@ export enum WorksTitleName { journalTitle = 'journalTitle', magazineTitle = 'magazineTitle', newsletterTitle = 'newsletterTitle', + newspaperTitle = 'newspaperTitle', institution = 'institution', custodian = 'custodian', trademark = 'trademark', } export const WorksTitleNameLabel = { - [WorksTitleName.publisher]: $localize`:@@works.AAA:Publisher`, - [WorksTitleName.conferenceTitle]: $localize`:@@works.AAA:Conference title`, - [WorksTitleName.bookTitle]: $localize`:@@works.AAA:Book title`, - [WorksTitleName.journalTitle]: $localize`:@@works.AAA:Journal title`, - [WorksTitleName.magazineTitle]: $localize`:@@works.AAA:Magazine title`, - [WorksTitleName.newsletterTitle]: $localize`:@@works.AAA:Newsletter title`, - [WorksTitleName.institution]: $localize`:@@works.AAA:Institution`, - [WorksTitleName.custodian]: $localize`:@@works.AAA:Custodian`, - [WorksTitleName.trademark]: $localize`:@@works.AAA:Trademark`, + [WorksTitleName.publisher]: $localize`:@@works.publisher:Publisher`, + [WorksTitleName.conferenceTitle]: $localize`:@@works.conferenceTitle:Conference title`, + [WorksTitleName.bookTitle]: $localize`:@@works.bookTitle:Book title`, + [WorksTitleName.journalTitle]: $localize`:@@works.journalTitle:Journal title`, + [WorksTitleName.magazineTitle]: $localize`:@@works.magazineTitle:Magazine title`, + [WorksTitleName.newsletterTitle]: $localize`:@@works.newsletterTitle:Newsletter title`, + [WorksTitleName.newspaperTitle]: $localize`:@@works.newspaperTitle:Newspaper title`, + [WorksTitleName.institution]: $localize`:@@works.institution:Institution`, + [WorksTitleName.custodian]: $localize`:@@works.custodian:Custodian`, + [WorksTitleName.trademark]: $localize`:@@works.trademark:Trademark`, } export const WorkTypesTitle = { @@ -175,7 +177,7 @@ export const WorkTypesTitle = { [WorkPublicationTypes.magazineArticle]: WorksTitleName.magazineTitle, [WorkPublicationTypes.manual]: WorksTitleName.publisher, [WorkPublicationTypes.newsletterArticle]: WorksTitleName.newsletterTitle, - [WorkPublicationTypes.newspaperArticle]: WorksTitleName.newsletterTitle, + [WorkPublicationTypes.newspaperArticle]: WorksTitleName.newspaperTitle, [WorkPublicationTypes.onlineResource]: WorksTitleName.publisher, [WorkPublicationTypes.preprint]: WorksTitleName.journalTitle, [WorkPublicationTypes.report]: WorksTitleName.institution, @@ -185,7 +187,7 @@ export const WorkTypesTitle = { [WorkPublicationTypes.test]: WorksTitleName.institution, [WorkPublicationTypes.translation]: WorksTitleName.publisher, [WorkPublicationTypes.website]: WorksTitleName.publisher, - [WorkPublicationTypes.workingPaper]: WorksTitleName.publisher, + [WorkPublicationTypes.workingPaper]: WorksTitleName.institution, }, [WorkCategories.intellectual_property]: { @@ -194,7 +196,7 @@ export const WorkTypesTitle = { [WorkIntellectualPropertyTypes.patent]: WorksTitleName.publisher, [WorkIntellectualPropertyTypes.registeredCopyright]: WorksTitleName.publisher, - [WorkIntellectualPropertyTypes.trademark]: WorksTitleName.trademark, + [WorkIntellectualPropertyTypes.trademark]: WorksTitleName.journalTitle, }, [WorkCategories.other_output]: { [WorkOtherOutputTypes.annotation]: WorksTitleName.custodian, @@ -435,8 +437,8 @@ export interface WorkIdTypeValidation { export enum WorkRelationships { self = 'self', 'part-of' = 'part-of', - 'version-of' = 'version_of', - 'funded-by' = 'funded_by', + 'version-of' = 'version-of', + 'funded-by' = 'funded-by', } export const WorkRelationshipsLabels = { @@ -480,3 +482,14 @@ export interface Work { userSource: boolean checked: boolean } + +export interface Suggestion { + putCodes: number[] + orcid: string + putCodesAsString: string +} + +export interface GroupingSuggestions { + suggestions: Suggestion[] + moreAvailable: boolean +} diff --git a/src/assets/scripts/latexParse.js b/src/assets/scripts/latexParse.js new file mode 100644 index 0000000000..a5eeafb808 --- /dev/null +++ b/src/assets/scripts/latexParse.js @@ -0,0 +1,2614 @@ +;(function (exports) { + function LatexToUTF8() { + this.orcidCharLatexMap = {} + + this.orcidLatexCharMap = { + '\\`A': 'À', // begin grave + '\\`E': 'È', + '\\`I': 'Ì', + '\\`O': 'Ò', + '\\`U': 'Ù', + '\\`a': 'à', + '\\`e': 'è', + '\\`i': 'ì', + '\\`o': 'ò', + '\\`u': 'ù', + "\\'A": 'Á', // begin acute + "\\'E": 'É', + "\\'I": 'Í', + "\\'O": 'Ó', + "\\'U": 'Ú', + "\\'Y": 'Ý', + "\\'a": 'á', + "\\'e": 'é', + "\\'i": 'í', + "\\'o": 'ó', + "\\'u": 'ú', + "\\'y": 'ý', + '\\"A': 'Ä', // begin diaeresis + '\\r A': 'Å', + '\\"E': 'Ë', + '\\"I': 'Ï', + '\\"O': 'Ö', + '\\"U': 'Ü', + '\\"a': 'ä', + '\\r a': 'å', + '\\"e': 'ë', + '\\"i': 'ï', + '\\"o': 'ö', + '\\"u': 'ü', + '\\~A': 'Ã', // begin tilde + '\\~N': 'Ñ', + '\\~O': 'Õ', + '\\~a': 'ã', + '\\~n': 'ñ', + '\\~o': 'õ', + '\\rU': 'Ů', // begin ring above + '\\ru': 'ů', + '\\vC': 'Č', // begin caron + '\\vD': 'Ď', + '\\vE': 'Ě', + '\\vN': 'Ň', + '\\vR': 'Ř', + '\\vS': 'Š', + '\\vT': 'Ť', + '\\vZ': 'Ž', + '\\vc': 'č', + '\\vd': 'ď', + '\\ve': 'ě', + '\\vn': 'ň', + '\\vr': 'ř', + '\\vs': 'š', + '\\vt': 'ť', + '\\vz': 'ž', + '\\#': '#', // begin special symbols + '\\$': '$', + '\\%': '%', + '\\&': '&', + '\\\\': '\\', + '\\^': '^', + '\\_': '_', + '\\{': '{', + '\\}': '}', + '\\~': '~', + '\\"': '"', + "\\'": '’', // closing single quote + '\\`': '‘', // opening single quote + '\\AA': 'Å', // begin non-ASCII letters + '\\AE': 'Æ', + '\\c{C}': 'Ç', + '\\O': 'Ø', + '\\aa': 'å', + '\\c{c}': 'ç', + '\\ae': 'æ', + '\\o': 'ø', + '\\ss': 'ß', + '\\textcopyright': '©', + '\\textellipsis': '…', + '\\textemdash': '—', + '\\textendash': '–', + '\\textregistered': '®', + '\\texttrademark': '™', + '\\alpha': 'α', // begin greek alphabet + '\\beta': 'β', + '\\gamma': 'γ', + '\\delta': 'δ', + '\\epsilon': 'ε', + '\\zeta': 'ζ', + '\\eta': 'η', + '\\theta': 'θ', + '\\iota': 'ι', + '\\kappa': 'κ', + '\\lambda': 'λ', + '\\mu': 'μ', + '\\nu': 'ν', + '\\xi': 'ξ', + '\\omicron': 'ο', + '\\pi': 'π', + '\\rho': 'ρ', + '\\sigma': 'ς', + '\\tau': 'σ', + '\\upsilon': 'τ', + '\\phi': 'υ', + '\\chi': 'φ', + '\\psi': 'χ', + '\\omega': 'ψ', + '\\=A': 'Ā', + '\\=a': 'ā', + '\\u{A}': 'Ă', + '\\u{a}': 'ă', + '\\k A': 'Ą', + '\\k a': 'ą', + "\\'C": 'Ć', + "\\'c": 'ć', + '\\^C': 'Ĉ', + '\\^c': 'ĉ', + '\\.C': 'Ċ', + '\\.c': 'ċ', + '\\v{C}': 'Č', + '\\v{c}': 'č', + '\\v{D}': 'Ď', + '\\=E': 'Ē', + '\\=e': 'ē', + '\\u{E}': 'Ĕ', + '\\u{e}': 'ĕ', + '\\.E': 'Ė', + '\\.e': 'ė', + '\\k E': 'Ę', + '\\k e': 'ę', + '\\v{E}': 'Ě', + '\\v{e}': 'ě', + '\\^G': 'Ĝ', + '\\^g': 'ĝ', + '\\u{G}': 'Ğ', + '\\u{g}': 'ğ', + '\\.G': 'Ġ', + '\\.g': 'ġ', + '\\c{G}': 'Ģ', + '\\c{g}': 'ģ', + '\\^H': 'Ĥ', + '\\^h': 'ĥ', + '\\dH': 'Ħ', + '\\dh': 'ħ', + '\\~I': 'Ĩ', + '\\~i': 'ĩ', + '\\=I': 'Ī', + '\\=i': 'ī', + '\\u{I}': 'Ĭ', + '\\u{i}': 'ĭ', + '\\k I': 'Į', + '\\k i': 'į', + '\\.I': 'İ', + '\\^J': 'Ĵ', + '\\^j': 'ĵ', + '\\c{J}': 'Ķ', + '\\c{j}': 'ķ', + "\\'L": 'Ĺ', + "\\'l": 'ĺ', + '\\c{L}': 'Ļ', + '\\c{l}': 'ļ', + '\\v{L}': 'Ľ', + '\\v{l}': 'ľ', + '\\dL': 'Ł', + '\\dl': 'ł', + "\\'N": 'Ń', + "\\'n": 'ń', + '\\c{N}': 'Ņ', + '\\c{n}': 'ņ', + '\\v{N}': 'Ň', + '\\v{n}': 'ň', + '\\=O': 'Ō', + '\\=o': 'ō', + '\\u{O}': 'Ŏ', + '\\u{o}': 'ŏ', + '\\H{O}': 'Ő', + '\\H{o}': 'ő', + '\\OE': 'Œ', + '\\oe': 'œ', + "\\'R": 'Ŕ', + "\\'r": 'ŕ', + '\\c{R}': 'Ŗ', + '\\c{r}': 'ŗ', + '\\v{R}': 'Ř', + '\\v{r}': 'ř', + "\\'R": 'Ś', + "\\'r": 'ś', + '\\^S': 'Ŝ', + '\\^s': 'ŝ', + '\\c{S}': 'Ş', + '\\c{s}': 'ş', + '\\v{S}': 'Š', + '\\v{s}': 'š', + '\\c{T}': 'Ţ', + '\\c{t}': 'ţ', + '\\v{T}': 'Ť', + '\\v{t}': 'ť', + '\\dT': 'Ŧ', + '\\dt': 'ŧ', + '\\~U': 'Ũ', + '\\~u': 'ũ', + '\\=U': 'Ū', + '\\=u': 'ū', + '\\u{U}': 'Ŭ', + '\\u{u}': 'ŭ', + '\\r U': 'Ů', + '\\r u': 'ů', + '\\H{U}': 'Ű', + '\\H{u}': 'ű', + '\\k U': 'Ų', + '\\k u': 'ų', + '\\^W': 'Ŵ', + '\\^w': 'ŵ', + '\\^Y': 'Ŷ', + '\\^y': 'ŷ', + '\\"Y': 'Ÿ', + "\\'Z": 'Ź', + "\\'z": 'ź', + '\\.Z': 'Ż', + '\\.z': 'ż', + '\\v{Z}': 'Ž', + '\\v{z}': 'ž', + } + + this.w3cCharLatexMap = {} + + //Generated from http://www.w3.org/2003/entities/2007xml/unicode.xml + //Duplicate latex keys skipped (first choosen) + //Duplicate latex keys not starting with backwardslash (\) skipped + //Decimal Charcode with dashes (-) skipped + this.w3cLatexCharMap = { + '\\space': ' ', + '\\#': '#', + '\\textdollar': '$', + '\\%': '%', + '\\&': '&', + '\\textquotesingle': "'", + '\\ast': '*', + '\\textbackslash': '\\', + '\\^{}': '^', + '\\_': '_', + '\\textasciigrave': '`', + '\\lbrace': '{', + '\\vert': '|', + '\\rbrace': '}', + '\\textasciitilde': '~', + '\\textexclamdown': '¡', + '\\textcent': '¢', + '\\textsterling': '£', + '\\textcurrency': '¤', + '\\textyen': '¥', + '\\textbrokenbar': '¦', + '\\textsection': '§', + '\\textasciidieresis': '¨', + '\\textcopyright': '©', + '\\textordfeminine': 'ª', + '\\guillemotleft': '«', + '\\lnot': '¬', + '\\-': '­', + '\\textregistered': '®', + '\\textasciimacron': '¯', + '\\textdegree': '°', + '\\pm': '±', + '\\textasciiacute': '´', + '\\mathrm{\\mu}': 'µ', + '\\textparagraph': '¶', + '\\cdot': '·', + '\\c{}': '¸', + '\\textordmasculine': 'º', + '\\guillemotright': '»', + '\\textonequarter': '¼', + '\\textonehalf': '½', + '\\textthreequarters': '¾', + '\\textquestiondown': '¿', + '\\`{A}': 'À', + "\\'{A}": 'Á', + '\\^{A}': 'Â', + '\\~{A}': 'Ã', + '\\"{A}': 'Ä', + '\\AA': 'Å', + '\\AE': 'Æ', + '\\c{C}': 'Ç', + '\\`{E}': 'È', + "\\'{E}": 'É', + '\\^{E}': 'Ê', + '\\"{E}': 'Ë', + '\\`{I}': 'Ì', + "\\'{I}": 'Í', + '\\^{I}': 'Î', + '\\"{I}': 'Ï', + '\\DH': 'Ð', + '\\~{N}': 'Ñ', + '\\`{O}': 'Ò', + "\\'{O}": 'Ó', + '\\^{O}': 'Ô', + '\\~{O}': 'Õ', + '\\"{O}': 'Ö', + '\\texttimes': '×', + '\\O': 'Ø', + '\\`{U}': 'Ù', + "\\'{U}": 'Ú', + '\\^{U}': 'Û', + '\\"{U}': 'Ü', + "\\'{Y}": 'Ý', + '\\TH': 'Þ', + '\\ss': 'ß', + '\\`{a}': 'à', + "\\'{a}": 'á', + '\\^{a}': 'â', + '\\~{a}': 'ã', + '\\"{a}': 'ä', + '\\aa': 'å', + '\\ae': 'æ', + '\\c{c}': 'ç', + '\\`{e}': 'è', + "\\'{e}": 'é', + '\\^{e}': 'ê', + '\\"{e}': 'ë', + '\\`{\\i}': 'ì', + "\\'{\\i}": 'í', + '\\^{\\i}': 'î', + '\\"{\\i}': 'ï', + '\\dh': 'ð', + '\\~{n}': 'ñ', + '\\`{o}': 'ò', + "\\'{o}": 'ó', + '\\^{o}': 'ô', + '\\~{o}': 'õ', + '\\"{o}': 'ö', + '\\div': '÷', + '\\o': 'ø', + '\\`{u}': 'ù', + "\\'{u}": 'ú', + '\\^{u}': 'û', + '\\"{u}': 'ü', + "\\'{y}": 'ý', + '\\th': 'þ', + '\\"{y}': 'ÿ', + '\\={A}': 'Ā', + '\\={a}': 'ā', + '\\u{A}': 'Ă', + '\\u{a}': 'ă', + '\\k{A}': 'Ą', + '\\k{a}': 'ą', + "\\'{C}": 'Ć', + "\\'{c}": 'ć', + '\\^{C}': 'Ĉ', + '\\^{c}': 'ĉ', + '\\.{C}': 'Ċ', + '\\.{c}': 'ċ', + '\\v{C}': 'Č', + '\\v{c}': 'č', + '\\v{D}': 'Ď', + '\\v{d}': 'ď', + '\\DJ': 'Đ', + '\\dj': 'đ', + '\\={E}': 'Ē', + '\\={e}': 'ē', + '\\u{E}': 'Ĕ', + '\\u{e}': 'ĕ', + '\\.{E}': 'Ė', + '\\.{e}': 'ė', + '\\k{E}': 'Ę', + '\\k{e}': 'ę', + '\\v{E}': 'Ě', + '\\v{e}': 'ě', + '\\^{G}': 'Ĝ', + '\\^{g}': 'ĝ', + '\\u{G}': 'Ğ', + '\\u{g}': 'ğ', + '\\.{G}': 'Ġ', + '\\.{g}': 'ġ', + '\\c{G}': 'Ģ', + '\\c{g}': 'ģ', + '\\^{H}': 'Ĥ', + '\\^{h}': 'ĥ', + '\\Elzxh': 'ħ', + '\\~{I}': 'Ĩ', + '\\~{\\i}': 'ĩ', + '\\={I}': 'Ī', + '\\={\\i}': 'ī', + '\\u{I}': 'Ĭ', + '\\u{\\i}': 'ĭ', + '\\k{I}': 'Į', + '\\k{i}': 'į', + '\\.{I}': 'İ', + '\\i': 'ı', + '\\^{J}': 'Ĵ', + '\\^{\\j}': 'ĵ', + '\\c{K}': 'Ķ', + '\\c{k}': 'ķ', + "\\'{L}": 'Ĺ', + "\\'{l}": 'ĺ', + '\\c{L}': 'Ļ', + '\\c{l}': 'ļ', + '\\v{L}': 'Ľ', + '\\v{l}': 'ľ', + '\\L': 'Ł', + '\\l': 'ł', + "\\'{N}": 'Ń', + "\\'{n}": 'ń', + '\\c{N}': 'Ņ', + '\\c{n}': 'ņ', + '\\v{N}': 'Ň', + '\\v{n}': 'ň', + '\\NG': 'Ŋ', + '\\ng': 'ŋ', + '\\={O}': 'Ō', + '\\={o}': 'ō', + '\\u{O}': 'Ŏ', + '\\u{o}': 'ŏ', + '\\H{O}': 'Ő', + '\\H{o}': 'ő', + '\\OE': 'Œ', + '\\oe': 'œ', + "\\'{R}": 'Ŕ', + "\\'{r}": 'ŕ', + '\\c{R}': 'Ŗ', + '\\c{r}': 'ŗ', + '\\v{R}': 'Ř', + '\\v{r}': 'ř', + "\\'{S}": 'Ś', + "\\'{s}": 'ś', + '\\^{S}': 'Ŝ', + '\\^{s}': 'ŝ', + '\\c{S}': 'Ş', + '\\c{s}': 'ş', + '\\v{S}': 'Š', + '\\v{s}': 'š', + '\\c{T}': 'Ţ', + '\\c{t}': 'ţ', + '\\v{T}': 'Ť', + '\\v{t}': 'ť', + '\\~{U}': 'Ũ', + '\\~{u}': 'ũ', + '\\={U}': 'Ū', + '\\={u}': 'ū', + '\\u{U}': 'Ŭ', + '\\u{u}': 'ŭ', + '\\r{U}': 'Ů', + '\\r{u}': 'ů', + '\\H{U}': 'Ű', + '\\H{u}': 'ű', + '\\k{U}': 'Ų', + '\\k{u}': 'ų', + '\\^{W}': 'Ŵ', + '\\^{w}': 'ŵ', + '\\^{Y}': 'Ŷ', + '\\^{y}': 'ŷ', + '\\"{Y}': 'Ÿ', + "\\'{Z}": 'Ź', + "\\'{z}": 'ź', + '\\.{Z}': 'Ż', + '\\.{z}': 'ż', + '\\v{Z}': 'Ž', + '\\v{z}': 'ž', + '\\texthvlig': 'ƕ', + '\\textnrleg': 'ƞ', + '\\eth': 'ƪ', + '\\textdoublepipe': 'ǂ', + "\\'{g}": 'ǵ', + '\\Elztrna': 'ɐ', + '\\Elztrnsa': 'ɒ', + '\\Elzopeno': 'ɔ', + '\\Elzrtld': 'ɖ', + '\\Elzschwa': 'ə', + '\\varepsilon': 'ɛ', + '\\Elzpgamma': 'ɣ', + '\\Elzpbgam': 'ɤ', + '\\Elztrnh': 'ɥ', + '\\Elzbtdl': 'ɬ', + '\\Elzrtll': 'ɭ', + '\\Elztrnm': 'ɯ', + '\\Elztrnmlr': 'ɰ', + '\\Elzltlmr': 'ɱ', + '\\Elzltln': 'ɲ', + '\\Elzrtln': 'ɳ', + '\\Elzclomeg': 'ɷ', + '\\textphi': 'ɸ', + '\\Elztrnr': 'ɹ', + '\\Elztrnrl': 'ɺ', + '\\Elzrttrnr': 'ɻ', + '\\Elzrl': 'ɼ', + '\\Elzrtlr': 'ɽ', + '\\Elzfhr': 'ɾ', + '\\Elzrtls': 'ʂ', + '\\Elzesh': 'ʃ', + '\\Elztrnt': 'ʇ', + '\\Elzrtlt': 'ʈ', + '\\Elzpupsil': 'ʊ', + '\\Elzpscrv': 'ʋ', + '\\Elzinvv': 'ʌ', + '\\Elzinvw': 'ʍ', + '\\Elztrny': 'ʎ', + '\\Elzrtlz': 'ʐ', + '\\Elzyogh': 'ʒ', + '\\Elzglst': 'ʔ', + '\\Elzreglst': 'ʕ', + '\\Elzinglst': 'ʖ', + '\\textturnk': 'ʞ', + '\\Elzdyogh': 'ʤ', + '\\Elztesh': 'ʧ', + '\\textasciicaron': 'ˇ', + '\\Elzverts': 'ˈ', + '\\Elzverti': 'ˌ', + '\\Elzlmrk': 'ː', + '\\Elzhlmrk': 'ˑ', + '\\Elzsbrhr': '˒', + '\\Elzsblhr': '˓', + '\\Elzrais': '˔', + '\\Elzlow': '˕', + '\\textasciibreve': '˘', + '\\textperiodcentered': '˙', + '\\r{}': '˚', + '\\k{}': '˛', + '\\texttildelow': '˜', + '\\H{}': '˝', + '\\tone{55}': '˥', + '\\tone{44}': '˦', + '\\tone{33}': '˧', + '\\tone{22}': '˨', + '\\tone{11}': '˩', + '\\`': '̀', + "\\'": '́', + '\\^': '̂', + '\\~': '̃', + '\\=': '̄', + '\\u': '̆', + '\\.': '̇', + '\\"': '̈', + '\\r': '̊', + '\\H': '̋', + '\\v': '̌', + '\\cyrchar\\C': '̏', + '\\Elzpalh': '̡', + '\\Elzrh': '̢', + '\\c': '̧', + '\\k': '̨', + '\\Elzsbbrg': '̪', + '\\Elzxl': '̵', + '\\Elzbar': '̶', + "\\'{H}": 'Ή', + "\\'{}{I}": 'Ί', + "\\'{}O": 'Ό', + "\\mathrm{'Y}": 'Ύ', + "\\mathrm{'\\Omega}": 'Ώ', + '\\acute{\\ddot{\\iota}}': 'ΐ', + '\\Alpha': 'Α', + '\\Beta': 'Β', + '\\Gamma': 'Γ', + '\\Delta': 'Δ', + '\\Epsilon': 'Ε', + '\\Zeta': 'Ζ', + '\\Eta': 'Η', + '\\Theta': 'Θ', + '\\Iota': 'Ι', + '\\Kappa': 'Κ', + '\\Lambda': 'Λ', + '\\Xi': 'Ξ', + '\\Pi': 'Π', + '\\Rho': 'Ρ', + '\\Sigma': 'Σ', + '\\Tau': 'Τ', + '\\Upsilon': 'Υ', + '\\Phi': 'Φ', + '\\Chi': 'Χ', + '\\Psi': 'Ψ', + '\\Omega': 'Ω', + '\\mathrm{\\ddot{I}}': 'Ϊ', + '\\mathrm{\\ddot{Y}}': 'Ϋ', + "\\'{$\\alpha$}": 'ά', + '\\acute{\\epsilon}': 'έ', + '\\acute{\\eta}': 'ή', + '\\acute{\\iota}': 'ί', + '\\acute{\\ddot{\\upsilon}}': 'ΰ', + '\\alpha': 'α', + '\\beta': 'β', + '\\gamma': 'γ', + '\\delta': 'δ', + '\\epsilon': 'ε', + '\\zeta': 'ζ', + '\\eta': 'η', + '\\texttheta': 'θ', + '\\iota': 'ι', + '\\kappa': 'κ', + '\\lambda': 'λ', + '\\mu': 'μ', + '\\nu': 'ν', + '\\xi': 'ξ', + '\\pi': 'π', + '\\rho': 'ρ', + '\\varsigma': 'ς', + '\\sigma': 'σ', + '\\tau': 'τ', + '\\upsilon': 'υ', + '\\varphi': 'φ', + '\\chi': 'χ', + '\\psi': 'ψ', + '\\omega': 'ω', + '\\ddot{\\iota}': 'ϊ', + '\\ddot{\\upsilon}': 'ϋ', + '\\acute{\\upsilon}': 'ύ', + '\\acute{\\omega}': 'ώ', + '\\Pisymbol{ppi022}{87}': 'ϐ', + '\\textvartheta': 'ϑ', + '\\phi': 'ϕ', + '\\varpi': 'ϖ', + '\\Stigma': 'Ϛ', + '\\Digamma': 'Ϝ', + '\\digamma': 'ϝ', + '\\Koppa': 'Ϟ', + '\\Sampi': 'Ϡ', + '\\varkappa': 'ϰ', + '\\varrho': 'ϱ', + '\\textTheta': 'ϴ', + '\\backepsilon': '϶', + '\\cyrchar\\CYRYO': 'Ё', + '\\cyrchar\\CYRDJE': 'Ђ', + "\\cyrchar{\\'\\CYRG}": 'Ѓ', + '\\cyrchar\\CYRIE': 'Є', + '\\cyrchar\\CYRDZE': 'Ѕ', + '\\cyrchar\\CYRII': 'І', + '\\cyrchar\\CYRYI': 'Ї', + '\\cyrchar\\CYRJE': 'Ј', + '\\cyrchar\\CYRLJE': 'Љ', + '\\cyrchar\\CYRNJE': 'Њ', + '\\cyrchar\\CYRTSHE': 'Ћ', + "\\cyrchar{\\'\\CYRK}": 'Ќ', + '\\cyrchar\\CYRUSHRT': 'Ў', + '\\cyrchar\\CYRDZHE': 'Џ', + '\\cyrchar\\CYRA': 'А', + '\\cyrchar\\CYRB': 'Б', + '\\cyrchar\\CYRV': 'В', + '\\cyrchar\\CYRG': 'Г', + '\\cyrchar\\CYRD': 'Д', + '\\cyrchar\\CYRE': 'Е', + '\\cyrchar\\CYRZH': 'Ж', + '\\cyrchar\\CYRZ': 'З', + '\\cyrchar\\CYRI': 'И', + '\\cyrchar\\CYRISHRT': 'Й', + '\\cyrchar\\CYRK': 'К', + '\\cyrchar\\CYRL': 'Л', + '\\cyrchar\\CYRM': 'М', + '\\cyrchar\\CYRN': 'Н', + '\\cyrchar\\CYRO': 'О', + '\\cyrchar\\CYRP': 'П', + '\\cyrchar\\CYRR': 'Р', + '\\cyrchar\\CYRS': 'С', + '\\cyrchar\\CYRT': 'Т', + '\\cyrchar\\CYRU': 'У', + '\\cyrchar\\CYRF': 'Ф', + '\\cyrchar\\CYRH': 'Х', + '\\cyrchar\\CYRC': 'Ц', + '\\cyrchar\\CYRCH': 'Ч', + '\\cyrchar\\CYRSH': 'Ш', + '\\cyrchar\\CYRSHCH': 'Щ', + '\\cyrchar\\CYRHRDSN': 'Ъ', + '\\cyrchar\\CYRERY': 'Ы', + '\\cyrchar\\CYRSFTSN': 'Ь', + '\\cyrchar\\CYREREV': 'Э', + '\\cyrchar\\CYRYU': 'Ю', + '\\cyrchar\\CYRYA': 'Я', + '\\cyrchar\\cyra': 'а', + '\\cyrchar\\cyrb': 'б', + '\\cyrchar\\cyrv': 'в', + '\\cyrchar\\cyrg': 'г', + '\\cyrchar\\cyrd': 'д', + '\\cyrchar\\cyre': 'е', + '\\cyrchar\\cyrzh': 'ж', + '\\cyrchar\\cyrz': 'з', + '\\cyrchar\\cyri': 'и', + '\\cyrchar\\cyrishrt': 'й', + '\\cyrchar\\cyrk': 'к', + '\\cyrchar\\cyrl': 'л', + '\\cyrchar\\cyrm': 'м', + '\\cyrchar\\cyrn': 'н', + '\\cyrchar\\cyro': 'о', + '\\cyrchar\\cyrp': 'п', + '\\cyrchar\\cyrr': 'р', + '\\cyrchar\\cyrs': 'с', + '\\cyrchar\\cyrt': 'т', + '\\cyrchar\\cyru': 'у', + '\\cyrchar\\cyrf': 'ф', + '\\cyrchar\\cyrh': 'х', + '\\cyrchar\\cyrc': 'ц', + '\\cyrchar\\cyrch': 'ч', + '\\cyrchar\\cyrsh': 'ш', + '\\cyrchar\\cyrshch': 'щ', + '\\cyrchar\\cyrhrdsn': 'ъ', + '\\cyrchar\\cyrery': 'ы', + '\\cyrchar\\cyrsftsn': 'ь', + '\\cyrchar\\cyrerev': 'э', + '\\cyrchar\\cyryu': 'ю', + '\\cyrchar\\cyrya': 'я', + '\\cyrchar\\cyryo': 'ё', + '\\cyrchar\\cyrdje': 'ђ', + "\\cyrchar{\\'\\cyrg}": 'ѓ', + '\\cyrchar\\cyrie': 'є', + '\\cyrchar\\cyrdze': 'ѕ', + '\\cyrchar\\cyrii': 'і', + '\\cyrchar\\cyryi': 'ї', + '\\cyrchar\\cyrje': 'ј', + '\\cyrchar\\cyrlje': 'љ', + '\\cyrchar\\cyrnje': 'њ', + '\\cyrchar\\cyrtshe': 'ћ', + "\\cyrchar{\\'\\cyrk}": 'ќ', + '\\cyrchar\\cyrushrt': 'ў', + '\\cyrchar\\cyrdzhe': 'џ', + '\\cyrchar\\CYROMEGA': 'Ѡ', + '\\cyrchar\\cyromega': 'ѡ', + '\\cyrchar\\CYRYAT': 'Ѣ', + '\\cyrchar\\CYRIOTE': 'Ѥ', + '\\cyrchar\\cyriote': 'ѥ', + '\\cyrchar\\CYRLYUS': 'Ѧ', + '\\cyrchar\\cyrlyus': 'ѧ', + '\\cyrchar\\CYRIOTLYUS': 'Ѩ', + '\\cyrchar\\cyriotlyus': 'ѩ', + '\\cyrchar\\CYRBYUS': 'Ѫ', + '\\cyrchar\\CYRIOTBYUS': 'Ѭ', + '\\cyrchar\\cyriotbyus': 'ѭ', + '\\cyrchar\\CYRKSI': 'Ѯ', + '\\cyrchar\\cyrksi': 'ѯ', + '\\cyrchar\\CYRPSI': 'Ѱ', + '\\cyrchar\\cyrpsi': 'ѱ', + '\\cyrchar\\CYRFITA': 'Ѳ', + '\\cyrchar\\CYRIZH': 'Ѵ', + '\\cyrchar\\CYRUK': 'Ѹ', + '\\cyrchar\\cyruk': 'ѹ', + '\\cyrchar\\CYROMEGARND': 'Ѻ', + '\\cyrchar\\cyromegarnd': 'ѻ', + '\\cyrchar\\CYROMEGATITLO': 'Ѽ', + '\\cyrchar\\cyromegatitlo': 'ѽ', + '\\cyrchar\\CYROT': 'Ѿ', + '\\cyrchar\\cyrot': 'ѿ', + '\\cyrchar\\CYRKOPPA': 'Ҁ', + '\\cyrchar\\cyrkoppa': 'ҁ', + '\\cyrchar\\cyrthousands': '҂', + '\\cyrchar\\cyrhundredthousands': '҈', + '\\cyrchar\\cyrmillions': '҉', + '\\cyrchar\\CYRSEMISFTSN': 'Ҍ', + '\\cyrchar\\cyrsemisftsn': 'ҍ', + '\\cyrchar\\CYRRTICK': 'Ҏ', + '\\cyrchar\\cyrrtick': 'ҏ', + '\\cyrchar\\CYRGUP': 'Ґ', + '\\cyrchar\\cyrgup': 'ґ', + '\\cyrchar\\CYRGHCRS': 'Ғ', + '\\cyrchar\\cyrghcrs': 'ғ', + '\\cyrchar\\CYRGHK': 'Ҕ', + '\\cyrchar\\cyrghk': 'ҕ', + '\\cyrchar\\CYRZHDSC': 'Җ', + '\\cyrchar\\cyrzhdsc': 'җ', + '\\cyrchar\\CYRZDSC': 'Ҙ', + '\\cyrchar\\cyrzdsc': 'ҙ', + '\\cyrchar\\CYRKDSC': 'Қ', + '\\cyrchar\\cyrkdsc': 'қ', + '\\cyrchar\\CYRKVCRS': 'Ҝ', + '\\cyrchar\\cyrkvcrs': 'ҝ', + '\\cyrchar\\CYRKHCRS': 'Ҟ', + '\\cyrchar\\cyrkhcrs': 'ҟ', + '\\cyrchar\\CYRKBEAK': 'Ҡ', + '\\cyrchar\\cyrkbeak': 'ҡ', + '\\cyrchar\\CYRNDSC': 'Ң', + '\\cyrchar\\cyrndsc': 'ң', + '\\cyrchar\\CYRNG': 'Ҥ', + '\\cyrchar\\cyrng': 'ҥ', + '\\cyrchar\\CYRPHK': 'Ҧ', + '\\cyrchar\\cyrphk': 'ҧ', + '\\cyrchar\\CYRABHHA': 'Ҩ', + '\\cyrchar\\cyrabhha': 'ҩ', + '\\cyrchar\\CYRSDSC': 'Ҫ', + '\\cyrchar\\cyrsdsc': 'ҫ', + '\\cyrchar\\CYRTDSC': 'Ҭ', + '\\cyrchar\\cyrtdsc': 'ҭ', + '\\cyrchar\\CYRY': 'Ү', + '\\cyrchar\\cyry': 'ү', + '\\cyrchar\\CYRYHCRS': 'Ұ', + '\\cyrchar\\cyryhcrs': 'ұ', + '\\cyrchar\\CYRHDSC': 'Ҳ', + '\\cyrchar\\cyrhdsc': 'ҳ', + '\\cyrchar\\CYRTETSE': 'Ҵ', + '\\cyrchar\\cyrtetse': 'ҵ', + '\\cyrchar\\CYRCHRDSC': 'Ҷ', + '\\cyrchar\\cyrchrdsc': 'ҷ', + '\\cyrchar\\CYRCHVCRS': 'Ҹ', + '\\cyrchar\\cyrchvcrs': 'ҹ', + '\\cyrchar\\CYRSHHA': 'Һ', + '\\cyrchar\\cyrshha': 'һ', + '\\cyrchar\\CYRABHCH': 'Ҽ', + '\\cyrchar\\cyrabhch': 'ҽ', + '\\cyrchar\\CYRABHCHDSC': 'Ҿ', + '\\cyrchar\\cyrabhchdsc': 'ҿ', + '\\cyrchar\\CYRpalochka': 'Ӏ', + '\\cyrchar\\CYRKHK': 'Ӄ', + '\\cyrchar\\cyrkhk': 'ӄ', + '\\cyrchar\\CYRNHK': 'Ӈ', + '\\cyrchar\\cyrnhk': 'ӈ', + '\\cyrchar\\CYRCHLDSC': 'Ӌ', + '\\cyrchar\\cyrchldsc': 'ӌ', + '\\cyrchar\\CYRAE': 'Ӕ', + '\\cyrchar\\cyrae': 'ӕ', + '\\cyrchar\\CYRSCHWA': 'Ә', + '\\cyrchar\\cyrschwa': 'ә', + '\\cyrchar\\CYRABHDZE': 'Ӡ', + '\\cyrchar\\cyrabhdze': 'ӡ', + '\\cyrchar\\CYROTLD': 'Ө', + '\\cyrchar\\cyrotld': 'ө', + '\\hspace{0.6em}': ' ', + '\\hspace{1em}': ' ', + '\\hspace{0.33em}': ' ', + '\\hspace{0.25em}': ' ', + '\\hspace{0.166em}': ' ', + '\\hphantom{0}': ' ', + '\\hphantom{,}': ' ', + '\\hspace{0.167em}': ' ', + '\\mkern1mu': ' ', + '\\textendash': '–', + '\\textemdash': '—', + '\\rule{1em}{1pt}': '―', + '\\Vert': '‖', + '\\Elzreapos': '‛', + '\\textquotedblleft': '“', + '\\textquotedblright': '”', + '\\textdagger': '†', + '\\textdaggerdbl': '‡', + '\\textbullet': '•', + '\\ldots': '…', + '\\textperthousand': '‰', + '\\textpertenthousand': '‱', + '\\backprime': '‵', + '\\guilsinglleft': '‹', + '\\guilsinglright': '›', + '\\mkern4mu': ' ', + '\\nolinebreak': '⁠', + '\\ensuremath{\\Elzpes}': '₧', + '\\mbox{\\texteuro}': '€', + '\\dddot': '⃛', + '\\ddddot': '⃜', + '\\mathbb{C}': 'ℂ', + '\\mathscr{g}': 'ℊ', + '\\mathscr{H}': 'ℋ', + '\\mathfrak{H}': 'ℌ', + '\\mathbb{H}': 'ℍ', + '\\hslash': 'ℏ', + '\\mathscr{I}': 'ℐ', + '\\mathfrak{I}': 'ℑ', + '\\mathscr{L}': 'ℒ', + '\\mathscr{l}': 'ℓ', + '\\mathbb{N}': 'ℕ', + '\\cyrchar\\textnumero': '№', + '\\wp': '℘', + '\\mathbb{P}': 'ℙ', + '\\mathbb{Q}': 'ℚ', + '\\mathscr{R}': 'ℛ', + '\\mathfrak{R}': 'ℜ', + '\\mathbb{R}': 'ℝ', + '\\Elzxrat': '℞', + '\\texttrademark': '™', + '\\mathbb{Z}': 'ℤ', + '\\mho': '℧', + '\\mathfrak{Z}': 'ℨ', + '\\ElsevierGlyph{2129}': '℩', + '\\mathscr{B}': 'ℬ', + '\\mathfrak{C}': 'ℭ', + '\\mathscr{e}': 'ℯ', + '\\mathscr{E}': 'ℰ', + '\\mathscr{F}': 'ℱ', + '\\mathscr{M}': 'ℳ', + '\\mathscr{o}': 'ℴ', + '\\aleph': 'ℵ', + '\\beth': 'ℶ', + '\\gimel': 'ℷ', + '\\daleth': 'ℸ', + '\\textfrac{1}{3}': '⅓', + '\\textfrac{2}{3}': '⅔', + '\\textfrac{1}{5}': '⅕', + '\\textfrac{2}{5}': '⅖', + '\\textfrac{3}{5}': '⅗', + '\\textfrac{4}{5}': '⅘', + '\\textfrac{1}{6}': '⅙', + '\\textfrac{5}{6}': '⅚', + '\\textfrac{1}{8}': '⅛', + '\\textfrac{3}{8}': '⅜', + '\\textfrac{5}{8}': '⅝', + '\\textfrac{7}{8}': '⅞', + '\\leftarrow': '←', + '\\uparrow': '↑', + '\\rightarrow': '→', + '\\downarrow': '↓', + '\\leftrightarrow': '↔', + '\\updownarrow': '↕', + '\\nwarrow': '↖', + '\\nearrow': '↗', + '\\searrow': '↘', + '\\swarrow': '↙', + '\\nleftarrow': '↚', + '\\nrightarrow': '↛', + '\\arrowwaveleft': '↜', + '\\arrowwaveright': '↝', + '\\twoheadleftarrow': '↞', + '\\twoheadrightarrow': '↠', + '\\leftarrowtail': '↢', + '\\rightarrowtail': '↣', + '\\mapsto': '↦', + '\\hookleftarrow': '↩', + '\\hookrightarrow': '↪', + '\\looparrowleft': '↫', + '\\looparrowright': '↬', + '\\leftrightsquigarrow': '↭', + '\\nleftrightarrow': '↮', + '\\Lsh': '↰', + '\\Rsh': '↱', + '\\ElsevierGlyph{21B3}': '↳', + '\\curvearrowleft': '↶', + '\\curvearrowright': '↷', + '\\circlearrowleft': '↺', + '\\circlearrowright': '↻', + '\\leftharpoonup': '↼', + '\\leftharpoondown': '↽', + '\\upharpoonright': '↾', + '\\upharpoonleft': '↿', + '\\rightharpoonup': '⇀', + '\\rightharpoondown': '⇁', + '\\downharpoonright': '⇂', + '\\downharpoonleft': '⇃', + '\\rightleftarrows': '⇄', + '\\dblarrowupdown': '⇅', + '\\leftrightarrows': '⇆', + '\\leftleftarrows': '⇇', + '\\upuparrows': '⇈', + '\\rightrightarrows': '⇉', + '\\downdownarrows': '⇊', + '\\leftrightharpoons': '⇋', + '\\rightleftharpoons': '⇌', + '\\nLeftarrow': '⇍', + '\\nLeftrightarrow': '⇎', + '\\nRightarrow': '⇏', + '\\Leftarrow': '⇐', + '\\Uparrow': '⇑', + '\\Rightarrow': '⇒', + '\\Downarrow': '⇓', + '\\Leftrightarrow': '⇔', + '\\Updownarrow': '⇕', + '\\Lleftarrow': '⇚', + '\\Rrightarrow': '⇛', + '\\rightsquigarrow': '⇝', + '\\DownArrowUpArrow': '⇵', + '\\forall': '∀', + '\\complement': '∁', + '\\partial': '∂', + '\\exists': '∃', + '\\nexists': '∄', + '\\varnothing': '∅', + '\\nabla': '∇', + '\\in': '∈', + '\\not\\in': '∉', + '\\ni': '∋', + '\\not\\ni': '∌', + '\\prod': '∏', + '\\coprod': '∐', + '\\sum': '∑', + '\\mp': '∓', + '\\dotplus': '∔', + '\\setminus': '∖', + '\\circ': '∘', + '\\bullet': '∙', + '\\surd': '√', + '\\propto': '∝', + '\\infty': '∞', + '\\rightangle': '∟', + '\\angle': '∠', + '\\measuredangle': '∡', + '\\sphericalangle': '∢', + '\\mid': '∣', + '\\nmid': '∤', + '\\parallel': '∥', + '\\nparallel': '∦', + '\\wedge': '∧', + '\\vee': '∨', + '\\cap': '∩', + '\\cup': '∪', + '\\int': '∫', + '\\int\\!\\int': '∬', + '\\int\\!\\int\\!\\int': '∭', + '\\oint': '∮', + '\\surfintegral': '∯', + '\\volintegral': '∰', + '\\clwintegral': '∱', + '\\ElsevierGlyph{2232}': '∲', + '\\ElsevierGlyph{2233}': '∳', + '\\therefore': '∴', + '\\because': '∵', + '\\Colon': '∷', + '\\ElsevierGlyph{2238}': '∸', + '\\mathbin{{:}\\!\\!{-}\\!\\!{:}}': '∺', + '\\homothetic': '∻', + '\\sim': '∼', + '\\backsim': '∽', + '\\lazysinv': '∾', + '\\wr': '≀', + '\\not\\sim': '≁', + '\\ElsevierGlyph{2242}': '≂', + '\\simeq': '≃', + '\\not\\simeq': '≄', + '\\cong': '≅', + '\\approxnotequal': '≆', + '\\not\\cong': '≇', + '\\approx': '≈', + '\\not\\approx': '≉', + '\\approxeq': '≊', + '\\tildetrpl': '≋', + '\\allequal': '≌', + '\\asymp': '≍', + '\\Bumpeq': '≎', + '\\bumpeq': '≏', + '\\doteq': '≐', + '\\doteqdot': '≑', + '\\fallingdotseq': '≒', + '\\risingdotseq': '≓', + '\\eqcirc': '≖', + '\\circeq': '≗', + '\\estimates': '≙', + '\\ElsevierGlyph{225A}': '≚', + '\\starequal': '≛', + '\\triangleq': '≜', + '\\ElsevierGlyph{225F}': '≟', + '\\not =': '≠', + '\\equiv': '≡', + '\\not\\equiv': '≢', + '\\leq': '≤', + '\\geq': '≥', + '\\leqq': '≦', + '\\geqq': '≧', + '\\lneqq': '≨', + '\\gneqq': '≩', + '\\ll': '≪', + '\\gg': '≫', + '\\between': '≬', + '\\not\\kern-0.3em\\times': '≭', + '\\not<': '≮', + '\\not>': '≯', + '\\not\\leq': '≰', + '\\not\\geq': '≱', + '\\lessequivlnt': '≲', + '\\greaterequivlnt': '≳', + '\\ElsevierGlyph{2274}': '≴', + '\\ElsevierGlyph{2275}': '≵', + '\\lessgtr': '≶', + '\\gtrless': '≷', + '\\notlessgreater': '≸', + '\\notgreaterless': '≹', + '\\prec': '≺', + '\\succ': '≻', + '\\preccurlyeq': '≼', + '\\succcurlyeq': '≽', + '\\precapprox': '≾', + '\\succapprox': '≿', + '\\not\\prec': '⊀', + '\\not\\succ': '⊁', + '\\subset': '⊂', + '\\supset': '⊃', + '\\not\\subset': '⊄', + '\\not\\supset': '⊅', + '\\subseteq': '⊆', + '\\supseteq': '⊇', + '\\not\\subseteq': '⊈', + '\\not\\supseteq': '⊉', + '\\subsetneq': '⊊', + '\\supsetneq': '⊋', + '\\uplus': '⊎', + '\\sqsubset': '⊏', + '\\sqsupset': '⊐', + '\\sqsubseteq': '⊑', + '\\sqsupseteq': '⊒', + '\\sqcap': '⊓', + '\\sqcup': '⊔', + '\\oplus': '⊕', + '\\ominus': '⊖', + '\\otimes': '⊗', + '\\oslash': '⊘', + '\\odot': '⊙', + '\\circledcirc': '⊚', + '\\circledast': '⊛', + '\\circleddash': '⊝', + '\\boxplus': '⊞', + '\\boxminus': '⊟', + '\\boxtimes': '⊠', + '\\boxdot': '⊡', + '\\vdash': '⊢', + '\\dashv': '⊣', + '\\top': '⊤', + '\\perp': '⊥', + '\\truestate': '⊧', + '\\forcesextra': '⊨', + '\\Vdash': '⊩', + '\\Vvdash': '⊪', + '\\VDash': '⊫', + '\\nvdash': '⊬', + '\\nvDash': '⊭', + '\\nVdash': '⊮', + '\\nVDash': '⊯', + '\\vartriangleleft': '⊲', + '\\vartriangleright': '⊳', + '\\trianglelefteq': '⊴', + '\\trianglerighteq': '⊵', + '\\original': '⊶', + '\\image': '⊷', + '\\multimap': '⊸', + '\\hermitconjmatrix': '⊹', + '\\intercal': '⊺', + '\\veebar': '⊻', + '\\rightanglearc': '⊾', + '\\ElsevierGlyph{22C0}': '⋀', + '\\ElsevierGlyph{22C1}': '⋁', + '\\bigcap': '⋂', + '\\bigcup': '⋃', + '\\diamond': '⋄', + '\\star': '⋆', + '\\divideontimes': '⋇', + '\\bowtie': '⋈', + '\\ltimes': '⋉', + '\\rtimes': '⋊', + '\\leftthreetimes': '⋋', + '\\rightthreetimes': '⋌', + '\\backsimeq': '⋍', + '\\curlyvee': '⋎', + '\\curlywedge': '⋏', + '\\Subset': '⋐', + '\\Supset': '⋑', + '\\Cap': '⋒', + '\\Cup': '⋓', + '\\pitchfork': '⋔', + '\\lessdot': '⋖', + '\\gtrdot': '⋗', + '\\verymuchless': '⋘', + '\\verymuchgreater': '⋙', + '\\lesseqgtr': '⋚', + '\\gtreqless': '⋛', + '\\curlyeqprec': '⋞', + '\\curlyeqsucc': '⋟', + '\\not\\sqsubseteq': '⋢', + '\\not\\sqsupseteq': '⋣', + '\\Elzsqspne': '⋥', + '\\lnsim': '⋦', + '\\gnsim': '⋧', + '\\precedesnotsimilar': '⋨', + '\\succnsim': '⋩', + '\\ntriangleleft': '⋪', + '\\ntriangleright': '⋫', + '\\ntrianglelefteq': '⋬', + '\\ntrianglerighteq': '⋭', + '\\vdots': '⋮', + '\\cdots': '⋯', + '\\upslopeellipsis': '⋰', + '\\downslopeellipsis': '⋱', + '\\barwedge': '⌅', + '\\varperspcorrespond': '⌆', + '\\lceil': '⌈', + '\\rceil': '⌉', + '\\lfloor': '⌊', + '\\rfloor': '⌋', + '\\recorder': '⌕', + '\\mathchar"2208': '⌖', + '\\ulcorner': '⌜', + '\\urcorner': '⌝', + '\\llcorner': '⌞', + '\\lrcorner': '⌟', + '\\frown': '⌢', + '\\smile': '⌣', + '\\ElsevierGlyph{E838}': '⌽', + '\\Elzdlcorn': '⎣', + '\\lmoustache': '⎰', + '\\rmoustache': '⎱', + '\\textvisiblespace': '␣', + '\\ding{172}': '①', + '\\ding{173}': '②', + '\\ding{174}': '③', + '\\ding{175}': '④', + '\\ding{176}': '⑤', + '\\ding{177}': '⑥', + '\\ding{178}': '⑦', + '\\ding{179}': '⑧', + '\\ding{180}': '⑨', + '\\ding{181}': '⑩', + '\\circledS': 'Ⓢ', + '\\Elzdshfnc': '┆', + '\\Elzsqfnw': '┙', + '\\diagup': '╱', + '\\ding{110}': '■', + '\\square': '□', + '\\blacksquare': '▪', + '\\fbox{~~}': '▭', + '\\Elzvrecto': '▯', + '\\ElsevierGlyph{E381}': '▱', + '\\ding{115}': '▲', + '\\bigtriangleup': '△', + '\\blacktriangle': '▴', + '\\vartriangle': '▵', + '\\blacktriangleright': '▸', + '\\triangleright': '▹', + '\\ding{116}': '▼', + '\\bigtriangledown': '▽', + '\\blacktriangledown': '▾', + '\\triangledown': '▿', + '\\blacktriangleleft': '◂', + '\\triangleleft': '◃', + '\\ding{117}': '◆', + '\\lozenge': '◊', + '\\bigcirc': '○', + '\\ding{108}': '●', + '\\Elzcirfl': '◐', + '\\Elzcirfr': '◑', + '\\Elzcirfb': '◒', + '\\ding{119}': '◗', + '\\Elzrvbull': '◘', + '\\Elzsqfl': '◧', + '\\Elzsqfr': '◨', + '\\Elzsqfse': '◪', + '\\ding{72}': '★', + '\\ding{73}': '☆', + '\\ding{37}': '☎', + '\\ding{42}': '☛', + '\\ding{43}': '☞', + '\\rightmoon': '☾', + '\\mercury': '☿', + '\\venus': '♀', + '\\male': '♂', + '\\jupiter': '♃', + '\\saturn': '♄', + '\\uranus': '♅', + '\\neptune': '♆', + '\\pluto': '♇', + '\\aries': '♈', + '\\taurus': '♉', + '\\gemini': '♊', + '\\cancer': '♋', + '\\leo': '♌', + '\\virgo': '♍', + '\\libra': '♎', + '\\scorpio': '♏', + '\\sagittarius': '♐', + '\\capricornus': '♑', + '\\aquarius': '♒', + '\\pisces': '♓', + '\\ding{171}': '♠', + '\\ding{168}': '♣', + '\\ding{170}': '♥', + '\\ding{169}': '♦', + '\\quarternote': '♩', + '\\eighthnote': '♪', + '\\flat': '♭', + '\\natural': '♮', + '\\sharp': '♯', + '\\ding{33}': '✁', + '\\ding{34}': '✂', + '\\ding{35}': '✃', + '\\ding{36}': '✄', + '\\ding{38}': '✆', + '\\ding{39}': '✇', + '\\ding{40}': '✈', + '\\ding{41}': '✉', + '\\ding{44}': '✌', + '\\ding{45}': '✍', + '\\ding{46}': '✎', + '\\ding{47}': '✏', + '\\ding{48}': '✐', + '\\ding{49}': '✑', + '\\ding{50}': '✒', + '\\ding{51}': '✓', + '\\ding{52}': '✔', + '\\ding{53}': '✕', + '\\ding{54}': '✖', + '\\ding{55}': '✗', + '\\ding{56}': '✘', + '\\ding{57}': '✙', + '\\ding{58}': '✚', + '\\ding{59}': '✛', + '\\ding{60}': '✜', + '\\ding{61}': '✝', + '\\ding{62}': '✞', + '\\ding{63}': '✟', + '\\ding{64}': '✠', + '\\ding{65}': '✡', + '\\ding{66}': '✢', + '\\ding{67}': '✣', + '\\ding{68}': '✤', + '\\ding{69}': '✥', + '\\ding{70}': '✦', + '\\ding{71}': '✧', + '\\ding{74}': '✪', + '\\ding{75}': '✫', + '\\ding{76}': '✬', + '\\ding{77}': '✭', + '\\ding{78}': '✮', + '\\ding{79}': '✯', + '\\ding{80}': '✰', + '\\ding{81}': '✱', + '\\ding{82}': '✲', + '\\ding{83}': '✳', + '\\ding{84}': '✴', + '\\ding{85}': '✵', + '\\ding{86}': '✶', + '\\ding{87}': '✷', + '\\ding{88}': '✸', + '\\ding{89}': '✹', + '\\ding{90}': '✺', + '\\ding{91}': '✻', + '\\ding{92}': '✼', + '\\ding{93}': '✽', + '\\ding{94}': '✾', + '\\ding{95}': '✿', + '\\ding{96}': '❀', + '\\ding{97}': '❁', + '\\ding{98}': '❂', + '\\ding{99}': '❃', + '\\ding{100}': '❄', + '\\ding{101}': '❅', + '\\ding{102}': '❆', + '\\ding{103}': '❇', + '\\ding{104}': '❈', + '\\ding{105}': '❉', + '\\ding{106}': '❊', + '\\ding{107}': '❋', + '\\ding{109}': '❍', + '\\ding{111}': '❏', + '\\ding{112}': '❐', + '\\ding{113}': '❑', + '\\ding{114}': '❒', + '\\ding{118}': '❖', + '\\ding{120}': '❘', + '\\ding{121}': '❙', + '\\ding{122}': '❚', + '\\ding{123}': '❛', + '\\ding{124}': '❜', + '\\ding{125}': '❝', + '\\ding{126}': '❞', + '\\ding{161}': '❡', + '\\ding{162}': '❢', + '\\ding{163}': '❣', + '\\ding{164}': '❤', + '\\ding{165}': '❥', + '\\ding{166}': '❦', + '\\ding{167}': '❧', + '\\ding{182}': '❶', + '\\ding{183}': '❷', + '\\ding{184}': '❸', + '\\ding{185}': '❹', + '\\ding{186}': '❺', + '\\ding{187}': '❻', + '\\ding{188}': '❼', + '\\ding{189}': '❽', + '\\ding{190}': '❾', + '\\ding{191}': '❿', + '\\ding{192}': '➀', + '\\ding{193}': '➁', + '\\ding{194}': '➂', + '\\ding{195}': '➃', + '\\ding{196}': '➄', + '\\ding{197}': '➅', + '\\ding{198}': '➆', + '\\ding{199}': '➇', + '\\ding{200}': '➈', + '\\ding{201}': '➉', + '\\ding{202}': '➊', + '\\ding{203}': '➋', + '\\ding{204}': '➌', + '\\ding{205}': '➍', + '\\ding{206}': '➎', + '\\ding{207}': '➏', + '\\ding{208}': '➐', + '\\ding{209}': '➑', + '\\ding{210}': '➒', + '\\ding{211}': '➓', + '\\ding{212}': '➔', + '\\ding{216}': '➘', + '\\ding{217}': '➙', + '\\ding{218}': '➚', + '\\ding{219}': '➛', + '\\ding{220}': '➜', + '\\ding{221}': '➝', + '\\ding{222}': '➞', + '\\ding{223}': '➟', + '\\ding{224}': '➠', + '\\ding{225}': '➡', + '\\ding{226}': '➢', + '\\ding{227}': '➣', + '\\ding{228}': '➤', + '\\ding{229}': '➥', + '\\ding{230}': '➦', + '\\ding{231}': '➧', + '\\ding{232}': '➨', + '\\ding{233}': '➩', + '\\ding{234}': '➪', + '\\ding{235}': '➫', + '\\ding{236}': '➬', + '\\ding{237}': '➭', + '\\ding{238}': '➮', + '\\ding{239}': '➯', + '\\ding{241}': '➱', + '\\ding{242}': '➲', + '\\ding{243}': '➳', + '\\ding{244}': '➴', + '\\ding{245}': '➵', + '\\ding{246}': '➶', + '\\ding{247}': '➷', + '\\ding{248}': '➸', + '\\ding{249}': '➹', + '\\ding{250}': '➺', + '\\ding{251}': '➻', + '\\ding{252}': '➼', + '\\ding{253}': '➽', + '\\ding{254}': '➾', + '\\langle': '⟨', + '\\rangle': '⟩', + '\\longleftarrow': '⟵', + '\\longrightarrow': '⟶', + '\\longleftrightarrow': '⟷', + '\\Longleftarrow': '⟸', + '\\Longrightarrow': '⟹', + '\\Longleftrightarrow': '⟺', + '\\longmapsto': '⟼', + '\\sim\\joinrel\\leadsto': '⟿', + '\\ElsevierGlyph{E212}': '⤅', + '\\UpArrowBar': '⤒', + '\\DownArrowBar': '⤓', + '\\ElsevierGlyph{E20C}': '⤣', + '\\ElsevierGlyph{E20D}': '⤤', + '\\ElsevierGlyph{E20B}': '⤥', + '\\ElsevierGlyph{E20A}': '⤦', + '\\ElsevierGlyph{E211}': '⤧', + '\\ElsevierGlyph{E20E}': '⤨', + '\\ElsevierGlyph{E20F}': '⤩', + '\\ElsevierGlyph{E210}': '⤪', + '\\ElsevierGlyph{E21C}': '⤳', + '\\ElsevierGlyph{E21A}': '⤶', + '\\ElsevierGlyph{E219}': '⤷', + '\\Elolarr': '⥀', + '\\Elorarr': '⥁', + '\\ElzRlarr': '⥂', + '\\ElzrLarr': '⥄', + '\\Elzrarrx': '⥇', + '\\LeftRightVector': '⥎', + '\\RightUpDownVector': '⥏', + '\\DownLeftRightVector': '⥐', + '\\LeftUpDownVector': '⥑', + '\\LeftVectorBar': '⥒', + '\\RightVectorBar': '⥓', + '\\RightUpVectorBar': '⥔', + '\\RightDownVectorBar': '⥕', + '\\DownLeftVectorBar': '⥖', + '\\DownRightVectorBar': '⥗', + '\\LeftUpVectorBar': '⥘', + '\\LeftDownVectorBar': '⥙', + '\\LeftTeeVector': '⥚', + '\\RightTeeVector': '⥛', + '\\RightUpTeeVector': '⥜', + '\\RightDownTeeVector': '⥝', + '\\DownLeftTeeVector': '⥞', + '\\DownRightTeeVector': '⥟', + '\\LeftUpTeeVector': '⥠', + '\\LeftDownTeeVector': '⥡', + '\\UpEquilibrium': '⥮', + '\\ReverseUpEquilibrium': '⥯', + '\\RoundImplies': '⥰', + '\\ElsevierGlyph{E214}': '⥼', + '\\ElsevierGlyph{E215}': '⥽', + '\\Elztfnc': '⦀', + '\\ElsevierGlyph{3018}': '⦅', + '\\Elroang': '⦆', + '\\ElsevierGlyph{E291}': '⦔', + '\\Elzddfnc': '⦙', + '\\Angle': '⦜', + '\\Elzlpargt': '⦠', + '\\ElsevierGlyph{E260}': '⦵', + '\\ElsevierGlyph{E61B}': '⦶', + '\\ElzLap': '⧊', + '\\Elzdefas': '⧋', + '\\LeftTriangleBar': '⧏', + '\\RightTriangleBar': '⧐', + '\\ElsevierGlyph{E372}': '⧜', + '\\blacklozenge': '⧫', + '\\RuleDelayed': '⧴', + '\\Elxuplus': '⨄', + '\\ElzThr': '⨅', + '\\Elxsqcup': '⨆', + '\\ElzInf': '⨇', + '\\ElzSup': '⨈', + '\\ElzCint': '⨍', + '\\clockoint': '⨏', + '\\ElsevierGlyph{E395}': '⨐', + '\\sqrint': '⨖', + '\\ElsevierGlyph{E25A}': '⨥', + '\\ElsevierGlyph{E25B}': '⨪', + '\\ElsevierGlyph{E25C}': '⨭', + '\\ElsevierGlyph{E25D}': '⨮', + '\\ElzTimes': '⨯', + '\\ElsevierGlyph{E25E}': '⨴', + '\\ElsevierGlyph{E259}': '⨼', + '\\amalg': '⨿', + '\\ElzAnd': '⩓', + '\\ElzOr': '⩔', + '\\ElsevierGlyph{E36E}': '⩕', + '\\ElOr': '⩖', + '\\perspcorrespond': '⩞', + '\\Elzminhat': '⩟', + '\\stackrel{*}{=}': '⩮', + '\\Equal': '⩵', + '\\leqslant': '⩽', + '\\geqslant': '⩾', + '\\lessapprox': '⪅', + '\\gtrapprox': '⪆', + '\\lneq': '⪇', + '\\gneq': '⪈', + '\\lnapprox': '⪉', + '\\gnapprox': '⪊', + '\\lesseqqgtr': '⪋', + '\\gtreqqless': '⪌', + '\\eqslantless': '⪕', + '\\eqslantgtr': '⪖', + '\\Pisymbol{ppi020}{117}': '⪝', + '\\Pisymbol{ppi020}{105}': '⪞', + '\\NestedLessLess': '⪡', + '\\NestedGreaterGreater': '⪢', + '\\preceq': '⪯', + '\\succeq': '⪰', + '\\precneqq': '⪵', + '\\succneqq': '⪶', + '\\precnapprox': '⪹', + '\\succnapprox': '⪺', + '\\subseteqq': '⫅', + '\\supseteqq': '⫆', + '\\subsetneqq': '⫋', + '\\supsetneqq': '⫌', + '\\ElsevierGlyph{E30D}': '⫫', + '\\Elztdcol': '⫶', + '\\ElsevierGlyph{300A}': '《', + '\\ElsevierGlyph{300B}': '》', + '\\ElsevierGlyph{3019}': '〙', + '\\openbracketleft': '〚', + '\\openbracketright': '〛', + '\\mathbf{A}': '𝐀', + '\\mathbf{B}': '𝐁', + '\\mathbf{C}': '𝐂', + '\\mathbf{D}': '𝐃', + '\\mathbf{E}': '𝐄', + '\\mathbf{F}': '𝐅', + '\\mathbf{G}': '𝐆', + '\\mathbf{H}': '𝐇', + '\\mathbf{I}': '𝐈', + '\\mathbf{J}': '𝐉', + '\\mathbf{K}': '𝐊', + '\\mathbf{L}': '𝐋', + '\\mathbf{M}': '𝐌', + '\\mathbf{N}': '𝐍', + '\\mathbf{O}': '𝐎', + '\\mathbf{P}': '𝐏', + '\\mathbf{Q}': '𝐐', + '\\mathbf{R}': '𝐑', + '\\mathbf{S}': '𝐒', + '\\mathbf{T}': '𝐓', + '\\mathbf{U}': '𝐔', + '\\mathbf{V}': '𝐕', + '\\mathbf{W}': '𝐖', + '\\mathbf{X}': '𝐗', + '\\mathbf{Y}': '𝐘', + '\\mathbf{Z}': '𝐙', + '\\mathbf{a}': '𝐚', + '\\mathbf{b}': '𝐛', + '\\mathbf{c}': '𝐜', + '\\mathbf{d}': '𝐝', + '\\mathbf{e}': '𝐞', + '\\mathbf{f}': '𝐟', + '\\mathbf{g}': '𝐠', + '\\mathbf{h}': '𝐡', + '\\mathbf{i}': '𝐢', + '\\mathbf{j}': '𝐣', + '\\mathbf{k}': '𝐤', + '\\mathbf{l}': '𝐥', + '\\mathbf{m}': '𝐦', + '\\mathbf{n}': '𝐧', + '\\mathbf{o}': '𝐨', + '\\mathbf{p}': '𝐩', + '\\mathbf{q}': '𝐪', + '\\mathbf{r}': '𝐫', + '\\mathbf{s}': '𝐬', + '\\mathbf{t}': '𝐭', + '\\mathbf{u}': '𝐮', + '\\mathbf{v}': '𝐯', + '\\mathbf{w}': '𝐰', + '\\mathbf{x}': '𝐱', + '\\mathbf{y}': '𝐲', + '\\mathbf{z}': '𝐳', + '\\mathmit{A}': '𝐴', + '\\mathmit{B}': '𝐵', + '\\mathmit{C}': '𝐶', + '\\mathmit{D}': '𝐷', + '\\mathmit{E}': '𝐸', + '\\mathmit{F}': '𝐹', + '\\mathmit{G}': '𝐺', + '\\mathmit{H}': '𝐻', + '\\mathmit{I}': '𝐼', + '\\mathmit{J}': '𝐽', + '\\mathmit{K}': '𝐾', + '\\mathmit{L}': '𝐿', + '\\mathmit{M}': '𝑀', + '\\mathmit{N}': '𝑁', + '\\mathmit{O}': '𝑂', + '\\mathmit{P}': '𝑃', + '\\mathmit{Q}': '𝑄', + '\\mathmit{R}': '𝑅', + '\\mathmit{S}': '𝑆', + '\\mathmit{T}': '𝑇', + '\\mathmit{U}': '𝑈', + '\\mathmit{V}': '𝑉', + '\\mathmit{W}': '𝑊', + '\\mathmit{X}': '𝑋', + '\\mathmit{Y}': '𝑌', + '\\mathmit{Z}': '𝑍', + '\\mathmit{a}': '𝑎', + '\\mathmit{b}': '𝑏', + '\\mathmit{c}': '𝑐', + '\\mathmit{d}': '𝑑', + '\\mathmit{e}': '𝑒', + '\\mathmit{f}': '𝑓', + '\\mathmit{g}': '𝑔', + '\\mathmit{i}': '𝑖', + '\\mathmit{j}': '𝑗', + '\\mathmit{k}': '𝑘', + '\\mathmit{l}': '𝑙', + '\\mathmit{m}': '𝑚', + '\\mathmit{n}': '𝑛', + '\\mathmit{o}': '𝑜', + '\\mathmit{p}': '𝑝', + '\\mathmit{q}': '𝑞', + '\\mathmit{r}': '𝑟', + '\\mathmit{s}': '𝑠', + '\\mathmit{t}': '𝑡', + '\\mathmit{u}': '𝑢', + '\\mathmit{v}': '𝑣', + '\\mathmit{w}': '𝑤', + '\\mathmit{x}': '𝑥', + '\\mathmit{y}': '𝑦', + '\\mathmit{z}': '𝑧', + '\\mathbit{A}': '𝑨', + '\\mathbit{B}': '𝑩', + '\\mathbit{C}': '𝑪', + '\\mathbit{D}': '𝑫', + '\\mathbit{E}': '𝑬', + '\\mathbit{F}': '𝑭', + '\\mathbit{G}': '𝑮', + '\\mathbit{H}': '𝑯', + '\\mathbit{I}': '𝑰', + '\\mathbit{J}': '𝑱', + '\\mathbit{K}': '𝑲', + '\\mathbit{L}': '𝑳', + '\\mathbit{M}': '𝑴', + '\\mathbit{N}': '𝑵', + '\\mathbit{O}': '𝑶', + '\\mathbit{P}': '𝑷', + '\\mathbit{Q}': '𝑸', + '\\mathbit{R}': '𝑹', + '\\mathbit{S}': '𝑺', + '\\mathbit{T}': '𝑻', + '\\mathbit{U}': '𝑼', + '\\mathbit{V}': '𝑽', + '\\mathbit{W}': '𝑾', + '\\mathbit{X}': '𝑿', + '\\mathbit{Y}': '𝒀', + '\\mathbit{Z}': '𝒁', + '\\mathbit{a}': '𝒂', + '\\mathbit{b}': '𝒃', + '\\mathbit{c}': '𝒄', + '\\mathbit{d}': '𝒅', + '\\mathbit{e}': '𝒆', + '\\mathbit{f}': '𝒇', + '\\mathbit{g}': '𝒈', + '\\mathbit{h}': '𝒉', + '\\mathbit{i}': '𝒊', + '\\mathbit{j}': '𝒋', + '\\mathbit{k}': '𝒌', + '\\mathbit{l}': '𝒍', + '\\mathbit{m}': '𝒎', + '\\mathbit{n}': '𝒏', + '\\mathbit{o}': '𝒐', + '\\mathbit{p}': '𝒑', + '\\mathbit{q}': '𝒒', + '\\mathbit{r}': '𝒓', + '\\mathbit{s}': '𝒔', + '\\mathbit{t}': '𝒕', + '\\mathbit{u}': '𝒖', + '\\mathbit{v}': '𝒗', + '\\mathbit{w}': '𝒘', + '\\mathbit{x}': '𝒙', + '\\mathbit{y}': '𝒚', + '\\mathbit{z}': '𝒛', + '\\mathscr{A}': '𝒜', + '\\mathscr{C}': '𝒞', + '\\mathscr{D}': '𝒟', + '\\mathscr{G}': '𝒢', + '\\mathscr{J}': '𝒥', + '\\mathscr{K}': '𝒦', + '\\mathscr{N}': '𝒩', + '\\mathscr{O}': '𝒪', + '\\mathscr{P}': '𝒫', + '\\mathscr{Q}': '𝒬', + '\\mathscr{S}': '𝒮', + '\\mathscr{T}': '𝒯', + '\\mathscr{U}': '𝒰', + '\\mathscr{V}': '𝒱', + '\\mathscr{W}': '𝒲', + '\\mathscr{X}': '𝒳', + '\\mathscr{Y}': '𝒴', + '\\mathscr{Z}': '𝒵', + '\\mathscr{a}': '𝒶', + '\\mathscr{b}': '𝒷', + '\\mathscr{c}': '𝒸', + '\\mathscr{d}': '𝒹', + '\\mathscr{f}': '𝒻', + '\\mathscr{h}': '𝒽', + '\\mathscr{i}': '𝒾', + '\\mathscr{j}': '𝒿', + '\\mathscr{k}': '𝓀', + '\\mathscr{m}': '𝓂', + '\\mathscr{n}': '𝓃', + '\\mathscr{p}': '𝓅', + '\\mathscr{q}': '𝓆', + '\\mathscr{r}': '𝓇', + '\\mathscr{s}': '𝓈', + '\\mathscr{t}': '𝓉', + '\\mathscr{u}': '𝓊', + '\\mathscr{v}': '𝓋', + '\\mathscr{w}': '𝓌', + '\\mathscr{x}': '𝓍', + '\\mathscr{y}': '𝓎', + '\\mathscr{z}': '𝓏', + '\\mathbcal{A}': '𝓐', + '\\mathbcal{B}': '𝓑', + '\\mathbcal{C}': '𝓒', + '\\mathbcal{D}': '𝓓', + '\\mathbcal{E}': '𝓔', + '\\mathbcal{F}': '𝓕', + '\\mathbcal{G}': '𝓖', + '\\mathbcal{H}': '𝓗', + '\\mathbcal{I}': '𝓘', + '\\mathbcal{J}': '𝓙', + '\\mathbcal{K}': '𝓚', + '\\mathbcal{L}': '𝓛', + '\\mathbcal{M}': '𝓜', + '\\mathbcal{N}': '𝓝', + '\\mathbcal{O}': '𝓞', + '\\mathbcal{P}': '𝓟', + '\\mathbcal{Q}': '𝓠', + '\\mathbcal{R}': '𝓡', + '\\mathbcal{S}': '𝓢', + '\\mathbcal{T}': '𝓣', + '\\mathbcal{U}': '𝓤', + '\\mathbcal{V}': '𝓥', + '\\mathbcal{W}': '𝓦', + '\\mathbcal{X}': '𝓧', + '\\mathbcal{Y}': '𝓨', + '\\mathbcal{Z}': '𝓩', + '\\mathbcal{a}': '𝓪', + '\\mathbcal{b}': '𝓫', + '\\mathbcal{c}': '𝓬', + '\\mathbcal{d}': '𝓭', + '\\mathbcal{e}': '𝓮', + '\\mathbcal{f}': '𝓯', + '\\mathbcal{g}': '𝓰', + '\\mathbcal{h}': '𝓱', + '\\mathbcal{i}': '𝓲', + '\\mathbcal{j}': '𝓳', + '\\mathbcal{k}': '𝓴', + '\\mathbcal{l}': '𝓵', + '\\mathbcal{m}': '𝓶', + '\\mathbcal{n}': '𝓷', + '\\mathbcal{o}': '𝓸', + '\\mathbcal{p}': '𝓹', + '\\mathbcal{q}': '𝓺', + '\\mathbcal{r}': '𝓻', + '\\mathbcal{s}': '𝓼', + '\\mathbcal{t}': '𝓽', + '\\mathbcal{u}': '𝓾', + '\\mathbcal{v}': '𝓿', + '\\mathbcal{w}': '𝔀', + '\\mathbcal{x}': '𝔁', + '\\mathbcal{y}': '𝔂', + '\\mathbcal{z}': '𝔃', + '\\mathfrak{A}': '𝔄', + '\\mathfrak{B}': '𝔅', + '\\mathfrak{D}': '𝔇', + '\\mathfrak{E}': '𝔈', + '\\mathfrak{F}': '𝔉', + '\\mathfrak{G}': '𝔊', + '\\mathfrak{J}': '𝔍', + '\\mathfrak{K}': '𝔎', + '\\mathfrak{L}': '𝔏', + '\\mathfrak{M}': '𝔐', + '\\mathfrak{N}': '𝔑', + '\\mathfrak{O}': '𝔒', + '\\mathfrak{P}': '𝔓', + '\\mathfrak{Q}': '𝔔', + '\\mathfrak{S}': '𝔖', + '\\mathfrak{T}': '𝔗', + '\\mathfrak{U}': '𝔘', + '\\mathfrak{V}': '𝔙', + '\\mathfrak{W}': '𝔚', + '\\mathfrak{X}': '𝔛', + '\\mathfrak{Y}': '𝔜', + '\\mathfrak{a}': '𝔞', + '\\mathfrak{b}': '𝔟', + '\\mathfrak{c}': '𝔠', + '\\mathfrak{d}': '𝔡', + '\\mathfrak{e}': '𝔢', + '\\mathfrak{f}': '𝔣', + '\\mathfrak{g}': '𝔤', + '\\mathfrak{h}': '𝔥', + '\\mathfrak{i}': '𝔦', + '\\mathfrak{j}': '𝔧', + '\\mathfrak{k}': '𝔨', + '\\mathfrak{l}': '𝔩', + '\\mathfrak{m}': '𝔪', + '\\mathfrak{n}': '𝔫', + '\\mathfrak{o}': '𝔬', + '\\mathfrak{p}': '𝔭', + '\\mathfrak{q}': '𝔮', + '\\mathfrak{r}': '𝔯', + '\\mathfrak{s}': '𝔰', + '\\mathfrak{t}': '𝔱', + '\\mathfrak{u}': '𝔲', + '\\mathfrak{v}': '𝔳', + '\\mathfrak{w}': '𝔴', + '\\mathfrak{x}': '𝔵', + '\\mathfrak{y}': '𝔶', + '\\mathfrak{z}': '𝔷', + '\\mathbb{A}': '𝔸', + '\\mathbb{B}': '𝔹', + '\\mathbb{D}': '𝔻', + '\\mathbb{E}': '𝔼', + '\\mathbb{F}': '𝔽', + '\\mathbb{G}': '𝔾', + '\\mathbb{I}': '𝕀', + '\\mathbb{J}': '𝕁', + '\\mathbb{K}': '𝕂', + '\\mathbb{L}': '𝕃', + '\\mathbb{M}': '𝕄', + '\\mathbb{O}': '𝕆', + '\\mathbb{S}': '𝕊', + '\\mathbb{T}': '𝕋', + '\\mathbb{U}': '𝕌', + '\\mathbb{V}': '𝕍', + '\\mathbb{W}': '𝕎', + '\\mathbb{X}': '𝕏', + '\\mathbb{Y}': '𝕐', + '\\mathbb{a}': '𝕒', + '\\mathbb{b}': '𝕓', + '\\mathbb{c}': '𝕔', + '\\mathbb{d}': '𝕕', + '\\mathbb{e}': '𝕖', + '\\mathbb{f}': '𝕗', + '\\mathbb{g}': '𝕘', + '\\mathbb{h}': '𝕙', + '\\mathbb{i}': '𝕚', + '\\mathbb{j}': '𝕛', + '\\mathbb{k}': '𝕜', + '\\mathbb{l}': '𝕝', + '\\mathbb{m}': '𝕞', + '\\mathbb{n}': '𝕟', + '\\mathbb{o}': '𝕠', + '\\mathbb{p}': '𝕡', + '\\mathbb{q}': '𝕢', + '\\mathbb{r}': '𝕣', + '\\mathbb{s}': '𝕤', + '\\mathbb{t}': '𝕥', + '\\mathbb{u}': '𝕦', + '\\mathbb{v}': '𝕧', + '\\mathbb{w}': '𝕨', + '\\mathbb{x}': '𝕩', + '\\mathbb{y}': '𝕪', + '\\mathbb{z}': '𝕫', + '\\mathbfrak{A}': '𝕬', + '\\mathbfrak{B}': '𝕭', + '\\mathbfrak{C}': '𝕮', + '\\mathbfrak{D}': '𝕯', + '\\mathbfrak{E}': '𝕰', + '\\mathbfrak{F}': '𝕱', + '\\mathbfrak{G}': '𝕲', + '\\mathbfrak{H}': '𝕳', + '\\mathbfrak{I}': '𝕴', + '\\mathbfrak{J}': '𝕵', + '\\mathbfrak{K}': '𝕶', + '\\mathbfrak{L}': '𝕷', + '\\mathbfrak{M}': '𝕸', + '\\mathbfrak{N}': '𝕹', + '\\mathbfrak{O}': '𝕺', + '\\mathbfrak{P}': '𝕻', + '\\mathbfrak{Q}': '𝕼', + '\\mathbfrak{R}': '𝕽', + '\\mathbfrak{S}': '𝕾', + '\\mathbfrak{T}': '𝕿', + '\\mathbfrak{U}': '𝖀', + '\\mathbfrak{V}': '𝖁', + '\\mathbfrak{W}': '𝖂', + '\\mathbfrak{X}': '𝖃', + '\\mathbfrak{Y}': '𝖄', + '\\mathbfrak{Z}': '𝖅', + '\\mathbfrak{a}': '𝖆', + '\\mathbfrak{b}': '𝖇', + '\\mathbfrak{c}': '𝖈', + '\\mathbfrak{d}': '𝖉', + '\\mathbfrak{e}': '𝖊', + '\\mathbfrak{f}': '𝖋', + '\\mathbfrak{g}': '𝖌', + '\\mathbfrak{h}': '𝖍', + '\\mathbfrak{i}': '𝖎', + '\\mathbfrak{j}': '𝖏', + '\\mathbfrak{k}': '𝖐', + '\\mathbfrak{l}': '𝖑', + '\\mathbfrak{m}': '𝖒', + '\\mathbfrak{n}': '𝖓', + '\\mathbfrak{o}': '𝖔', + '\\mathbfrak{p}': '𝖕', + '\\mathbfrak{q}': '𝖖', + '\\mathbfrak{r}': '𝖗', + '\\mathbfrak{s}': '𝖘', + '\\mathbfrak{t}': '𝖙', + '\\mathbfrak{u}': '𝖚', + '\\mathbfrak{v}': '𝖛', + '\\mathbfrak{w}': '𝖜', + '\\mathbfrak{x}': '𝖝', + '\\mathbfrak{y}': '𝖞', + '\\mathbfrak{z}': '𝖟', + '\\mathsf{A}': '𝖠', + '\\mathsf{B}': '𝖡', + '\\mathsf{C}': '𝖢', + '\\mathsf{D}': '𝖣', + '\\mathsf{E}': '𝖤', + '\\mathsf{F}': '𝖥', + '\\mathsf{G}': '𝖦', + '\\mathsf{H}': '𝖧', + '\\mathsf{I}': '𝖨', + '\\mathsf{J}': '𝖩', + '\\mathsf{K}': '𝖪', + '\\mathsf{L}': '𝖫', + '\\mathsf{M}': '𝖬', + '\\mathsf{N}': '𝖭', + '\\mathsf{O}': '𝖮', + '\\mathsf{P}': '𝖯', + '\\mathsf{Q}': '𝖰', + '\\mathsf{R}': '𝖱', + '\\mathsf{S}': '𝖲', + '\\mathsf{T}': '𝖳', + '\\mathsf{U}': '𝖴', + '\\mathsf{V}': '𝖵', + '\\mathsf{W}': '𝖶', + '\\mathsf{X}': '𝖷', + '\\mathsf{Y}': '𝖸', + '\\mathsf{Z}': '𝖹', + '\\mathsf{a}': '𝖺', + '\\mathsf{b}': '𝖻', + '\\mathsf{c}': '𝖼', + '\\mathsf{d}': '𝖽', + '\\mathsf{e}': '𝖾', + '\\mathsf{f}': '𝖿', + '\\mathsf{g}': '𝗀', + '\\mathsf{h}': '𝗁', + '\\mathsf{i}': '𝗂', + '\\mathsf{j}': '𝗃', + '\\mathsf{k}': '𝗄', + '\\mathsf{l}': '𝗅', + '\\mathsf{m}': '𝗆', + '\\mathsf{n}': '𝗇', + '\\mathsf{o}': '𝗈', + '\\mathsf{p}': '𝗉', + '\\mathsf{q}': '𝗊', + '\\mathsf{r}': '𝗋', + '\\mathsf{s}': '𝗌', + '\\mathsf{t}': '𝗍', + '\\mathsf{u}': '𝗎', + '\\mathsf{v}': '𝗏', + '\\mathsf{w}': '𝗐', + '\\mathsf{x}': '𝗑', + '\\mathsf{y}': '𝗒', + '\\mathsf{z}': '𝗓', + '\\mathsfbf{A}': '𝗔', + '\\mathsfbf{B}': '𝗕', + '\\mathsfbf{C}': '𝗖', + '\\mathsfbf{D}': '𝗗', + '\\mathsfbf{E}': '𝗘', + '\\mathsfbf{F}': '𝗙', + '\\mathsfbf{G}': '𝗚', + '\\mathsfbf{H}': '𝗛', + '\\mathsfbf{I}': '𝗜', + '\\mathsfbf{J}': '𝗝', + '\\mathsfbf{K}': '𝗞', + '\\mathsfbf{L}': '𝗟', + '\\mathsfbf{M}': '𝗠', + '\\mathsfbf{N}': '𝗡', + '\\mathsfbf{O}': '𝗢', + '\\mathsfbf{P}': '𝗣', + '\\mathsfbf{Q}': '𝗤', + '\\mathsfbf{R}': '𝗥', + '\\mathsfbf{S}': '𝗦', + '\\mathsfbf{T}': '𝗧', + '\\mathsfbf{U}': '𝗨', + '\\mathsfbf{V}': '𝗩', + '\\mathsfbf{W}': '𝗪', + '\\mathsfbf{X}': '𝗫', + '\\mathsfbf{Y}': '𝗬', + '\\mathsfbf{Z}': '𝗭', + '\\mathsfbf{a}': '𝗮', + '\\mathsfbf{b}': '𝗯', + '\\mathsfbf{c}': '𝗰', + '\\mathsfbf{d}': '𝗱', + '\\mathsfbf{e}': '𝗲', + '\\mathsfbf{f}': '𝗳', + '\\mathsfbf{g}': '𝗴', + '\\mathsfbf{h}': '𝗵', + '\\mathsfbf{i}': '𝗶', + '\\mathsfbf{j}': '𝗷', + '\\mathsfbf{k}': '𝗸', + '\\mathsfbf{l}': '𝗹', + '\\mathsfbf{m}': '𝗺', + '\\mathsfbf{n}': '𝗻', + '\\mathsfbf{o}': '𝗼', + '\\mathsfbf{p}': '𝗽', + '\\mathsfbf{q}': '𝗾', + '\\mathsfbf{r}': '𝗿', + '\\mathsfbf{s}': '𝘀', + '\\mathsfbf{t}': '𝘁', + '\\mathsfbf{u}': '𝘂', + '\\mathsfbf{v}': '𝘃', + '\\mathsfbf{w}': '𝘄', + '\\mathsfbf{x}': '𝘅', + '\\mathsfbf{y}': '𝘆', + '\\mathsfbf{z}': '𝘇', + '\\mathsfsl{A}': '𝘈', + '\\mathsfsl{B}': '𝘉', + '\\mathsfsl{C}': '𝘊', + '\\mathsfsl{D}': '𝘋', + '\\mathsfsl{E}': '𝘌', + '\\mathsfsl{F}': '𝘍', + '\\mathsfsl{G}': '𝘎', + '\\mathsfsl{H}': '𝘏', + '\\mathsfsl{I}': '𝘐', + '\\mathsfsl{J}': '𝘑', + '\\mathsfsl{K}': '𝘒', + '\\mathsfsl{L}': '𝘓', + '\\mathsfsl{M}': '𝘔', + '\\mathsfsl{N}': '𝘕', + '\\mathsfsl{O}': '𝘖', + '\\mathsfsl{P}': '𝘗', + '\\mathsfsl{Q}': '𝘘', + '\\mathsfsl{R}': '𝘙', + '\\mathsfsl{S}': '𝘚', + '\\mathsfsl{T}': '𝘛', + '\\mathsfsl{U}': '𝘜', + '\\mathsfsl{V}': '𝘝', + '\\mathsfsl{W}': '𝘞', + '\\mathsfsl{X}': '𝘟', + '\\mathsfsl{Y}': '𝘠', + '\\mathsfsl{Z}': '𝘡', + '\\mathsfsl{a}': '𝘢', + '\\mathsfsl{b}': '𝘣', + '\\mathsfsl{c}': '𝘤', + '\\mathsfsl{d}': '𝘥', + '\\mathsfsl{e}': '𝘦', + '\\mathsfsl{f}': '𝘧', + '\\mathsfsl{g}': '𝘨', + '\\mathsfsl{h}': '𝘩', + '\\mathsfsl{i}': '𝘪', + '\\mathsfsl{j}': '𝘫', + '\\mathsfsl{k}': '𝘬', + '\\mathsfsl{l}': '𝘭', + '\\mathsfsl{m}': '𝘮', + '\\mathsfsl{n}': '𝘯', + '\\mathsfsl{o}': '𝘰', + '\\mathsfsl{p}': '𝘱', + '\\mathsfsl{q}': '𝘲', + '\\mathsfsl{r}': '𝘳', + '\\mathsfsl{s}': '𝘴', + '\\mathsfsl{t}': '𝘵', + '\\mathsfsl{u}': '𝘶', + '\\mathsfsl{v}': '𝘷', + '\\mathsfsl{w}': '𝘸', + '\\mathsfsl{x}': '𝘹', + '\\mathsfsl{y}': '𝘺', + '\\mathsfsl{z}': '𝘻', + '\\mathsfbfsl{A}': '𝘼', + '\\mathsfbfsl{B}': '𝘽', + '\\mathsfbfsl{C}': '𝘾', + '\\mathsfbfsl{D}': '𝘿', + '\\mathsfbfsl{E}': '𝙀', + '\\mathsfbfsl{F}': '𝙁', + '\\mathsfbfsl{G}': '𝙂', + '\\mathsfbfsl{H}': '𝙃', + '\\mathsfbfsl{I}': '𝙄', + '\\mathsfbfsl{J}': '𝙅', + '\\mathsfbfsl{K}': '𝙆', + '\\mathsfbfsl{L}': '𝙇', + '\\mathsfbfsl{M}': '𝙈', + '\\mathsfbfsl{N}': '𝙉', + '\\mathsfbfsl{O}': '𝙊', + '\\mathsfbfsl{P}': '𝙋', + '\\mathsfbfsl{Q}': '𝙌', + '\\mathsfbfsl{R}': '𝙍', + '\\mathsfbfsl{S}': '𝙎', + '\\mathsfbfsl{T}': '𝙏', + '\\mathsfbfsl{U}': '𝙐', + '\\mathsfbfsl{V}': '𝙑', + '\\mathsfbfsl{W}': '𝙒', + '\\mathsfbfsl{X}': '𝙓', + '\\mathsfbfsl{Y}': '𝙔', + '\\mathsfbfsl{Z}': '𝙕', + '\\mathsfbfsl{a}': '𝙖', + '\\mathsfbfsl{b}': '𝙗', + '\\mathsfbfsl{c}': '𝙘', + '\\mathsfbfsl{d}': '𝙙', + '\\mathsfbfsl{e}': '𝙚', + '\\mathsfbfsl{f}': '𝙛', + '\\mathsfbfsl{g}': '𝙜', + '\\mathsfbfsl{h}': '𝙝', + '\\mathsfbfsl{i}': '𝙞', + '\\mathsfbfsl{j}': '𝙟', + '\\mathsfbfsl{k}': '𝙠', + '\\mathsfbfsl{l}': '𝙡', + '\\mathsfbfsl{m}': '𝙢', + '\\mathsfbfsl{n}': '𝙣', + '\\mathsfbfsl{o}': '𝙤', + '\\mathsfbfsl{p}': '𝙥', + '\\mathsfbfsl{q}': '𝙦', + '\\mathsfbfsl{r}': '𝙧', + '\\mathsfbfsl{s}': '𝙨', + '\\mathsfbfsl{t}': '𝙩', + '\\mathsfbfsl{u}': '𝙪', + '\\mathsfbfsl{v}': '𝙫', + '\\mathsfbfsl{w}': '𝙬', + '\\mathsfbfsl{x}': '𝙭', + '\\mathsfbfsl{y}': '𝙮', + '\\mathsfbfsl{z}': '𝙯', + '\\mathtt{A}': '𝙰', + '\\mathtt{B}': '𝙱', + '\\mathtt{C}': '𝙲', + '\\mathtt{D}': '𝙳', + '\\mathtt{E}': '𝙴', + '\\mathtt{F}': '𝙵', + '\\mathtt{G}': '𝙶', + '\\mathtt{H}': '𝙷', + '\\mathtt{I}': '𝙸', + '\\mathtt{J}': '𝙹', + '\\mathtt{K}': '𝙺', + '\\mathtt{L}': '𝙻', + '\\mathtt{M}': '𝙼', + '\\mathtt{N}': '𝙽', + '\\mathtt{O}': '𝙾', + '\\mathtt{P}': '𝙿', + '\\mathtt{Q}': '𝚀', + '\\mathtt{R}': '𝚁', + '\\mathtt{S}': '𝚂', + '\\mathtt{T}': '𝚃', + '\\mathtt{U}': '𝚄', + '\\mathtt{V}': '𝚅', + '\\mathtt{W}': '𝚆', + '\\mathtt{X}': '𝚇', + '\\mathtt{Y}': '𝚈', + '\\mathtt{Z}': '𝚉', + '\\mathtt{a}': '𝚊', + '\\mathtt{b}': '𝚋', + '\\mathtt{c}': '𝚌', + '\\mathtt{d}': '𝚍', + '\\mathtt{e}': '𝚎', + '\\mathtt{f}': '𝚏', + '\\mathtt{g}': '𝚐', + '\\mathtt{h}': '𝚑', + '\\mathtt{i}': '𝚒', + '\\mathtt{j}': '𝚓', + '\\mathtt{k}': '𝚔', + '\\mathtt{l}': '𝚕', + '\\mathtt{m}': '𝚖', + '\\mathtt{n}': '𝚗', + '\\mathtt{o}': '𝚘', + '\\mathtt{p}': '𝚙', + '\\mathtt{q}': '𝚚', + '\\mathtt{r}': '𝚛', + '\\mathtt{s}': '𝚜', + '\\mathtt{t}': '𝚝', + '\\mathtt{u}': '𝚞', + '\\mathtt{v}': '𝚟', + '\\mathtt{w}': '𝚠', + '\\mathtt{x}': '𝚡', + '\\mathtt{y}': '𝚢', + '\\mathtt{z}': '𝚣', + '\\mathbf{\\Alpha}': '𝚨', + '\\mathbf{\\Beta}': '𝚩', + '\\mathbf{\\Gamma}': '𝚪', + '\\mathbf{\\Delta}': '𝚫', + '\\mathbf{\\Epsilon}': '𝚬', + '\\mathbf{\\Zeta}': '𝚭', + '\\mathbf{\\Eta}': '𝚮', + '\\mathbf{\\Theta}': '𝚯', + '\\mathbf{\\Iota}': '𝚰', + '\\mathbf{\\Kappa}': '𝚱', + '\\mathbf{\\Lambda}': '𝚲', + '\\mathbf{\\Xi}': '𝚵', + '\\mathbf{\\Pi}': '𝚷', + '\\mathbf{\\Rho}': '𝚸', + '\\mathbf{\\vartheta}': '𝚹', + '\\mathbf{\\Sigma}': '𝚺', + '\\mathbf{\\Tau}': '𝚻', + '\\mathbf{\\Upsilon}': '𝚼', + '\\mathbf{\\Phi}': '𝚽', + '\\mathbf{\\Chi}': '𝚾', + '\\mathbf{\\Psi}': '𝚿', + '\\mathbf{\\Omega}': '𝛀', + '\\mathbf{\\nabla}': '𝛁', + '\\mathbf{\\alpha}': '𝛂', + '\\mathbf{\\beta}': '𝛃', + '\\mathbf{\\gamma}': '𝛄', + '\\mathbf{\\delta}': '𝛅', + '\\mathbf{\\epsilon}': '𝛆', + '\\mathbf{\\zeta}': '𝛇', + '\\mathbf{\\eta}': '𝛈', + '\\mathbf{\\theta}': '𝛉', + '\\mathbf{\\iota}': '𝛊', + '\\mathbf{\\kappa}': '𝛋', + '\\mathbf{\\lambda}': '𝛌', + '\\mathbf{\\mu}': '𝛍', + '\\mathbf{\\nu}': '𝛎', + '\\mathbf{\\xi}': '𝛏', + '\\mathbf{\\pi}': '𝛑', + '\\mathbf{\\rho}': '𝛒', + '\\mathbf{\\varsigma}': '𝛓', + '\\mathbf{\\sigma}': '𝛔', + '\\mathbf{\\tau}': '𝛕', + '\\mathbf{\\upsilon}': '𝛖', + '\\mathbf{\\phi}': '𝛗', + '\\mathbf{\\chi}': '𝛘', + '\\mathbf{\\psi}': '𝛙', + '\\mathbf{\\omega}': '𝛚', + '\\mathbf{\\varepsilon}': '𝛜', + '\\mathbf{\\varkappa}': '𝛞', + '\\mathbf{\\varrho}': '𝛠', + '\\mathbf{\\varpi}': '𝛡', + '\\mathmit{\\Alpha}': '𝛢', + '\\mathmit{\\Beta}': '𝛣', + '\\mathmit{\\Gamma}': '𝛤', + '\\mathmit{\\Delta}': '𝛥', + '\\mathmit{\\Epsilon}': '𝛦', + '\\mathmit{\\Zeta}': '𝛧', + '\\mathmit{\\Eta}': '𝛨', + '\\mathmit{\\Theta}': '𝛩', + '\\mathmit{\\Iota}': '𝛪', + '\\mathmit{\\Kappa}': '𝛫', + '\\mathmit{\\Lambda}': '𝛬', + '\\mathmit{\\Xi}': '𝛯', + '\\mathmit{\\Pi}': '𝛱', + '\\mathmit{\\Rho}': '𝛲', + '\\mathmit{\\vartheta}': '𝛳', + '\\mathmit{\\Sigma}': '𝛴', + '\\mathmit{\\Tau}': '𝛵', + '\\mathmit{\\Upsilon}': '𝛶', + '\\mathmit{\\Phi}': '𝛷', + '\\mathmit{\\Chi}': '𝛸', + '\\mathmit{\\Psi}': '𝛹', + '\\mathmit{\\Omega}': '𝛺', + '\\mathmit{\\nabla}': '𝛻', + '\\mathmit{\\alpha}': '𝛼', + '\\mathmit{\\beta}': '𝛽', + '\\mathmit{\\gamma}': '𝛾', + '\\mathmit{\\delta}': '𝛿', + '\\mathmit{\\epsilon}': '𝜀', + '\\mathmit{\\zeta}': '𝜁', + '\\mathmit{\\eta}': '𝜂', + '\\mathmit{\\theta}': '𝜃', + '\\mathmit{\\iota}': '𝜄', + '\\mathmit{\\kappa}': '𝜅', + '\\mathmit{\\lambda}': '𝜆', + '\\mathmit{\\mu}': '𝜇', + '\\mathmit{\\nu}': '𝜈', + '\\mathmit{\\xi}': '𝜉', + '\\mathmit{\\pi}': '𝜋', + '\\mathmit{\\rho}': '𝜌', + '\\mathmit{\\varsigma}': '𝜍', + '\\mathmit{\\sigma}': '𝜎', + '\\mathmit{\\tau}': '𝜏', + '\\mathmit{\\upsilon}': '𝜐', + '\\mathmit{\\phi}': '𝜑', + '\\mathmit{\\chi}': '𝜒', + '\\mathmit{\\psi}': '𝜓', + '\\mathmit{\\omega}': '𝜔', + '\\mathmit{\\varkappa}': '𝜘', + '\\mathmit{\\varrho}': '𝜚', + '\\mathmit{\\varpi}': '𝜛', + '\\mathbit{\\Alpha}': '𝜜', + '\\mathbit{\\Beta}': '𝜝', + '\\mathbit{\\Gamma}': '𝜞', + '\\mathbit{\\Delta}': '𝜟', + '\\mathbit{\\Epsilon}': '𝜠', + '\\mathbit{\\Zeta}': '𝜡', + '\\mathbit{\\Eta}': '𝜢', + '\\mathbit{\\Theta}': '𝜣', + '\\mathbit{\\Iota}': '𝜤', + '\\mathbit{\\Kappa}': '𝜥', + '\\mathbit{\\Lambda}': '𝜦', + '\\mathbit{\\Xi}': '𝜩', + '\\mathbit{\\Pi}': '𝜫', + '\\mathbit{\\Rho}': '𝜬', + '\\mathbit{\\Sigma}': '𝜮', + '\\mathbit{\\Tau}': '𝜯', + '\\mathbit{\\Upsilon}': '𝜰', + '\\mathbit{\\Phi}': '𝜱', + '\\mathbit{\\Chi}': '𝜲', + '\\mathbit{\\Psi}': '𝜳', + '\\mathbit{\\Omega}': '𝜴', + '\\mathbit{\\nabla}': '𝜵', + '\\mathbit{\\alpha}': '𝜶', + '\\mathbit{\\beta}': '𝜷', + '\\mathbit{\\gamma}': '𝜸', + '\\mathbit{\\delta}': '𝜹', + '\\mathbit{\\epsilon}': '𝜺', + '\\mathbit{\\zeta}': '𝜻', + '\\mathbit{\\eta}': '𝜼', + '\\mathbit{\\theta}': '𝜽', + '\\mathbit{\\iota}': '𝜾', + '\\mathbit{\\kappa}': '𝜿', + '\\mathbit{\\lambda}': '𝝀', + '\\mathbit{\\mu}': '𝝁', + '\\mathbit{\\nu}': '𝝂', + '\\mathbit{\\xi}': '𝝃', + '\\mathbit{\\pi}': '𝝅', + '\\mathbit{\\rho}': '𝝆', + '\\mathbit{\\varsigma}': '𝝇', + '\\mathbit{\\sigma}': '𝝈', + '\\mathbit{\\tau}': '𝝉', + '\\mathbit{\\upsilon}': '𝝊', + '\\mathbit{\\phi}': '𝝋', + '\\mathbit{\\chi}': '𝝌', + '\\mathbit{\\psi}': '𝝍', + '\\mathbit{\\omega}': '𝝎', + '\\mathbit{\\vartheta}': '𝝑', + '\\mathbit{\\varkappa}': '𝝒', + '\\mathbit{\\varrho}': '𝝔', + '\\mathbit{\\varpi}': '𝝕', + '\\mathsfbf{\\Alpha}': '𝝖', + '\\mathsfbf{\\Beta}': '𝝗', + '\\mathsfbf{\\Gamma}': '𝝘', + '\\mathsfbf{\\Delta}': '𝝙', + '\\mathsfbf{\\Epsilon}': '𝝚', + '\\mathsfbf{\\Zeta}': '𝝛', + '\\mathsfbf{\\Eta}': '𝝜', + '\\mathsfbf{\\Theta}': '𝝝', + '\\mathsfbf{\\Iota}': '𝝞', + '\\mathsfbf{\\Kappa}': '𝝟', + '\\mathsfbf{\\Lambda}': '𝝠', + '\\mathsfbf{\\Xi}': '𝝣', + '\\mathsfbf{\\Pi}': '𝝥', + '\\mathsfbf{\\Rho}': '𝝦', + '\\mathsfbf{\\vartheta}': '𝝧', + '\\mathsfbf{\\Sigma}': '𝝨', + '\\mathsfbf{\\Tau}': '𝝩', + '\\mathsfbf{\\Upsilon}': '𝝪', + '\\mathsfbf{\\Phi}': '𝝫', + '\\mathsfbf{\\Chi}': '𝝬', + '\\mathsfbf{\\Psi}': '𝝭', + '\\mathsfbf{\\Omega}': '𝝮', + '\\mathsfbf{\\nabla}': '𝝯', + '\\mathsfbf{\\alpha}': '𝝰', + '\\mathsfbf{\\beta}': '𝝱', + '\\mathsfbf{\\gamma}': '𝝲', + '\\mathsfbf{\\delta}': '𝝳', + '\\mathsfbf{\\epsilon}': '𝝴', + '\\mathsfbf{\\zeta}': '𝝵', + '\\mathsfbf{\\eta}': '𝝶', + '\\mathsfbf{\\theta}': '𝝷', + '\\mathsfbf{\\iota}': '𝝸', + '\\mathsfbf{\\kappa}': '𝝹', + '\\mathsfbf{\\lambda}': '𝝺', + '\\mathsfbf{\\mu}': '𝝻', + '\\mathsfbf{\\nu}': '𝝼', + '\\mathsfbf{\\xi}': '𝝽', + '\\mathsfbf{\\pi}': '𝝿', + '\\mathsfbf{\\rho}': '𝞀', + '\\mathsfbf{\\varsigma}': '𝞁', + '\\mathsfbf{\\sigma}': '𝞂', + '\\mathsfbf{\\tau}': '𝞃', + '\\mathsfbf{\\upsilon}': '𝞄', + '\\mathsfbf{\\phi}': '𝞅', + '\\mathsfbf{\\chi}': '𝞆', + '\\mathsfbf{\\psi}': '𝞇', + '\\mathsfbf{\\omega}': '𝞈', + '\\mathsfbf{\\varepsilon}': '𝞊', + '\\mathsfbf{\\varkappa}': '𝞌', + '\\mathsfbf{\\varrho}': '𝞎', + '\\mathsfbf{\\varpi}': '𝞏', + '\\mathsfbfsl{\\Alpha}': '𝞐', + '\\mathsfbfsl{\\Beta}': '𝞑', + '\\mathsfbfsl{\\Gamma}': '𝞒', + '\\mathsfbfsl{\\Delta}': '𝞓', + '\\mathsfbfsl{\\Epsilon}': '𝞔', + '\\mathsfbfsl{\\Zeta}': '𝞕', + '\\mathsfbfsl{\\Eta}': '𝞖', + '\\mathsfbfsl{\\vartheta}': '𝞗', + '\\mathsfbfsl{\\Iota}': '𝞘', + '\\mathsfbfsl{\\Kappa}': '𝞙', + '\\mathsfbfsl{\\Lambda}': '𝞚', + '\\mathsfbfsl{\\Xi}': '𝞝', + '\\mathsfbfsl{\\Pi}': '𝞟', + '\\mathsfbfsl{\\Rho}': '𝞠', + '\\mathsfbfsl{\\Sigma}': '𝞢', + '\\mathsfbfsl{\\Tau}': '𝞣', + '\\mathsfbfsl{\\Upsilon}': '𝞤', + '\\mathsfbfsl{\\Phi}': '𝞥', + '\\mathsfbfsl{\\Chi}': '𝞦', + '\\mathsfbfsl{\\Psi}': '𝞧', + '\\mathsfbfsl{\\Omega}': '𝞨', + '\\mathsfbfsl{\\nabla}': '𝞩', + '\\mathsfbfsl{\\alpha}': '𝞪', + '\\mathsfbfsl{\\beta}': '𝞫', + '\\mathsfbfsl{\\gamma}': '𝞬', + '\\mathsfbfsl{\\delta}': '𝞭', + '\\mathsfbfsl{\\epsilon}': '𝞮', + '\\mathsfbfsl{\\zeta}': '𝞯', + '\\mathsfbfsl{\\eta}': '𝞰', + '\\mathsfbfsl{\\iota}': '𝞲', + '\\mathsfbfsl{\\kappa}': '𝞳', + '\\mathsfbfsl{\\lambda}': '𝞴', + '\\mathsfbfsl{\\mu}': '𝞵', + '\\mathsfbfsl{\\nu}': '𝞶', + '\\mathsfbfsl{\\xi}': '𝞷', + '\\mathsfbfsl{\\pi}': '𝞹', + '\\mathsfbfsl{\\rho}': '𝞺', + '\\mathsfbfsl{\\varsigma}': '𝞻', + '\\mathsfbfsl{\\sigma}': '𝞼', + '\\mathsfbfsl{\\tau}': '𝞽', + '\\mathsfbfsl{\\upsilon}': '𝞾', + '\\mathsfbfsl{\\phi}': '𝞿', + '\\mathsfbfsl{\\chi}': '𝟀', + '\\mathsfbfsl{\\psi}': '𝟁', + '\\mathsfbfsl{\\omega}': '𝟂', + '\\mathsfbfsl{\\varkappa}': '𝟆', + '\\mathsfbfsl{\\varrho}': '𝟈', + '\\mathsfbfsl{\\varpi}': '𝟉', + '\\mathbf{0}': '𝟎', + '\\mathbf{1}': '𝟏', + '\\mathbf{2}': '𝟐', + '\\mathbf{3}': '𝟑', + '\\mathbf{4}': '𝟒', + '\\mathbf{5}': '𝟓', + '\\mathbf{6}': '𝟔', + '\\mathbf{7}': '𝟕', + '\\mathbf{8}': '𝟖', + '\\mathbf{9}': '𝟗', + '\\mathbb{0}': '𝟘', + '\\mathbb{1}': '𝟙', + '\\mathbb{2}': '𝟚', + '\\mathbb{3}': '𝟛', + '\\mathbb{4}': '𝟜', + '\\mathbb{5}': '𝟝', + '\\mathbb{6}': '𝟞', + '\\mathbb{7}': '𝟟', + '\\mathbb{8}': '𝟠', + '\\mathbb{9}': '𝟡', + '\\mathsf{0}': '𝟢', + '\\mathsf{1}': '𝟣', + '\\mathsf{2}': '𝟤', + '\\mathsf{3}': '𝟥', + '\\mathsf{4}': '𝟦', + '\\mathsf{5}': '𝟧', + '\\mathsf{6}': '𝟨', + '\\mathsf{7}': '𝟩', + '\\mathsf{8}': '𝟪', + '\\mathsf{9}': '𝟫', + '\\mathsfbf{0}': '𝟬', + '\\mathsfbf{1}': '𝟭', + '\\mathsfbf{2}': '𝟮', + '\\mathsfbf{3}': '𝟯', + '\\mathsfbf{4}': '𝟰', + '\\mathsfbf{5}': '𝟱', + '\\mathsfbf{6}': '𝟲', + '\\mathsfbf{7}': '𝟳', + '\\mathsfbf{8}': '𝟴', + '\\mathsfbf{9}': '𝟵', + '\\mathtt{0}': '𝟶', + '\\mathtt{1}': '𝟷', + '\\mathtt{2}': '𝟸', + '\\mathtt{3}': '𝟹', + '\\mathtt{4}': '𝟺', + '\\mathtt{5}': '𝟻', + '\\mathtt{6}': '𝟼', + '\\mathtt{7}': '𝟽', + '\\mathtt{8}': '𝟾', + '\\mathtt{9}': '𝟿', + } + for (var idx in this.orcidLatexCharMap) { + if (this.orcidLatexCharMap[idx].length > this.maxLatexLength) + this.maxLatexLength = this.orcidLatexCharMap[idx].length + this.orcidCharLatexMap[this.orcidLatexCharMap[idx]] = idx + } + + for (var idx in this.w3cLatexCharMap) { + if (this.w3cLatexCharMap[idx].length > this.maxLatexLength) + this.maxLatexLength = this.w3cLatexCharMap[idx].length + this.w3cCharLatexMap[this.w3cLatexCharMap[idx]] = idx + } + + this.getUni = function (latex) { + if (this.w3cLatexCharMap[latex]) return this.w3cLatexCharMap[latex] + return this.orcidLatexCharMap[latex] + } + + this.hasLatexMatch = function (latex) { + return latex in this.orcidLatexCharMap || latex in this.w3cLatexCharMap + } + + this.getLatex = function (uni) { + if (this.w3cCharLatexMap[uni]) return this.w3cCharLatexMap[uni] + return this.orcidCharLatexMap[uni] + } + + this.hasUniMatch = function (uni) { + return uni in this.orcidCharLatexMap || uni in this.w3cCharLatexMap + } + + this.longestEscapeMatch = function (value, pos) { + var subStringEnd = + pos + 1 + this.maxLatexLength <= value.length + ? pos + 1 + this.maxLatexLength + : value.length + var subStr = value.substring(pos, subStringEnd) + while (subStr.length > 0) { + if (this.hasLatexMatch(subStr)) { + break + } + subStr = subStr.substring(0, subStr.length - 1) + } + return subStr + } + } + + var latexToUTF8 = new LatexToUTF8() + + exports.decodeLatex = function (value) { + var newVal = '' + var pos = 0 + while (pos < value.length) { + if (value[pos] == '\\') { + var match = latexToUTF8.longestEscapeMatch(value, pos) + if (match.length > 0) { + newVal += latexToUTF8.getUni(match) + pos = pos + match.length + } else { + newVal += value[pos] + pos++ + } + } else if (value[pos] == '{' || value[pos] == '}') { + pos++ + } else { + newVal += value[pos] + pos++ + } + } + return newVal + } + + exports.encodeLatex = function (value) { + var trans = '' + for (var idx = 0; idx < value.length; ++idx) { + var c = value.charAt(idx) + if (this.hasUniMatch(c)) trans += latexToUTF8.getLatex(c) + else trans += c + } + return trans + } +})(typeof exports === 'undefined' ? (this['latexParse'] = {}) : exports) + +const bibMonths = [ + 'jan', + 'feb', + 'mar', + 'apr', + 'may', + 'jun', + 'jul', + 'aug', + 'sep', + 'oct', + 'nov', + 'dec', +] + +const bibToWorkTypeMap = {} +bibToWorkTypeMap['article'] = ['publication', 'journal-article'] +bibToWorkTypeMap['book'] = ['publication', 'book'] +bibToWorkTypeMap['booklet'] = ['other_output', 'other'] +bibToWorkTypeMap['conference'] = ['conference', 'conference-paper'] +bibToWorkTypeMap['inbook'] = ['publication', 'book-chapter'] +bibToWorkTypeMap['incollection'] = ['publication', 'book-chapter'] +bibToWorkTypeMap['inproceedings'] = ['conference', 'conference-paper'] +bibToWorkTypeMap['manual'] = ['publication', 'manual'] +bibToWorkTypeMap['mastersthesis'] = [ + 'publication', + 'supervised-student-publication', +] +bibToWorkTypeMap['misc'] = ['other_output', 'other'] +bibToWorkTypeMap['phdthesis'] = ['publication', 'dissertation-thesis'] +bibToWorkTypeMap['proceedings'] = ['conference', 'conference-paper'] +bibToWorkTypeMap['techreport'] = ['publication', 'report'] +bibToWorkTypeMap['unpublished'] = ['other_output', 'other'] diff --git a/src/assets/scss/material.orcid.overwrites.scss/_cdk-drag-drop-theme.scss b/src/assets/scss/material.orcid.overwrites.scss/_cdk-drag-drop-theme.scss new file mode 100644 index 0000000000..22642d2485 --- /dev/null +++ b/src/assets/scss/material.orcid.overwrites.scss/_cdk-drag-drop-theme.scss @@ -0,0 +1,14 @@ +@import '~@angular/material/_theming'; + +@mixin mat-drag-drop-theme($theme) { + $primary: map-get($theme, primary); + $foreground: map-get($theme, foreground); + $background: map-get($theme, background); + + .drag-placeholder { + background: mat-color($background, ui-background-light); + border: dotted 3px mat-color($background, ui-background); + min-height: 60px; + transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); + } +} diff --git a/src/assets/scss/material.orcid.overwrites.scss/cdk-drag-drop.scss b/src/assets/scss/material.orcid.overwrites.scss/cdk-drag-drop.scss index 1be9cca1e2..ee66b3c022 100644 --- a/src/assets/scss/material.orcid.overwrites.scss/cdk-drag-drop.scss +++ b/src/assets/scss/material.orcid.overwrites.scss/cdk-drag-drop.scss @@ -4,3 +4,26 @@ position: initial !important; overflow: hidden !important; } + +.cdk-drop-list-dragging { + cursor: move !important; + .mat-form-field-flex, + .mat-select-trigger, + .mat-button, + .mat-icon-button, + .mat-stroked-button, + .mat-flat-button { + cursor: move !important; + } +} + +.cdk-drag-preview { + box-sizing: border-box; + border-radius: 4px; + box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2), + 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12); +} + +.cdk-drag-animating { + transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); +} diff --git a/src/assets/scss/material.orcid.overwrites.scss/form-field-outline.scss b/src/assets/scss/material.orcid.overwrites.scss/form-field-outline.scss index 6d79881589..63cca259c3 100644 --- a/src/assets/scss/material.orcid.overwrites.scss/form-field-outline.scss +++ b/src/assets/scss/material.orcid.overwrites.scss/form-field-outline.scss @@ -21,12 +21,24 @@ border-top: 0.8em solid transparent; } -.mat-form-field-appearance-outline.twoLinesHint { +.mat-form-field-appearance-outline.two-line-hint { .mat-form-field-wrapper { margin-bottom: 1.6em; } } +.mat-form-field-appearance-outline.three-line-hint { + .mat-form-field-wrapper { + margin-bottom: 2.4em; + } +} + +.no-hint { + .mat-form-field-wrapper { + padding-bottom: 0 !important; + } +} + .mat-form-field-appearance-outline.mat-form-field-min { .mat-form-field-wrapper { .mat-form-field-outline { @@ -39,9 +51,6 @@ margin-inline-end: 8px; } } - .mat-form-field-suffix { - top: 0px; - } .mat-form-field-flex { .mat-form-field-infix { border-top: 0px; diff --git a/src/assets/scss/material.scss b/src/assets/scss/material.scss index 55e841b1fa..ef28b4c4e8 100644 --- a/src/assets/scss/material.scss +++ b/src/assets/scss/material.scss @@ -12,6 +12,7 @@ @import './material.orcid.overwrites.scss/form-field-theme'; @import './material.orcid.overwrites.scss/_divider-theme.scss'; @import './material.orcid.overwrites.scss/_mat-error-theme.scss'; +@import './material.orcid.overwrites.scss/_cdk-drag-drop-theme.scss'; @import './orcid/_urls-theme.scss'; @import './orcid/_divider-theme.scss'; @@ -59,3 +60,4 @@ @import './material.orcid.overwrites.scss/cdk-drag-drop.scss'; @include mat-error-theme-overwrites($orcid-app-theme); @import './orcid/urls.scss'; +@include mat-drag-drop-theme($orcid-app-theme); diff --git a/src/assets/scss/orcid/_divider-theme.scss b/src/assets/scss/orcid/_divider-theme.scss index cc688b538e..c87c99f157 100644 --- a/src/assets/scss/orcid/_divider-theme.scss +++ b/src/assets/scss/orcid/_divider-theme.scss @@ -14,5 +14,15 @@ color: map-get($foreground, 'brand-primary'); background: map-get($foreground, 'brand-primary'); } + + hr.dashed-line { + background: repeating-linear-gradient( + 90deg, + mat-color($background, light-grey), + mat-color($background, light-grey) 6px, + transparent 6px, + transparent 12px + ); + } } @include model-name-theme($orcid-app-theme); diff --git a/src/assets/scss/orcid/divider.scss b/src/assets/scss/orcid/divider.scss index e4b26b109d..2bfb5b77d2 100644 --- a/src/assets/scss/orcid/divider.scss +++ b/src/assets/scss/orcid/divider.scss @@ -3,4 +3,5 @@ hr { border: 0; margin: 0; width: 100%; + margin-bottom: 16px; } diff --git a/src/assets/scss/orcid/urls.scss b/src/assets/scss/orcid/urls.scss index c625e5e4eb..e1058fa9d5 100644 --- a/src/assets/scss/orcid/urls.scss +++ b/src/assets/scss/orcid/urls.scss @@ -1,3 +1,7 @@ a.black-underline-url { text-decoration: underline; } + +a.underline { + text-decoration: underline; +} diff --git a/src/locale/properties-mover.properties b/src/locale/properties-mover.properties new file mode 100644 index 0000000000..48ed125316 --- /dev/null +++ b/src/locale/properties-mover.properties @@ -0,0 +1,26 @@ +record.identifierUrl=URL: +record.type=Type: +works.value=Value: +works.all=All +works.noItemsSelected=No items selected. +works.linkWorks=Link works +works.linkWorksMoreInfo=More information about linking works to your ORCID record +works.geographicalArea=Geographical area +works.workType=Work type +works.exportSelectedWorks=Export selected works +works.exportSelectedWorksBibtexDescription=Export selected works to a BibTeX file. Please note that exporting to BibTeX may cause problems for text in some languages. +works.findOut=Find out more on exporting BibTeX files +works.selectedWorks=Selected works to export +works.exportSelectedWorksBibtex=Export selected works to BibTeX +works.combineSelectedWorks=Combine selected works +works.selectedWorksGrouped=The selected works will be grouped together and displayed as a single group item on your record. All versions of the work will still be available but one will be shown as your preferred version. +works.learnMoreCombining=Learn more about combining works +works.selectedWorksCombine=Selected works to combine +works.combiningWorks=Combining works cannot be undone! +works.checkSelectedWorks=Please check the selected works are correct before combining them. +works.description=Description +works.citation=Citation +record.subtitle=Subtitle +works.language=Language +works.translatedTitle=Translated title +works.contributors=Contributors \ No newline at end of file diff --git a/src/locale/properties-mover.py b/src/locale/properties-mover.py new file mode 100644 index 0000000000..c49df49427 --- /dev/null +++ b/src/locale/properties-mover.py @@ -0,0 +1,84 @@ +from jproperties import Properties + + +def addProperty(file, key, value): + try: + with open(file, "r+b") as f: + p = Properties(process_escapes_in_values=False) + p.load(f, "utf-8") + p[key] = value + f.seek(0) + f.truncate(0) + p.store(f, encoding="utf-8") + f.close() + except: + pass + +def removeProperty(file, key): + with open(file, "r+b") as f: + p = Properties(process_escapes_in_values=False) + p.load(f, "utf-8") + del p[key] + f.seek(0) + f.truncate(0) + p.store(f, encoding="utf-8") + f.close() + + +def readProperty(file, key): + try: + with open(file, "r+b") as f: + p = Properties(process_escapes_in_values=False) + p.load(f, "utf-8") + f.close() + return p[key] + + except: + pass + + +def getPropertiesToMove(): + propertiesToMove = Properties() + with open("./properties-mover.properties", "rb") as f: + propertiesToMove.load(f, "utf-8") + return propertiesToMove.items() + + +originFile = 'record' +destinationFile = 'works' +destinationPrefix = 'works' + +languages = [ + 'ar', 'cs', 'en', 'es', 'fr', 'it', 'ja', 'ko', 'pt', 'ru', 'zh-CN', + 'zh-TW', 'xx', 'src', 'lr', 'rl', 'uk', 'ca' +] + +propertiesToMove = getPropertiesToMove() + + +def buildFilePath(originFile, language): + return './properties/' + originFile + '/' + originFile + '.' + language + '.' + 'properties' + + +for property in propertiesToMove: + print("MOVING " + property[0]) + for language in languages: + originFilePath = buildFilePath(originFile, language) + destinationFilePath = buildFilePath(destinationFile, language) + movingKey = property[0] + propertyTuple = readProperty(originFilePath, movingKey) + if not (propertyTuple is None): + movingValue = propertyTuple.data + # movingAdaptedKey = destinationFile + '.' + movingKey.replace( + # '-', '').split('.')[1] + print('movingAdaptedKey ', movingKey) + ## DELETE ORIGIN + removeProperty(originFilePath, movingKey) + ## ADD TO DESTINTION + existProperty = readProperty( + destinationFilePath, + destinationPrefix + '.' + movingKey.split('.')[1]) + if (existProperty): + addProperty(destinationFilePath, movingKey + '**', movingValue) + else: + addProperty(destinationFilePath, movingKey, movingValue) diff --git a/src/locale/properties/delegators/delegators.ca.properties b/src/locale/properties/delegators/delegators.ca.properties index f3367be3d1..5faa925160 100644 --- a/src/locale/properties/delegators/delegators.ca.properties +++ b/src/locale/properties/delegators/delegators.ca.properties @@ -1 +1,4 @@ delegators.youHave=Teniu +delegators.accounts=accounts +delegators.switchBack=Switch back to me +delegators.switchAccount=Switch to another account diff --git a/src/locale/properties/delegators/delegators.uk.properties b/src/locale/properties/delegators/delegators.uk.properties index f00637586f..654df4b535 100644 --- a/src/locale/properties/delegators/delegators.uk.properties +++ b/src/locale/properties/delegators/delegators.uk.properties @@ -1 +1,4 @@ delegators.youHave=У вас +delegators.accounts=accounts +delegators.switchBack=Switch back to me +delegators.switchAccount=Switch to another account diff --git a/src/locale/properties/environment-banner/environment-banner.ca.properties b/src/locale/properties/environment-banner/environment-banner.ca.properties new file mode 100644 index 0000000000..a12bbd2127 --- /dev/null +++ b/src/locale/properties/environment-banner/environment-banner.ca.properties @@ -0,0 +1,8 @@ +common.js.domain.warn.warning_1=Warning\! +common.js.domain.warn.warning_2=is a test website. +common.js.domain.warn.is_the_official=\u0020is the official website. Sandbox only sends email messages to +common.js.domain.warn.more_information=more information +common.js.domain.warn.mailinator=mailinator.com +common.js.domain.warn.email_addresses=\u0020email addresses, see Sandbox FAQ for +common.cookies.click_dismiss=Dismiss +environmentBanner.ariaLabelWarning=Warning, testing website diff --git a/src/locale/properties/environment-banner/environment-banner.uk.properties b/src/locale/properties/environment-banner/environment-banner.uk.properties index d90ab4b97e..d32eca3133 100644 --- a/src/locale/properties/environment-banner/environment-banner.uk.properties +++ b/src/locale/properties/environment-banner/environment-banner.uk.properties @@ -1,5 +1,8 @@ -common.js.domain.warn.mailinator=mailinator.com -common.js.domain.warn.email_addresses=\u0020електронні адреси, див. ЧАП Пісочниці для +common.js.domain.warn.warning_1=Warning\! +common.js.domain.warn.warning_2=is a test website. common.js.domain.warn.is_the_official=\u0020— офіційна веб-сторінка. Пісочниця тільки надсилаю листи електронної пошти на common.js.domain.warn.more_information=більше інформації +common.js.domain.warn.mailinator=mailinator.com +common.js.domain.warn.email_addresses=\u0020електронні адреси, див. ЧАП Пісочниці для common.cookies.click_dismiss=натисніть, щоб відхилити +environmentBanner.ariaLabelWarning=Warning, testing website diff --git a/src/locale/properties/funding/funding.ar.properties b/src/locale/properties/funding/funding.ar.properties index d41654b24b..5410b82d78 100644 --- a/src/locale/properties/funding/funding.ar.properties +++ b/src/locale/properties/funding/funding.ar.properties @@ -3,3 +3,45 @@ funding.contributors=المساهمون funding.description=الوصف funding.organizationDefinedFundingSubType=نوع التمويل الفرعي funding.translatedTitle=العنوان المترجم +funding.descriptionEmpty=أضف المنح والجوائز والتمويلات الأخرى التي تلقيتها لدعم عملك. +funding.learnMore=تعرف على المزيد حول إضافة معلومات التمويل إلى سجلك على ORCID +funding.details=تفاصيل التمويل +funding.agency=الوكالة الممولة +funding.fundingIdentifiers=معرفات التمويل +funding.type=نوع +funding.selectAType=حدد نوع التمويل +funding.award=جائزة +funding.contract=اتفاقية +funding.grant=منحة +funding.salary_award=جائزة الراتب +funding.projectTitle=عنوان المشروع المموَّل +funding.projectTitleError=الرجاء إدخال عنوان +funding.addTranslatedTitle=أضف عنواناً مترجماً +funding.hideTranslatedTitle=إخفاء العنوان المترجم +funding.fundingTypeError=حدث خطأ فيما يخص نوع التمويل المحدد +funding.invalidFundingType=نوع التمويل غير صالح +funding.projectLink=رابط المشروع +funding.projectLinkHint=رابط المشروع المدعوم بهذا التمويل. يجب أن تكون الروابط بتنسيق URL كامل، على سبيل المثال http://www.website.com/page.html +funding.addAmount=أضف مبلغاً +funding.currencyCode=- +funding.agencyName=اسم المؤسسة المموِّلة +funding.self=ذاتي +funding.partOf=جزء من +funding.selfDescription=المعرف ينطبق على جائزة التمويل نفسها. +funding.partOfDescription=ينطبق المعرّف على الجائزة الأكبر التي يكون المشروع جزءاً منها. +funding.grantNumber=رقم المنحة +funding.grantNumberColon=رقم المنحة: +funding.grantUrlColon=رابط الـ URL الخاص بالمنحة: +funding.grantUrl=رابط المنحة +funding.grantUrlHint=رابط لتوضيح مزيد من المعلومات حول جائزة التمويل +funding.addAnotherGrant=أضف معرف تمويل آخر +funding.invalidUrl=رابط غير صحيح +funding.translatedTitleLanguage=لغة هذا العنوان +funding.agencyNameError=الرجاء إدخال اسم مؤسسة +funding.whoCanSeeFunding=من يمكنه رؤية تمويلك. إعداد إمكانية الرؤية الافتراضي هو "خاص". +funding.amountError=يجب أن يكون المبلغ في صورة قيمة رقمية بتنسيق 1,234,567.89 +funding.projectTranslatedTitleLanguageError=يرجى تحديد لغة +funding.projectTranslatedTitleError=الرجاء إدخال عنوان مترجم +funding.linkFunding=ربط التمويل +funding.linkFundingMoreInfo=مزيد من المعلومات حول ربط التمويل بسجلك على ORCID +funding.selectACurrencyCode=الرجاء تحديد عملة diff --git a/src/locale/properties/funding/funding.ca.properties b/src/locale/properties/funding/funding.ca.properties index bacfb8a4d9..c862b40050 100644 --- a/src/locale/properties/funding/funding.ca.properties +++ b/src/locale/properties/funding/funding.ca.properties @@ -3,3 +3,44 @@ funding.contributors=Contributors funding.description=Description funding.organizationDefinedFundingSubType=Funding subtype funding.translatedTitle=Translated title +funding.descriptionEmpty=Add grants, awards and other funding you have received to support your work. +funding.learnMore=Learn more about adding funding information to your ORCID record +funding.details=Funding details +funding.agency=Funding agency +funding.fundingIdentifiers=Funding identifiers +funding.type=Funding type +funding.selectAType=Select a funding type +funding.award=Award +funding.contract=Contract +funding.grant=Grant +funding.salary_award=Salary award +funding.projectTitle=Title of funded project +funding.projectTitleError=Please enter a title +funding.addTranslatedTitle=Add a translated title +funding.hideTranslatedTitle=Hide translated title +funding.fundingTypeError=An error has occured for the given funding type +funding.invalidFundingType=Invalid funding type +funding.projectLink=Project link +funding.projectLinkHint=A link to the project supported by this funding. Links should be in full URL format e.g. http://www.website.com/page.html +funding.addAmount=Add an amount +funding.currencyCode=- +funding.agencyName=Funding agency name +funding.self=Un mateix +funding.partOf=Part de +funding.selfDescription=The identifier applies to the funding award itself. +funding.partOfDescription=The identifier applies to the larger award of which the project is part. +funding.grantNumber=Grant number +funding.grantNumberColon=Grant number: +funding.grantUrlColon=Grant URL: +funding.grantUrl=Grant link +funding.grantUrlHint=A link to more information about the funding award +funding.addAnotherGrant=Add another funding identifier +funding.invalidUrl=Invalid URL +funding.translatedTitleLanguage=Language of this title +funding.agencyNameError=Please enter an agency name +funding.whoCanSeeFunding=Who can see your funding. The default visibility setting is Private. +funding.amountError=Amount should be a numeric value with format 1,234,567.89 +funding.projectTranslatedTitleLanguageError=Please select a language +funding.projectTranslatedTitleError=Please enter a translated title +funding.linkFunding=Link funding +funding.linkFundingMoreInfo=More information about linking funding to your ORCID record diff --git a/src/locale/properties/funding/funding.cs.properties b/src/locale/properties/funding/funding.cs.properties index c4b8aa36b8..4f9a9c31a5 100644 --- a/src/locale/properties/funding/funding.cs.properties +++ b/src/locale/properties/funding/funding.cs.properties @@ -3,3 +3,45 @@ funding.contributors=Přispěvatelé funding.description=Popis funding.organizationDefinedFundingSubType=Podtyp financování funding.translatedTitle=Přeložený název +funding.descriptionEmpty=Přidejte granty, dotace a další financování, které jste získali na podporu svého díla. +funding.learnMore=Přečtěte si další informace o přidávání informací o financování do vašeho záznamu ORCID +funding.details=Podrobnosti o financování +funding.agency=Zdroj financování +funding.fundingIdentifiers=Identifikátory financování +funding.type=Typ financování +funding.selectAType=Vyberte typ financování +funding.award=Číslo dotace +funding.contract=Číslo smlouvy +funding.grant=Číslo grantu +funding.salary_award=Dotace na mzdy +funding.projectTitle=Název financovaného projektu +funding.projectTitleError=Prosím, zadejte titul +funding.addTranslatedTitle=Přidejte přeložený název +funding.hideTranslatedTitle=Skrýt přeložený název +funding.fundingTypeError=U daného typu financování došlo k chybě +funding.invalidFundingType=Neplatný typ financování +funding.projectLink=Odkaz na projekt +funding.projectLinkHint=Odkaz na projekt podpořený tímto financováním. Odkazy by měly být ve formátu kompletního URL, například: http://www.website.com/page.html +funding.addAmount=Přidat částku +funding.currencyCode=- +funding.agencyName=Název zdroje financování +funding.self=Vlastní +funding.partOf=Je součástí +funding.selfDescription=Identifikátor se vztahuje na samotnou finanční podporu. +funding.partOfDescription=Identifikátor se vztahuje na větší ocenění, jehož je projekt součástí. +funding.grantNumber=Číslo grantu +funding.grantNumberColon=Číslo grantu: +funding.grantUrlColon=URL grantu: +funding.grantUrl=Grantový odkaz +funding.grantUrlHint=Odkaz na další informace o dotaci +funding.addAnotherGrant=Přidat další identifikátor financování +funding.invalidUrl=Neplatná adresa URL +funding.translatedTitleLanguage=Jazyk tohoto názvu +funding.agencyNameError=Zadejte název agentury +funding.whoCanSeeFunding=Kdo může vidět vaše financování. Výchozí nastavení viditelnosti je Soukromé. +funding.amountError=Částka by měla být číselná hodnota ve formátu 1 234 567,89 +funding.projectTranslatedTitleLanguageError=Prosím, vyberte jazyk +funding.projectTranslatedTitleError=Zadejte prosím přeložený název +funding.linkFunding=Propojit financování +funding.linkFundingMoreInfo=Další informace o propojení financování s vaším záznamem ORCID +funding.selectACurrencyCode=Vyberte měnu diff --git a/src/locale/properties/funding/funding.en.properties b/src/locale/properties/funding/funding.en.properties index 2d0141c030..b665480bb4 100644 --- a/src/locale/properties/funding/funding.en.properties +++ b/src/locale/properties/funding/funding.en.properties @@ -29,12 +29,19 @@ funding.self=Self funding.partOf=Part of funding.selfDescription=The identifier applies to the funding award itself. funding.partOfDescription=The identifier applies to the larger award of which the project is part. -funding.grantNumber=Granting number -funding.grantUrl=Granting link -funding.relationship=Relationship +funding.grantNumber=Grant number +funding.grantNumberColon=Grant number: +funding.grantUrlColon=Grant URL: +funding.grantUrl=Grant link funding.grantUrlHint=A link to more information about the funding award funding.addAnotherGrant=Add another funding identifier funding.invalidUrl=Invalid URL funding.translatedTitleLanguage=Language of this title funding.agencyNameError=Please enter an agency name funding.whoCanSeeFunding=Who can see your funding. The default visibility setting is Private. +funding.amountError=Amount should be a numeric value with format 1,234,567.89 +funding.projectTranslatedTitleLanguageError=Please select a language +funding.projectTranslatedTitleError=Please enter a translated title +funding.linkFunding=Link funding +funding.linkFundingMoreInfo=More information about linking funding to your ORCID record +funding.selectACurrencyCode=Please select a currency diff --git a/src/locale/properties/funding/funding.es.properties b/src/locale/properties/funding/funding.es.properties index a5f040ea64..dbea0e6d1c 100644 --- a/src/locale/properties/funding/funding.es.properties +++ b/src/locale/properties/funding/funding.es.properties @@ -3,3 +3,45 @@ funding.contributors=Contribuyentes funding.description=Descripción funding.organizationDefinedFundingSubType=Sub-tipo de financiamiento funding.translatedTitle=Título traducido +funding.descriptionEmpty=Añada concesiones, premios y otros fondos que haya recibido para respaldar su trabajo. +funding.learnMore=Obtenga más información sobre cómo añadir información de financiación a su registro ORCID +funding.details=Datos de financiación +funding.agency=Agencia financiadora +funding.fundingIdentifiers=Identificadores de financiación +funding.type=Tipo de financiamiento +funding.selectAType=Seleccione un tipo de financiación +funding.award=Adjudicación +funding.contract=Contrato +funding.grant=Subvención +funding.salary_award=Adjudicación de salario +funding.projectTitle=Título del proyecto financiado +funding.projectTitleError=Por favor ingresa un título +funding.addTranslatedTitle=Agregar un título traducido +funding.hideTranslatedTitle=Ocultar el título traducido +funding.fundingTypeError=Se ha producido un error para el tipo de financiación especificado. +funding.invalidFundingType=Tipo de financiación no válido +funding.projectLink=Enlace del proyecto +funding.projectLinkHint=Un enlace al proyecto apoyado por esta financiación. Los enlaces deben estar en formato de URL completo, por ejemplo: http://www.website.com/page.html +funding.addAmount=Agregar una cantidad +funding.currencyCode=- +funding.agencyName=Nombre de la agencia de financiamiento +funding.self=Propio +funding.partOf=Parte de +funding.selfDescription=El identificador se aplica a la concesión de financiación misma. +funding.partOfDescription=El identificador se aplica al mayor premio concedido al proyecto. +funding.grantNumber=Número de subvención +funding.grantNumberColon=Número de la concesión: +funding.grantUrlColon=URL de la concesión: +funding.grantUrl=Enlace a la concesión +funding.grantUrlHint=Un enlace para obtener más información sobre la concesión de financiación +funding.addAnotherGrant=Añada otro identificador de financiación +funding.invalidUrl=URL inválida +funding.translatedTitleLanguage=Idioma de este título +funding.agencyNameError=Introduzca el nombre de una agencia +funding.whoCanSeeFunding=Quién puede ver su financiación. La configuración de visibilidad predeterminada es "Privado". +funding.amountError=La cantidad debe ser un valor numérico con formato 1,234,567.89 +funding.projectTranslatedTitleLanguageError=Seleccione un idioma +funding.projectTranslatedTitleError=Introduzca un título traducido +funding.linkFunding=Vincular financiación +funding.linkFundingMoreInfo=Más información sobre cómo vincular la financiación a su registro ORCID +funding.selectACurrencyCode=Seleccione una moneda diff --git a/src/locale/properties/funding/funding.fr.properties b/src/locale/properties/funding/funding.fr.properties index 157901b166..71ddfbf766 100644 --- a/src/locale/properties/funding/funding.fr.properties +++ b/src/locale/properties/funding/funding.fr.properties @@ -3,3 +3,45 @@ funding.contributors=Contributeurs funding.description=Description funding.organizationDefinedFundingSubType=Sous-type de financement funding.translatedTitle=Titre traduit +funding.descriptionEmpty=Ajoutez les subventions, prix et autres financements que vous avez reçus pour soutenir votre travail. +funding.learnMore=Apprenez-en davantage au sujet de l'ajout des informations de financement à votre dossier ORCID. +funding.details=Informations relatives au financement +funding.agency=Agence de financement +funding.fundingIdentifiers=Identifiants de financements +funding.type=Type de financement +funding.selectAType=Sélectionner un type de financement +funding.award=Bourse +funding.contract=Contrat +funding.grant=Subvention +funding.salary_award=Subvention salariée +funding.projectTitle=Titre du projet financé +funding.projectTitleError=Saisissez un titre +funding.addTranslatedTitle=Ajouter un titre traduit +funding.hideTranslatedTitle=Masquer le titre traduit +funding.fundingTypeError=Une erreur s'est produite pour le type de financement donné. +funding.invalidFundingType=Type de financement non valide +funding.projectLink=Lien vers le projet +funding.projectLinkHint=Un lien vers le projet soutenu par ce financement. Les liens doivent être au format URL complète, comme, par exemple, http://www.website.com/page.html. +funding.addAmount=Ajouter un montant +funding.currencyCode=– +funding.agencyName=Nom de l'agence de financement +funding.self=Soi-même +funding.partOf=partie de +funding.selfDescription=L'identifiant s'applique à l'octroi du financement lui-même. +funding.partOfDescription=L'identifiant s'applique à un octroi plus important dont le projet fait partie. +funding.grantNumber=Numéro de subvention +funding.grantNumberColon=Numéro de subvention : +funding.grantUrlColon=URL de la subvention : +funding.grantUrl=Lien vers la subvention +funding.grantUrlHint=Un lien vers plus d'informations au sujet de l'octroi de la subvention +funding.addAnotherGrant=Ajouter un autre identifiant de financement +funding.invalidUrl=URL non valide +funding.translatedTitleLanguage=Langue de ce titre +funding.agencyNameError=Veuillez saisir le nom d'une institution +funding.whoCanSeeFunding=Qui peut voir votre financement. Le paramètre de visibilité par défaut est « Privé ». +funding.amountError=Le montant doit être une valeur numérique au format 1,234,567.89 +funding.projectTranslatedTitleLanguageError=Veuillez sélectionner une langue. +funding.projectTranslatedTitleError=Veuillez entrer un titre traduit. +funding.linkFunding=Créer un lien vers le financement +funding.linkFundingMoreInfo=Plus d'informations au sujet de la création d'un lien vers le financement dans votre dossier ORCID +funding.selectACurrencyCode=Veuillez sélectionner une devise diff --git a/src/locale/properties/funding/funding.it.properties b/src/locale/properties/funding/funding.it.properties index 32acd67bd2..66ce19e6da 100644 --- a/src/locale/properties/funding/funding.it.properties +++ b/src/locale/properties/funding/funding.it.properties @@ -3,3 +3,45 @@ funding.contributors=Partecipanti funding.description=Descrizione funding.organizationDefinedFundingSubType=Sottotipo di finanziamento funding.translatedTitle=Titolo tradotto +funding.descriptionEmpty=Aggiungi borse, premi o altre fonti di finanziamenti che hai ricevuto per supportare il tuo lavoro. +funding.learnMore=Scopri di più su come aggiungere le informazioni sui finanziamenti al tuo record ORCID +funding.details=Dettagli sul finanziamento +funding.agency=Ente finanziatore +funding.fundingIdentifiers=Identificatori del finanziamento +funding.type=Tipo di finanziamento +funding.selectAType=Seleziona un tipo di finanziamento +funding.award=Premio +funding.contract=Contratto +funding.grant=Fondo di ricerca/Grant +funding.salary_award=Incentivo sullo stipendio +funding.projectTitle=Titolo +funding.projectTitleError=Inserire il titolo +funding.addTranslatedTitle=Aggiungi un titolo tradotto +funding.hideTranslatedTitle=Nascondi titolo tradotto +funding.fundingTypeError=Si è verificato un errore per il tipo di finanziamento fornito +funding.invalidFundingType=Tipo di finanziamento non valido +funding.projectLink=Link al progetto +funding.projectLinkHint=Un link al progetto supportato da questo finanziamento. I link devono contenere l'URL completa, per es. http://www.sitoweb.com/pagina.html +funding.addAmount=Inserire un importo +funding.currencyCode=- +funding.agencyName=Nome dell'Ente finanziatore +funding.self=Auto +funding.partOf=Parte di +funding.selfDescription=L'identificatore è valido direttamente per il premio di finanziamento. +funding.partOfDescription=L'identificatore è valido per il premio superiore del quale il progetto fa parte. +funding.grantNumber=Numero del fondo di ricerca +funding.grantNumberColon=Numero della borsa: +funding.grantUrlColon=URL borsa: +funding.grantUrl=Link al finanziamento +funding.grantUrlHint=Un link per altre informazioni sul premio per il finanziamento +funding.addAnotherGrant=Aggiungi un altro identificatore per il finanziamento +funding.invalidUrl=URL non valido +funding.translatedTitleLanguage=Lingua di questo titolo +funding.agencyNameError=Inserisci il nome di un'agenzia +funding.whoCanSeeFunding=Chi può vedere i tuoi finanziamenti. L'impostazione predefinita è Privati. +funding.amountError=L'importo deve essere un numero nel formato 1,234,567.89 +funding.projectTranslatedTitleLanguageError=Seleziona una lingua +funding.projectTranslatedTitleError=Inserisci un titolo tradotto +funding.linkFunding=Collega i finanziamenti +funding.linkFundingMoreInfo=Altre informazioni su come collegare i tuoi finanziamenti al tuo record ORCID +funding.selectACurrencyCode=Selezionare una valuta diff --git a/src/locale/properties/funding/funding.ja.properties b/src/locale/properties/funding/funding.ja.properties index cffecbd7fb..334cfbabac 100644 --- a/src/locale/properties/funding/funding.ja.properties +++ b/src/locale/properties/funding/funding.ja.properties @@ -3,3 +3,45 @@ funding.contributors=寄与者 funding.description=説明 funding.organizationDefinedFundingSubType=研究助成サブタイプ funding.translatedTitle=翻訳済みタイトル +funding.descriptionEmpty=あなたの作品をサポートするためにこれまでに受け取った助成金、賞、その他の資金を追加します。 +funding.learnMore=ORCIDレコードへの資金調達情報の追加について、詳しくはこちらをご覧ください +funding.details=ファンディングの詳細 +funding.agency=研究助成機関 +funding.fundingIdentifiers=ファンディングの識別子 +funding.type=研究助成タイプ +funding.selectAType=資金調達タイプを選択する +funding.award=受賞 +funding.contract=契約 +funding.grant=研究助成 +funding.salary_award=給与支払 +funding.projectTitle=研究助成を受けたプロジェクトのタイトル +funding.projectTitleError=タイトルを入力してください +funding.addTranslatedTitle=翻訳されたタイトルを追加する +funding.hideTranslatedTitle=翻訳されたタイトルを非表示にする +funding.fundingTypeError=指定された資金調達タイプでエラーが発生しました +funding.invalidFundingType=無効な資金調達タイプ +funding.projectLink=プロジェクトリンク +funding.projectLinkHint=この資金調達でサポートされているプロジェクトへのリンク。リンクは完全なURL形式でなければなりません(例:http://www.website.com/page.html) +funding.addAmount=金額の追加 +funding.currencyCode=- +funding.agencyName=研究助成機関名 +funding.self=自身 +funding.partOf=次の一部 +funding.selfDescription=識別子は資金調達賞自体に適用されます。 +funding.partOfDescription=識別子は、プロジェクトが含まれるより大きな賞に適用されます。 +funding.grantNumber=研究助成番号 +funding.grantNumberColon=助成金番号: +funding.grantUrlColon=助成金URL: +funding.grantUrl=助成金リンク +funding.grantUrlHint=資金調達賞に関する詳細情報へのリンク +funding.addAnotherGrant=別の資金調達識別子を追加する +funding.invalidUrl=無効な URL +funding.translatedTitleLanguage=このタイトルの言語 +funding.agencyNameError=機関名を入力してください +funding.whoCanSeeFunding=誰があなたの資金調達を見ることができるか。デフォルトの表示設定は「非公開」です。 +funding.amountError=金額は、1,234,567.89の形式の数値である必要があります +funding.projectTranslatedTitleLanguageError=言語を選択してください +funding.projectTranslatedTitleError=翻訳されたタイトルを入力してください +funding.linkFunding=資金調達をリンクする +funding.linkFundingMoreInfo=ORCIDレコードへの資金調達のリンクに関する詳細情報 +funding.selectACurrencyCode=通貨を選択してください diff --git a/src/locale/properties/funding/funding.ko.properties b/src/locale/properties/funding/funding.ko.properties index 1854bbc3cf..7e2011b11e 100644 --- a/src/locale/properties/funding/funding.ko.properties +++ b/src/locale/properties/funding/funding.ko.properties @@ -3,3 +3,45 @@ funding.contributors=기부자 funding.description=설명 funding.organizationDefinedFundingSubType=자금지원 하위유형 funding.translatedTitle=번역된 제목 +funding.descriptionEmpty=작업에 지원 받은 보조금, 상금, 기타 펀딩 등 추가하기 +funding.learnMore=ORCID 기록에 펀딩 정보를 추가하는 방법에 대해 더 알아보기 +funding.details=펀딩 세부 사항 +funding.agency=자금 지원 기관 +funding.fundingIdentifiers=펀딩 식별자 +funding.type=자금 지원 유형 +funding.selectAType=펀딩 유형 선택 +funding.award=수여 +funding.contract=계약 +funding.grant=보조금 +funding.salary_award=급여 지원 +funding.projectTitle=자금 지원된 프로젝트 이름 +funding.projectTitleError=제목을 입력하십시오. +funding.addTranslatedTitle=번역한 제목 추가하기 +funding.hideTranslatedTitle=번역된 제목 가리기 +funding.fundingTypeError=주어진 펀딩 종류에 대해 에러가 발생했습니다 +funding.invalidFundingType=펀딩 유형이 유효하지 않음 +funding.projectLink=프로젝트 연결 +funding.projectLinkHint=이 펀딩의 지원을 받는 프로젝트의 링크입니다. 링크는 반드시 전체 URL 형식이어야 합니다. 예) http://www.website.com/page.html +funding.addAmount=금액 추가 +funding.currencyCode=- +funding.agencyName=자금 지원 기관 이름 +funding.self=자신 +funding.partOf=부분 +funding.selfDescription=해당 식별자는 펀딩 상 자체에만 적용됩니다. +funding.partOfDescription=이 식별자는 프로젝트가 속한 큰 수상 경력에 적용됩니다. +funding.grantNumber=과제번호 +funding.grantNumberColon=허가 번호: +funding.grantUrlColon=승인 URL: +funding.grantUrl=링크 부여 +funding.grantUrlHint=펀딩 상에 대한 추가 정보로 가는 링크 +funding.addAnotherGrant=다른 펀딩 식별자 추가하기 +funding.invalidUrl=잘못된 URL +funding.translatedTitleLanguage=이 제목의 언어 +funding.agencyNameError=에이전시 이름을 입력해 주세요 +funding.whoCanSeeFunding=당신의 펀딩은 누가 볼 수 있나요? 공개 범위 설정의 기본값은 '나만 보기'입니다. +funding.amountError=금액은 1,234,567.89와 같은 형식의 숫자로 표시해야 합니다 +funding.projectTranslatedTitleLanguageError=언어를 선택해 주세요 +funding.projectTranslatedTitleError=번역된 제목을 입력하세요 +funding.linkFunding=펀딩 연결하기 +funding.linkFundingMoreInfo=ORCID 기록에 펀딩 연결하기에 대한 더 많은 정보 +funding.selectACurrencyCode=통화를 선택하세요 diff --git a/src/locale/properties/funding/funding.lr.properties b/src/locale/properties/funding/funding.lr.properties index 01174c89fc..506c502051 100644 --- a/src/locale/properties/funding/funding.lr.properties +++ b/src/locale/properties/funding/funding.lr.properties @@ -31,10 +31,18 @@ funding.selfDescription=LR funding.partOfDescription=LR funding.grantNumber=LR funding.grantUrl=LR -funding.relationship=LR +shared.relationship=LR funding.grantUrlHint=LR funding.addAnotherGrant=LR funding.invalidUrl=LR funding.translatedTitleLanguage=LR funding.agencyNameError=LR funding.whoCanSeeFunding=LR +funding.amountError=LR +funding.projectTranslatedTitleLanguageError=LR +funding.projectTranslatedTitleError=LR +funding.linkFunding=LR +funding.linkFundingMoreInfo=LR +funding.grantNumberColon=LR +funding.grantUrlColon=LR +funding.selectACurrencyCode=LR diff --git a/src/locale/properties/funding/funding.pt.properties b/src/locale/properties/funding/funding.pt.properties index 53d842f017..8c55e2c429 100644 --- a/src/locale/properties/funding/funding.pt.properties +++ b/src/locale/properties/funding/funding.pt.properties @@ -3,3 +3,45 @@ funding.contributors=Contribuidores funding.description=Descrição funding.organizationDefinedFundingSubType=Subtipo de financiamento funding.translatedTitle=Título traduzido +funding.descriptionEmpty=Adicionar verbas, prémios e outro financiamento que tenha recebido para apoiar o seu projeto. +funding.learnMore=Saiba mais sobre como adicionar informações de financiamento ao seu registo ORCID +funding.details=Informações de financiamento +funding.agency=Agência financiadora +funding.fundingIdentifiers=Identificadores de financiamento +funding.type=Tipo de financiamento +funding.selectAType=Selecione um tipo de financiamento +funding.award=Prêmio +funding.contract=Contrato +funding.grant=Bolsa +funding.salary_award=Salário prêmio +funding.projectTitle=Título do projeto financiado +funding.projectTitleError=Insira um título +funding.addTranslatedTitle=Adicione um título traduzido +funding.hideTranslatedTitle=Ocultar título traduzido +funding.fundingTypeError=Ocorreu um erro para o tipo de financiamento indicado +funding.invalidFundingType=Tipo de financiamento inválido +funding.projectLink=Hiperligação do projeto +funding.projectLinkHint=Uma hiperligação para o projeto apoiado por este financiamento. As hiperligações devem estar em formato de URL completo, por exemplo http://www.website.com/page.html +funding.addAmount=Adicionar uma quantia +funding.currencyCode=- +funding.agencyName=Nome da agência de financiamento +funding.self=Próprio +funding.partOf=Parte de +funding.selfDescription=O identificador aplica-se ao próprio prémio de financiamento. +funding.partOfDescription=O identificador aplica-se ao prémio maior do qual o projeto faz parte. +funding.grantNumber=Número da bolsa +funding.grantNumberColon=Período da concessão: +funding.grantUrlColon=URL da verba: +funding.grantUrl=Ligação da verba +funding.grantUrlHint=Uma hiperligação para mais informações sobre o prémio de financiamento +funding.addAnotherGrant=Adicione outro identificador de financiamento +funding.invalidUrl=URL inválida +funding.translatedTitleLanguage=Idioma deste título +funding.agencyNameError=Introduza um nome de agência +funding.whoCanSeeFunding=Quem pode ver o seu financiamento. A configuração de visibilidade padrão é Privada. +funding.amountError=O montante deve ser um valor numérico em formato 1 234 567,89 +funding.projectTranslatedTitleLanguageError=Selecione um idioma +funding.projectTranslatedTitleError=Introduza um título traduzido +funding.linkFunding=Hiperligação de financiamento +funding.linkFundingMoreInfo=Mais informações sobre como conectar o financiamento ao seu registo ORCID +funding.selectACurrencyCode=Selecione uma moeda diff --git a/src/locale/properties/funding/funding.rl.properties b/src/locale/properties/funding/funding.rl.properties index 1bc79973d6..163f575861 100644 --- a/src/locale/properties/funding/funding.rl.properties +++ b/src/locale/properties/funding/funding.rl.properties @@ -31,10 +31,18 @@ funding.selfDescription=RL funding.partOfDescription=RL funding.grantNumber=RL funding.grantUrl=RL -funding.relationship=RL +shared.relationship=RL funding.grantUrlHint=RL funding.addAnotherGrant=RL funding.invalidUrl=RL funding.translatedTitleLanguage=RL funding.agencyNameError=RL funding.whoCanSeeFunding=RL +funding.amountError=RL +funding.projectTranslatedTitleLanguageError=RL +funding.projectTranslatedTitleError=RL +funding.linkFunding=RL +funding.linkFundingMoreInfo=RL +funding.grantNumberColon=RL +funding.grantUrlColon=RL +funding.selectACurrencyCode=RL diff --git a/src/locale/properties/funding/funding.ru.properties b/src/locale/properties/funding/funding.ru.properties index 24861c4253..8d21327872 100644 --- a/src/locale/properties/funding/funding.ru.properties +++ b/src/locale/properties/funding/funding.ru.properties @@ -3,3 +3,45 @@ funding.contributors=Исследователи funding.description=Описание funding.organizationDefinedFundingSubType=Подтип спонсорства funding.translatedTitle=Перевод названия +funding.descriptionEmpty=Добавьте гранты, награды и другое финансирование, которое вы получили для поддержки своей работы. +funding.learnMore=Узнайте больше о добавлении информации о финансировании в вашу запись ORCID +funding.details=Сведения о финансировании +funding.agency=Спонсорское агентство +funding.fundingIdentifiers=Идентификаторы финансирования +funding.type=Тип финансирования +funding.selectAType=Выберите тип финансирования +funding.award=Награда +funding.contract=Контракт +funding.grant=Грант +funding.salary_award=Вознаграждение +funding.projectTitle=Название финансируемого проекта +funding.projectTitleError=Введите должность +funding.addTranslatedTitle=Добавить переведенный заголовок +funding.hideTranslatedTitle=Скрыть переведенный заголовок +funding.fundingTypeError=Произошла ошибка для данного типа финансирования +funding.invalidFundingType=Неверный тип финансирования +funding.projectLink=Ссылка на проект +funding.projectLinkHint=Ссылка на проект, поддерживаемый данным финансированием. Ссылки должны быть в формате полного URL-адреса. Например: http://www.website.com/page.html +funding.addAmount=Добавить сумму +funding.currencyCode=- +funding.agencyName=Название финансирующей организации +funding.self=Самостоятельный +funding.partOf=Часть +funding.selfDescription=Идентификатор относится к самому присуждению финансирования. +funding.partOfDescription=Идентификатор применяется к более крупной награде, частью которой является проект. +funding.grantNumber=Номер гранта +funding.grantNumberColon=Номер гранта: +funding.grantUrlColon=Ссылка на грант: +funding.grantUrl=Ссылка на грант +funding.grantUrlHint=Ссылка на дополнительную информацию об утверждении финансирования +funding.addAnotherGrant=Добавить еще один идентификатор финансирования +funding.invalidUrl=Недействительный URL +funding.translatedTitleLanguage=Язык заголовка +funding.agencyNameError=Введите название агентства +funding.whoCanSeeFunding=Кто может видеть ваше финансирование. По умолчанию видимость приватная. +funding.amountError=Сумма должна быть числовым значением в формате 1 234 567,89. +funding.projectTranslatedTitleLanguageError=Выберите язык +funding.projectTranslatedTitleError=Введите переведенный заголовок +funding.linkFunding=Привязать финансирование +funding.linkFundingMoreInfo=Подробнее о привязке финансирования к вашей записи ORCID +funding.selectACurrencyCode=Выберите валюту diff --git a/src/locale/properties/funding/funding.uk.properties b/src/locale/properties/funding/funding.uk.properties index 0fcb5d9d36..f1849ef036 100644 --- a/src/locale/properties/funding/funding.uk.properties +++ b/src/locale/properties/funding/funding.uk.properties @@ -3,3 +3,44 @@ funding.contributors=Учасники funding.description=Опис funding.organizationDefinedFundingSubType=Funding subtype funding.translatedTitle=Перекладена назва +funding.descriptionEmpty=Add grants, awards and other funding you have received to support your work. +funding.learnMore=Learn more about adding funding information to your ORCID record +funding.details=Funding details +funding.agency=Funding agency +funding.fundingIdentifiers=Funding identifiers +funding.type=Funding type +funding.selectAType=Select a funding type +funding.award=НАГОРОДА +funding.contract=Угода +funding.grant=Ґрант +funding.salary_award=Salary award +funding.projectTitle=Назва фінансованого проекту +funding.projectTitleError=Введіть посаду +funding.addTranslatedTitle=Add a translated title +funding.hideTranslatedTitle=Hide translated title +funding.fundingTypeError=An error has occured for the given funding type +funding.invalidFundingType=Invalid funding type +funding.projectLink=Project link +funding.projectLinkHint=A link to the project supported by this funding. Links should be in full URL format e.g. http://www.website.com/page.html +funding.addAmount=Add an amount +funding.currencyCode=- +funding.agencyName=Funding agency name +funding.self=Самостійний +funding.partOf=Частина +funding.selfDescription=The identifier applies to the funding award itself. +funding.partOfDescription=The identifier applies to the larger award of which the project is part. +funding.grantNumber=Номер ґранту +funding.grantNumberColon=Grant number: +funding.grantUrlColon=Grant URL: +funding.grantUrl=Grant link +funding.grantUrlHint=A link to more information about the funding award +funding.addAnotherGrant=Add another funding identifier +funding.invalidUrl=Недійсне URL +funding.translatedTitleLanguage=Мова цього заголовку +funding.agencyNameError=Please enter an agency name +funding.whoCanSeeFunding=Who can see your funding. The default visibility setting is Private. +funding.amountError=Amount should be a numeric value with format 1,234,567.89 +funding.projectTranslatedTitleLanguageError=Please select a language +funding.projectTranslatedTitleError=Please enter a translated title +funding.linkFunding=Link funding +funding.linkFundingMoreInfo=More information about linking funding to your ORCID record diff --git a/src/locale/properties/funding/funding.xx.properties b/src/locale/properties/funding/funding.xx.properties index dc8616ce02..697c7c34c7 100644 --- a/src/locale/properties/funding/funding.xx.properties +++ b/src/locale/properties/funding/funding.xx.properties @@ -31,10 +31,18 @@ funding.selfDescription=X funding.partOfDescription=X funding.grantNumber=X funding.grantUrl=X -funding.relationship=X +shared.relationship=X funding.grantUrlHint=X funding.addAnotherGrant=X funding.invalidUrl=X funding.translatedTitleLanguage=X funding.agencyNameError=X funding.whoCanSeeFunding=X +funding.amountError=X +funding.projectTranslatedTitleLanguageError=X +funding.projectTranslatedTitleError=X +funding.linkFunding=X +funding.linkFundingMoreInfo=X +funding.grantNumberColon=X +funding.grantUrlColon=X +funding.selectACurrencyCode=X diff --git a/src/locale/properties/funding/funding.zh_CN.properties b/src/locale/properties/funding/funding.zh_CN.properties index 99d4f2a0b7..6fc482e0e9 100644 --- a/src/locale/properties/funding/funding.zh_CN.properties +++ b/src/locale/properties/funding/funding.zh_CN.properties @@ -3,3 +3,45 @@ funding.contributors=参与者 funding.description=说明 funding.organizationDefinedFundingSubType=资助子类型 funding.translatedTitle=翻译的标题 +funding.descriptionEmpty=添加基金、奖项和其他项目支持来源。 +funding.learnMore=了解向 ORCID 记录添加基金信息的详情 +funding.details=基金详情 +funding.agency=资助机构 +funding.fundingIdentifiers=基金识别码 +funding.type=资金类型 +funding.selectAType=选择基金种类 +funding.award=奖励 +funding.contract=合同 +funding.grant=授权 +funding.salary_award=工资奖励 +funding.projectTitle=受资助项目的标题 +funding.projectTitleError=请输入标题 +funding.addTranslatedTitle=添加已翻译的标题 +funding.hideTranslatedTitle=隐藏已翻译的标题 +funding.fundingTypeError=已输入的基金种类有误 +funding.invalidFundingType=无效的基金种类 +funding.projectLink=项目链接 +funding.projectLinkHint=此基金支持的项目链接。链接应采用完整的 URL 格式,例如:http://www.website.com/page.html +funding.addAmount=添加金额 +funding.currencyCode=— +funding.agencyName=资助机构的名称 +funding.self=自己 +funding.partOf=部分 +funding.selfDescription=此识别码用于识别基金奖项。 +funding.partOfDescription=此识别码用于识别更大的项目基金奖项。 +funding.grantNumber=授权编号 +funding.grantNumberColon=批准编号: +funding.grantUrlColon=批准链接: +funding.grantUrl=批准链接 +funding.grantUrlHint=与此基金奖项更多相关信息的链接 +funding.addAnotherGrant=添加其他基金识别码 +funding.invalidUrl=无效 URL +funding.translatedTitleLanguage=此标题的语言 +funding.agencyNameError=请输入机构名 +funding.whoCanSeeFunding=谁可以看见您的基金。默认仅自己可见。 +funding.amountError=数量表述必须为数值,以 1,234,567.89 的格式输入 +funding.projectTranslatedTitleLanguageError=选择语言 +funding.projectTranslatedTitleError=请输入已翻译的标题 +funding.linkFunding=基金链接 +funding.linkFundingMoreInfo=有关如何将基金链接到您的 ORCID 记录的更多信息 +funding.selectACurrencyCode=请选择一个币种 diff --git a/src/locale/properties/funding/funding.zh_TW.properties b/src/locale/properties/funding/funding.zh_TW.properties index 6bb1e41b25..bade464c6d 100644 --- a/src/locale/properties/funding/funding.zh_TW.properties +++ b/src/locale/properties/funding/funding.zh_TW.properties @@ -3,3 +3,45 @@ funding.contributors=投稿人 funding.description=描述 funding.organizationDefinedFundingSubType=資助子類別 funding.translatedTitle=翻譯的標題 +funding.descriptionEmpty=新增您的工作曾獲得的核准、獎項和補助等支援。 +funding.learnMore=了解更多新增補助資訊至您的 ORCID 紀錄的相關幫助 +funding.details=補助詳細內容 +funding.agency=資助機構 +funding.fundingIdentifiers=補助識別碼 +funding.type=資助類別 +funding.selectAType=選擇補助形式 +funding.award=獎勵 +funding.contract=合約 +funding.grant=補助金 +funding.salary_award=薪資獎勵 +funding.projectTitle=受資助專案的標題 +funding.projectTitleError=請輸入標題 +funding.addTranslatedTitle=新增標題翻譯 +funding.hideTranslatedTitle=隱藏標題翻譯 +funding.fundingTypeError=已輸入的補助形式發生錯誤 +funding.invalidFundingType=無效的補助形式 +funding.projectLink=計畫連結 +funding.projectLinkHint=由此補助所支援計畫的連結。連結必須為完整網址,例如: http://www.website.com/page.html +funding.addAmount=新增金額 +funding.currencyCode=— +funding.agencyName=資助機構的名稱 +funding.self=自己 +funding.partOf=部分 +funding.selfDescription=此識別碼適用於補助獎項本身。 +funding.partOfDescription=此識別碼適用於計畫所屬的更大獎項 +funding.grantNumber=補助金編號 +funding.grantNumberColon=已批准數值: +funding.grantUrlColon=已批准網址: +funding.grantUrl=已批准連結: +funding.grantUrlHint=有關補助與獎項更多相關資訊的連結 +funding.addAnotherGrant=新增補助識別碼 +funding.invalidUrl=無效 URL +funding.translatedTitleLanguage=此標題的語言 +funding.agencyNameError=請輸入機關名稱 +funding.whoCanSeeFunding=誰可以看見你的補助。預設的可見性為私人。 +funding.amountError=數量表示方式必須為數值,並以如 1,234,567.89 的格式輸入。 +funding.projectTranslatedTitleLanguageError=敬請選擇語言 +funding.projectTranslatedTitleError=請輸入標題翻譯 +funding.linkFunding=連結補助 +funding.linkFundingMoreInfo=連結補助與 ORCID 紀錄的更多相關資訊 +funding.selectACurrencyCode=請選擇貨幣 diff --git a/src/locale/properties/home/home.ca.properties b/src/locale/properties/home/home.ca.properties index ff5428f0ca..467ed315be 100644 --- a/src/locale/properties/home/home.ca.properties +++ b/src/locale/properties/home/home.ca.properties @@ -11,3 +11,14 @@ home.three=3 home.curious_about=Sentiu curiositat per saber qui en són membres? home.see_our=Vegeu el llistat complet de membres institucionals home.three_easy=TRES PASSOS FÀCILS +ngOrcid.fullOrcid=FULL ARTICLE +ngOrcid.moreNews=MORE NEWS +ngOrcid.membersMakeOrcid=Our organizational members make ORCID possible! +ngOrcid.getYourOrcid=Get your unique ORCID identifier. It’s free and only takes a minute, so +ngOrcid.findOutMore=FIND OUT MORE ABOUT OUR MISSION AND VALUES +ngOrcid.orcidProvides=ORCID provides a persistent digital identifier (an ORCID iD) that you own and control, and that distinguishes you from every other researcher. You can connect your iD with your professional information — affiliations, grants, publications, peer review, and more. You can use your iD to share your information with other systems, ensuring you get recognition for all your contributions, saving you time and hassle, and reducing the risk of errors. +ngOrcid.enhanceYourProfile=The more information connected to your ORCID record, the more you’ll benefit from sharing your iD - so give the organizations you trust permission to update your record as well as adding your affiliations, emails, other names you’re known by, and more. +ngOrcid.includeYourId=Use your iD, when prompted, in systems and platforms from grant application to manuscript submission and beyond, to ensure you get credit for your contributions. +ngOrcid.orcidIs=ORCID is a non-profit organization supported by a global community of member organizations, including research institutions, publishers, funders, professional associations, service providers, and other stakeholders in the research ecosystem. +ngOrcid.shareYourOrcid=SHARE YOUR ORCID iD +home.ariaLabelNews=News diff --git a/src/locale/properties/home/home.uk.properties b/src/locale/properties/home/home.uk.properties index a8ce5ce6f7..9373638393 100644 --- a/src/locale/properties/home/home.uk.properties +++ b/src/locale/properties/home/home.uk.properties @@ -11,3 +11,14 @@ home.three=3 home.curious_about=Цікавить, хто є нашими членами? home.see_our=Перегляньте наш повний список усіх членських організацій home.three_easy=ЗА ТРИ ПРОСТІ КРОКИ +ngOrcid.fullOrcid=FULL ARTICLE +ngOrcid.moreNews=MORE NEWS +ngOrcid.membersMakeOrcid=Our organizational members make ORCID possible! +ngOrcid.getYourOrcid=Get your unique ORCID identifier. It’s free and only takes a minute, so +ngOrcid.findOutMore=FIND OUT MORE ABOUT OUR MISSION AND VALUES +ngOrcid.orcidProvides=ORCID provides a persistent digital identifier (an ORCID iD) that you own and control, and that distinguishes you from every other researcher. You can connect your iD with your professional information — affiliations, grants, publications, peer review, and more. You can use your iD to share your information with other systems, ensuring you get recognition for all your contributions, saving you time and hassle, and reducing the risk of errors. +ngOrcid.enhanceYourProfile=The more information connected to your ORCID record, the more you’ll benefit from sharing your iD - so give the organizations you trust permission to update your record as well as adding your affiliations, emails, other names you’re known by, and more. +ngOrcid.includeYourId=Use your iD, when prompted, in systems and platforms from grant application to manuscript submission and beyond, to ensure you get credit for your contributions. +ngOrcid.orcidIs=ORCID is a non-profit organization supported by a global community of member organizations, including research institutions, publishers, funders, professional associations, service providers, and other stakeholders in the research ecosystem. +ngOrcid.shareYourOrcid=SHARE YOUR ORCID iD +home.ariaLabelNews=News diff --git a/src/locale/properties/inbox/inbox.ca.properties b/src/locale/properties/inbox/inbox.ca.properties index 71911105f3..f45b4b3110 100644 --- a/src/locale/properties/inbox/inbox.ca.properties +++ b/src/locale/properties/inbox/inbox.ca.properties @@ -1,6 +1,46 @@ +inbox.yourRecord=YOUR RECORD +inbox.permissions=PERMISSIONS +inbox.announcement=ANNOUNCEMENT +inbox.hadMadeChanges=has made changes to your ORCID record +inbox.connectingYour=Connecting your +inbox.accountWithYourOrcid=account with your ORCID record inbox.affiliations=Afiliacions +inbox.bio=Bio +inbox.sectionOf=section of your record: +inbox.updateThe=has updated the +inbox.distinction=Distinction inbox.education=Formació inbox.employment=Ocupació +inbox.externalIdentifiers=External Identifiers inbox.funding=Finançament +inbox.invitedPosition=Invited position +inbox.membership=Membership +inbox.peerReview=Peer Review inbox.preferences=Preferències +inbox.qualification=Qualification +inbox.researchResource=Research Resource +inbox.service=Service +inbox.work=Work +inbox.unknown=unknown +inbox.newItemAdded=Added +inbox.itemUpdate=Updated +inbox.deleteItem=Deleted +inbox.otherUpdate=Other +inbox.archive=archive +inbox.grantPermission=Grant permission +inbox.likeYourPermission=would like your permission to interact with your ORCID Record as a trusted party. +inbox.youCanNowSignin=You can now sign in to ORCID with your +inbox.account=account +inbox.pleaseCompleteThe=Please complete the process by connecting inbox.yourOrcidRecord=amb el vostre dossier d'ORCID. +inbox.showMoreNotifications=Show more notifications +inbox.selectAll=Select All +inbox.archiveSelected=Archive selected +inbox.notifications=Notifications +inbox.hideArchived=Hide archived +inbox.showArchived=Show archived +inbox.accountSetting=account settings. +inbox.youCanManage=You can manage the frequency of your ORCID notifications in your +inbox.youDontHaveUnarchived=You don't have any unarchived notifications right now. +inbox.youDontHave=You don’t have any notifications yet. +inbox.archiveWithout=Archive without granting permissions diff --git a/src/locale/properties/inbox/inbox.uk.properties b/src/locale/properties/inbox/inbox.uk.properties new file mode 100644 index 0000000000..21571261bc --- /dev/null +++ b/src/locale/properties/inbox/inbox.uk.properties @@ -0,0 +1,46 @@ +inbox.yourRecord=YOUR RECORD +inbox.permissions=PERMISSIONS +inbox.announcement=ANNOUNCEMENT +inbox.hadMadeChanges=has made changes to your ORCID record +inbox.connectingYour=Connecting your +inbox.accountWithYourOrcid=account with your ORCID record +inbox.affiliations=Пов'язані організації +inbox.bio=Bio +inbox.sectionOf=section of your record: +inbox.updateThe=has updated the +inbox.distinction=Distinction +inbox.education=Education +inbox.employment=Employment +inbox.externalIdentifiers=External Identifiers +inbox.funding=Funding +inbox.invitedPosition=Invited position +inbox.membership=Membership +inbox.peerReview=Peer Review +inbox.preferences=Preferences +inbox.qualification=Qualification +inbox.researchResource=Research Resource +inbox.service=Service +inbox.work=Work +inbox.unknown=unknown +inbox.newItemAdded=Added +inbox.itemUpdate=Updated +inbox.deleteItem=Deleted +inbox.otherUpdate=Other +inbox.archive=archive +inbox.grantPermission=Grant permission +inbox.likeYourPermission=would like your permission to interact with your ORCID Record as a trusted party. +inbox.youCanNowSignin=You can now sign in to ORCID with your +inbox.account=account +inbox.pleaseCompleteThe=Please complete the process by connecting +inbox.yourOrcidRecord=with your ORCID record. +inbox.showMoreNotifications=Show more notifications +inbox.selectAll=Select All +inbox.archiveSelected=Archive selected +inbox.notifications=Notifications +inbox.hideArchived=Hide archived +inbox.showArchived=Show archived +inbox.accountSetting=account settings. +inbox.youCanManage=You can manage the frequency of your ORCID notifications in your +inbox.youDontHaveUnarchived=You don't have any unarchived notifications right now. +inbox.youDontHave=You don’t have any notifications yet. +inbox.archiveWithout=Archive without granting permissions diff --git a/src/locale/properties/institutional/institutional.ca.properties b/src/locale/properties/institutional/institutional.ca.properties new file mode 100644 index 0000000000..918ec444b3 --- /dev/null +++ b/src/locale/properties/institutional/institutional.ca.properties @@ -0,0 +1,12 @@ +institutional.title=Access through your institution +institutional.account=You may sign into the ORCID Registry using institutional accounts you already have, like one from your university. If you don't already have an ORCID iD, you will be prompted to create one. +institutional.learn=Learn more about different ways to sign in to ORCID. +institution.organization=Organization's name +institution.organizationRequired=Organization's name is required +institution.invalidInstitution=Invalid Organization Name +institutional.goBack=Go back +institutional.continue=CONTINUE +institutional.ariaLabelInstitution=Institution +institutional.ariaLabelClear=Clear +institutional.suggested=Use a suggested selection +institutional.orEnterOrgName=Or enter your organization's name diff --git a/src/locale/properties/institutional/institutional.uk.properties b/src/locale/properties/institutional/institutional.uk.properties index 4c471fb6f4..4435d4eb52 100644 --- a/src/locale/properties/institutional/institutional.uk.properties +++ b/src/locale/properties/institutional/institutional.uk.properties @@ -1,2 +1,12 @@ +institutional.title=Access through your institution +institutional.account=You may sign into the ORCID Registry using institutional accounts you already have, like one from your university. If you don't already have an ORCID iD, you will be prompted to create one. +institutional.learn=Learn more about different ways to sign in to ORCID. +institution.organization=Organization's name +institution.organizationRequired=Organization's name is required +institution.invalidInstitution=Invalid Organization Name +institutional.goBack=Go back +institutional.continue=CONTINUE institutional.ariaLabelInstitution=Заклад +institutional.ariaLabelClear=Clear +institutional.suggested=Use a suggested selection institutional.orEnterOrgName=Або введіть назву вашої організації diff --git a/src/locale/properties/layout/layout.ca.properties b/src/locale/properties/layout/layout.ca.properties index baee93711a..bd35b6c978 100644 --- a/src/locale/properties/layout/layout.ca.properties +++ b/src/locale/properties/layout/layout.ca.properties @@ -1,3 +1,107 @@ +common.cookies.orcid_uses=ORCID uses cookies to improve your experience and to help us understand how you use our websites. +common.cookies.learn_more=Learn more about how we use cookies +common.old.browser_1=We notice you are using a browser that our site does not support. Some features on this site may not work correctly. +common.old_browser_2=We recommend that you upgrade to a +common.old_browser_3=supported browser +footer.aboutOrcid=About ORCID +footer.copyright_cc0_1=The text of this website is published under a +footer.copyright_cc0_3=Images and marks are subject to copyright and trademark protection common.period=. +footer.privacypolicy=Privacy Policy +footer.termsofuse=Terms of Use +footer.contactus=Contact us +footer.accessibility=Accessibility Statement +footer.branGuideLines=Brand Guidelines +confirm-oauth-access.connectingresearchandresearchers=Connecting Research and Researchers +header.signin=Sign in +public-layout.sign_out=Sign out +header.register=Register +public-layout.amount_ids=ORCID iDs and counting. +public-layout.sign_in=SIGN IN +workspace.notifications=Inbox +workspace.developer_tools=Developer tools +public-layout.for_researchers=For Researchers +public-layout.for_organizations=For Organizations +public-layout.about=About +public-layout.help=Help +login.registerOrcidId=Register for an ORCID iD +manage_delegators.learn_more.link.text=Learn more +public-layout.funders=Funders +public-layout.research_organizations=Research Organizations +public-layout.publishers=Publishers +public-layout.associations=Associations +public-layout.integrators=Integrators +public-layout.what_is_orcid=What is ORCID public-layout.the_orcid_team=L'equip d'ORCID +public-layout.the_orcid_community=The ORCID Community +public-layout.events=Events +public-layout.news=News +public-layout.faq=FAQ +public-layout.give_feedback=Give Feedback +public-layout.contact_us=Contact us +public-layout.knowledge_base=Knowledge Base +public-layout.membership=Membership +public-layout.our_mission=Our Mission +public-layout.our_principles=Our Principles +public-layout.sponsors=Sponsors +public-layout.launch_partners=Launch Partners +public-layout.members=Members +public-layout.standard_member_agreement=Standard Member Agreement +public-layout.our_members=Our Members change_email_preferences.privacyPolicy=política de privacitat +developer_tools.public_member.terms.check_2=Public Client Terms of Service +layout.public-layout.registry=registry +layout.public-layout.website=website +public-layout.account_setting=Account Settings +admin.members.workspace_link=Manage members +admin.workspace_link=Admin page +workspace.self_service=Member Tools +public-layout.my_orcid=ORCID Record +public-layout.my_orcid_record=My ORCID Record +public-layout.working_groups=Working Groups +ngOrcid.disputeProcedure=Dispute procedures +ngOrcid.trademark2=Trademark and iD Display Guidelines +ngOrcid.viewMyOrcid=View my ORCID record +ngOrcid.accountSetting=Account settings +ngOrcid.selfService=Member tools +ngOrcid.manageMembers=Manage members +ngOrcid.adminPage=Admin page +ngOrcid.logout=Logout +ngOrcid.useCases=USE CASES +ngOrcid.theOrcidApi=THE ORCID API +ngOrcid.registerClientApp=REGISTER A CLIENT APPLICATION +ngOrcid.currentIntegrations=CURRENT INTEGRATIONS +ngOrcid.integrationsChart=INTEGRATION CHART +ngOrcid.betaTesters=BETA TESTERS +ngOrcid.ourGovernance=OUR GOVERNANCE +ngOrcid.ourPolicies=OUR POLICIES +ngOrcid.openSource=OPEN SOURCE +ngOrcid.partners=PARTNERS +ngOrcid.adoptionAndInt=ADOPTION AND INTEGRATION PROGRAM +ngOrcid.outreach=OUTREACH RESOURCES +ngOrcid.orcidGear=ORCID GEAR +ngOrcid.membershipComparison=MEMBERSHIP COMPARISON +ngOrcid.standartCreatorAgreement=STANDARD CREATOR MEMBER AGREEMENT +ngOrcid.blog=BLOG +ngOrcid.subscribe=SUBSCRIBE! +ngOrcid.disputeProcedures=DISPUTE PROCEDURES +ngOrcid.publicDataFileUsePolicy=PUBLIC DATA FILE USE POLICY +ngOrcid.ambassadors=Ambassadors +ngOrcid.search=Search... +ngOrcid.copyright=CC0 license. +ngOrcid.seeMoreStatics=See more statistics +layout.understood=Understood +public-layout.documentation=Documentation +public-layout.resources=Resources +public-layout.newsEvents=News & Events +ngOrcid.searchNewInfo=Search the ORCID registry +layout.ariaLabelFooter=footer +layout.ariaLabelLogo=orcid mini logo +layout.ariaLabelMenu=main menu +layout.ariaLabelLanguage=language +layout.ariaLabelMaintenance=Maintenance message +layout.ariaLabelSearch=Search +layout.ariaLabelStatistics=statistics +layout.ariaLabelUserMenu=User menu +layout.ariaLabelSigninRegister=sign in or register +layout.ariaLabelCookies=Cookies Policy diff --git a/src/locale/properties/layout/layout.uk.properties b/src/locale/properties/layout/layout.uk.properties index 87fe2cd588..e157079fb0 100644 --- a/src/locale/properties/layout/layout.uk.properties +++ b/src/locale/properties/layout/layout.uk.properties @@ -1,7 +1,107 @@ +common.cookies.orcid_uses=ORCID uses cookies to improve your experience and to help us understand how you use our websites. +common.cookies.learn_more=Learn more about how we use cookies common.old.browser_1=Ми помітили, що у нас застарілий веб-переглядач. Деякі функції на цьому сайті можуть не правильно працювати. common.old_browser_2=Рекомендуємо вам оновити common.old_browser_3=до останньої версії цього веб-переглядача або перемкнутися на інший. -public-layout.help=Довідка +footer.aboutOrcid=About ORCID +footer.copyright_cc0_1=The text of this website is published under a +footer.copyright_cc0_3=Images and marks are subject to copyright and trademark protection common.period=. +footer.privacypolicy=Privacy Policy +footer.termsofuse=Terms of Use +footer.contactus=Contact us +footer.accessibility=Accessibility Statement +footer.branGuideLines=Brand Guidelines +confirm-oauth-access.connectingresearchandresearchers=Connecting Research and Researchers +header.signin=Sign in +public-layout.sign_out=Sign out +header.register=Register +public-layout.amount_ids=ORCID iDs and counting. +public-layout.sign_in=SIGN IN +workspace.notifications=Inbox +workspace.developer_tools=Developer tools +public-layout.for_researchers=For Researchers +public-layout.for_organizations=For Organizations +public-layout.about=About +public-layout.help=Довідка +login.registerOrcidId=Register for an ORCID iD +manage_delegators.learn_more.link.text=Learn more +public-layout.funders=Funders +public-layout.research_organizations=Research Organizations +public-layout.publishers=Publishers +public-layout.associations=Associations +public-layout.integrators=Integrators +public-layout.what_is_orcid=What is ORCID public-layout.the_orcid_team=Команда ORCID +public-layout.the_orcid_community=The ORCID Community +public-layout.events=Events +public-layout.news=News +public-layout.faq=FAQ +public-layout.give_feedback=Give Feedback +public-layout.contact_us=Contact us +public-layout.knowledge_base=Knowledge Base +public-layout.membership=Membership +public-layout.our_mission=Our Mission +public-layout.our_principles=Our Principles +public-layout.sponsors=Sponsors +public-layout.launch_partners=Launch Partners +public-layout.members=Members +public-layout.standard_member_agreement=Standard Member Agreement +public-layout.our_members=Our Members change_email_preferences.privacyPolicy=політика конфіденційності +developer_tools.public_member.terms.check_2=Public Client Terms of Service +layout.public-layout.registry=registry +layout.public-layout.website=website +public-layout.account_setting=Account Settings +admin.members.workspace_link=Manage members +admin.workspace_link=Admin page +workspace.self_service=Member Tools +public-layout.my_orcid=ORCID Record +public-layout.my_orcid_record=My ORCID Record +public-layout.working_groups=Working Groups +ngOrcid.disputeProcedure=Dispute procedures +ngOrcid.trademark2=Trademark and iD Display Guidelines +ngOrcid.viewMyOrcid=View my ORCID record +ngOrcid.accountSetting=Account settings +ngOrcid.selfService=Member tools +ngOrcid.manageMembers=Manage members +ngOrcid.adminPage=Admin page +ngOrcid.logout=Logout +ngOrcid.useCases=USE CASES +ngOrcid.theOrcidApi=THE ORCID API +ngOrcid.registerClientApp=REGISTER A CLIENT APPLICATION +ngOrcid.currentIntegrations=CURRENT INTEGRATIONS +ngOrcid.integrationsChart=INTEGRATION CHART +ngOrcid.betaTesters=BETA TESTERS +ngOrcid.ourGovernance=OUR GOVERNANCE +ngOrcid.ourPolicies=OUR POLICIES +ngOrcid.openSource=OPEN SOURCE +ngOrcid.partners=PARTNERS +ngOrcid.adoptionAndInt=ADOPTION AND INTEGRATION PROGRAM +ngOrcid.outreach=OUTREACH RESOURCES +ngOrcid.orcidGear=ORCID GEAR +ngOrcid.membershipComparison=MEMBERSHIP COMPARISON +ngOrcid.standartCreatorAgreement=STANDARD CREATOR MEMBER AGREEMENT +ngOrcid.blog=BLOG +ngOrcid.subscribe=SUBSCRIBE! +ngOrcid.disputeProcedures=DISPUTE PROCEDURES +ngOrcid.publicDataFileUsePolicy=PUBLIC DATA FILE USE POLICY +ngOrcid.ambassadors=Ambassadors +ngOrcid.search=Search... +ngOrcid.copyright=CC0 license. +ngOrcid.seeMoreStatics=See more statistics +layout.understood=Understood +public-layout.documentation=Documentation +public-layout.resources=Resources +public-layout.newsEvents=News & Events +ngOrcid.searchNewInfo=Search the ORCID registry +layout.ariaLabelFooter=footer +layout.ariaLabelLogo=orcid mini logo +layout.ariaLabelMenu=main menu +layout.ariaLabelLanguage=language +layout.ariaLabelMaintenance=Maintenance message +layout.ariaLabelSearch=Search +layout.ariaLabelStatistics=statistics +layout.ariaLabelUserMenu=User menu +layout.ariaLabelSigninRegister=sign in or register +layout.ariaLabelCookies=Cookies Policy diff --git a/src/locale/properties/linking/linking.en.properties b/src/locale/properties/linking/linking.en.properties index f389fe6983..0195956e1c 100644 --- a/src/locale/properties/linking/linking.en.properties +++ b/src/locale/properties/linking/linking.en.properties @@ -5,7 +5,7 @@ linking.as=as linking.finish=To finish linking this linking.account=account to ORCID, sign into your ORCID iD below. You will only need to complete this step once. After your account is linked, you will be able to access your ORCID record with your linking.questions=account. Questions? -linking.knowledgebase=Visit our knowledgebase +linking.knowledgebase=Visit our knowledge base linking.button.1=Sign in and link your linking.button.2=account linking.cancel=Cancel and go back diff --git a/src/locale/properties/peer-review/peer-review.ar.properties b/src/locale/properties/peer-review/peer-review.ar.properties index a027674578..461766bb08 100644 --- a/src/locale/properties/peer-review/peer-review.ar.properties +++ b/src/locale/properties/peer-review/peer-review.ar.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=المصدر المفضل peerReview.linkPeerReviews=ربط مراجعات الأقران peerReview.linkMoreInformation=مزيد من المعلومات حول ربط مراجعات الأقران بسجل (المعرف المفتوح للباحثين والمساهمين) ORCID الخاص بك peerReview.view=عرض +peerReview.dataInconsistency=تم العثور على تضارب في البيانات. يرجى النقر على خصوصيتك المفضلة لإصلاح diff --git a/src/locale/properties/peer-review/peer-review.ca.properties b/src/locale/properties/peer-review/peer-review.ca.properties deleted file mode 100644 index 4e10e08645..0000000000 --- a/src/locale/properties/peer-review/peer-review.ca.properties +++ /dev/null @@ -1,9 +0,0 @@ -peerReview.peerReview=Peer review -peerReview.review=Review -peerReview.reviewer=Reviewer -peerReview.source=Source -peerReview.reviewIdentifiers=Review identifier(s) -peerReview.conveningOrganization=Convening organization -peerReview.reviewSubject=Review subject -peerReview.preferredSource=Preferred source -peerReview.view=View diff --git a/src/locale/properties/peer-review/peer-review.cs.properties b/src/locale/properties/peer-review/peer-review.cs.properties index 5479ef1cf3..8e0c62131e 100644 --- a/src/locale/properties/peer-review/peer-review.cs.properties +++ b/src/locale/properties/peer-review/peer-review.cs.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=Preferovaný zdroj peerReview.linkPeerReviews=Propojení recenzí peerReview.linkMoreInformation=Další informace o propojení recenze s vaším záznamem ORCID peerReview.view=Prohlížet +peerReview.dataInconsistency=Byla zjištěna nekonzistence dat. Pro opravu klikněte na preferované nastavení viditelnosti diff --git a/src/locale/properties/peer-review/peer-review.en.properties b/src/locale/properties/peer-review/peer-review.en.properties index 2df7a986ef..9a7adc80a9 100644 --- a/src/locale/properties/peer-review/peer-review.en.properties +++ b/src/locale/properties/peer-review/peer-review.en.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=Preferred source peerReview.linkPeerReviews=Link peer reviews peerReview.linkMoreInformation=More information about linking peer reviews to your ORCID record peerReview.view=View +peerReview.dataInconsistency=Data inconsistency found. Please click your preferred visibility setting to fix diff --git a/src/locale/properties/peer-review/peer-review.es.properties b/src/locale/properties/peer-review/peer-review.es.properties index ec545a2464..911bdc5fb4 100644 --- a/src/locale/properties/peer-review/peer-review.es.properties +++ b/src/locale/properties/peer-review/peer-review.es.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=Fuente preferida peerReview.linkPeerReviews=Vincular evaluaciones de pares peerReview.linkMoreInformation=Más información sobre cómo vincular las evaluaciones de pares a su registro en ORCID peerReview.view=Ver +peerReview.dataInconsistency=Se encontró inconsistencia en los datos. Haga clic en su configuración de visibilidad preferida para corregirlo diff --git a/src/locale/properties/peer-review/peer-review.fr.properties b/src/locale/properties/peer-review/peer-review.fr.properties index e4e142cf5a..1fb7a6ee1f 100644 --- a/src/locale/properties/peer-review/peer-review.fr.properties +++ b/src/locale/properties/peer-review/peer-review.fr.properties @@ -1,5 +1,5 @@ peerReview.peerReviews=Évaluations par les pairs -peerReview.peerReview=Révision par les pairs +peerReview.peerReview=Révision par les pairs\n peerReview.description=Connectez-vous à des organisations de confiance pour ajouter automatiquement votre activité d'évaluation par les pairs à votre dossier ORCID. peerReview.learnMore=Apprenez-en davantage sur la façon dont les évaluations par les pairs sont ajoutées à votre dossier ORCID peerReview.reviewActivity=Activité d'évaluation pour @@ -16,3 +16,4 @@ peerReview.preferredSource=Source préférée peerReview.linkPeerReviews=Lier les évaluations par les pairs peerReview.linkMoreInformation=Plus d'informations sur l'ajout des évaluations par les pairs à votre dossier ORCID peerReview.view=Visualiser +peerReview.dataInconsistency=Une incohérence de données a été détectée. Veuillez cliquer sur votre paramètre de visibilité préféré afin de résoudre le problème. diff --git a/src/locale/properties/peer-review/peer-review.it.properties b/src/locale/properties/peer-review/peer-review.it.properties index 06d4e3b290..0c68123379 100644 --- a/src/locale/properties/peer-review/peer-review.it.properties +++ b/src/locale/properties/peer-review/peer-review.it.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=Sorgente preferita peerReview.linkPeerReviews=Collega le peer review peerReview.linkMoreInformation=Altre informazioni su come collegare le peer review al tuo record ORCID peerReview.view=Visualizza +peerReview.dataInconsistency=Individuata un'incongruenza nei dati. Fai clic sull'opzione di visibilità che preferisci per risolvere il problema. diff --git a/src/locale/properties/peer-review/peer-review.ja.properties b/src/locale/properties/peer-review/peer-review.ja.properties index 01774b838c..cc2bd3f03f 100644 --- a/src/locale/properties/peer-review/peer-review.ja.properties +++ b/src/locale/properties/peer-review/peer-review.ja.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=優先ソース peerReview.linkPeerReviews=ピアレビューをリンク peerReview.linkMoreInformation=ピアレビューを、ORCIDレコードにリンクする方法の詳細 peerReview.view=表示 +peerReview.dataInconsistency=データの不一致が見つかりました。ご希望の表示設定をクリックして修正してください。 diff --git a/src/locale/properties/peer-review/peer-review.ko.properties b/src/locale/properties/peer-review/peer-review.ko.properties index 892955e6c5..c9825e1b15 100644 --- a/src/locale/properties/peer-review/peer-review.ko.properties +++ b/src/locale/properties/peer-review/peer-review.ko.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=우선 소스 peerReview.linkPeerReviews=동료 평가 링크 peerReview.linkMoreInformation=ORCID 기록에 동료 평가를 연결하는 방법에 대한 자세한 정보 peerReview.view=보기 +peerReview.dataInconsistency=일치하지 않는 데이터가 발견됐습니다. 수정하려면 공개 범위 설정을 클릭하세요. diff --git a/src/locale/properties/peer-review/peer-review.lr.properties b/src/locale/properties/peer-review/peer-review.lr.properties index 5783b2dac6..e29b2de1d1 100644 --- a/src/locale/properties/peer-review/peer-review.lr.properties +++ b/src/locale/properties/peer-review/peer-review.lr.properties @@ -18,3 +18,4 @@ peerReview.showMoreDetail=LR peerReview.view=LR peerReview.description=LR peerReview.learnMore=LR +peerReview.dataInconsistency=LR diff --git a/src/locale/properties/peer-review/peer-review.pt.properties b/src/locale/properties/peer-review/peer-review.pt.properties index d3392749a3..580b20860f 100644 --- a/src/locale/properties/peer-review/peer-review.pt.properties +++ b/src/locale/properties/peer-review/peer-review.pt.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=Fonte preferida peerReview.linkPeerReviews=Associar revisões de pares peerReview.linkMoreInformation=Mais informações sobre como associar as revisões por pares ao seu registo do ORCID peerReview.view=Visualizar +peerReview.dataInconsistency=Inconsistência de dados detetada. Clique na definição de visibilidade que preferir para corrigir diff --git a/src/locale/properties/peer-review/peer-review.rl.properties b/src/locale/properties/peer-review/peer-review.rl.properties index 0212628c76..c9965e7309 100644 --- a/src/locale/properties/peer-review/peer-review.rl.properties +++ b/src/locale/properties/peer-review/peer-review.rl.properties @@ -18,3 +18,4 @@ peerReview.showMoreDetail=RL peerReview.view=RL peerReview.description=RL peerReview.learnMore=RL +peerReview.dataInconsistency=RL diff --git a/src/locale/properties/peer-review/peer-review.ru.properties b/src/locale/properties/peer-review/peer-review.ru.properties index a382ef02f4..bb4f88a0f4 100644 --- a/src/locale/properties/peer-review/peer-review.ru.properties +++ b/src/locale/properties/peer-review/peer-review.ru.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=Предпочитаемый источник peerReview.linkPeerReviews=Привязать рецензии peerReview.linkMoreInformation=Дополнительная информация о привязке рецензий к вашей записи Orcid peerReview.view=Обзор +peerReview.dataInconsistency=Обнаружено несоответствие данных. Для исправления нажмите на предпочитаемый вами параметр видимости diff --git a/src/locale/properties/peer-review/peer-review.uk.properties b/src/locale/properties/peer-review/peer-review.uk.properties deleted file mode 100644 index 11c063bc65..0000000000 --- a/src/locale/properties/peer-review/peer-review.uk.properties +++ /dev/null @@ -1,9 +0,0 @@ -peerReview.peerReview=Peer review -peerReview.review=Review -peerReview.reviewer=Рецензент -peerReview.source=Джерело -peerReview.reviewIdentifiers=Review identifier(s) -peerReview.conveningOrganization=Convening organization -peerReview.reviewSubject=Review subject -peerReview.preferredSource=Бажане джерело -peerReview.view=Перегляд diff --git a/src/locale/properties/peer-review/peer-review.xx.properties b/src/locale/properties/peer-review/peer-review.xx.properties index 222bd984ab..e8a3c57e7a 100644 --- a/src/locale/properties/peer-review/peer-review.xx.properties +++ b/src/locale/properties/peer-review/peer-review.xx.properties @@ -18,3 +18,4 @@ peerReview.showMoreDetail=X peerReview.view=X peerReview.description=X peerReview.learnMore=X +peerReview.dataInconsistency=X diff --git a/src/locale/properties/peer-review/peer-review.zh_CN.properties b/src/locale/properties/peer-review/peer-review.zh_CN.properties index acb6cac6af..40a24234c1 100644 --- a/src/locale/properties/peer-review/peer-review.zh_CN.properties +++ b/src/locale/properties/peer-review/peer-review.zh_CN.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=首选源 peerReview.linkPeerReviews=链接同行审核 peerReview.linkMoreInformation=有关如何将同行评审链接到您的 ORCID 记录的更多信息 peerReview.view=查看 +peerReview.dataInconsistency=发现不一致数据。请点击您偏好的可见性选项进行修复 diff --git a/src/locale/properties/peer-review/peer-review.zh_TW.properties b/src/locale/properties/peer-review/peer-review.zh_TW.properties index d31569e0bf..143560e227 100644 --- a/src/locale/properties/peer-review/peer-review.zh_TW.properties +++ b/src/locale/properties/peer-review/peer-review.zh_TW.properties @@ -16,3 +16,4 @@ peerReview.preferredSource=偏好源 peerReview.linkPeerReviews=連結同儕審查 peerReview.linkMoreInformation=更多有關連結同儕審查到您的 ORCID 記錄的資訊 peerReview.view=檢視 +peerReview.dataInconsistency=發現不一致資料。請點擊您偏好的可見性進行修復 diff --git a/src/locale/properties/profile/profile.ca.properties b/src/locale/properties/profile/profile.ca.properties deleted file mode 100644 index e16b7ee791..0000000000 --- a/src/locale/properties/profile/profile.ca.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.orcid.jaxb.model.message.AffiliationType.employment=Ocupació -notifications.works_label=Treballs -public_profile.labelBiography=Biografia diff --git a/src/locale/properties/profile/profile.uk.properties b/src/locale/properties/profile/profile.uk.properties deleted file mode 100644 index a8acf3af99..0000000000 --- a/src/locale/properties/profile/profile.uk.properties +++ /dev/null @@ -1,3 +0,0 @@ -org.orcid.jaxb.model.message.AffiliationType.employment=Робота -notifications.works_label=Праці -public_profile.labelBiography=Біографія diff --git a/src/locale/properties/record/record.ar.properties b/src/locale/properties/record/record.ar.properties index b0459c27e8..89152302d7 100644 --- a/src/locale/properties/record/record.ar.properties +++ b/src/locale/properties/record/record.ar.properties @@ -1,42 +1,16 @@ +record.delegatorAddEmailNotAllow=غير مسموح بإضافة عناوين بريد إلكتروني إضافية إذا كنت تدير سجل ORCID آخر. +record.ogDescription1=سجل ORCID لـ +record.ogDescription2=تقدم ORCID مُعرّفاً للأشخاص لاستخدامه بواسطة أسمائهم حيث يشتركون في أبحاث، وبعثات دراسية، وأنشطة إبداعية. +record.noPublicInfo=لا توجد معلومات شخصية متاحة record.otherIds=معرفات أخرى -record.alsoKnowAs=كما يعرف بـ -record.emails=البريد الالكتروني -record.websiteAndSocialLinks=الموقع والروابط الاجتماعية +record.websitesAndSocialLinks=المواقع الإلكترونية والروابط الاجتماعية record.keywords=كلمات مفتاحية record.countries=البلدان record.previewPublicRecord=معاينة السجل العام -record.names=الأسماء -record.publishedName=الاسم المنشور -record.name=الاسم -record.otherNames=أسماء أخرى -record.biography=سيرة ذاتية -record.printableVersion=نسخة قابلة للطباعة -record.getQR=احصل على رمز استجابة سريعة QR لمعرف أوركيد الخاص بك -record.displayId=قم بعرض المعرف الخاص بك في مواقع أخرى -record.source=مصدر record.closeOtherSources=اجعله مصدر مفضل -record.added=تمت الإضافة -record.lastModified=آخر تعديل -record.url=عنوان URL -record.citation=استشهاد -record.subtitle=العنوان الفرعي -record.language=اللغة -record.translatedTitle=العنوان المترجم -record.translations=ترجمة -record.contributors=المساهمون -record.youArePreviewing=أنت تعرض نسخة عامة من هذا السجل -record.editThisRecord=تحرير هذا السجل -record.countryPublication=بلد النشر -record.description=الوصف -record.noPublicInfo=لا توجد معلومات شخصية متاحة -record.lockedRecord=تسجيلة أوركيد مغلقة مؤقتا -record.accountDeprecated=لقد تم إيقاف هذا الحساب، يرجى رؤية الحساب -record.geographicalArea=المنطقة الجغرافية -record.workType=نوع العمل -record.accountDeprecated2=لأحدث المعلومات -record.youAreManaging=أنت تدير سجل ORCID هذا كشخص موثوق -record.youAreManagingSomeElse=أنت تدير سجل ORCID الخاص بك. -record.youArePreviewingSomeElse=أنت تعرض النسخة العامة لسجلك +record.trySearching=حاول استخدام محرك البحث المتقدم الخاص بنا للعثور على الباحثين باستخدام أسمائهم أو بطاقة تعريف ORCID +record.pleaseGet=يُرجى التواصل مع فريق الدعم الخاص بنا بواسطة زر المساعدة أدناه. يُمكنهم مساعدتك في العثور على السجل الذي تبحث عنه. +record.ifYouHave=إذا كنت وضعت إشارة مرجعية على هذا السجل من قبل وتوقفت عن العمل record.notFound=نحن نأسف للغاية، لا يمكننا إيجاد سجل ORCID الذي تبحث عنه. record.whatHappened=ماذا حدث؟ record.whatToDo=ما يجب القيام به بعد ذلك @@ -44,10 +18,5 @@ record.ifYouTyped=إذا كتبت في عنوان URL أو بطاقة ORCID ال record.pleaseCheck=يُرجى التأكّد أن رقم بطاقة ORCID التعريفية المكوّن من 16 رقماً الموجود في نهاية عنوان URL صحيح. يبدو عنوان URL المُصاغ بشكل صحيح كالتالي: http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=إذا اتبعت رابطاً إلى هذا السجل من موقع أو خدمة أخرى record.pleaseReport=يُرجى الإبلاغ عن هذا الرابط الفاسد في الموقع أو الخدمة التي جئت منها حتى يتمكنوا من إصلاحه. -record.ifYouHave=إذا كنت وضعت إشارة مرجعية على هذا السجل من قبل وتوقفت عن العمل -record.pleaseGet=يُرجى التواصل مع فريق الدعم الخاص بنا بواسطة زر المساعدة أدناه. يُمكنهم مساعدتك في العثور على السجل الذي تبحث عنه. -record.whereNext=أين بعد ذلك؟ -record.headBack=عُد إلى صفحة ORCID الرئيسية -record.isThisYou=هل هذا أنت؟ -record.signInToStart=سجّل الدخول لبدء التحرير -record.trySearching=حاول استخدام محرك البحث المتقدم الخاص بنا للعثور على الباحثين باستخدام أسمائهم أو بطاقة تعريف ORCID +record.unidentifiedOrganization=منظمة غير معروفة +record.identifyAS=معرف باسم: diff --git a/src/locale/properties/record/record.ca.properties b/src/locale/properties/record/record.ca.properties index 409a83504f..60bb828b46 100644 --- a/src/locale/properties/record/record.ca.properties +++ b/src/locale/properties/record/record.ca.properties @@ -1,28 +1,22 @@ +record.delegatorAddEmailNotAllow=Adding additional email addresses is not allowed when you are managing another ORCID record. +record.ogDescription1=ORCID record for +record.ogDescription2=ORCID provides an identifier for individuals to use with their name as they engage in research, scholarship, and innovation activities. +record.noPublicInfo=No public information available. record.otherIds=Other IDs -record.alsoKnowAs=Also known as -record.emails=Emails +record.websitesAndSocialLinks=Websites & social links record.keywords=Keywords -record.names=Names -record.publishedName=Published Name -record.name=Name -record.otherNames=Other names -record.biography=Biography -record.displayId=Display your iD on other sites -record.source=Source -record.added=Added -record.lastModified=Last modified -record.url=URL -record.citation=Citation -record.subtitle=Subtitle -record.language=Language -record.translatedTitle=Translated title -record.translations=Translation -record.contributors=Contributors -record.countryPublication=Country of publication -record.description=Description -record.noPublicInfo=No public information available. -record.lockedRecord=This ORCID Record is locked -record.accountDeprecated=This account has been deprecated, please see account -record.accountDeprecated2=for the latest information -record.geographicalArea=Geographical area -record.workType=Work type +record.countries=Countries +record.previewPublicRecord=Preview public record +record.closeOtherSources=Make preferred source +record.trySearching=Try using our advanced search to find researchers by their name or ORCID iD +record.pleaseGet=Please get in touch with our support team via the Help button below. They can help you find the record you are looking for. +record.ifYouHave=If you have previously bookmarked this record and it has now stopped working +record.notFound=We’re really sorry, we can’t find the ORCID record you’re looking for. +record.whatHappened=What happened? +record.whatToDo=What to do next +record.ifYouTyped=If you typed in the URL or ORCID iD by hand +record.pleaseCheck=Please check that the ORCID iD - the 16-digit number at the end of the URL - is correct. A correctly-formatted ORCID URL looks like this: https://orcid.org/1234-5678-9101-1121 +record.ifYouFollowed=If you followed a link to this record from another site or service +record.pleaseReport=Please report the broken link to the site or service you came from so they can fix it. +record.unidentifiedOrganization=Unidentified organization +record.identifyAS=Identify as: diff --git a/src/locale/properties/record/record.cs.properties b/src/locale/properties/record/record.cs.properties index 1b35b86bd5..360ee10bad 100644 --- a/src/locale/properties/record/record.cs.properties +++ b/src/locale/properties/record/record.cs.properties @@ -1,42 +1,16 @@ +record.delegatorAddEmailNotAllow=Přidávání dalších e-mailových adres není povoleno, když spravujete jiný záznam ORCID. +record.ogDescription1=Záznam ORCID pro +record.ogDescription2=ORCID poskytuje identifikátor, který jednotlivci používají spolu se jménem při činnostech v rámci výzkumu, stipendií a inovací. +record.noPublicInfo=Žádné veřejné informace nejsou dostupné. record.otherIds=Jiná ID -record.alsoKnowAs=Také známý jako -record.emails=Emaily -record.websiteAndSocialLinks=Webové stránky a sociální sítě +record.websitesAndSocialLinks=Webové stránky a sociální sítě record.keywords=Klíčová slova record.countries=Země record.previewPublicRecord=Předchozí veřejný záznam -record.names=Jména -record.publishedName=Jméno v publikacích -record.name=Jméno -record.otherNames=Další jména -record.biography=Životopis -record.printableVersion=Verze pro tisk -record.getQR=Získejte QR kód pro váš ORCID iD -record.displayId=Zobrazte svoje iD na dalších webových stránkách -record.source=Zdroj record.closeOtherSources=Nastavit preferovaný zdroj -record.added=Zadáno -record.lastModified=Naposledy změněno -record.url=URL -record.citation=Citace -record.subtitle=Podtitul -record.language=Jazyk -record.translatedTitle=Přeložený název -record.translations=Překlad -record.contributors=Přispěvatelé -record.youArePreviewing=Zobrazujete náhled veřejné verze tohoto záznamu -record.editThisRecord=Upravit tento záznam -record.countryPublication=Země publikace -record.description=Popis -record.noPublicInfo=Žádné veřejné informace nejsou dostupné. -record.lockedRecord=Tento účet ORCID je dočasně zamčený -record.accountDeprecated=Tento účet se již nepoužívá, viz účet -record.geographicalArea=Geografická oblast -record.workType=Typ díla -record.accountDeprecated2=pro poslední informace -record.youAreManaging=Tento záznam v ORCID spravujete jako ověřený jednotlivec -record.youAreManagingSomeElse=Spravujete tento záznam ORCID -record.youArePreviewingSomeElse=Zobrazujete si náhled veřejné verze vašeho záznamu +record.trySearching=Zkuste použít pokročilé vyhledávání k nalezení výzkumníků podle jména nebo ID ORCID +record.pleaseGet=Spojte se s týmem podpory pomocí tlačítka Nápověda. Podpora vám pomůže najít záznam, který hledáte. +record.ifYouHave=Pokud jste si tento záznam dříve poznamenali a přestal fungovat record.notFound=Litujeme, ale nedaří se nám najít záznam ORCID, který hledáte. record.whatHappened=Co se stalo? record.whatToDo=Co dělat dál @@ -44,10 +18,5 @@ record.ifYouTyped=Pokud jste zadali ID URL nebo ORCID ručně record.pleaseCheck=Zkontrolujte si, že je ID ORCID – 16místné číslo na konci URL správné. Správný formát URL ORCID vypadá takto: http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=Pokud jste přešli přes odkaz na tento záznam z jiné stránky nebo služby record.pleaseReport=Nahlaste tento nefunkční odkaz na stránku nebo službu, ze které jste se sem dostali, aby jej bylo možno opravit. -record.ifYouHave=Pokud jste si tento záznam dříve poznamenali a přestal fungovat -record.pleaseGet=Spojte se s týmem podpory pomocí tlačítka Nápověda. Podpora vám pomůže najít záznam, který hledáte. -record.whereNext=Kam dál? -record.headBack=Zpět na hlavní domovskou stránku ORCID -record.isThisYou=Jste to vy? -record.signInToStart=Přihlásit a zahájit úpravy -record.trySearching=Zkuste použít pokročilé vyhledávání k nalezení výzkumníků podle jména nebo ID ORCID +record.unidentifiedOrganization=Neidentifikovaná organizace +record.identifyAS=Identifikovat jako: diff --git a/src/locale/properties/record/record.en.properties b/src/locale/properties/record/record.en.properties index 2e47db9fb6..60bb828b46 100644 --- a/src/locale/properties/record/record.en.properties +++ b/src/locale/properties/record/record.en.properties @@ -1,40 +1,16 @@ +record.delegatorAddEmailNotAllow=Adding additional email addresses is not allowed when you are managing another ORCID record. +record.ogDescription1=ORCID record for +record.ogDescription2=ORCID provides an identifier for individuals to use with their name as they engage in research, scholarship, and innovation activities. +record.noPublicInfo=No public information available. record.otherIds=Other IDs -record.alsoKnowAs=Also known as -record.emails=Emails -record.websiteAndSocialLinks=Website and social links +record.websitesAndSocialLinks=Websites & social links record.keywords=Keywords record.countries=Countries record.previewPublicRecord=Preview public record -record.names=Names -record.publishedName=Published Name -record.name=Name -record.otherNames=Other names -record.biography=Biography -record.printableVersion=Printable version -record.getQR=Get a QR code for your ORCID iD -record.displayId=Display your iD on other sites -record.source=Source record.closeOtherSources=Make preferred source -record.added=Added -record.lastModified=Last modified -record.url=URL -record.citation=Citation -record.subtitle=Subtitle -record.language=Language -record.translatedTitle=Translated title -record.translations=Translation -record.contributors=Contributors -record.youArePreviewing=You are previewing a public version of this record -record.editThisRecord=Edit this record -record.description=Description -record.noPublicInfo=No public information available. -record.lockedRecord=This ORCID Record is locked -record.deactivatedRecord=This ORCID Record is deactivated -record.accountDeprecated=This account has been deprecated, please see account -record.accountDeprecated2=for the latest information -record.youAreManaging=You are managing this ORCID record as a trusted individual -record.youAreManagingSomeElse=You are managing your ORCID record -record.youArePreviewingSomeElse=You are previewing the public version of your record +record.trySearching=Try using our advanced search to find researchers by their name or ORCID iD +record.pleaseGet=Please get in touch with our support team via the Help button below. They can help you find the record you are looking for. +record.ifYouHave=If you have previously bookmarked this record and it has now stopped working record.notFound=We’re really sorry, we can’t find the ORCID record you’re looking for. record.whatHappened=What happened? record.whatToDo=What to do next @@ -42,37 +18,5 @@ record.ifYouTyped=If you typed in the URL or ORCID iD by hand record.pleaseCheck=Please check that the ORCID iD - the 16-digit number at the end of the URL - is correct. A correctly-formatted ORCID URL looks like this: https://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=If you followed a link to this record from another site or service record.pleaseReport=Please report the broken link to the site or service you came from so they can fix it. -record.ifYouHave=If you have previously bookmarked this record and it has now stopped working -record.pleaseGet=Please get in touch with our support team via the Help button below. They can help you find the record you are looking for. -record.whereNext=Where next? -record.headBack=Head back to the main ORCID homepage -record.isThisYou=Is this you? -record.signInToStart=Sign in to start editing -record.trySearching=Try using our advanced search to find researchers by their name or ORCID iD -record.exportSelectedWorks=Export selected works -record.exportSelectedWorksBibtexDescription=Export selected works to a BibTeX file. Please note that exporting to BibTeX may cause problems for text in some languages. -record.findOut=Find out more on exporting BibTeX files -record.selectedWorks=Selected works to export -record.exportSelectedWorksBibtex=Export selected works to BibTeX -record.combineSelectedWorks=Combine selected works -record.selectedWorksGrouped=The selected works will be grouped together and displayed as a single group item on your record. All versions of the work will still be available but one will be shown as your preferred version. -record.learnMoreCombining=Learn more about combining works -record.selectedWorksCombine=Selected works to combine -record.combiningWorks=Combining works cannot be undone! -record.checkSelectedWorks=Please check the selected works are correct before combining them. -record.combiningDuplicated=ORCID have found 2 sets of works with similar titles that you may want to combine. -record.deleteItems=Delete items -record.deletingItems=Deleting items permanently removes them from your ORCID record. Please review the items selected for deletion. -record.selectedItems=Selected items to delete -record.deleteSelected=Delete selected items -record.youHaveNotSelected=You haven’t selected any items to delete. -record.noItemsSelected=No items selected. -record.linkWorks=Link works -record.linkWorksMoreInfo=More information about linking works to your ORCID record -record.geographicalArea=Geographical area -record.workType=Work type -record.linkFunding=Link funding -record.linkFundingMoreInfo=More information about linking funding to your ORCID record -record.all=All -record.ogDescription1=ORCID record for -record.ogDescription2=ORCID provides an identifier for individuals to use with their name as they engage in research, scholarship, and innovation activities. +record.unidentifiedOrganization=Unidentified organization +record.identifyAS=Identify as: diff --git a/src/locale/properties/record/record.es.properties b/src/locale/properties/record/record.es.properties index 2f3a8b010f..09ef5b6f97 100644 --- a/src/locale/properties/record/record.es.properties +++ b/src/locale/properties/record/record.es.properties @@ -1,42 +1,16 @@ +record.delegatorAddEmailNotAllow=No se permite añadir direcciones de correo electrónico adicionales si está administrando otro registro ORCID. +record.ogDescription1=registro ORCID para +record.ogDescription2=ORCID proporciona un identificador para que las personas lo utilicen con su nombre mientras participan en actividades de investigación, becas e innovación. +record.noPublicInfo=No hay información pública disponible. record.otherIds=Otras ID -record.alsoKnowAs=También conocido como -record.emails=Correos electrónicos -record.websiteAndSocialLinks=Sitio web y enlaces a redes sociales +record.websitesAndSocialLinks=Enlaces a sitios web y redes sociales record.keywords=Palabras clave record.countries=Países record.previewPublicRecord=Vista previa del registro público -record.names=Nombres -record.publishedName=Nombre publicado -record.name=Nombre -record.otherNames=Otros nombres -record.biography=Biografía -record.printableVersion=Versión imprimible -record.getQR=Obtenga un código QR para su ID de ORCID -record.displayId=Mostrar su iD en otros sitios -record.source=Fuente record.closeOtherSources=Convertir en fuente preferida -record.added=Añadido -record.lastModified=Modificado por última vez -record.url=URL -record.citation=Cita -record.subtitle=Sub-título -record.language=Idioma -record.translatedTitle=Título traducido -record.translations=Traducción -record.contributors=Contribuyentes -record.youArePreviewing=Está viendo una vista previa de una versión pública de este registro -record.editThisRecord=Editar este registro -record.countryPublication=País de publicación -record.description=Descripción -record.noPublicInfo=No hay información pública disponible. -record.lockedRecord=Este registro ORCID está bloqueado temporalmente -record.accountDeprecated=Esta cuenta ha sido relegada, por favor consulte la cuenta -record.geographicalArea=Área geográfica -record.workType=Tipo de obra -record.accountDeprecated2=para ver la información más actualizada -record.youAreManaging=Está gestionando este registro de ORCID como una persona de confianza -record.youAreManagingSomeElse=Está gestionando su registro de ORCID -record.youArePreviewingSomeElse=Está obteniendo una vista previa de la versión pública de su registro +record.trySearching=Intente utilizar nuestra búsqueda avanzada para encontrar investigadores por su nombre o ID de ORCID +record.pleaseGet=Póngase en contacto con nuestro equipo de asistencia a través del botón Ayuda. Ellos pueden ayudarle a encontrar el registro que está buscando. +record.ifYouHave=Si ha añadido previamente este registro a favoritos y ha dejado de funcionar record.notFound=Lo sentimos mucho, no podemos encontrar el registro de ORCID que está buscando. record.whatHappened=¿Qué ha pasado? record.whatToDo=Que hacer a continuación @@ -44,10 +18,5 @@ record.ifYouTyped=Si escribió la URL o la ID de ORCID a mano record.pleaseCheck=Compruebe que la ID de ORCID, el número de 16 dígitos al final de la URL, sea correcta. Una URL ORCID con el formato correcto es así: http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=Si siguió un enlace a este registro desde otro sitio o servicio record.pleaseReport=Por favor, informe de este enlace roto al sitio o servicio del que proviene para que puedan solucionarlo. -record.ifYouHave=Si ha añadido previamente este registro a favoritos y ha dejado de funcionar -record.pleaseGet=Póngase en contacto con nuestro equipo de asistencia a través del botón Ayuda. Ellos pueden ayudarle a encontrar el registro que está buscando. -record.whereNext=¿Ahora qué? -record.headBack=Vuelva a la página principal de ORCID -record.isThisYou=¿Es usted? -record.signInToStart=Inicie sesión para empezar a editar -record.trySearching=Intente utilizar nuestra búsqueda avanzada para encontrar investigadores por su nombre o ID de ORCID +record.unidentifiedOrganization=Organización no identificada +record.identifyAS=Identificarse como: diff --git a/src/locale/properties/record/record.fr.properties b/src/locale/properties/record/record.fr.properties index 4ab2557a0b..9e44f1f636 100644 --- a/src/locale/properties/record/record.fr.properties +++ b/src/locale/properties/record/record.fr.properties @@ -1,42 +1,16 @@ +record.delegatorAddEmailNotAllow=L'ajout d'adresses e-mails supplémentaires n'est pas autorisé lorsque vous gérez un autre dossier ORCID. +record.ogDescription1=Dossier ORCID pour +record.ogDescription2=ORCID fournit un identifiant que les personnes peuvent utiliser avec leur nom lorsqu'elles effectuent des activités de recherche, d'érudition et d'innovation. +record.noPublicInfo=Aucune information publique n'est disponible. record.otherIds=Autres identifiants -record.alsoKnowAs=Également appelé -record.emails=Courriels -record.websiteAndSocialLinks=Site Internet liens de réseaux sociaux +record.websitesAndSocialLinks=Sites Internet et liens sociaux record.keywords=Mots clés record.countries=Pays record.previewPublicRecord=Visualiser le document public -record.names=Noms -record.publishedName=Nom d'auteur -record.name=Nom -record.otherNames=Autres noms -record.biography=Biographie -record.printableVersion=Version imprimable -record.getQR=Recevoir un QR code pour votre identifiant ORCID -record.displayId=Partagez votre ORCID iD sur d'autres sites -record.source=Source record.closeOtherSources=Indiquez votre source préférée -record.added=Ajouté -record.lastModified=Dernière modification -record.url=URL -record.citation=Citation -record.subtitle=Sous-titre -record.language=Langue -record.translatedTitle=Titre traduit -record.translations=Traduction -record.contributors=Contributeurs -record.youArePreviewing=Vous visualisez une version publique de ce dossier. -record.editThisRecord=Modifier ce dossier -record.countryPublication=Pays de publication -record.description=Description -record.noPublicInfo=Aucune information publique n'est disponible. -record.lockedRecord=Ce dossier ORCID est temporairement bloqué -record.accountDeprecated=Ce compte a été rendu obsolète, veuillez consulter le compte -record.geographicalArea=Aire géographique -record.workType=Type de travail -record.accountDeprecated2=pour avoir les dernières informations -record.youAreManaging=Vous gérez ce dossier ORCID en tant que personne de confiance. -record.youAreManagingSomeElse=Vous gérez votre dossier ORCID -record.youArePreviewingSomeElse=Vous visualisez la version publique de votre dossier +record.trySearching=Essayez d'utiliser notre recherche avancée pour trouver des chercheurs par leur nom ou leur identifiant ORCID +record.pleaseGet=Veuillez contacter notre équipe de support via le bouton Aide ci-dessous. Elle peut vous aider à trouver le dossier que vous recherchez. +record.ifYouHave=Si vous avez précédemment mis ce dossier en favori et qu'il a cessé de fonctionner record.notFound=Nous sommes navrés, nous ne trouvons pas le dossier ORCID que vous recherchez. record.whatHappened=Que s'est-il passé ? record.whatToDo=Que faire ensuite @@ -44,10 +18,5 @@ record.ifYouTyped=Si vous avez tapé l'URL ou l'identifiant ORCID manuellement record.pleaseCheck=Veuillez vérifier que l'identifiant ORCID — le numéro à 16 chiffres à la fin de l'URL — est correct. Une URL ORCID correctement formatée ressemble à ceci : http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=Si vous avez suivi un lien vers ce dossier depuis un autre site ou service record.pleaseReport=Veuillez signaler ce lien cassé au site ou service d'où vous venez afin qu'il soit réparé. -record.ifYouHave=Si vous avez précédemment mis ce dossier en favori et qu'il a cessé de fonctionner -record.pleaseGet=Veuillez contacter notre équipe de support via le bouton Aide ci-dessous. Elle peut vous aider à trouver le dossier que vous recherchez. -record.whereNext=Que faire ensuite ? -record.headBack=Retournez à la page d'accueil principale d'ORCID -record.isThisYou=S'agit-il de vous ? -record.signInToStart=Connectez-vous pour commencer à modifier -record.trySearching=Essayez d'utiliser notre recherche avancée pour trouver des chercheurs par leur nom ou leur identifiant ORCID +record.unidentifiedOrganization=Organisation non identifiée +record.identifyAS=S'identifier en tant que : diff --git a/src/locale/properties/record/record.it.properties b/src/locale/properties/record/record.it.properties index abd64c60e2..1e71fefbe6 100644 --- a/src/locale/properties/record/record.it.properties +++ b/src/locale/properties/record/record.it.properties @@ -1,53 +1,22 @@ +record.delegatorAddEmailNotAllow=Non è possibile aggiungere altri indirizzi email quando gestisci un altro record ORCID. +record.ogDescription1=Record ORCID per +record.ogDescription2=ORCID fornisce un identificatore per gli individui da usare con il loro nome mentre si impegnano in attività di ricerca, borsa di studio e innovazione.\n +record.noPublicInfo=Nessuna informazione inserita per ora record.otherIds=Altri ID -record.alsoKnowAs=Conosciuto anche come -record.emails=Email -record.websiteAndSocialLinks=Link del sito e dei social +record.websitesAndSocialLinks=Siti web e link sui social record.keywords=Parole chiave record.countries=Paesi record.previewPublicRecord=Anteprima di registrazione pubblica -record.names=Nomi -record.publishedName=pubblicato da ORCHID -record.name=Nome -record.otherNames=Altri nomi -record.biography=Biografia -record.printableVersion=Versione stampabile -record.getQR=Ottieni un codice QR per il tuo iD ORCID -record.displayId=Visualizza il tuo iD su altri sitei -record.source=Sorgente record.closeOtherSources=Rendi la fonte preferita -record.added=Aggiunta -record.lastModified=Ultima modifica -record.url=URL -record.citation=Citazione -record.subtitle=Sottotitolo -record.language=Lingua -record.translatedTitle=Titolo tradotto -record.translations=Traduzione -record.contributors=Partecipanti -record.youArePreviewing=Stai vedendo in anteprima una versione pubblica di questo documento -record.editThisRecord=Modifica questa registrazione -record.countryPublication=Paese di pubblicazione -record.description=Descrizione -record.noPublicInfo=Nessuna informazione inserita per ora -record.lockedRecord=Questo record ORCID è temporaneamente bloccato -record.accountDeprecated=Questa utenza non è più funzionante, vai a questa utenza -record.geographicalArea=Area geografica -record.workType=Tipo del prodotto -record.accountDeprecated2=per informazioni più recenti -record.youAreManaging=Stai gestendo questo registro ORCID in qualità di persona di fiducia -record.youAreManagingSomeElse=Stai gestendo il tuo registro ORCID -record.youArePreviewingSomeElse=Stai visualizzando in anteprima la versione pubblica del tuo registro -record.notFound=Ci dispiace molto, non riusciamo a trovare il registro ORCID che stai cercando. +record.trySearching=Prova a usare la nostra ricerca avanzata per trovare i ricercatori in base al loro nome o al loro iD ORCID\n +record.pleaseGet=Mettiti in contatto con il nostro team di assistenza tramite il pulsante Aiuto qui sotto. Possono aiutarti a trovare la registrazione che stai cercando.\n +record.ifYouHave=Se hai precedentemente inserito questo registro tra i segnalibri e ha smesso di funzionare\n +record.notFound=Ci dispiace molto, non riusciamo a trovare il registro ORCID che stai cercando.\n record.whatHappened=Che cosa è successo? -record.whatToDo=Cosa fare dopo +record.whatToDo=Cosa fare dopo\n record.ifYouTyped=Se hai digitato l'URL o l'iD ORCID a mano record.pleaseCheck=Verifica che l'iD ORCID - il numero di 16 cifre alla fine dell'URL - sia corretto. Un URL ORCID formattato correttamente si presenta così: http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=Se hai seguito un link che porta a questo registro da un altro sito o servizio record.pleaseReport=Per favore, segnala questo link non funzionante al sito o al servizio da cui provieni, così che possano ripararlo. -record.ifYouHave=Se hai precedentemente inserito questo registro tra i segnalibri e ha smesso di funzionare -record.pleaseGet=Mettiti in contatto con il nostro team di assistenza tramite il pulsante Aiuto qui sotto. Possono aiutarti a trovare la registrazione che stai cercando. -record.whereNext=Dove si va dopo? -record.headBack=Torna alla pagina principale di ORCID -record.isThisYou=Sei tu? -record.signInToStart=Accedi per iniziare a modificare -record.trySearching=Prova a usare la nostra ricerca avanzata per trovare i ricercatori in base al loro nome o al loro iD ORCID +record.unidentifiedOrganization=Organizzazione non identificata +record.identifyAS=Identifica come: diff --git a/src/locale/properties/record/record.ja.properties b/src/locale/properties/record/record.ja.properties index 7974a87d03..13202ef57d 100644 --- a/src/locale/properties/record/record.ja.properties +++ b/src/locale/properties/record/record.ja.properties @@ -1,42 +1,16 @@ +record.delegatorAddEmailNotAllow=別のORCIDレコードを管理している場合、さらにメールアドレスを追加することはできません。 +record.ogDescription1=用のORCIDレコード +record.ogDescription2=ORCIDは、研究、奨学金、イノベーション活動に従事する個人が、自分の名前で使用するための識別子を提供します。 +record.noPublicInfo=パブリック情報はありません。 record.otherIds=他の ID -record.alsoKnowAs=別名 -record.emails=電子メール -record.websiteAndSocialLinks=ウェブサイトとソーシャルリンク +record.websitesAndSocialLinks=ウェブサイト&ソーシャルリンク record.keywords=キーワード record.countries=国 record.previewPublicRecord=公開記録をプレビュー -record.names=名前 -record.publishedName=公開名 -record.name=名前 -record.otherNames=その他の名前 -record.biography=経歴 -record.printableVersion=印刷可能バージョン -record.getQR=ORCID iDのQRコードを取得 -record.displayId=他のサイトに ID を表示 -record.source=ソース record.closeOtherSources=優先ソースを作成 -record.added=追加されました -record.lastModified=最終更新 -record.url=URL -record.citation=引用 -record.subtitle=サブタイトル -record.language=言語 -record.translatedTitle=翻訳済みタイトル -record.translations=翻訳 -record.contributors=寄与者 -record.youArePreviewing=このレコードの公開バージョンをプレビューしています -record.editThisRecord=このレコードを編集 -record.countryPublication=出版国 -record.description=説明 -record.noPublicInfo=パブリック情報はありません。 -record.lockedRecord=この ORCID レコードは一時的にロックされています -record.accountDeprecated=このアカウントは置き換えられました。アカウントで -record.geographicalArea=地域 -record.workType=著作・業績タイプ -record.accountDeprecated2=最新情報をご確認ください -record.youAreManaging=このORCIDレコードを、信頼できる個人として管理しています -record.youAreManagingSomeElse=ORCIDレコードを管理しています -record.youArePreviewingSomeElse=レコードの公開バージョンをプレビューしています +record.trySearching=高度な検索を使用して、名前またはORCID iDで研究者を見つけてください +record.pleaseGet=下の「ヘルプ」ボタンからサポートチームに連絡してください。サポートチームが、あなたが探しているレコードを見つけるお手伝いをさせて頂きます。 +record.ifYouHave=以前にこのレコードをブックマークしていて、機能しなくなった場合 record.notFound=申し訳ありません、お探しのORCIDレコードが見つかりません。 record.whatHappened=どうされました? record.whatToDo=次にすること @@ -44,10 +18,5 @@ record.ifYouTyped=URLまたはORCID iDを手動で入力した場合 record.pleaseCheck=ORCID iD(URLの末尾にある16桁の数字)が正しいことを確認してください。正しいフォーマットのORCID URLは以下のようになります:http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=別のサイト、またはサービスからこのレコードへのリンクをたどった場合 record.pleaseReport=修正できるように、あなたが来たサイトまたはサービスへのこの壊れたリンクを報告してください。 -record.ifYouHave=以前にこのレコードをブックマークしていて、機能しなくなった場合 -record.pleaseGet=下の「ヘルプ」ボタンからサポートチームに連絡してください。サポートチームが、あなたが探しているレコードを見つけるお手伝いをさせて頂きます。 -record.whereNext=次はどこですか? -record.headBack=ORCIDのメインのホームページに戻る -record.isThisYou=これはあなたですか? -record.signInToStart=サインインして編集を開始 -record.trySearching=高度な検索を使用して、名前またはORCID iDで研究者を見つけてください +record.unidentifiedOrganization=未確認の組織 +record.identifyAS=次のものとして識別する: diff --git a/src/locale/properties/record/record.ko.properties b/src/locale/properties/record/record.ko.properties index 96e4422dc4..7a783dcd01 100644 --- a/src/locale/properties/record/record.ko.properties +++ b/src/locale/properties/record/record.ko.properties @@ -1,42 +1,16 @@ +record.delegatorAddEmailNotAllow=다른 ORCID 기록을 관리할 때는 이메일 주소를 추가할 수 없습니다. +record.ogDescription1=ORCID 기록 +record.ogDescription2=ORCID는 개인이 연구, 장학금, 혁신 활동에 참여할 때 이름과 함께 사용할 수 있는 식별자를 제공합니다. +record.noPublicInfo=이용할 수 있는 공개 정보가 없습니다. record.otherIds=기타 ID -record.alsoKnowAs=다른 이름 -record.emails=이메일 -record.websiteAndSocialLinks=웹사이트 및 소셜 링크 +record.websitesAndSocialLinks=웹사이트 및 소셜 링크 record.keywords=키워드 record.countries=국가 record.previewPublicRecord=퍼블릭 레코드 미리보기 -record.names=이름 -record.publishedName=필명 -record.name=이름 -record.otherNames=다른 이름들 -record.biography=자기소개 -record.printableVersion=인쇄할 수 있는 버전 -record.getQR=ORCID iD용 QR 코드 받기 -record.displayId=타 사이트에 귀하의 ORCID iD 표시 -record.source=소스 record.closeOtherSources=선호하는 소스(출처) 만들기 -record.added=추가됨 -record.lastModified=마지막으로 수정한 날짜 -record.url=URL -record.citation=서지사항 -record.subtitle=부제목 -record.language=언어 -record.translatedTitle=번역된 제목 -record.translations=번역 -record.contributors=기부자 -record.youArePreviewing=이 기록의 공개 버전을 프리뷰하고 있습니다 -record.editThisRecord=이 기록 수정하기 -record.countryPublication=발행국 -record.description=설명 -record.noPublicInfo=이용할 수 있는 공개 정보가 없습니다. -record.lockedRecord=본 ORCID 레코드는 일시적으로 잠겼습니다 -record.accountDeprecated=이 계정은 사용중지되었습니다. -record.geographicalArea=지리적 지역 -record.workType=저작물 유형 -record.accountDeprecated2=최신정보를 확인하시기 바랍니다. -record.youAreManaging=이 ORCID 기록을 신뢰할 수 있는 개인으로 관리하고 있습니다. -record.youAreManagingSomeElse=귀하의 ORCID 기록을 관리하고 있습니다 -record.youArePreviewingSomeElse=귀하는 기록의 공개 버전을 프리뷰하고 있습니다. +record.trySearching=고급 검색을 사용하여 이름 또는 ORCID iD로 연구원을 찾으십시오. +record.pleaseGet=아래 도움말 버튼을 통해 지원팀에 문의하세요. 찾고 있는 기록을 찾는 데 도움을 줄 수 있습니다. +record.ifYouHave=이전에 이 기록을 즐겨찾기에 추가했지만 작동이 중지된 경우 record.notFound=정말 죄송하게도 찾고 계시는 ORCID 기록을 찾을 수 없습니다. record.whatHappened=무슨 일입니까? record.whatToDo=다음 작업 @@ -44,10 +18,5 @@ record.ifYouTyped=URL 또는 ORCID iD를 직접 입력한 경우 record.pleaseCheck=ORCID iD(URL 끝에 있는 16자리 숫자)가 올바른지 확인하십시오. 올바른 형식의 ORCID URL은 다음과 같습니다. http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=다른 사이트나 서비스에서 이 기록에 대한 링크를 따랐을 경우 record.pleaseReport=수정할 수 있도록 거쳐온 사이트나 서비스에 이 끊어진 링크에 대해 알리십시오. -record.ifYouHave=이전에 이 기록을 즐겨찾기에 추가했지만 작동이 중지된 경우 -record.pleaseGet=아래 도움말 버튼을 통해 지원팀에 문의하세요. 찾고 있는 기록을 찾는 데 도움을 줄 수 있습니다. -record.whereNext=다음은 어디죠? -record.headBack=메인 ORCID 홈페이지로 돌아가기 -record.isThisYou=본인이십니까? -record.signInToStart=편집을 시작하기 위해 로그인 -record.trySearching=고급 검색을 사용하여 이름 또는 ORCID iD로 연구원을 찾으십시오. +record.unidentifiedOrganization=확인할 수 없는 기관 +record.identifyAS=다음과 같이 확인됨. diff --git a/src/locale/properties/record/record.lr.properties b/src/locale/properties/record/record.lr.properties index 798d5c8d50..24d5d44fc6 100644 --- a/src/locale/properties/record/record.lr.properties +++ b/src/locale/properties/record/record.lr.properties @@ -1,81 +1,30 @@ record.otherIds=LR -record.alsoKnowAs=LR -record.emails=LR record.keywords=LR record.websiteAndSocialLinks=LR record.countries=LR record.previewPublicRecord=LR -record.names=LR -record.publishedName=LR -record.name=LR -record.otherNames=LR -record.biography=LR -record.printableVersion=LR record.getQR=LR -record.displayId=LR -record.source=LR record.closeOtherSources=LR record.organizationIdentifiers=LR record.OtherOrganization=LR -record.added=LR -record.lastModified=LR -record.url=LR -record.citation=LR -record.subtitle=LR -record.language=LR -record.translations=LR -record.youArePreviewing=LR -record.editThisRecord=LR -record.translatedTitle=LR -record.contributors=LR record.countryPublication=LR -record.description=LR record.noPublicInfo=LR -record.lockedRecord=LR -record.accountDeprecated2=LR -record.accountDeprecated=LR record.notFound=LR -record.youAreManaging=LR -record.youAreManagingSomeElse=LR -record.youArePreviewingSomeElse=LR record.ifYouTyped=LR record.pleaseCheck=LR record.ifYouFollowed=LR record.pleaseReport=LR record.ifYouHave=LR record.pleaseGet=LR -record.whereNext=LR -record.headBack=LR record.trySearching=LR -record.isThisYou=LR -record.signInToStart=LR record.whatHappened=LR record.whatToDo=LR -record.exportSelectedWorks=LR -record.exportSelectedWorksBibtexDescription=LR -record.findOut=LR -record.selectedWorks=LR -record.exportSelectedWorksBibtex=LR -record.combineSelectedWorks=LR -record.selectedWorksGrouped=LR -record.learnMoreCombining=LR -record.selectedWorksCombine=LR -record.combiningWorks=LR -record.checkSelectedWorks=LR record.combiningDuplicated=LR -record.deleteItems=LR -record.deletingItems=LR -record.selectedItems=LR -record.deleteSelected=LR record.youHaveNotSelected=LR -record.noItemsSelected=LR -record.linkWorks=LR -record.linkWorksMoreInfo=LR -record.linkFunding=LR -record.linkFundingMoreInfo=LR -record.geographicalArea=LR -record.workType=LR -record.all=LR -record.deactivatedRecord=LR record.ogDescription1=LR record.ogDescription2=LR +record.unidentifiedOrganization=LR +record.identifyAS=LR +record.accountLocked1=LR +record.delegatorAddEmailNotAllow=LR +record.websitesAndSocialLinks=LR diff --git a/src/locale/properties/record/record.pt.properties b/src/locale/properties/record/record.pt.properties index 04ba4f3a61..c6096644fb 100644 --- a/src/locale/properties/record/record.pt.properties +++ b/src/locale/properties/record/record.pt.properties @@ -1,42 +1,16 @@ +record.delegatorAddEmailNotAllow=Não é permitido adicionar endereços de e-mail adicionais quando se está a administrar outro registo do ORCID. +record.ogDescription1=Registo ORCID para +record.ogDescription2=O ORCID fornece um identificador para os indivíduos utilizarem com o seu nome enquanto se dedicam a atividades de investigação, bolsas de estudo, e inovação. +record.noPublicInfo=Nenhuma informação pública está disponível. record.otherIds=Outras IDs -record.alsoKnowAs=Também conhecido como -record.emails=E-mails -record.websiteAndSocialLinks=Sítio na Web e ligações sociais +record.websitesAndSocialLinks=Websites e hiperligações sociais record.keywords=Palavras-chave record.countries=Países record.previewPublicRecord=Pré-visualizar o registo público -record.names=Nomes -record.publishedName=Nome publicado -record.name=Nome -record.otherNames=Outros Nomes -record.biography=Biografia -record.printableVersion=Versão para impressão -record.getQR=Obtenha um código QR para o seu ORCID iD -record.displayId=Exiba seu iD em outros sites -record.source=Fonte record.closeOtherSources=Marcar como fonte preferencial -record.added=Adicionado -record.lastModified=Última alteração -record.url=URL -record.citation=Citação -record.subtitle=Subtítulo -record.language=Idioma -record.translatedTitle=Título traduzido -record.translations=Tradução -record.contributors=Contribuidores -record.youArePreviewing=Está a visualizar uma versão pública deste registo -record.editThisRecord=Editar este registo -record.countryPublication=País de publicação -record.description=Descrição -record.noPublicInfo=Nenhuma informação pública está disponível. -record.lockedRecord=Esse Registro ORCID está temporariamente trancado -record.accountDeprecated=Essa conta foi substituída, consulte a conta -record.geographicalArea=Área Geográfica -record.workType=Tipo de trabalho -record.accountDeprecated2=para as informações mais recentes -record.youAreManaging=Está a gerir este registo ORCID como um indivíduo de confiança -record.youAreManagingSomeElse=Está a gerir o seu registo ORCID -record.youArePreviewingSomeElse=Está a visualizar a versão pública do seu registo +record.trySearching=Tente usar a nossa pesquisa avançada para encontrar investigadores pelo seu nome ou ORCID iD +record.pleaseGet=Entre em contacto com a nossa equipa de apoio através do botão Ajuda abaixo. Eles podem ajudá-lo a encontrar o registo que procura. +record.ifYouHave=Se já marcou anteriormente este registo e este deixou de funcionar record.notFound=Lamentamos imenso, mas não conseguimos encontrar o registo do ORCID que procura record.whatHappened=Que aconteceu? record.whatToDo=O que fazer a seguir @@ -44,10 +18,5 @@ record.ifYouTyped=Se digitou no URL ou ORCID iD manualmente record.pleaseCheck=Verifique se o ORCID iD, o número de 16 dígitos no fim do URL, está correto. Um URL ORCID corretamente formatado parece-se com o seguinte: http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=Se seguiu uma ligação para este registo a partir de outro site ou serviço record.pleaseReport=Informe sobre esta ligação quebrada ao site ou serviço de onde veio para que o possam reparar. -record.ifYouHave=Se já marcou anteriormente este registo e este deixou de funcionar -record.pleaseGet=Entre em contacto com a nossa equipa de apoio através do botão Ajuda abaixo. Eles podem ajudá-lo a encontrar o registo que procura. -record.whereNext=A seguir? -record.headBack=Regressar à página principal do ORCID -record.isThisYou=É você? -record.signInToStart=Inicie a sessão para começar a editar -record.trySearching=Tente usar a nossa pesquisa avançada para encontrar investigadores pelo seu nome ou ORCID iD +record.unidentifiedOrganization=Organização não identificada +record.identifyAS=Identifique-se como: diff --git a/src/locale/properties/record/record.rl.properties b/src/locale/properties/record/record.rl.properties index cdefb377f0..a6f248bd32 100644 --- a/src/locale/properties/record/record.rl.properties +++ b/src/locale/properties/record/record.rl.properties @@ -1,81 +1,30 @@ record.otherIds=RL -record.alsoKnowAs=RL -record.emails=RL record.keywords=RL record.websiteAndSocialLinks=RL record.countries=RL record.previewPublicRecord=RL -record.names=RL -record.publishedName=RL -record.name=RL -record.otherNames=RL -record.biography=RL -record.printableVersion=RL record.getQR=RL -record.displayId=RL -record.source=RL record.closeOtherSources=RL record.organizationIdentifiers=RL record.OtherOrganization=RL -record.added=RL -record.lastModified=RL -record.url=RL -record.citation=RL -record.subtitle=RL -record.language=RL -record.translations=RL -record.youArePreviewing=RL -record.editThisRecord=RL -record.translatedTitle=RL -record.contributors=RL record.countryPublication=RL -record.description=RL record.noPublicInfo=RL -record.lockedRecord=RL -record.accountDeprecated2=RL -record.accountDeprecated=RL record.notFound=RL -record.youAreManaging=RL -record.youAreManagingSomeElse=RL -record.youArePreviewingSomeElse=RL record.ifYouTyped=RL record.pleaseCheck=RL record.ifYouFollowed=RL record.pleaseReport=RL record.ifYouHave=RL record.pleaseGet=RL -record.whereNext=RL -record.headBack=RL record.trySearching=RL -record.isThisYou=RL -record.signInToStart=RL record.whatHappened=RL record.whatToDo=RL -record.exportSelectedWorks=RL -record.exportSelectedWorksBibtexDescription=RL -record.findOut=RL -record.selectedWorks=RL -record.exportSelectedWorksBibtex=RL -record.combineSelectedWorks=RL -record.selectedWorksGrouped=RL -record.learnMoreCombining=RL -record.selectedWorksCombine=RL -record.combiningWorks=RL -record.checkSelectedWorks=RL record.combiningDuplicated=RL -record.deleteItems=RL -record.deletingItems=RL -record.selectedItems=RL -record.deleteSelected=RL record.youHaveNotSelected=RL -record.noItemsSelected=RL -record.linkWorks=RL -record.linkWorksMoreInfo=RL -record.linkFunding=RL -record.linkFundingMoreInfo=RL -record.geographicalArea=RL -record.workType=RL -record.all=RL -record.deactivatedRecord=RL record.ogDescription1=RL record.ogDescription2=RL +record.unidentifiedOrganization=RL +record.identifyAS=RL +record.accountLocked1=RL +record.delegatorAddEmailNotAllow=RL +record.websitesAndSocialLinks=RL diff --git a/src/locale/properties/record/record.ru.properties b/src/locale/properties/record/record.ru.properties index 40d6b06c95..5672035146 100644 --- a/src/locale/properties/record/record.ru.properties +++ b/src/locale/properties/record/record.ru.properties @@ -1,42 +1,16 @@ +record.delegatorAddEmailNotAllow=Добавление дополнительных адресов электронной почты запрещено, когда вы управляете другой записью ORCID. +record.ogDescription1=Запись ORCID для +record.ogDescription2=ORCID предоставляет идентификатор людям для использования с их именем, когда эти люди занимаются исследованиями, получаются стипендию или ведут инновационную деятельность. +record.noPublicInfo=Нет доступной публичной информации. record.otherIds=Другие ID -record.alsoKnowAs=Также известен как -record.emails=Адреса электронной почты -record.websiteAndSocialLinks=Веб-сайты и информация из социальных сетей +record.websitesAndSocialLinks=Сайты и ссылки соцсетей record.keywords=Ключевые слова record.countries=Страны record.previewPublicRecord=Предварительный просмотр публичной информации -record.names=Имена -record.publishedName=Имя учетной записи -record.name=Имя: -record.otherNames=Другие имена -record.biography=Биография -record.printableVersion=Версия для печати -record.getQR=Получите QR-код для вашего ORCID iD -record.displayId=Поделитесь вашим ORCID iD на других сайтах -record.source=Источник record.closeOtherSources=Сделать предпочитаемым источником -record.added=Добавлено -record.lastModified=Последнее изменение -record.url=URL -record.citation=Цитирование -record.subtitle=Подзаголовок -record.language=Язык -record.translatedTitle=Перевод названия -record.translations=Перевод -record.contributors=Исследователи -record.youArePreviewing=Вы выполняется предпросмотр публичной версии этой записи -record.editThisRecord=Изменить эту запись -record.countryPublication=Страна публикации -record.description=Описание -record.noPublicInfo=Нет доступной публичной информации. -record.lockedRecord=Запись ORCID временно заблокирована -record.accountDeprecated=Эта учетная запись была переписана, обратитесь к учетной записи -record.geographicalArea=Географическая область -record.workType=Тип работы -record.accountDeprecated2=для получения актуальных сведений -record.youAreManaging=Вы управляете это записью ORCID в качесте доверенного лица -record.youAreManagingSomeElse=Вы управляете своей записью ORCID -record.youArePreviewingSomeElse=Вы выполняете предварительный просмотр публичной версии вашей записи +record.trySearching=Попробуйте использовать наш расширенный поиск, чтобы найти исследователей по имени или ORCID iD +record.pleaseGet=Свяжитесь с нашей командой поддержки с помощью кнопки «Справка» ниже. Она может помочь вам найти запись, которую вы ищете. +record.ifYouHave=Если вы ранее пометили эту запись закладкой, и она перестала работать record.notFound=Нам очень жаль, но мы не можем найти запись ORCID, которую вы ищете. record.whatHappened=Что случилось? record.whatToDo=Что делать дальше @@ -44,10 +18,5 @@ record.ifYouTyped=Если вы ввели URL или ORCID iD вручную record.pleaseCheck=Убедитесь, что 16-значный номер-идентификатор ORCID в конце URL-адреса — правильный. Правильно отформатированный URL ORCID выглядит следующим образом: http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=Если вы перешли по ссылке к этой записи с другого сайта или сервиса record.pleaseReport=Пожалуйтесь на эту неверуную ссылку на сайте или в службе, с которого(-ой) вы пришли, чтобы он(-а) смог(-ла) ее исправить. -record.ifYouHave=Если вы ранее пометили эту запись закладкой, и она перестала работать -record.pleaseGet=Свяжитесь с нашей командой поддержки с помощью кнопки «Справка» ниже. Она может помочь вам найти запись, которую вы ищете. -record.whereNext=Куда дальше? -record.headBack=Назад на главную домашнюю страницу ORCID -record.isThisYou=Это вы? -record.signInToStart=Войдите, чтобы начать редактирование -record.trySearching=Попробуйте использовать наш расширенный поиск, чтобы найти исследователей по имени или ORCID iD +record.unidentifiedOrganization=Неустановленная организация +record.identifyAS=Идентифицировать как: diff --git a/src/locale/properties/record/record.uk.properties b/src/locale/properties/record/record.uk.properties index ab0550a0c7..6e25b7775e 100644 --- a/src/locale/properties/record/record.uk.properties +++ b/src/locale/properties/record/record.uk.properties @@ -1,28 +1,22 @@ +record.delegatorAddEmailNotAllow=Adding additional email addresses is not allowed when you are managing another ORCID record. +record.ogDescription1=ORCID record for +record.ogDescription2=ORCID provides an identifier for individuals to use with their name as they engage in research, scholarship, and innovation activities. +record.noPublicInfo=No public information available. record.otherIds=Other IDs -record.alsoKnowAs=Also known as -record.emails=Emails +record.websitesAndSocialLinks=Websites & social links record.keywords=Ключові слова -record.names=Names -record.publishedName=Published Name -record.name=Name -record.otherNames=Other names -record.biography=Biography -record.displayId=Display your iD on other sites -record.source=Джерело -record.added=Added -record.lastModified=Last modified -record.url=URL -record.citation=Цитування -record.subtitle=Підзаголовок -record.language=Мова -record.translatedTitle=Перекладена назва -record.translations=Переклад -record.contributors=Учасники -record.countryPublication=Країна публікації -record.description=Опис -record.noPublicInfo=No public information available. -record.lockedRecord=This ORCID Record is locked -record.accountDeprecated=This account has been deprecated, please see account -record.accountDeprecated2=for the latest information -record.geographicalArea=Geographical area -record.workType=Work type +record.countries=Countries +record.previewPublicRecord=Preview public record +record.closeOtherSources=Make preferred source +record.trySearching=Try using our advanced search to find researchers by their name or ORCID iD +record.pleaseGet=Please get in touch with our support team via the Help button below. They can help you find the record you are looking for. +record.ifYouHave=If you have previously bookmarked this record and it has now stopped working +record.notFound=We’re really sorry, we can’t find the ORCID record you’re looking for. +record.whatHappened=What happened? +record.whatToDo=What to do next +record.ifYouTyped=If you typed in the URL or ORCID iD by hand +record.pleaseCheck=Please check that the ORCID iD - the 16-digit number at the end of the URL - is correct. A correctly-formatted ORCID URL looks like this: https://orcid.org/1234-5678-9101-1121 +record.ifYouFollowed=If you followed a link to this record from another site or service +record.pleaseReport=Please report the broken link to the site or service you came from so they can fix it. +record.unidentifiedOrganization=Unidentified organization +record.identifyAS=Identify as: diff --git a/src/locale/properties/record/record.xx.properties b/src/locale/properties/record/record.xx.properties index fd99f4261f..8a8a419e41 100644 --- a/src/locale/properties/record/record.xx.properties +++ b/src/locale/properties/record/record.xx.properties @@ -1,81 +1,30 @@ record.otherIds=X -record.alsoKnowAs=X -record.emails=X record.keywords=X record.websiteAndSocialLinks=X record.countries=X record.previewPublicRecord=X -record.names=X -record.publishedName=X -record.name=X -record.otherNames=X -record.biography=X -record.printableVersion=X record.getQR=X -record.displayId=X -record.source=X record.closeOtherSources=X record.organizationIdentifiers=X record.OtherOrganization=X -record.added=X -record.lastModified=X -record.url=X -record.citation=X -record.subtitle=X -record.language=X -record.translations=X -record.youArePreviewing=X -record.editThisRecord=X -record.translatedTitle=X -record.contributors=X record.countryPublication=X -record.description=X record.noPublicInfo=X -record.lockedRecord=X -record.accountDeprecated2=X -record.accountDeprecated=X record.notFound=X -record.youAreManaging=X -record.youAreManagingSomeElse=X -record.youArePreviewingSomeElse=X record.ifYouTyped=X record.pleaseCheck=X record.ifYouFollowed=X record.pleaseReport=X record.ifYouHave=X record.pleaseGet=X -record.whereNext=X -record.headBack=X record.trySearching=X -record.isThisYou=X -record.signInToStart=X record.whatHappened=X record.whatToDo=X -record.exportSelectedWorks=X -record.exportSelectedWorksBibtexDescription=X -record.findOut=X -record.selectedWorks=X -record.exportSelectedWorksBibtex=X -record.combineSelectedWorks=X -record.selectedWorksGrouped=X -record.learnMoreCombining=X -record.selectedWorksCombine=X -record.combiningWorks=X -record.checkSelectedWorks=X record.combiningDuplicated=X -record.deleteItems=X -record.deletingItems=X -record.selectedItems=X -record.deleteSelected=X record.youHaveNotSelected=X -record.noItemsSelected=X -record.linkWorks=X -record.linkWorksMoreInfo=X -record.linkFunding=X -record.linkFundingMoreInfo=X -record.geographicalArea=X -record.workType=X -record.all=X -record.deactivatedRecord=X record.ogDescription1=X record.ogDescription2=X +record.unidentifiedOrganization=X +record.identifyAS=X +record.accountLocked1=X +record.delegatorAddEmailNotAllow=X +record.websitesAndSocialLinks=X diff --git a/src/locale/properties/record/record.zh_CN.properties b/src/locale/properties/record/record.zh_CN.properties index cc71b955a2..d90ce6a54b 100644 --- a/src/locale/properties/record/record.zh_CN.properties +++ b/src/locale/properties/record/record.zh_CN.properties @@ -1,42 +1,16 @@ +record.delegatorAddEmailNotAllow=您正在编辑其他 ORCID 记录,无法新增电子邮箱地址 +record.ogDescription1=的 ORCID 记录 +record.ogDescription2=ORCID 为个人提供了标识符,可在从事研究、学术和创新活动时与其姓名一起使用。 +record.noPublicInfo=无可用公开信息。 record.otherIds=其他 ID -record.alsoKnowAs=也称为 -record.emails=电子邮件 -record.websiteAndSocialLinks=网站和社交链接 +record.websitesAndSocialLinks=网站和社交链接 record.keywords=关键字 record.countries=国家/地区 record.previewPublicRecord=预览公开记录 -record.names=姓名 -record.publishedName=笔名 -record.name=名称 -record.otherNames=其他姓名 -record.biography=简历 -record.printableVersion=可打印版本 -record.getQR=获得 ORCID iD 号的二维码 -record.displayId=在其他网站上显示您的 iD -record.source=源 record.closeOtherSources=标记为首选源 -record.added=新增 -record.lastModified=上次修改时间 -record.url=URL -record.citation=引用 -record.subtitle=副标题 -record.language=语言 -record.translatedTitle=翻译的标题 -record.translations=翻译 -record.contributors=参与者 -record.youArePreviewing=您正在预览此记录的公开版本 -record.editThisRecord=编辑此记录 -record.countryPublication=出版物所属国家/地区 -record.description=说明 -record.noPublicInfo=无可用公开信息。 -record.lockedRecord=此 ORCID 记录被暂时锁定 -record.accountDeprecated=此帐户已弃用,请查看帐户 -record.geographicalArea=地理区域 -record.workType=成果类型 -record.accountDeprecated2=以了解最新信息 -record.youAreManaging=您正在以可信个人身份管理此 ORCID 记录 -record.youAreManagingSomeElse=您正在管理您的 ORCID 记录 -record.youArePreviewingSomeElse=您正在预览您的记录的公开版本 +record.trySearching=尝试使用我们的高级搜索来按姓名或 ORCID iD 号查找研究人员 +record.pleaseGet=请通过下方的“帮助”按钮联系我们的支持团队。他们可以帮助您找到您正在寻找的记录。 +record.ifYouHave=如果您先前曾收藏此记录,且它已停止工作 record.notFound=很抱歉,找不到您搜索的 ORCID 记录。 record.whatHappened=发生了什么? record.whatToDo=下一步 @@ -44,28 +18,5 @@ record.ifYouTyped=如果您是手动输入 URL 或 ORCID iD 号 record.pleaseCheck=请检查该 ORCID iD 号(URL 末尾的 16 位数字)是否正确。格式正确的 ORCID URL 应显示为:http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=如果您使用了其他网站或服务的链接访问了此记录 record.pleaseReport=请向您所在的网站或服务报告此链接问题,方便他们修复。 -record.ifYouHave=如果您先前曾收藏此记录,且它已停止工作 -record.pleaseGet=请通过下方的“帮助”按钮联系我们的支持团队。他们可以帮助您找到您正在寻找的记录。 -record.whereNext=接下来是什么? -record.headBack=回到 ORCID 主页 -record.isThisYou=这是您吗? -record.signInToStart=登录以开始编辑 -record.trySearching=尝试使用我们的高级搜索来按姓名或 ORCID iD 号查找研究人员 -record.exportSelectedWorks= -record.exportSelectedWorksBibtexDescription= -record.findOut= -record.selectedWorks= -record.exportSelectedWorksBibtex= -record.combineSelectedWorks= -record.selectedWorksGrouped= -record.learnMoreCombining= -record.selectedWorksCombine= -record.combiningWorks= -record.checkSelectedWorks= -record.combiningDuplicated= -record.deleteItems= -record.deletingItems= -record.selectedItems= -record.deleteSelected= -record.youHaveNotSelected= -record.noItemsSelected= +record.unidentifiedOrganization=未识别的组织 +record.identifyAS=公开为: diff --git a/src/locale/properties/record/record.zh_TW.properties b/src/locale/properties/record/record.zh_TW.properties index bdbccd22c2..9e1787b34c 100644 --- a/src/locale/properties/record/record.zh_TW.properties +++ b/src/locale/properties/record/record.zh_TW.properties @@ -1,42 +1,16 @@ +record.delegatorAddEmailNotAllow=管理它筆 ORCID 紀錄時無法新增電子郵件地址。 +record.ogDescription1=ORCID 紀錄屬於 +record.ogDescription2=ORCID 為個人在從事研究、學術與創新活動時,提供一個可與其姓名聯用的識別標籤。 +record.noPublicInfo=無可用公開資訊。 record.otherIds=其他 ID -record.alsoKnowAs=又稱為 -record.emails=電子郵件 -record.websiteAndSocialLinks=網站和社交連結 +record.websitesAndSocialLinks=網站和社交連結 record.keywords=關鍵字 record.countries=國家 record.previewPublicRecord=預覽公共記錄 -record.names=姓名 -record.publishedName=發佈者姓名 -record.name=名稱 -record.otherNames=其他姓名 -record.biography=簡歷 -record.printableVersion=可列印版本 -record.getQR=取得一個您的 ORCID iD 的 QR 碼 -record.displayId=在其他網站上顯示您的 iD -record.source=源 record.closeOtherSources=標註為喜好的資源 -record.added=已添加 -record.lastModified=最後修改 -record.url=URL -record.citation=參考文獻 -record.subtitle=副標題 -record.language=語言 -record.translatedTitle=翻譯的標題 -record.translations=翻譯 -record.contributors=投稿人 -record.youArePreviewing=您正在預覽此筆紀錄的公開版本 -record.editThisRecord=編輯此筆紀錄 -record.countryPublication=出版物所屬國家/地區 -record.description=描述 -record.noPublicInfo=無可用公開資訊。 -record.lockedRecord=此 ORCID 記錄被暫時鎖定 -record.accountDeprecated=此帳戶已被取代,請檢視帳戶 -record.geographicalArea=地理區域 -record.workType=作品類別 -record.accountDeprecated2=以瞭解最新資訊 -record.youAreManaging=您正以受託人身份管理此 ORCID 紀錄 -record.youAreManagingSomeElse=您正在管理您的 ORCID 紀錄 -record.youArePreviewingSomeElse=您正在預覽您的記錄的公開版本 +record.trySearching=嘗試使用我們的進階搜尋以根據其名稱或 ORCID iD 來查詢研究員 +record.pleaseGet=請透過下方的「幫助」按鈕與我們的支援團隊聯繫。他們可以協助您搜尋您正在尋找的紀錄。 +record.ifYouHave=若您曾經註記此筆紀錄而其已停止作業 record.notFound=很抱歉,我們無法找到您正在搜尋的 ORCID 紀錄。 record.whatHappened=發生什麼事? record.whatToDo=下一步 @@ -44,10 +18,5 @@ record.ifYouTyped=若您手動輸入 URL 或 ORCID iD record.pleaseCheck=請檢查 ORCID iD(URL 最末的 16 位數字)的正確性。一個正確格式的 ORCID URL 應顯示為:http://orcid.org/1234-5678-9101-1121 record.ifYouFollowed=若您從其他網站或服務點擊此筆紀錄的連結 record.pleaseReport=請向您所在的網站或服務報告這個損毀的連結,以便他們修復。 -record.ifYouHave=若您曾經註記此筆紀錄而其已停止作業 -record.pleaseGet=請透過下方的「幫助」按鈕與我們的支援團隊聯繫。他們可以協助您搜尋您正在尋找的紀錄。 -record.whereNext=下一個在哪? -record.headBack=回到 ORCID 主頁 -record.isThisYou=這是您嗎? -record.signInToStart=登入以開始編輯 -record.trySearching=嘗試使用我們的進階搜尋以根據其名稱或 ORCID iD 來查詢研究員 +record.unidentifiedOrganization=未識別的組織 +record.identifyAS=識別為: diff --git a/src/locale/properties/register/register.ca.properties b/src/locale/properties/register/register.ca.properties deleted file mode 100644 index bb3c4f6a7a..0000000000 --- a/src/locale/properties/register/register.ca.properties +++ /dev/null @@ -1,4 +0,0 @@ -register.register=REGISTREU-VOS -register.privacyPolicy=política de privacitat -register.and=i -register.affiliationsLabel=Afiliacions diff --git a/src/locale/properties/register/register.en.properties b/src/locale/properties/register/register.en.properties index e25bda8795..fe763508f1 100644 --- a/src/locale/properties/register/register.en.properties +++ b/src/locale/properties/register/register.en.properties @@ -72,7 +72,7 @@ register.passwordCantBeEmail=Password must not be the same as your email address register.emailAlreadyExists=This email already exists in our system. Would you like to register.signinLowerCase=sign in register.additionalEmailMatchPrimary=Additional email cannot match primary email -register.additionalEmailMatch=Additional emails can not be duplicated +register.additionalEmailMatch=Additional emails cannot be duplicated register.wrongPasswordPattern=Password must match all pattern requirements register.moreInfo=More information on names register.securityAndNotifications=Security and notifications diff --git a/src/locale/properties/register/register.uk.properties b/src/locale/properties/register/register.uk.properties deleted file mode 100644 index 7dc4d3ddfd..0000000000 --- a/src/locale/properties/register/register.uk.properties +++ /dev/null @@ -1,4 +0,0 @@ -register.register=ЗАРЕЄСТРУЙТЕСЯ -register.privacyPolicy=політика конфіденційності -register.and=та -register.affiliationsLabel=Пов'язані організації diff --git a/src/locale/properties/register/register.zh_CN.properties b/src/locale/properties/register/register.zh_CN.properties index 4d4c1a0c49..822ad74fa7 100644 --- a/src/locale/properties/register/register.zh_CN.properties +++ b/src/locale/properties/register/register.zh_CN.properties @@ -101,4 +101,4 @@ register.reactivating=重新激活您的帐户 register.resendReactivate=点击此处重新激活 register.deactivated=一条已停用的 ORCID 记录与此电子邮件地址相关联。 register.reactivation=感谢您再次激活您的 ORCID iD。 -register.reactivate= +register.reactivate=重新激活 diff --git a/src/locale/properties/research-resources/research-resources.ar.properties b/src/locale/properties/research-resources/research-resources.ar.properties index 3684d2ac15..97cd830dcd 100644 --- a/src/locale/properties/research-resources/research-resources.ar.properties +++ b/src/locale/properties/research-resources/research-resources.ar.properties @@ -2,4 +2,4 @@ researchResources.researchResources=موارد البحث researchResources.description=قم بالاتصال بمؤسسات موثوق بها لإضافة الموارد المتخصصة التي تستخدمها لبحثك تلقائياً. researchResources.learnMore=تعرف على المزيد حول كيفية إضافة موارد البحث إلى سجل أوركيد الخاص بك researchResources.items=مواد -researchResources.present=حالي +researchResources.present=الحاضر diff --git a/src/locale/properties/research-resources/research-resources.ca.properties b/src/locale/properties/research-resources/research-resources.ca.properties index 039321c74f..bd5cc37542 100644 --- a/src/locale/properties/research-resources/research-resources.ca.properties +++ b/src/locale/properties/research-resources/research-resources.ca.properties @@ -1,2 +1,5 @@ researchResources.researchResources=Research resources +researchResources.description=Connect to trusted organizations to automatically add the specialist resources you use for your research. +researchResources.learnMore=Learn more about how research resources are added to your ORCID record +researchResources.items=items researchResources.present=present diff --git a/src/locale/properties/research-resources/research-resources.uk.properties b/src/locale/properties/research-resources/research-resources.uk.properties index 039321c74f..bd5cc37542 100644 --- a/src/locale/properties/research-resources/research-resources.uk.properties +++ b/src/locale/properties/research-resources/research-resources.uk.properties @@ -1,2 +1,5 @@ researchResources.researchResources=Research resources +researchResources.description=Connect to trusted organizations to automatically add the specialist resources you use for your research. +researchResources.learnMore=Learn more about how research resources are added to your ORCID record +researchResources.items=items researchResources.present=present diff --git a/src/locale/properties/search/search.ca.properties b/src/locale/properties/search/search.ca.properties deleted file mode 100644 index 4d904b3332..0000000000 --- a/src/locale/properties/search/search.ca.properties +++ /dev/null @@ -1,2 +0,0 @@ -ngOrcid.search.orcidID=ID d'ORCID -ngOrcid.search.affiliations=Afiliacions diff --git a/src/locale/properties/search/search.uk.properties b/src/locale/properties/search/search.uk.properties deleted file mode 100644 index dc9c097704..0000000000 --- a/src/locale/properties/search/search.uk.properties +++ /dev/null @@ -1,2 +0,0 @@ -ngOrcid.search.orcidID=СВІЙ НОМЕР ORCID -ngOrcid.search.affiliations=Пов'язані організації diff --git a/src/locale/properties/shared/shared.ar.properties b/src/locale/properties/shared/shared.ar.properties index 04c9d928a6..b8ffe935b4 100644 --- a/src/locale/properties/shared/shared.ar.properties +++ b/src/locale/properties/shared/shared.ar.properties @@ -12,12 +12,13 @@ shared.oauthSessionError=طلب التفويض المفتوح خاصتك غير shared.hideDetails=إخفاء التفاصيل shared.showDetails=إخفاء التفاصيل shared.edit=تحرير +shared.makeCopy=قم بالنسخ والتحرير shared.saveChanges=حفظ التغييرات shared.cancel=الغاء -shared.source=المصدر: +shared.sourceColon=المصدر: shared.visibility=الرؤية -shared.whoCanSeeBio=من يمكنه رؤية سيرتك الذاتية. إعداد الرؤية الافتراضي هو خاص. -shared.whoCanSeeName=من يمكنه رؤية اسمك. إعداد الرؤية الافتراضي هو خاص. +shared.whoCanSeeBio=تحكم في من يمكنه رؤية سيرتك الذاتية عن طريق تعيين إعدادات إمكانية الرؤية. إعدادك الافتراضي لإمكانية الرؤية +shared.whoCanSeeName=تحكم في من يمكنه رؤية اسمك واسم عائلتك وأسمائك المنشورة عن طريق تعيين إعدادات إمكانية الرؤية. إعداد إمكانية الرؤية الافتراضي لأسمائك shared.requiredInformation=معلومات مطلوبة shared.created=تم الإنشاء: shared.delete=حذف @@ -35,7 +36,7 @@ shared.otherOrganization=Other organization identifiers provided by shared.translatedTitle=العنوان المترجم shared.added=تمت الإضافة shared.lastModified=آخر تعديل -shared.url=رابط URL +shared.url=عنوان URL shared.employment=التوظيف shared.educationQualifications=التعليم والمؤهلات shared.qualification=مؤهل @@ -48,6 +49,8 @@ shared.membership=العضوية والخدمة shared.membershipTitle=العضوية shared.service=خدمة shared.educationQualificationsDescription=أضف معلومات عن مكان دراستك وتعليمك أو المؤهلات المهنية التي نلتها. +shared.educationLearnMore=اعرف المزيد عن إضافة المؤهلات التعليمية إلى سجل ORCID الخاص بك +shared.invitedPositionsDescription=أضف معلومات عن الوظائف المدعوة التي شغلتها والجوائز والمكافآت التي تلقيتها تكريماً لإنجازاتك. shared.invitedPositionsLearnMore=اعرف المزيد عن إضافة الوظائف المدعوة أو مراتب التفوق إلى سجل ORCID الخاص بك shared.membershipDescription=أضف معلومات المجتمع، أو عضويات الجمعية والتبرع بالوقت، أو مراجع أخرى في خدمة منظمة. shared.membershipLearnMore=اعرف المزيد عن إضافة عضوية أو خدمة إلى سجل ORCID الخاص بك @@ -55,13 +58,14 @@ shared.works=أعمال shared.expandAll=توسيع الكل shared.collapseAll=تقليص الكل shared.lastModifiedTime=آخر تعديل للتسجيلة -shared.fundedBy=Funded by +shared.fundedBy=بتمويل shared.partOf=جزء من shared.onBehalfOf=عبر shared.versionOf=إصدار shared.add=إضافة shared.sort=فرز shared.addItem=أضف عنصراً +shared.exportItems=تصدير المواد shared.sortItems=تصنيف العناصر shared.addEmployment=أضف وظيفة shared.sortEmployments=تصنيف الوظائف @@ -116,17 +120,64 @@ shared.year=سنة shared.month=شهر shared.day=يوم shared.invalidDate=تاريخ غير صحيح +shared.endDateError=يجب أن يكون تاريخ الانتهاء بعد تاريخ البدء shared.link=الرابط shared.linkDescription=رابط إلى صفحة شخصية أو وصف للدور. يجب أن تكون الروابط في هيئة عنوان URL كامل، على سبيل المثال، http://www.website.com/page.html shared.invalidLink=رابط غير صالح -shared.visibilityDescription=تحكّم في من يستطيع رؤية المعلومات في سجلّك. +shared.visibilityDescription=تحكم في من يمكنه رؤية هذه المعلومات عن طريق تعيين إعدادات إمكانية الرؤية. إعدادك الافتراضي لإمكانية الرؤية +shared.actions=إجراءات +shared.combineWorks=تجميع الأعمال +shared.exportWorks=تصدير الأعمال +shared.exportAllWorks=تصدير الأعمال +shared.setVisibility=ضبط الرؤية +shared.deleteWorks=حذف الأعمال +shared.itemsCurrentlySelected=المواد المحددة حالياً +shared.selectAll=تحديد الكل shared.whoCanSeeThis=من يمكنه رؤية ذلك؟ shared.preferred=التفضيلات shared.present=الحاضر +shared.titleNotFound=404 - لم يتم العثور على تسجيلة أوركيد shared.to=إلى -shared.makeCopy=قم بالنسخ والتحرير -shared.export=تصدير -shared.actions=إجراءات -shared.exportWorks=تصدير الأعمال +shared.selected=المحدد shared.searchLink=البحث والرابط -shared.educationLearnMore=اعرف المزيد عن إضافة المؤهلات التعليمية إلى سجل ORCID الخاص بك +shared.addManually=أضف يدويا +share.undefinedId=معرف غير محدد +shared.worksDescription=أضف معلومات عن أعمالك، التي تحمل مخرجات بحثك، على سبيل المثال، المنشورات، والعروض التقديمية في المؤتمرات، ومجموعات البيانات، وأكثر. +shared.worksLearnMore=اعرف المزيد عن إضافة الأعمال إلى سجل ORCID الخاص بك +shared.employmentDescription=أضف مؤسسات قوائم التوظيف التي كنت تابعاً لها مهنياً. +shared.employmentLearnMore=اعرف المزيد عن إضافة الوظيفة إلى سجل ORCID الخاص بك +shared.view=عرض +shared.addAnotherId=أضف معرف آخر +shared.addId=أضف معرفاً +shared.identifier=المعرف +shared.selectLanguage=اختر لغة +shared.openSourceToEdit=افتح المصادر لتعديل نسختك الخاصة +shared.youCanOnlyEditYour=يمكنك تعديل نسختك الخاصة فحسب +shared.distinctionDate=تاريخ الحصول على الشهادة +shared.relationship=الصلة +shared.relationshipColon=الصلة: +shared.invalidForm=خطأ في التحقق من صحة النموذج +shared.pleaseReviewInvalidForm=يرجى مراجعة النموذج وإصلاح المشكلات قبل الحفظ +shared.deleteItems=حذف المواد +shared.deletingItems=يؤدي حذف المواد إلى إزالتها نهائياً من تسجيلة أوركيد. يرجى مراجعة المواد المحددة للحذف. +shared.selectedItems=المواد المحددة للحذف +shared.deleteSelected=حذف المواد المحددة +shared.source=مصدر +shared.emails=البريد الالكتروني +shared.pleaseReview=يرجى مراجعة المشكلة وإصلاحها +shared.youHaveNotSelected=لم تقم بتحديد أي مواد للحذف. +shared.publicationDate=التاريخ العام +shared.selectACountry=تحديد بلد +shared.translatedTitleLanguageError=يرجى تحديد لغة +shared.translatedTitleError=الرجاء إدخال عنوان مترجم +shared.moreInformationOn=المزيد من المعلومات حول +shared.visibilitySettings=إعدادات إمكانية الرؤية +shared.trustedParties=محدود +shared.onlyMe=خاص +shared.everyone=عام +shared.whoCanSeeWorks=من يستطيع رؤية أعمالك. إعدادك الافتراضي لإمكانية الرؤية +shared.maxLength.less_than_one_thousand=يجب أن يكون أقل من 1000 حرف +shared.maxLength.less_than_two_thousand=يجب أن يكون أقل من 2000 حرف +shared.maxLength.less_than_five_thousand=يجب أن يكون أقل من 5000 حرفا +shared.maxLength.less_than_two_hundred_fifty_five=يجب أن يكون أقل من 255 حرفاً +shared.maxLength.less_than_two_thousand_forty_eight=يجب أن يكون أقل من 2084 حرفاً diff --git a/src/locale/properties/shared/shared.ca.properties b/src/locale/properties/shared/shared.ca.properties deleted file mode 100644 index 0244d1bbc1..0000000000 --- a/src/locale/properties/shared/shared.ca.properties +++ /dev/null @@ -1,77 +0,0 @@ -shared.questionMark=? -shared.ariaLabelClose=Close -shared.hideDetails=Hide details -shared.showDetails=Show details -shared.edit=Edit -shared.saveChanges=Save changes -shared.cancel=Cancel -shared.visibility=Visibility -shared.showMore=Show more -shared.of=of -shared.funding=Funding -shared.organizationIdentifiers=Organization identifiers -shared.otherOrganization=Other organization identifiers provided by -shared.added=Added -shared.lastModified=Last modified -shared.url=URL -shared.employment=Employment -shared.works=Works -shared.lastModifiedTime=Record last modified -shared.educationQualifications=Education and qualifications -shared.invitedPositions=Invited positions and distinctions -shared.membership=Membership and service -shared.partOf=Part de -shared.onBehalfOf=via -shared.versionOf=Version of -shared.add=Add -shared.sort=Sort -shared.addEmployment=Add Employment -shared.addEducation=Add Education -shared.addInvited=Add Invited Position -shared.addMembership=Add Membership -shared.addFunding=Add Funding -shared.addWork=Add Work -shared.addPeerReviews=Add Peer Review -share.loadMore=Load more -share.sortTitle=Title -share.sortStart=Start -share.sortEnd=End -share.sortDate=Date -share.sortType=Type -shared.delete=Delete -shared.addQualification=Add Qualification -shared.addService=Add Service -shared.addToList=Add to list -shared.qualification=Qualification -shared.education=Education -shared.invited=Invited position -shared.distinction=Distinction -shared.membershipTitle=Membership -shared.service=Service -shared.addDistinction=Add Distinction -shared.organization=Organization -shared.organizationName=Organization name -shared.department=Department -shared.city=City -shared.country=Country -shared.role=Role/title -shared.degree=Distinction/award -shared.membershipType=Membership type -shared.startDate=Start date -shared.endDate=End date -shared.year=Year -shared.month=Month -shared.day=Day -shared.cityError=Si us plau entreu una ciutat -shared.award=Distinction/award -shared.invalidDate=Data invàlida -shared.whoCanSeeThis=Who can see this? -shared.translatedTitle=Translated title -shared.makeCopy=Make a copy and edit -shared.invitedSentenceCase=Invited position -shared.present=present -shared.to=to -shared.export=Export -shared.actions=Actions -shared.exportWorks=Export works -shared.searchLink=Search & link diff --git a/src/locale/properties/shared/shared.cs.properties b/src/locale/properties/shared/shared.cs.properties index 67931157ed..936f378fa5 100644 --- a/src/locale/properties/shared/shared.cs.properties +++ b/src/locale/properties/shared/shared.cs.properties @@ -12,9 +12,10 @@ shared.oauthSessionError=Váš Oauth požadavek je neplatný shared.hideDetails=Skrýt podrobnosti shared.showDetails=Skrýt podrobnosti shared.edit=Upravit +shared.makeCopy=Vytvořit kopii a upravit shared.saveChanges=Uložit změny shared.cancel=Zrušit -shared.source=Zdroj: +shared.sourceColon=Zdroj: shared.visibility=Viditelnost shared.whoCanSeeBio=Kdo může vidět váš životopis. Výchozí nastavení viditelnosti je Soukromé. shared.whoCanSeeName=Kdo může vidět vaše jméno. Výchozí nastavení viditelnosti je Soukromé. @@ -48,6 +49,8 @@ shared.membership=Členství a služba shared.membershipTitle=Členství shared.service=Servis shared.educationQualificationsDescription=Přidejte podrobnosti o tom, kde jste studovali, vaše vzdělání nebo odbornou kvalifikaci, která vám byla udělena. +shared.educationLearnMore=Další informace o přidávání vzdělání a kvalifikace ke svému ORCID záznamu +shared.invitedPositionsDescription=Přidejte podrobnosti o zvaných pozicích, které jste zastávali a ocenění nebo ceny, které jste obdrželi jako uznání vašich úspěchů. shared.invitedPositionsLearnMore=Další informace o přidávání zvaných pozic nebo vyznamenání ke svému ORCID záznamu shared.membershipDescription=Přidejte podrobnosti o členství ve společnostech nebo sdruženích a čas nebo jiné zdroje ve službách organizace. shared.membershipLearnMore=Další informace o přidávání členství a služeb ke svému ORCID záznamu @@ -62,6 +65,7 @@ shared.versionOf=Verze shared.add=Přidat shared.sort=Řazení shared.addItem=Přidat položku +shared.exportItems=Exportovat položky shared.sortItems=Třídění položek shared.addEmployment=Přidat zaměstnání shared.sortEmployments=Třídění zaměstnání @@ -116,17 +120,62 @@ shared.year=Rok shared.month=Měsíc shared.day=Den shared.invalidDate=Neplatné datum +shared.endDateError=Datum ukončení musí následovat po datu zahájení shared.link=Odkaz shared.linkDescription=Odkaz na profilovou stránku nebo popis role. Odkazy musejí být v úplném formátu URL, např. http://www.website.com/page.html shared.invalidLink=Neplatný odkaz shared.visibilityDescription=Spravovat, kdo může vidět údaje v tomto záznamu. +shared.actions=Operace +shared.combineWorks=Spojit díla +shared.exportWorks=Exportovat díla +shared.exportAllWorks=Export all works +shared.setVisibility=Nastavit viditelnost +shared.deleteWorks=Smazat díla +shared.itemsCurrentlySelected=Aktuálně vybrané položky +shared.selectAll=Vybrat vše shared.whoCanSeeThis=Kdo toto uvidí? shared.preferred=přednostní shared.present=současnost +shared.titleNotFound=404 - Záznam ORCID nebyl nalezen shared.to=až -shared.makeCopy=Vytvořit kopii a upravit -shared.export=Exportovat -shared.actions=Operace -shared.exportWorks=Exportovat díla +shared.selected=Vybráno shared.searchLink=Hledat & odkazovat -shared.educationLearnMore=Další informace o přidávání vzdělání a kvalifikace ke svému ORCID záznamu +shared.addManually=Přidat ručně +share.undefinedId=nedefinované id +shared.worksDescription=Přidejte podrobnosti o svých pracích, zachyťte své výzkumné výstupy, např. publikace, konferenční prezentace, datové sady a další. +shared.worksLearnMore=Další informace o přidávání prací ke svému ORCID záznamu +shared.employmentDescription=Přidejte seznam zaměstnavatelů, kde jste byli profesionálně přidruženi. +shared.employmentLearnMore=Další informace o přidávání zaměstnání ke svému ORCID záznamu +shared.view=Zobrazit +shared.addAnotherId=Přidat jiný identifikátor +shared.addId=Přidat identifikátor +shared.identifier=Identifikátor +shared.selectLanguage=Zvolte jazyk +shared.openSourceToEdit=Otevřete zdroje a upravte svou vlastní verzi +shared.youCanOnlyEditYour=Můžete upravit pouze svou vlastní verzi +shared.distinctionDate=Datum rozlišení +shared.relationship=Vztah +shared.relationshipColon=Vztah: +shared.invalidForm=Chyba ověření formuláře +shared.pleaseReviewInvalidForm=Před uložením prosím zkontrolujte formulář a opravte problémy +shared.deleteItems=Smazat položky +shared.deletingItems=Položky, které smažete budou trvale odstraněny z vašeho záznamu ORCID. Zkontrolujte položky vybrané k odstranění. +shared.selectedItems=Vybrané položky ke smazání +shared.deleteSelected=Smazat vybrané položky +shared.source=Zdroj +shared.emails=Emaily +shared.pleaseReview=Prosím zkontrolujte a opravte problém +shared.youHaveNotSelected=Nevybrali jste žádné položky ke smazání. +shared.publicationDate=Zdroj díla +shared.selectACountry=Vyberte zemi +shared.translatedTitleLanguageError=Prosím, vyberte jazyk +shared.translatedTitleError=Zadejte prosím přeložený název +shared.moreInformationOn=Další informace na +shared.visibilitySettings=nastavení viditelnosti +shared.trustedParties=Důvěryhodné strany +shared.onlyMe=Pouze já +shared.everyone=Každý +shared.whoCanSeeWorks=Kdo vaše práce uvidí. Jako výchozí nastavení viditelnosti máte +shared.maxLength.less_than_one_thousand=Musí být kratší než 1000 znaků +shared.maxLength.less_than_five_thousand=Musí být kratší než 5000 znaků +shared.maxLength.less_than_two_hundred_fifty_five=Musí být kratší než 255 znaků diff --git a/src/locale/properties/shared/shared.en.properties b/src/locale/properties/shared/shared.en.properties index 949f1da3b3..08e0064916 100644 --- a/src/locale/properties/shared/shared.en.properties +++ b/src/locale/properties/shared/shared.en.properties @@ -15,10 +15,10 @@ shared.edit=Edit shared.makeCopy=Make a copy and edit shared.saveChanges=Save changes shared.cancel=Cancel -shared.source=Source: +shared.sourceColon=Source: shared.visibility=Visibility -shared.whoCanSeeBio=Who can see your biography. The default visibility setting is Private. -shared.whoCanSeeName=Who can see your name. The default visibility setting is Private. +shared.whoCanSeeBio=Control who can see your biography by setting the visibility. Your default visibility setting is +shared.whoCanSeeName=Control who can see your given, family and published names by setting the visibility. The default visibility for your names is shared.requiredInformation=Required information shared.created=Created: shared.delete=Delete @@ -120,13 +120,15 @@ shared.year=Year shared.month=Month shared.day=Day shared.invalidDate=Invalid date +shared.endDateError=End date must come after start date shared.link=Link shared.linkDescription=A link to a profile page or description of the role. Links should be in the full URL format e.g. http://www.website.com/page.html shared.invalidLink=Invalid Link -shared.visibilityDescription=Manage who can see this information in your record. +shared.visibilityDescription=Control who can see this information by setting the visibility. Your default visibility is shared.actions=Actions shared.combineWorks=Combine works shared.exportWorks=Export works +shared.exportAllWorks=Export all works shared.setVisibility=Set visibility shared.deleteWorks=Delete works shared.itemsCurrentlySelected=Items currently selected @@ -144,3 +146,38 @@ shared.worksDescription=Add your research outputs such as publications, data set shared.worksLearnMore=Learn more about adding works to your ORCID record shared.employmentDescription=Add details of your current and previous employers. shared.employmentLearnMore=Learn more about adding employment information to your ORCID record +shared.view=View +shared.addAnotherId=Add another identifier +shared.addId=Add an identifier +shared.identifier=Identifier +shared.selectLanguage=Select a language +shared.openSourceToEdit=Open sources to edit you own version +shared.youCanOnlyEditYour=You can only edit your own version +shared.distinctionDate=Date of distinction +shared.relationship=Relationship +shared.relationshipColon=Relationship: +shared.invalidForm=Form validation error +shared.pleaseReviewInvalidForm=Please review the form and fix the issues before saving +shared.deleteItems=Delete items +shared.deletingItems=Deleting items permanently removes them from your ORCID record. Please review the items selected for deletion. +shared.selectedItems=Selected items to delete +shared.deleteSelected=Delete selected items +shared.source=Source +shared.emails=Emails +shared.pleaseReview=Please review and fix the issue +shared.youHaveNotSelected=You haven’t selected any items to delete. +shared.publicationDate=Publication date +shared.selectACountry=Select a country +shared.translatedTitleLanguageError=Please select a language +shared.translatedTitleError=Please enter a translated title +shared.moreInformationOn=More information on +shared.visibilitySettings=visibility settings +shared.trustedParties=Trusted parties +shared.onlyMe=Only me +shared.everyone=Everyone +shared.whoCanSeeWorks=Who can see your works. Your default visibility setting is +shared.maxLength.less_than_one_thousand=Must be less than 1000 characters +shared.maxLength.less_than_two_thousand=Must be less than 2000 characters +shared.maxLength.less_than_five_thousand=Must be less than 5000 characters +shared.maxLength.less_than_two_hundred_fifty_five=Must be less than 255 characters +shared.maxLength.less_than_two_thousand_forty_eight=Must be less than 2084 characters diff --git a/src/locale/properties/shared/shared.es.properties b/src/locale/properties/shared/shared.es.properties index 72759ff38f..59c30a88c5 100644 --- a/src/locale/properties/shared/shared.es.properties +++ b/src/locale/properties/shared/shared.es.properties @@ -12,9 +12,10 @@ shared.oauthSessionError=Tu solicitud Oauth es inválida shared.hideDetails=Ocultar detalles shared.showDetails=Ocultar detalles shared.edit=Editar +shared.makeCopy=Hacer una copia y editar shared.saveChanges=Guardar cambios shared.cancel=Cancelar -shared.source=Fuente: +shared.sourceColon=Fuente: shared.visibility=Visibilidad shared.whoCanSeeBio=Quién puede ver tu biografía. La configuración de visibilidad predeterminada es Privada. shared.whoCanSeeName=Quién puede ver su nombre. La configuración predeterminada de visibilidad es Privada. @@ -48,6 +49,8 @@ shared.membership=Membresía y servicio shared.membershipTitle=Afiliación shared.service=Servicio shared.educationQualificationsDescription=Añada información sobre dónde ha estudiado y las cualificaciones educativas o profesionales que ha conseguido. +shared.educationLearnMore=Obtenga más información sobre cómo añadir educación o cualificaciones a su registro de ORCID +shared.invitedPositionsDescription=Añada información sobre los puestos de invitado que ha ocupado y los premios que ha recibido como reconocimiento a sus logros. shared.invitedPositionsLearnMore=Obtenga más información sobre cómo añadir puestos de invitado o distinciones a su registro de ORCID shared.membershipDescription=Añada información de afiliaciones a sociedades o asociaciones y donaciones de tiempo u otros recursos al servicio de una organización. shared.membershipLearnMore=Obtenga más información sobre cómo añadir una afiliación o servicio a su registro de ORCID @@ -55,13 +58,14 @@ shared.works=Trabajos shared.expandAll=Expandir todo shared.collapseAll=Plegar todo shared.lastModifiedTime=Registro modificado por última vez -shared.fundedBy=Funded by +shared.fundedBy=Financiado por shared.partOf=Parte de shared.onBehalfOf=vía shared.versionOf=Versión de shared.add=Agregar shared.sort=Ordenar shared.addItem=Añadir elemento +shared.exportItems=Exportar elementos shared.sortItems=Ordenar elementos shared.addEmployment=Agregar Empleo shared.sortEmployments=Ordenar empleos @@ -116,17 +120,64 @@ shared.year=Año shared.month=Mes shared.day=Día shared.invalidDate=Fecha inválida +shared.endDateError=La fecha de finalización debe ser posterior a la fecha de inicio shared.link=Enlace shared.linkDescription=Un enlace a una página de perfil o a una descripción del rol. Los enlaces deben tener el formato de URL completa; por ejemplo: http://www.website.com/page.html shared.invalidLink=Enlace no válido -shared.visibilityDescription=Gestione quién puede ver esta información en su registro. +shared.visibilityDescription=Controle quién puede ver esta información mediante los ajustes de visibilidad. Su visibilidad predeterminada es +shared.actions=Acciones +shared.combineWorks=Combinar trabajos +shared.exportWorks=Exportar obras +shared.exportAllWorks=Exportar todas las obras +shared.setVisibility=Establecer visibilidad +shared.deleteWorks=Eliminar trabajos +shared.itemsCurrentlySelected=Elementos seleccionados actualmente +shared.selectAll=Seleccionar todo shared.whoCanSeeThis=¿Quién puede ver esto? shared.preferred=preferido shared.present=la fecha +shared.titleNotFound=404: no se encontró el registro ORCID shared.to=hasta -shared.makeCopy=Hacer una copia y editar -shared.export=Exportar -shared.actions=Acciones -shared.exportWorks=Exportar obras +shared.selected=Seleccionado shared.searchLink=Buscar y enlazar -shared.educationLearnMore=Obtenga más información sobre cómo añadir educación o cualificaciones a su registro de ORCID +shared.addManually=Enlazar manualmente +share.undefinedId=identificación no definida +shared.worksDescription=Añade información sobre sus trabajos y registra los resultados de su investigación; por ejemplo, publicaciones, presentaciones de conferencias, conjuntos de datos, etc. +shared.worksLearnMore=Obtenga más información sobre cómo añadir un trabajo a su registro de ORCID +shared.employmentDescription=Añada organizaciones de listas de empleo a las que haya estado afiliado profesionalmente. +shared.employmentLearnMore=Obtenga más información sobre cómo añadir empleos a su registro de ORCID +shared.view=Ver +shared.addAnotherId=Agregar otro identificador +shared.addId=Añadir un identificador +shared.identifier=Identificador +shared.selectLanguage=Seleccione un idioma +shared.openSourceToEdit=Abra las fuentes para editar su propia versión +shared.youCanOnlyEditYour=Solo puede editar su propia versión +shared.distinctionDate=Fecha de la distinción +shared.relationship=Relación +shared.relationshipColon=Relación: +shared.invalidForm=Error de validación del formulario +shared.pleaseReviewInvalidForm=Revise el formulario y solucione los problemas antes de guardarlo +shared.deleteItems=Eliminar elementos +shared.deletingItems=La eliminación de elementos los quita permanentemente de su registro ORCID. Revise los elementos seleccionados para su eliminación. +shared.selectedItems=Elementos seleccionados para eliminar +shared.deleteSelected=Eliminar elementos seleccionados +shared.source=Fuente +shared.emails=Correos electrónicos +shared.pleaseReview=Revise y solucione el problema +shared.youHaveNotSelected=No ha seleccionado ningún elemento para eliminar. +shared.publicationDate=Fecha de publicación +shared.selectACountry=Seleccionar un país +shared.translatedTitleLanguageError=Seleccione un idioma +shared.translatedTitleError=Introduzca un título traducido +shared.moreInformationOn=Más información sobre +shared.visibilitySettings=ajustes de visibilidad +shared.trustedParties=Limitado +shared.onlyMe=Privado +shared.everyone=Público +shared.whoCanSeeWorks=Quién puede ver sus obras. Su configuración de visibilidad predeterminada es +shared.maxLength.less_than_one_thousand=Debe contener menos de 1000 caracteres +shared.maxLength.less_than_two_thousand=Debe tener menos de 2000 caracteres +shared.maxLength.less_than_five_thousand=Debe contener menos de 5000 caracteres +shared.maxLength.less_than_two_hundred_fifty_five=Debe contener menos de 255 caracteres +shared.maxLength.less_than_two_thousand_forty_eight=Debe tener menos de 2084 caracteres diff --git a/src/locale/properties/shared/shared.fr.properties b/src/locale/properties/shared/shared.fr.properties index 533591b4aa..bba25d2067 100644 --- a/src/locale/properties/shared/shared.fr.properties +++ b/src/locale/properties/shared/shared.fr.properties @@ -12,12 +12,13 @@ shared.oauthSessionError=Votre demande Oauth n'est pas valide shared.hideDetails=Masquer les détails shared.showDetails=Masquer les détails shared.edit=Modifier +shared.makeCopy=Effectuer une copie et la modifier shared.saveChanges=Enregistrer les modifications shared.cancel=Annuler -shared.source=Source : +shared.sourceColon=Source : shared.visibility=Visibilité -shared.whoCanSeeBio=Qui peut voir votre biographie ? Le paramètre de visibilité par défaut est Privé. -shared.whoCanSeeName=Qui peut voir votre nom. Le paramètre de visibilité par défaut est Privé. +shared.whoCanSeeBio=Contrôlez qui peut voir votre biographie en paramétrant la visibilité. Vos paramètres de visibilité par défaut sont : +shared.whoCanSeeName=Contrôlez qui peut voir vos prénom, nom de famille et nom publié en paramétrant la visibilité. La visibilité par défaut de vos noms est : shared.requiredInformation=Informations obligatoires shared.created=Créé(s) : shared.delete=Supprimer @@ -36,32 +37,35 @@ shared.translatedTitle=Titre traduit shared.added=Ajouté shared.lastModified=Dernière modification shared.url=URL -shared.employment=Emploi +shared.employment=Emploi\n shared.educationQualifications=Formation et qualifications -shared.qualification=Qualification -shared.education=Éducation +shared.qualification=Qualification\n +shared.education=Éducation\n shared.invitedPositions=Postes d'invités et distinctions -shared.invited=Position invitée -shared.invitedSentenceCase=Position invitée -shared.distinction=Distinction +shared.invited=Position invitée\n +shared.invitedSentenceCase=Position invitée\n +shared.distinction=Distinction\n shared.membership=Adhésion et service -shared.membershipTitle=Adhésion -shared.service=Service +shared.membershipTitle=Adhésion\n +shared.service=Service\n shared.educationQualificationsDescription=Ajoutez des détails sur l'endroit où vous avez étudié et les qualifications scolaires ou professionnelles que vous avez obtenues. +shared.educationLearnMore=En savoir plus sur l'ajout d'études ou de qualifications à votre dossier ORCID +shared.invitedPositionsDescription=Ajoutez des détails sur les postes invités que vous avez occupés et les récompenses ou prix que vous avez reçus en reconnaissance de vos accomplissements. shared.invitedPositionsLearnMore=En savoir plus sur l'ajout de postes invités ou de distinctions à votre dossier ORCID shared.membershipDescription=Ajoutez des détails sur les adhésions à des sociétés ou associations et les dons de temps ou d'autres ressources au service d'une organisation. shared.membershipLearnMore=En savoir plus sur l'ajout d'une adhésion ou d'un service à votre dossier ORCID -shared.works=Travaux +shared.works=Travaux\n shared.expandAll=Afficher tout shared.collapseAll=Tout réduire shared.lastModifiedTime=Dernière modification du dossier -shared.fundedBy=Funded by +shared.fundedBy=Financé par shared.partOf=partie de shared.onBehalfOf=via shared.versionOf=Version de shared.add=Ajouter shared.sort=Trier shared.addItem=Ajouter un élément +shared.exportItems=Exporter des éléments shared.sortItems=Trier les éléments shared.addEmployment=Ajouter un emploi shared.sortEmployments=Trier les emplois @@ -116,16 +120,64 @@ shared.year=Année shared.month=Mois shared.day=Journée shared.invalidDate=Date invalide +shared.endDateError=La date de fin doit être postérieure à la date de début. shared.link=Lien shared.linkDescription=Un lien vers une page de profil ou une description du rôle. Les liens doivent être au format URL complet, par exemple http://www.website.com/page.html shared.invalidLink=Lien non valide -shared.visibilityDescription=Gérez qui peut voir ces informations dans votre dossier. -shared.whoCanSeeThis=Qui peut voir ceci? -shared.preferred=préféré +shared.visibilityDescription=Contrôlez qui peut voir cette information en paramétrant la visibilité. Votre visibilité par défaut est : shared.actions=Actions +shared.combineWorks=Regrouper des travaux shared.exportWorks=Exporter les travaux -shared.makeCopy=Effectuer une copie et la modifier +shared.exportAllWorks=Exporter tous les travaux +shared.setVisibility=Définir la visibilité +shared.deleteWorks=Supprimer des travaux +shared.itemsCurrentlySelected=Éléments actuellement sélectionnés +shared.selectAll=Tout sélectionner +shared.whoCanSeeThis=Qui peut voir ceci? +shared.preferred=préféré shared.present=présent +shared.titleNotFound=404 – dossier ORCID introuvable shared.to=jusqu'à +shared.selected=Sélectionné shared.searchLink=Chercher & Lier -shared.educationLearnMore=En savoir plus sur l'ajout d'études ou de qualifications à votre dossier ORCID +shared.addManually=Ajouter manuellement +share.undefinedId=identifiant non défini +shared.worksDescription=Ajoutez des détails sur vos travaux, saisissez vos résultats de recherche, par exemple des publications, des présentations de conférence, des ensembles de données, etc. +shared.worksLearnMore=En savoir plus sur l'ajout d'un travail à votre dossier ORCID +shared.employmentDescription=Ajoutez les listes d'emploi des organisations où vous avez été professionnellement affilié. +shared.employmentLearnMore=En savoir plus sur l'ajout d'un emploi à votre dossier ORCID +shared.view=Visualiser +shared.addAnotherId=Ajouter un autre identifiant +shared.addId=Ajouter un identifiant +shared.identifier=Identifiant +shared.selectLanguage=Sélectionner une langue +shared.openSourceToEdit=Sources ouvertes pour modifier votre propre version +shared.youCanOnlyEditYour=Vous ne pouvez modifier que votre propre version +shared.distinctionDate=Date de la distinction +shared.relationship=Relation +shared.relationshipColon=Relation : +shared.invalidForm=Erreur de validation du formulaire +shared.pleaseReviewInvalidForm=Veuillez passer le formulaire en revue et résoudre les problèmes avant de l'enregistrer. +shared.deleteItems=Supprimer des éléments +shared.deletingItems=La suppression d'éléments les retire définitivement de votre dossier ORCID. Veuillez passer en revue les éléments que vous avez sélectionnés pour la suppression. +shared.selectedItems=Éléments sélectionnés à supprimer +shared.deleteSelected=Supprimer les éléments sélectionnés +shared.source=Source +shared.emails=Courriels +shared.pleaseReview=Veuillez examiner et régler le problème. +shared.youHaveNotSelected=Vous n'avez sélectionné aucun élément à supprimer. +shared.publicationDate=Date de publication +shared.selectACountry=Sélectionnez un pays +shared.translatedTitleLanguageError=Veuillez sélectionner une langue. +shared.translatedTitleError=Veuillez entrer un titre traduit. +shared.moreInformationOn=Plus d'informations sur +shared.visibilitySettings=paramètres de visibilité +shared.trustedParties=Parties de confiance +shared.onlyMe=Privé +shared.everyone=Publique +shared.whoCanSeeWorks=Qui peut voir vos œuvres. Votre paramètre de visibilité par défaut est +shared.maxLength.less_than_one_thousand=Doit comporter moins de 1000 caractères +shared.maxLength.less_than_two_thousand=Ne doit pas excéder 2000 caractères +shared.maxLength.less_than_five_thousand=Doit compter moins de 5000 caractères +shared.maxLength.less_than_two_hundred_fifty_five=Doit compter moins de 255 caractères +shared.maxLength.less_than_two_thousand_forty_eight=Ne doit pas excéder 2084 caractères diff --git a/src/locale/properties/shared/shared.it.properties b/src/locale/properties/shared/shared.it.properties index 20f6d380c8..97cea4b254 100644 --- a/src/locale/properties/shared/shared.it.properties +++ b/src/locale/properties/shared/shared.it.properties @@ -12,23 +12,24 @@ shared.oauthSessionError=La tua richiesta Oauth non è valida shared.hideDetails=Nascondi i dettagli shared.showDetails=Nascondi i dettagli shared.edit=Modifica +shared.makeCopy=Copia e modifica shared.saveChanges=Salva i cambiamenti shared.cancel=Annulla -shared.source=Fonte: +shared.sourceColon=Fonte:\n shared.visibility=Visibilità -shared.whoCanSeeBio=Chi può vedere la tua biografia. L'impostazione predefinita di visibilità è Privato. -shared.whoCanSeeName=Chi può vedere il tuo nome. L'impostazione predefinita di visibilità è Privato. +shared.whoCanSeeBio=Controlla chi può visualizzare la tua biografia impostandone la visibilità. La tua visibilità di default è +shared.whoCanSeeName=Controlla chi può visualizzare il tuo nome proprio, il cognome e la denominazione pubblica impostandone la visibilità. La visibilità di default dei tuoi nomi è shared.requiredInformation=Informazioni obbligatorie shared.created=Creato: shared.delete=Elimina shared.showMore=Mostra altro -shared.showLess=Mostra meno +shared.showLess=Mostra meno\n shared.closeOtherSources=(Chiudere le altre fonti) shared.of=di -shared.showLessDetail=Mostra meno dettagli -shared.showMoreDetail=Mostra altri dettagli -shared.searchAndLink=Le procedure guidate di ricerca e collegamento sono il modo consigliato per popolare il tuo registro. Rendono semplice l'aggiunta di opere, finanziamenti e recensioni tra pari e ti fanno risparmiare tempo rispetto all'aggiornamento manuale del tuo registro. Seleziona una piattaforma dalla lista qui sotto per iniziare a collegare gli elementi al tuo registro. -shared.availableSearch=Procedure guidate di ricerca e collegamento disponibili +shared.showLessDetail=Mostra meno dettagli\n +shared.showMoreDetail=Mostra altri dettagli\n +shared.searchAndLink=Le procedure guidate di ricerca e collegamento sono il modo consigliato per popolare il tuo registro. Rendono semplice l'aggiunta di opere, finanziamenti e recensioni tra pari e ti fanno risparmiare tempo rispetto all'aggiornamento manuale del tuo registro. Seleziona una piattaforma dalla lista qui sotto per iniziare a collegare gli elementi al tuo registro.\n +shared.availableSearch=Procedure guidate di ricerca e collegamento disponibili\n shared.funding=Finanziamento shared.organizationIdentifiers=Identificativi dell'organizzazione shared.otherOrganization=Altri identificativi dell'organizzazione forniti da @@ -38,36 +39,39 @@ shared.lastModified=Ultima modifica shared.url=URL shared.employment=Occupazione shared.educationQualifications=Istruzione e titoli -shared.qualification=Qualifica -shared.education=Educazione +shared.qualification=Qualifica\n +shared.education=Educazione\n shared.invitedPositions=Posizioni invitate e riconoscimenti -shared.invited=Posizione invitata -shared.invitedSentenceCase=Posizione invitata -shared.distinction=Distinzione +shared.invited=Posizione invitata\n +shared.invitedSentenceCase=Posizione invitata\n +shared.distinction=Distinzione\n shared.membership=Iscrizione e servizio shared.membershipTitle=Iscrizione -shared.service=Servizio -shared.educationQualificationsDescription=Aggiungi dettagli su dove hai studiato e sulle qualifiche educative o professionali che hai ottenuto. +shared.service=Servizio\n +shared.educationQualificationsDescription=Aggiungi dettagli su dove hai studiato e sulle qualifiche educative o professionali che hai ottenuto.\n +shared.educationLearnMore=Scopri di più su come aggiungere l'istruzione delle qualifiche al tuo registro ORCID +shared.invitedPositionsDescription=Aggiungi i dettagli sulle posizioni invitate che hai ricoperto e sui premi che hai ricevuto in riconoscimento dei tuoi risultati.\n shared.invitedPositionsLearnMore=Scopri di più su come aggiungere posizioni invitate o distinzioni al tuo registro ORCID -shared.membershipDescription=Aggiungi i dettagli delle appartenenze a società o associazioni e le donazioni di tempo o altre risorse al servizio di un'organizzazione. -shared.membershipLearnMore=Per saperne di più su come aggiungere un'iscrizione o un servizio al tuo registro ORCID +shared.membershipDescription=Aggiungi i dettagli delle appartenenze a società o associazioni e le donazioni di tempo o altre risorse al servizio di un'organizzazione.\n +shared.membershipLearnMore=Per saperne di più su come aggiungere un'iscrizione o un servizio al tuo registro ORCID\n shared.works=Lavori -shared.expandAll=Espandi tutto +shared.expandAll=Espandi tutto\n shared.collapseAll=Comprimi tutto shared.lastModifiedTime=Ultima modifica record -shared.fundedBy=Funded by +shared.fundedBy=Finanziato da shared.partOf=Parte di shared.onBehalfOf=via shared.versionOf=Versione di shared.add=Aggiungi shared.sort=Ordinamento -shared.addItem=Aggiungi articolo +shared.addItem=Aggiungi articolo\n +shared.exportItems=Esporta gli elementi shared.sortItems=Ordina articoli shared.addEmployment=Inserire l'Occupazione -shared.sortEmployments=Ordina gli impieghi +shared.sortEmployments=Ordina gli impieghi\n shared.addQualification=Aggiungi una qualifica shared.addEducation=Inserire la Formazione -shared.sortEducation=Sort Education +shared.sortEducation=Sort Education\n shared.addInvited=Aggiungi Posizione su invito shared.sortInvited=Ordina le posizioni invitate shared.addDistinction=Aggiungi riconoscimento @@ -77,10 +81,10 @@ shared.addService=Aggiungi servizio shared.addFunding=Inserisci il finanziamento shared.sortFundings=Ordina i finanziamenti shared.addWork=Inserisci prodotto -shared.sortWorks=Ordina i lavori -shared.sortResearch=Ordina le risorse di ricerca +shared.sortWorks=Ordina i lavori\n +shared.sortResearch=Ordina le risorse di ricerca\n\n shared.addPeerReviews=Inserisci revisione paritaria -shared.sortPeerReviews=Ordina le recensioni dei pari +shared.sortPeerReviews=Ordina le recensioni dei pari\n share.loadMore=Carica altro share.sortTitle=Titolo share.sortStart=Inizia @@ -88,24 +92,24 @@ share.sortEnd=Fine share.sortDate=Data share.sortType=Tipo share.sortOrder=Ordina -shared.activities=Attività +shared.activities=Attività\n shared.addToList=Aggiungere alla lista shared.organization=Organizzazione -shared.organizationError=Inserisci un'organizzazione +shared.organizationError=Inserisci un'organizzazione\n shared.organizationName=Nome organizzazione shared.department=Dipartimento shared.city=Città shared.cityError=Inserire la città shared.region=Regione, Stato o provincia shared.country=Stato -shared.countryError=Inserisci un paese +shared.countryError=Inserisci un paese\n shared.employmentDetails=Dettagli sull'impiego -shared.qualificationDetails=Dettagli delle qualifiche +shared.qualificationDetails=Dettagli delle qualifiche\n shared.educationDetails=Dettagli sulla formazione -shared.invitedPositionDetails=Dettagli della posizione su invito +shared.invitedPositionDetails=Dettagli della posizione su invito\n shared.distinctionDetails=Dettagli di distinzione shared.membershipDetails=Dettagli sull'adesione -shared.serviceDetails=Dettagli sul servizio +shared.serviceDetails=Dettagli sul servizio\n shared.role=Qualifica/titolo shared.degree=Riconoscimento/premio shared.award=Riconoscimento/premio @@ -116,17 +120,64 @@ shared.year=Anno shared.month=Mese shared.day=Giorno shared.invalidDate=Data non valida +shared.endDateError=La data di fine deve essere successiva a quella di inizio shared.link=Link -shared.linkDescription=Un link a una pagina di profilo o a una descrizione del ruolo. I link devono essere nel formato URL completo, ad esempio http://www.website.com/page.html +shared.linkDescription=Un link a una pagina di profilo o a una descrizione del ruolo. I link devono essere nel formato URL completo, ad esempio http://www.website.com/page.html\n shared.invalidLink=Link non valido -shared.visibilityDescription=Gestisci chi può vedere queste informazioni nel tuo registro. +shared.visibilityDescription=Controlla chi può visualizzare questa informazione impostandone la visibilità. La tua visibilità di default è +shared.actions=Azioni +shared.combineWorks=Combina i lavori +shared.exportWorks=Esporta lavori +shared.exportAllWorks=Esporta tutti i lavori +shared.setVisibility=Imposta visibilità +shared.deleteWorks=Elimina i lavori +shared.itemsCurrentlySelected=Elementi attualmente selezionati +shared.selectAll=Seleziona tutto shared.whoCanSeeThis=Chi può vederlo? shared.preferred=preferito shared.present=presente +shared.titleNotFound=404 - Record ORCID non trovato shared.to=fino a -shared.makeCopy=Copia e modifica -shared.export=Esporta -shared.actions=Azioni -shared.exportWorks=Esporta lavori +shared.selected=Selezionati shared.searchLink=Cerca & collega -shared.educationLearnMore=Scopri di più su come aggiungere l'istruzione delle qualifiche al tuo registro ORCID +shared.addManually=Inserire manualmente +share.undefinedId=ID non definito +shared.worksDescription=Aggiungi dettagli sui tuoi lavori, acquisisci i tuoi risultati di ricerca, ad esempio pubblicazioni, presentazioni a conferenze, set di dati e altro.\n +shared.worksLearnMore=Scopri di più su come aggiungere un'opera al tuo registro ORCID +shared.employmentDescription=Aggiungi gli elenchi degli impieghi delle organizzazioni a cui sei stato affiliato professionalmente. +shared.employmentLearnMore=Per saperne di più su come aggiungere un impiego al tuo registro ORCID\n +shared.view=Visualizza +shared.addAnotherId=Inserisci un altro identificativo +shared.addId=Aggiungi un identificatore +shared.identifier=Identificatore +shared.selectLanguage=Seleziona una lingua +shared.openSourceToEdit=Apri le fonti per modificare la tua versione +shared.youCanOnlyEditYour=Puoi modificare solo la tua versione +shared.distinctionDate=Data di riconoscimento +shared.relationship=Relazione +shared.relationshipColon=Relazione: +shared.invalidForm=Errore durante la verifica del modulo +shared.pleaseReviewInvalidForm=Controlla il modulo e risolvi i problemi prima di salvare +shared.deleteItems=Elimina gli elementi +shared.deletingItems=Gli elementi eliminati verranno rimossi permanentemente dal tuo record ORCID. Controlla gli elementi da eliminare. +shared.selectedItems=Elementi selezionati da eliminare +shared.deleteSelected=Elimina gli elementi selezionati +shared.source=Sorgente +shared.emails=Email +shared.pleaseReview=Controlla e risolvi il problema +shared.youHaveNotSelected=Non hai selezionato nessun elemento da eliminare. +shared.publicationDate=Data di pubblicazione +shared.selectACountry=Seleziona un Paese +shared.translatedTitleLanguageError=Seleziona una lingua +shared.translatedTitleError=Inserisci un titolo tradotto +shared.moreInformationOn=Maggiori informazioni su +shared.visibilitySettings=impostazioni di visibilità +shared.trustedParties=Limitato +shared.onlyMe=Privato +shared.everyone=Pubblico +shared.whoCanSeeWorks=Chi può vedere i tuoi lavori. La tua impostazione di visibilità predefinita è +shared.maxLength.less_than_one_thousand=Deve essere inferiore ai 1000 caratteri +shared.maxLength.less_than_two_thousand=Deve essere inferiore a 2000 caratteri +shared.maxLength.less_than_five_thousand=Deve essere inferiore ai 5000 caratteri +shared.maxLength.less_than_two_hundred_fifty_five=Deve essere inferiore a 255 caratteri +shared.maxLength.less_than_two_thousand_forty_eight=Deve essere inferiore a 2084 caratteri diff --git a/src/locale/properties/shared/shared.ja.properties b/src/locale/properties/shared/shared.ja.properties index f4353fb81f..f4e74cf963 100644 --- a/src/locale/properties/shared/shared.ja.properties +++ b/src/locale/properties/shared/shared.ja.properties @@ -12,12 +12,13 @@ shared.oauthSessionError=OAuthのリクエストが無効です shared.hideDetails=詳細の非表示 shared.showDetails=詳細の非表示 shared.edit=編集 +shared.makeCopy=コピーを作成して編集 shared.saveChanges=変更の保存 shared.cancel=キャンセル -shared.source=ソース: +shared.sourceColon=ソース: shared.visibility=可視性 shared.whoCanSeeBio=誰があなたのバイオグラフィーを見ることができますか?デフォルトの可視性の設定はプライベートです。 -shared.whoCanSeeName=誰があなたの名前を見ることができますか?デフォルトの可視性設定はプライベートです。 +shared.whoCanSeeName=可視性を設定することにより、あなたの名字、下の名前、公開された名前を誰が見ることができるかを制御します。名前のデフォルトの可視性は以下の通りです: shared.requiredInformation=必要な情報 shared.created=作成: shared.delete=削除 @@ -48,6 +49,8 @@ shared.membership=会員制度とサービス shared.membershipTitle=メンバーシップ shared.service=サービス shared.educationQualificationsDescription=あなたが学んだ場所と、あなたが授与された教育的または専門的資格についての詳細を追加してください。 +shared.educationLearnMore=ORCIDレコードに資格に関する教育を追加する方法の詳細 +shared.invitedPositionsDescription=あなたが保持している招待されたポジションと、あなたの業績が認められて受賞した賞などについての詳細を追加してください。 shared.invitedPositionsLearnMore=ORCIDレコードに招待されたポジション、または功績を追加する方法の詳細 shared.membershipDescription=組織のサービスにおける学会または協会のメンバーシップおよび、時間またはその他のリソースの寄付の詳細を追加してください。 shared.membershipLearnMore=ORCIDレコードに、メンバーシップまたはサービスを追加する方法の詳細 @@ -55,13 +58,14 @@ shared.works=仕事 shared.expandAll=すべて展開 shared.collapseAll=すべて折りたたむ shared.lastModifiedTime=レコードの最終更新日時 -shared.fundedBy=Funded by +shared.fundedBy=資金の提供: shared.partOf=次の一部 shared.onBehalfOf=から shared.versionOf=バージョン: shared.add=追加 shared.sort=ソート shared.addItem=アイテムを追加 +shared.exportItems=アイテムをエクスポートする shared.sortItems=アイテムを並べ替え shared.addEmployment=雇用の追加 shared.sortEmployments=雇用を並び替え @@ -116,17 +120,64 @@ shared.year=年 shared.month=月 shared.day=日 shared.invalidDate=無効な日付 +shared.endDateError=終了日は開始日より後でなければなりません shared.link=リンク shared.linkDescription=プロフィールページへのリンク、または役割の説明。リンクは完全なURLの形式である必要があります。例:http://www.website.com/page.html shared.invalidLink=無効なリンク -shared.visibilityDescription=あなたのレコードで、この情報を見ることができる人を管理します。 +shared.visibilityDescription=可視性を設定して、この情報を表示できるユーザーを制御します。デフォルトの可視性は以下のようになっています: +shared.actions=アクション +shared.combineWorks=作品を組み合わせる +shared.exportWorks=著作・業績のエクスポート +shared.exportAllWorks=すべての著作物をエクスポート +shared.setVisibility=表示設定 +shared.deleteWorks=作品を削除する +shared.itemsCurrentlySelected=現在選択されているアイテム +shared.selectAll=すべて選択 shared.whoCanSeeThis=誰がこれを閲覧できますか? shared.preferred=優先 shared.present=現在 +shared.titleNotFound=404 - ORCIDレコードが見つかりません shared.to=から -shared.makeCopy=コピーを作成して編集 -shared.export=エクスポート -shared.actions=アクション -shared.exportWorks=著作・業績のエクスポート +shared.selected=選択済み shared.searchLink=検索とリンク -shared.educationLearnMore=ORCIDレコードに資格に関する教育を追加する方法の詳細 +shared.addManually=手作業で追加 +share.undefinedId=未定義ID +shared.worksDescription=あなたの著作物に関する詳細を追加し、あなたの研究成果をキャプチャします。例:出版物、会議のプレゼンテーション、データセットなど。 +shared.worksLearnMore=ORCIDレコードに作品を追加する方法の詳細 +shared.employmentDescription=あなたが専門的に提携している、雇用リストの組織を追加します。 +shared.employmentLearnMore=ORCIDレコードに雇用を追加する方法の詳細 +shared.view=表示 +shared.addAnotherId=他の識別子の追加 +shared.addId=識別子を追加する +shared.identifier=識別子 +shared.selectLanguage=言語を選択 +shared.openSourceToEdit=ソースを開いて自分のバージョンを編集する +shared.youCanOnlyEditYour=自分のバージョンしか編集できません +shared.distinctionDate=表彰の日付 +shared.relationship=関係 +shared.relationshipColon=関係: +shared.invalidForm=フォーム検証エラー +shared.pleaseReviewInvalidForm=保存する前に、フォームを確認して問題を修正してください。 +shared.deleteItems=アイテムを削除する +shared.deletingItems=アイテムを削除すると、ORCIDレコードからアイテムが完全に削除されます。削除するために選択したアイテムを確認してください。 +shared.selectedItems=削除するために選択されたアイテム +shared.deleteSelected=選択されたアイテムを削除する +shared.source=ソース +shared.emails=電子メール +shared.pleaseReview=問題を確認して修正してください +shared.youHaveNotSelected=削除するアイテムを選択していません。 +shared.publicationDate=出版日 +shared.selectACountry=国の選択 +shared.translatedTitleLanguageError=言語を選択してください +shared.translatedTitleError=翻訳されたタイトルを入力してください +shared.moreInformationOn=詳細について +shared.visibilitySettings=可視性設定 +shared.trustedParties=トラステッド・パーティー +shared.onlyMe=私だけ +shared.everyone=誰でも +shared.whoCanSeeWorks=あなたの著作物を見ることができる人について。デフォルトの可視性設定は: +shared.maxLength.less_than_one_thousand=1000 文字未満でなければなりません +shared.maxLength.less_than_two_thousand=2000文字未満である必要があります +shared.maxLength.less_than_five_thousand=5000 文字未満でなければなりません +shared.maxLength.less_than_two_hundred_fifty_five=255 文字未満でなければなりません +shared.maxLength.less_than_two_thousand_forty_eight=2084文字未満である必要があります diff --git a/src/locale/properties/shared/shared.ko.properties b/src/locale/properties/shared/shared.ko.properties index e5563dd1fa..57f94f79aa 100644 --- a/src/locale/properties/shared/shared.ko.properties +++ b/src/locale/properties/shared/shared.ko.properties @@ -12,12 +12,13 @@ shared.oauthSessionError=귀하의 Oauth 요청이 유효하지 않습니다 shared.hideDetails=세부정보 숨기기 shared.showDetails=세부정보 숨기기 shared.edit=편집 +shared.makeCopy=사본 작성 및 편집 shared.saveChanges=변경사항 저장 shared.cancel=취소 -shared.source=소스(출처): +shared.sourceColon=소스(출처): shared.visibility=공개여부 shared.whoCanSeeBio=귀하의 전기를 볼 수 있는 사람. 기본 설정은 비공개입니다. -shared.whoCanSeeName=귀하의 이름을 볼 수 있는 사람. 기본 설정은 비공개입니다. +shared.whoCanSeeName=가시성 설정으로 내 이름, 성 및 필명을 누가 볼 수 있는지 조정하세요. 기본 가시성 설정일 때 내 이름은 다음과 같이 표시됩니다 shared.requiredInformation=필수 정보 shared.created=생성됨: shared.delete=삭제 @@ -48,20 +49,23 @@ shared.membership=멤버십과 서비스 shared.membershipTitle=멤버십 shared.service=서비스 shared.educationQualificationsDescription=공부한 곳과 받은 교육 또는 전문 자격에 대한 세부 정보를 추가하십시오. +shared.educationLearnMore=ORCID 기록에 자격 교육을 추가하는 방법에 대해 자세히 알아보십시오 +shared.invitedPositionsDescription=보유한 초빙 직책에 대한 세부 정보와 성과를 인정받아 받은 상이나 경품을 추가하십시오. shared.invitedPositionsLearnMore=ORCID 기록에 초대된 직위 또는 구분을 추가하는 방법에 대해 자세히 알아보십시오 -shared.membershipDescription=사회 또는 협회 멤버십 세부 정보와 시간 기부 또는 조직에 제공되는 기타 리소스의 세부 정보를 추가하십시오. +shared.membershipDescription=사회 또는 협회 멤버십 세부 정보와 시간 기부 또는 조직에 제공되는 기타 리소스의 세부 정보를 추가하십시오.\n\n shared.membershipLearnMore=ORCID 기록에 멤버십이나 서비스를 추가하는 방법에 대해 자세히 알아보십시오. shared.works=연구들 shared.expandAll=전체 펼치기 shared.collapseAll=모두 접기 shared.lastModifiedTime=레코가 최종 수정 -shared.fundedBy=Funded by +shared.fundedBy=후원인 shared.partOf=부분 shared.onBehalfOf=다음을 통해 shared.versionOf=다음의 버전: shared.add=추가 shared.sort=정렬 shared.addItem=아이템 추가 +shared.exportItems=항목 내보내기 shared.sortItems=항목 정렬 shared.addEmployment=직장경력 추가 shared.sortEmployments=고용 정렬 @@ -116,17 +120,64 @@ shared.year=년 shared.month=월 shared.day=일 shared.invalidDate=잘못된 날짜 +shared.endDateError=마지막 날짜는 반드시 시작 날짜보다 뒤에 있어야 합니다 shared.link=링크 shared.linkDescription=프로필 페이지로 링크 또는 역할에 대한 설명입니다. 링크는 전체 URL 형식이어야 합니다(예: http://www.website.com/page.html). shared.invalidLink=유효하지 않은 링크 -shared.visibilityDescription=기록에서 이 정보를 볼 수 있는 사람을 관리하세요. +shared.visibilityDescription=가시성 설정으로 이 정보를 누가 볼 수 있는지 조정하세요. 내 기본 가시성 설정은 다음과 같습니다 +shared.actions=조치 +shared.combineWorks=작업 결합 +shared.exportWorks=연구 내보내기 +shared.exportAllWorks=모든 작업물 내보내기 +shared.setVisibility=공개 범위 설정 +shared.deleteWorks=작업 삭제 +shared.itemsCurrentlySelected=현재 선택한 항목 +shared.selectAll=모두 선택 shared.whoCanSeeThis=이것을 볼 수있는 사람은? shared.preferred=선호하는 shared.present=현재 +shared.titleNotFound=404 - ORCID 기록이 없습니다 shared.to=까지 -shared.makeCopy=사본 작성 및 편집 -shared.export=내보내기 -shared.actions=조치 -shared.exportWorks=연구 내보내기 +shared.selected=선택된 shared.searchLink=검색 및 링크 -shared.educationLearnMore=ORCID 기록에 자격 교육을 추가하는 방법에 대해 자세히 알아보십시오 +shared.addManually=수동 링크 +share.undefinedId=정의되지 않은 id +shared.worksDescription=작업에 대한 세부 정보를 추가하고 연구 결과를 캡처합니다. 간행물, 회의 프레젠테이션, 데이터 세트 등. +shared.worksLearnMore=ORCID 기록에 작업을 추가하는 방법에 대해 자세히 알아보십시오 +shared.employmentDescription=전문적으로 소속된 조직의 목록을 추가하십시오. +shared.employmentLearnMore=ORCID 기록에 고용인을 추가하는 방법에 대해 자세히 알아보십시오 +shared.view=보기 +shared.addAnotherId=다른 식별자 추가 +shared.addId=식별자 추가하기 +shared.identifier=식별자 +shared.selectLanguage=언어를 선택하세요 +shared.openSourceToEdit=출처를 열어 자신만의 버전을 편집하세요 +shared.youCanOnlyEditYour=개인 버전만 편집할 수 있습니다. +shared.distinctionDate=구분 일자 +shared.relationship=관계 +shared.relationshipColon=관계: +shared.invalidForm=양식 유효성 오류 +shared.pleaseReviewInvalidForm=저장하기 전에 서식을 검토하고 잘못된 부분을 수정하세요 +shared.deleteItems=항목 삭제 +shared.deletingItems=아이템을 삭제하면 ORCID에서 해당 아이템은 영구히 제거됩니다. 삭제를 위해 선택된 아이템을 검토해 주세요. +shared.selectedItems=삭제할 항목 선택 +shared.deleteSelected=선택한 아이템 삭제 +shared.source=소스 +shared.emails=이메일 +shared.pleaseReview=검토 후 잘못된 부분을 수정하세요 +shared.youHaveNotSelected=삭제할 항목을 선택하지 않았습니다. +shared.publicationDate=발행일 +shared.selectACountry=국가를 선택하세요. +shared.translatedTitleLanguageError=언어를 선택해 주세요 +shared.translatedTitleError=번역된 제목을 입력하세요 +shared.moreInformationOn=더 많은 정보는 +shared.visibilitySettings=가시성 설정 +shared.trustedParties=제한공개 +shared.onlyMe=비공개 +shared.everyone=공개 +shared.whoCanSeeWorks=당신의 작업물을 볼 수 있는 사람. 기본 가시성 설정은 +shared.maxLength.less_than_one_thousand=1000자 미만이어야합니다. +shared.maxLength.less_than_two_thousand=2000자 이하만 가능합니다 +shared.maxLength.less_than_five_thousand=5000자 미만이어야 합니다 +shared.maxLength.less_than_two_hundred_fifty_five=255자 이내이어야 합니다. +shared.maxLength.less_than_two_thousand_forty_eight=2084자 이하만 가능합니다 diff --git a/src/locale/properties/shared/shared.lr.properties b/src/locale/properties/shared/shared.lr.properties index 677f6f7f37..d96a818b09 100644 --- a/src/locale/properties/shared/shared.lr.properties +++ b/src/locale/properties/shared/shared.lr.properties @@ -148,3 +148,48 @@ shared.worksDescription=LR shared.worksLearnMore=LR shared.employmentDescription=LR shared.employmentLearnMore=LR +share.addAnotherId=LR +share.addId=LR +share.identifier=LR +shared.addAnotherId=LR +shared.addId=LR +shared.identifier=LR +shared.view=LR +shared.selectLanguage=LR +shared.openSourceToEdit=LR +shared.youCanOnlyEditYour=LR +shared.endDateError=LR +shared.distinctionDate=LR +shared.invalidForm=LR +shared.pleaseReviewInvalidForm=LR +shared.deleteItems=LR +shared.deletingItems=LR +shared.selectedItems=LR +shared.deleteSelected=LR +shared.emails=LR +shared.relationship=LR +shared.sourceColon=LR +shared.relationshipColon=LR +shared.pleaseReview=LR +shared.youHaveNotSelected=LR +shared.publicationDate=LR +shared.translatedTitleLanguageError=LR +shared.translatedTitleError=LR +shared.exportAllWorks=LR +shared.selectACountry=LR +shared.moreInformationOn=LR +shared.visibilitySettings=LR +shared.trustedParties=LR +shared.onlyMe=LR +shared.everyone=LR +shared.whoCanSeeWorks=LR +shared.maxLength.one_thousand=LR +shared.maxLength.two_thousand=LR +shared.maxLength.five_thousand=LR +shared.maxLength.two_hundred_fifty_five=LR +shared.maxLength.two_thounsand_forty_eight=LR +shared.maxLength.less_than_one_thousand=LR +shared.maxLength.less_than_two_thousand=LR +shared.maxLength.less_than_five_thousand=LR +shared.maxLength.less_than_two_hundred_fifty_five=LR +shared.maxLength.less_than_two_thousand_forty_eight=LR diff --git a/src/locale/properties/shared/shared.pt.properties b/src/locale/properties/shared/shared.pt.properties index e16f055e4c..d501b60801 100644 --- a/src/locale/properties/shared/shared.pt.properties +++ b/src/locale/properties/shared/shared.pt.properties @@ -12,12 +12,13 @@ shared.oauthSessionError=O seu pedido de Oauth é inválido shared.hideDetails=Ocultar detalhes shared.showDetails=Ocultar detalhes shared.edit=Editar +shared.makeCopy=Fazer uma cópia e editar shared.saveChanges=Salvar alterações shared.cancel=Cancelar -shared.source=Fonte: +shared.sourceColon=Fonte: shared.visibility=Visibilidade shared.whoCanSeeBio=Quem pode ver a sua biografia. A definição padrão de visibilidade é Privado. -shared.whoCanSeeName=Quem pode ver o seu nome. A definição padrão de visibilidade é Privado. +shared.whoCanSeeName=Controle quem pode ver os seus nomes próprios, familiares e publicados, definindo a visibilidade. A visibilidade predefinida para os seus nomes é shared.requiredInformation=Informações necessárias shared.created=Criação: shared.delete=Excluir @@ -48,6 +49,8 @@ shared.membership=Adesão e serviço shared.membershipTitle=Adesão shared.service=Serviço shared.educationQualificationsDescription=Acrescentar detalhes sobre o local onde estudou e as qualificações educacionais ou profissionais que lhe foram atribuídas. +shared.educationLearnMore=Saiba mais sobre como adicionar qualificações ao seu registo no ORCID +shared.invitedPositionsDescription=Adicione detalhes sobre as posições que ocupou e distinções ou prémios que recebeu em reconhecimento dos seus feitos. shared.invitedPositionsLearnMore=Saiba mais sobre como adicionar posições convidadas ou distinções ao seu registo ORCID shared.membershipDescription=Acrescentar detalhes sobre os membros da sociedade ou associação e doações de tempo ou outros recursos ao serviço de uma organização. shared.membershipLearnMore=Saiba mais sobre como adicionar uma adesão ou serviço ao seu registo ORCID @@ -55,13 +58,14 @@ shared.works=Trabalhos shared.expandAll=Expandir tudo shared.collapseAll=Comprimir tudo shared.lastModifiedTime=Última modificação do registro -shared.fundedBy=Funded by +shared.fundedBy=Financiado por shared.partOf=Parte de shared.onBehalfOf=através shared.versionOf=Versão de shared.add=Adicionar shared.sort=Classificar shared.addItem=Adicionar item +shared.exportItems=Exportar Itens shared.sortItems=Ordenar artigos shared.addEmployment=Adicionar Emprego shared.sortEmployments=Ordenar Empregos @@ -116,17 +120,64 @@ shared.year=Ano shared.month=Mês shared.day=Dia shared.invalidDate=Data inválida +shared.endDateError=A data final deve ser posterior à data inicial shared.link=Ligação shared.linkDescription=Uma ligação para uma página de perfil ou descrição da função. As ligações devem estar no formato URL completo, por exemplo http://www.website.com/page.html shared.invalidLink=Ligação inválida -shared.visibilityDescription=Gerir quem pode ver esta informação no seu registo. +shared.visibilityDescription=Controle quem pode ver esta informação, definindo a visibilidade. A sua visibilidade predefinida é +shared.actions=Ações +shared.combineWorks=Combine obras +shared.exportWorks=Exportar trabalhos +shared.exportAllWorks=Exportar todos os trabalhos +shared.setVisibility=Defina a visibilidade +shared.deleteWorks=Eliminar projetos +shared.itemsCurrentlySelected=Itens atualmente selecionados +shared.selectAll=Selecione todos shared.whoCanSeeThis=Quem pode ver isso? shared.preferred=preferido shared.present=presente +shared.titleNotFound=404 - registo ORCID não encontrado shared.to=a -shared.makeCopy=Fazer uma cópia e editar -shared.export=Exportar -shared.actions=Ações -shared.exportWorks=Exportar trabalhos +shared.selected=Selecionado shared.searchLink=Pesquisar e conectar -shared.educationLearnMore=Saiba mais sobre como adicionar qualificações ao seu registo no ORCID +shared.addManually=Fazer a conexão manualmente +share.undefinedId=id indefinido +shared.worksDescription=Adicione detalhes sobre os seus trabalhos, imagens dos seus resultados de investigação, por exemplo, publicações, apresentações em conferências, conjuntos de dados, e muito mais. +shared.worksLearnMore=Saiba mais sobre como adicionar uma obra ao seu registo ORCID +shared.employmentDescription=Acrescente listas de emprego de organizações onde tenha estado profissionalmente filiado. +shared.employmentLearnMore=Saiba mais sobre como adicionar um emprego ao seu registo ORCID +shared.view=Visualizar +shared.addAnotherId=Adicionar outro identificador +shared.addId=Adicionar um identificador +shared.identifier=Identificador +shared.selectLanguage=Selecione um idioma +shared.openSourceToEdit=Abrir fontes para editar a sua própria versão +shared.youCanOnlyEditYour=Apenas pode editar a sua própria versão +shared.distinctionDate=Data da distinção +shared.relationship=Relacionamento +shared.relationshipColon=Relação: +shared.invalidForm=Erro de validação do formulário +shared.pleaseReviewInvalidForm=Reveja o formulário e corrija os problemas antes de guardar +shared.deleteItems=Eliminar itens +shared.deletingItems=Ao eliminar itens de forma permanente, os mesmos também serão removidos do seu registo do ORCID. Por favor, analise os itens selecionados para eliminação. +shared.selectedItems=Itens selecionados a eliminar +shared.deleteSelected=Eliminar os itens selecionados +shared.source=Fonte +shared.emails=E-mails +shared.pleaseReview=Por favor, analise e corrija o problema +shared.youHaveNotSelected=Não selecionou nenhum item para eliminar. +shared.publicationDate=Data de publicação +shared.selectACountry=Selecione um país +shared.translatedTitleLanguageError=Selecione um idioma +shared.translatedTitleError=Introduza um título traduzido +shared.moreInformationOn=Mais informações sobre +shared.visibilitySettings=definições de visibilidade +shared.trustedParties=Limitado +shared.onlyMe=Privado +shared.everyone=Público +shared.whoCanSeeWorks=Quem pode ver os seus trabalhos. A sua definição predefinida de visibilidade é +shared.maxLength.less_than_one_thousand=Deve conter menos de 1000 caracteres +shared.maxLength.less_than_two_thousand=Tem de ter menos de 2.000 caracteres +shared.maxLength.less_than_five_thousand=Deve conter menos de 5000 caracteres +shared.maxLength.less_than_two_hundred_fifty_five=Deve conter menos de 255 caracteres +shared.maxLength.less_than_two_thousand_forty_eight=Tem de ter menos de 2.084 caracteres diff --git a/src/locale/properties/shared/shared.rl.properties b/src/locale/properties/shared/shared.rl.properties index 67bda9d0d2..69ed98ee8e 100644 --- a/src/locale/properties/shared/shared.rl.properties +++ b/src/locale/properties/shared/shared.rl.properties @@ -147,3 +147,45 @@ shared.worksDescription=RL shared.worksLearnMore=RL shared.employmentDescription=RL shared.employmentLearnMore=RL +shared.addAnotherId=RL +shared.addId=RL +shared.identifier=RL +shared.view=RL +shared.selectLanguage=RL +shared.openSourceToEdit=RL +shared.youCanOnlyEditYour=RL +shared.endDateError=RL +shared.distinctionDate=RL +shared.invalidForm=RL +shared.pleaseReviewInvalidForm=RL +shared.deleteItems=RL +shared.deletingItems=RL +shared.selectedItems=RL +shared.deleteSelected=RL +shared.emails=RL +shared.relationship=RL +shared.sourceColon=RL +shared.relationshipColon=RL +shared.pleaseReview=RL +shared.youHaveNotSelected=RL +shared.publicationDate=RL +shared.translatedTitleLanguageError=RL +shared.translatedTitleError=RL +shared.exportAllWorks=RL +shared.selectACountry=RL +shared.moreInformationOn=RL +shared.visibilitySettings=RL +shared.trustedParties=RL +shared.onlyMe=RL +shared.everyone=RL +shared.whoCanSeeWorks=RL +shared.maxLength.one_thousand=RL +shared.maxLength.two_thousand=RL +shared.maxLength.five_thousand=RL +shared.maxLength.two_hundred_fifty_five=RL +shared.maxLength.two_thounsand_forty_eight=RL +shared.maxLength.less_than_one_thousand=RL +shared.maxLength.less_than_two_thousand=RL +shared.maxLength.less_than_five_thousand=RL +shared.maxLength.less_than_two_hundred_fifty_five=RL +shared.maxLength.less_than_two_thousand_forty_eight=RL diff --git a/src/locale/properties/shared/shared.ru.properties b/src/locale/properties/shared/shared.ru.properties index 009cfcb3fd..b67e71a504 100644 --- a/src/locale/properties/shared/shared.ru.properties +++ b/src/locale/properties/shared/shared.ru.properties @@ -12,12 +12,13 @@ shared.oauthSessionError=Ваш запрос Oauth недействителен shared.hideDetails=Скрыть информацию shared.showDetails=Скрыть информацию shared.edit=Редактировать +shared.makeCopy=Создать копию и редактировать shared.saveChanges=Сохранить изменения shared.cancel=Отмена -shared.source=Источник: +shared.sourceColon=Источник: shared.visibility=Доступность для просмотра shared.whoCanSeeBio=Кто может увидеть вашу биографию. По умолчанию используется настройка конфиденциальная. -shared.whoCanSeeName=Кто может видеть ваше имя. По умолчанию используется настройка конфиденциальное. +shared.whoCanSeeName=Управляйте тем, кто может видеть ваше имя, фамилию и публикуемое имя, устанавливая видимость. Видимость ваших имен по умолчанию: shared.requiredInformation=Требуемая информация shared.created=Создано: shared.delete=Удалить @@ -48,6 +49,8 @@ shared.membership=Членство и услуги shared.membershipTitle=Подписка shared.service=Сервис shared.educationQualificationsDescription=Добавьте подробные сведения о том, где вы учились, своем обучении и приобретенной профессиональной квалификации. +shared.educationLearnMore=Узнайте больше о добавлении образования и квалификации в вашу запись ORCID +shared.invitedPositionsDescription=Добавьте подробную информацию о должностях, на которые вас пригласили и которые вы занимали, и наградах или призах, которые вы получили в знак признания ваших достижений. shared.invitedPositionsLearnMore=Узнайте больше о добавлении должностей приглашенного специалиста или знаков отличия в вашу запись ORCID shared.membershipDescription=Добавьте сведения об обществе или ассоциированном членстве и пожертвованиях времени или других ресурсов при работе на организацию. shared.membershipLearnMore=Узнайте подробнее о добавлении членства или службы в вашу запись ORCID @@ -55,13 +58,14 @@ shared.works=Работы shared.expandAll=Развернуть все shared.collapseAll=Свернуть все shared.lastModifiedTime=Последнее изменение записи -shared.fundedBy=Funded by +shared.fundedBy=Финансирование: shared.partOf=Часть shared.onBehalfOf=через shared.versionOf=Версия shared.add=Добавить shared.sort=Сортировка shared.addItem=Добавить позицию +shared.exportItems=Экспортировать элементы shared.sortItems=Сортировать предметы shared.addEmployment=Добавить место работы shared.sortEmployments=Сортировать сведения о трудовой деятельности @@ -116,17 +120,64 @@ shared.year=Год shared.month=Месяц shared.day=День shared.invalidDate=Некорректная дата +shared.endDateError=Дата окончания должна быть позже даты начала shared.link=Ссылка shared.linkDescription=Ссылка на страницу профиля или описание роли. Ссылки должны быть в полном формате URL, например, http://www.website.com/page.html shared.invalidLink=Неверная ссылка -shared.visibilityDescription=Управляйте тем, кто может видеть эту информацию в вашей записи. +shared.visibilityDescription=Управляйте тем, кто может видеть эту информацию, устанавливая видимость. Ваша видимость по умолчанию: +shared.actions=Действия +shared.combineWorks=Объединить работы +shared.exportWorks=Экспорты +shared.exportAllWorks=Экспортировать все работы +shared.setVisibility=Задать видимость +shared.deleteWorks=Удалить работы +shared.itemsCurrentlySelected=Элементы, выбранные в данный момент +shared.selectAll=Выбрать все shared.whoCanSeeThis=Кто может видеть это? shared.preferred=предпочтительный shared.present=настоящее время +shared.titleNotFound=404 - запись ORCID не найдена shared.to=в -shared.makeCopy=Создать копию и редактировать -shared.export=Экспорт -shared.actions=Действия -shared.exportWorks=Экспорты +shared.selected=Выбрано shared.searchLink=Найти и связать -shared.educationLearnMore=Узнайте больше о добавлении образования и квалификации в вашу запись ORCID +shared.addManually=Связать вручную +share.undefinedId=неопределенный идентификатор +shared.worksDescription=Добавьте подробную информацию о своих работах, зафиксированных результатах ваших исследований, например, публикациях, презентациях на конференциях, наборах данных и многом другом. +shared.worksLearnMore=Подробнее о добавлении работ в вашу запись ORCID +shared.employmentDescription=Добавьте организации из списка трудоустройства, в которых вы работали по профессии. +shared.employmentLearnMore=Узнайте подробнее о добавлении трудоустройства в свою запись ORCID +shared.view=Обзор +shared.addAnotherId=Добавить другой идентификатор +shared.addId=Добавить идентификатор +shared.identifier=Идентификатор +shared.selectLanguage=Выбрать язык +shared.openSourceToEdit=Открытые источники для редактирования вашей собственной версии +shared.youCanOnlyEditYour=Вы можете редактировать только свою версию +shared.distinctionDate=Дата награждения +shared.relationship=Отношения +shared.relationshipColon=Отношение: +shared.invalidForm=Ошибка проверки формы +shared.pleaseReviewInvalidForm=Перед сохранением просмотрите форму и устраните проблемы +shared.deleteItems=Удалить элементы +shared.deletingItems=При удалении элементов они навсегда удаляются из вашей записи ORCID. Просмотрите элементы, выбранные для удаления. +shared.selectedItems=Выбранные элементы для удаления +shared.deleteSelected=Удалить выбранные элементы +shared.source=Источник +shared.emails=Адреса электронной почты +shared.pleaseReview=Проверьте и устраните проблему +shared.youHaveNotSelected=Вы не выбрали ни одного элемента для удаления. +shared.publicationDate=Дата публикации +shared.selectACountry=Выберите страну +shared.translatedTitleLanguageError=Выберите язык +shared.translatedTitleError=Введите переведенный заголовок +shared.moreInformationOn=Дополнительная информация о +shared.visibilitySettings=настройки видимости +shared.trustedParties=Ограниченный доступ +shared.onlyMe=Приватный доступ +shared.everyone=Публичный доступ +shared.whoCanSeeWorks=Кто может видеть ваши работы. По умолчанию ваша настройка видимости +shared.maxLength.less_than_one_thousand=Длина не должна превышать 1000 знаков +shared.maxLength.less_than_two_thousand=Должно быть менее 2000 символов +shared.maxLength.less_than_five_thousand=Длина не должна превышать 5000 символов +shared.maxLength.less_than_two_hundred_fifty_five=Длина не должна превышать 255 символов +shared.maxLength.less_than_two_thousand_forty_eight=Должно быть меньше 2084 символов diff --git a/src/locale/properties/shared/shared.uk.properties b/src/locale/properties/shared/shared.uk.properties deleted file mode 100644 index 9d05b451c0..0000000000 --- a/src/locale/properties/shared/shared.uk.properties +++ /dev/null @@ -1,78 +0,0 @@ -shared.questionMark=? -shared.ariaLabelClose=Закрити -shared.edit=Змінити -shared.cancel=Скасувати -shared.hideDetails=Приховати подробиці -shared.showDetails=Show details -shared.saveChanges=Зберегти зміни -shared.visibility=Видимість -shared.showMore=Show more -shared.of=із -shared.funding=Funding -shared.organizationIdentifiers=Organization identifiers -shared.otherOrganization=Other organization identifiers provided by -shared.added=Added -shared.lastModified=Last modified -shared.url=URL -shared.employment=Employment -shared.works=Works -shared.lastModifiedTime=Record last modified -shared.educationQualifications=Education and qualifications -shared.invitedPositions=Invited positions and distinctions -shared.membership=Membership and service -shared.partOf=Частина -shared.onBehalfOf=via -shared.versionOf=Version of -shared.add=Add -shared.sort=Sort -shared.addEmployment=Add Employment -shared.addEducation=Додати освіту -shared.addInvited=Add Invited Position -shared.addMembership=Add Membership -shared.addFunding=Add Funding -shared.addWork=Add Work -shared.addPeerReviews=Add Peer Review -share.loadMore=Load more -share.sortTitle=Заголовок -share.sortStart=Start -share.sortEnd=End -share.sortDate=Дата -share.sortType=Тип -shared.delete=Delete -shared.addQualification=Add Qualification -shared.addService=Add Service -shared.addToList=Додати до списку -shared.qualification=Qualification -shared.education=Education -shared.invited=Invited position -shared.distinction=Distinction -shared.membershipTitle=Membership -shared.service=Service -shared.addDistinction=Add Distinction -shared.organization=Organization -shared.organizationName=Назва організації -shared.department=Department -shared.city=Місто -shared.country=Країна -shared.role=Роль/посада -shared.degree=Distinction/award -shared.membershipType=Membership type -shared.startDate=Start date -shared.endDate=End date -shared.year=Рік -shared.month=Місяць -shared.day=День -shared.cityError=Будь ласка, введіть місто -shared.region=State/region -shared.award=Distinction/award -shared.invalidDate=Недійсна дата -shared.whoCanSeeThis=Who can see this? -shared.translatedTitle=Перекладена назва -shared.makeCopy=Створити копію та змінити -shared.invitedSentenceCase=Invited position -shared.present=present -shared.to=to -shared.export=Export -shared.actions=Actions -shared.exportWorks=Export works -shared.searchLink=Search & link diff --git a/src/locale/properties/shared/shared.xx.properties b/src/locale/properties/shared/shared.xx.properties index 3be777ad94..d9772af28d 100644 --- a/src/locale/properties/shared/shared.xx.properties +++ b/src/locale/properties/shared/shared.xx.properties @@ -147,3 +147,45 @@ shared.worksDescription=X shared.worksLearnMore=X shared.employmentDescription=X shared.employmentLearnMore=X +shared.addAnotherId=X +shared.addId=X +shared.identifier=X +shared.view=X +shared.selectLanguage=X +shared.openSourceToEdit=X +shared.youCanOnlyEditYour=X +shared.endDateError=X +shared.distinctionDate=X +shared.invalidForm=X +shared.pleaseReviewInvalidForm=X +shared.deleteItems=X +shared.deletingItems=X +shared.selectedItems=X +shared.deleteSelected=X +shared.emails=X +shared.relationship=X +shared.sourceColon=X +shared.relationshipColon=X +shared.pleaseReview=X +shared.youHaveNotSelected=X +shared.publicationDate=X +shared.translatedTitleLanguageError=X +shared.translatedTitleError=X +shared.exportAllWorks=X +shared.selectACountry=X +shared.moreInformationOn=X +shared.visibilitySettings=X +shared.trustedParties=X +shared.onlyMe=X +shared.everyone=X +shared.whoCanSeeWorks=X +shared.maxLength.one_thousand=X +shared.maxLength.two_thousand=X +shared.maxLength.five_thousand=X +shared.maxLength.two_hundred_fifty_five=X +shared.maxLength.two_thounsand_forty_eight=X +shared.maxLength.less_than_one_thousand=X +shared.maxLength.less_than_two_thousand=X +shared.maxLength.less_than_five_thousand=X +shared.maxLength.less_than_two_hundred_fifty_five=X +shared.maxLength.less_than_two_thousand_forty_eight=X diff --git a/src/locale/properties/shared/shared.zh_CN.properties b/src/locale/properties/shared/shared.zh_CN.properties index 1c10333249..40da6b4f43 100644 --- a/src/locale/properties/shared/shared.zh_CN.properties +++ b/src/locale/properties/shared/shared.zh_CN.properties @@ -12,12 +12,13 @@ shared.oauthSessionError=您的 Oauth 请求无效 shared.hideDetails=隐藏详细信息 shared.showDetails=隐藏详细信息 shared.edit=编辑 +shared.makeCopy=制作副本并编辑 shared.saveChanges=保存更改 shared.cancel=取消 -shared.source=资料来源: +shared.sourceColon=资料来源: shared.visibility=可见性 -shared.whoCanSeeBio=谁能看到你的传记。默认的可见性设置为"私人"。 -shared.whoCanSeeName=谁可以看到你的名字。默认的可见性设置为"私人"。 +shared.whoCanSeeBio=通过设置可见性来控制谁可以看到您的传记。默认可见性设置是 +shared.whoCanSeeName=通过设置可见性来控制谁可以看到您的名字、姓氏和发布的名字。您姓名的默认可见性是 shared.requiredInformation=所需信息 shared.created=创建: shared.delete=删除 @@ -48,6 +49,8 @@ shared.membership=成员和服务 shared.membershipTitle=成员 shared.service=服务 shared.educationQualificationsDescription=添加您的学习领域以及获得的教育或专业资质的详细信息。 +shared.educationLearnMore=了解向 ORCID 记录添加教育资质的详细信息 +shared.invitedPositionsDescription=添加关于你所担任的特邀职位,以及因成就所受到的表彰与嘉奖的详细信息。 shared.invitedPositionsLearnMore=了解向 ORCID 记录添加特邀职位或荣誉的详细信息 shared.membershipDescription=添加社会或协会会员资格,以及为组织服务的时间或其他资源的详细信息。 shared.membershipLearnMore=了解向 ORCID 记录添加会员或服务的详细信息 @@ -55,13 +58,14 @@ shared.works=作品 shared.expandAll=全部展开 shared.collapseAll=全部收起 shared.lastModifiedTime=记录上次修改时间 -shared.fundedBy=Funded by +shared.fundedBy=资助者 shared.partOf=部分 shared.onBehalfOf=通过 shared.versionOf=版本: shared.add=添加 shared.sort=排序 shared.addItem=添加项目 +shared.exportItems=导出项目 shared.sortItems=对项目排序 shared.addEmployment=添加就业状态 shared.sortEmployments=对就业记录排序 @@ -116,17 +120,64 @@ shared.year=年 shared.month=月 shared.day=日 shared.invalidDate=日期无效 +shared.endDateError=结束日期不能早于开始日期 shared.link=链接 shared.linkDescription=指向此角色的个人资料页面或描述链接。链接应采用完整的 URL 格式,例如 http://www.website.com/page.html shared.invalidLink=无效链接 -shared.visibilityDescription=管理谁能在记录中查看此信息。 +shared.visibilityDescription=通过设置可见性来控制谁可以看到此信息。您的默认可见性是 +shared.actions=操作 +shared.combineWorks=合并成果 +shared.exportWorks=导出成果 +shared.exportAllWorks=导出全部成果 +shared.setVisibility=设置可见性 +shared.deleteWorks=删除成果 +shared.itemsCurrentlySelected=已选项目 +shared.selectAll=全选 shared.whoCanSeeThis=谁可以看到此内容? shared.preferred=首选 shared.present=当前 +shared.titleNotFound=404 - 找不到 ORCID 记录 shared.to=至 -shared.makeCopy=制作副本并编辑 -shared.export=导出 -shared.actions=操作 -shared.exportWorks=导出成果 +shared.selected=已选 shared.searchLink=搜索和链接 -shared.educationLearnMore=了解向 ORCID 记录添加教育资质的详细信息 +shared.addManually=手动链接 +share.undefinedId=未定义的识别码 +shared.worksDescription=添加您的作品详细信息,展示您的研究成果,如出版物、会议发言、数据集等。 +shared.worksLearnMore=了解向 ORCID 记录添加作品的详细信息 +shared.employmentDescription=添加就业名单,列出您曾与之有专业联系的组织。 +shared.employmentLearnMore=了解向 ORCID 记录添加就业记录的详细信息 +shared.view=查看 +shared.addAnotherId=添加其他标识符 +shared.addId=添加识别码 +shared.identifier=识别码 +shared.selectLanguage=选择语言 +shared.openSourceToEdit=公开来源以编辑您的账户 +shared.youCanOnlyEditYour=您只能编辑自己的账户 +shared.distinctionDate=获奖日期 +shared.relationship=关系 +shared.relationshipColon=关系: +shared.invalidForm=表单验证错误 +shared.pleaseReviewInvalidForm=请检查表单并修正错误再保存 +shared.deleteItems=删除项目 +shared.deletingItems=删除这些项目会使其从您的 ORCID 记录中彻底移除。确认删除前请确保您已检查已选项目。 +shared.selectedItems=已选待删除的项目 +shared.deleteSelected=删除已选条目 +shared.source=资料来源: +shared.emails=电子邮件 +shared.pleaseReview=请检查并修复此问题 +shared.youHaveNotSelected=您未选择任何待删除的项目。 +shared.publicationDate=出版日期 +shared.selectACountry=选择国家/地区 +shared.translatedTitleLanguageError=选择语言 +shared.translatedTitleError=请输入已翻译的标题 +shared.moreInformationOn=更多信息 +shared.visibilitySettings=可见性设置 +shared.trustedParties=限制 +shared.onlyMe=私有 +shared.everyone=公开 +shared.whoCanSeeWorks=谁能看到你的成果。默认可见性设置是 +shared.maxLength.less_than_one_thousand=必须少于 1000 个字符 +shared.maxLength.less_than_two_thousand=必须少于 2000 个字符 +shared.maxLength.less_than_five_thousand=必须少于 5000 个字符 +shared.maxLength.less_than_two_hundred_fifty_five=必须少于 255 个字符 +shared.maxLength.less_than_two_thousand_forty_eight=必须少于 2084 个字符 diff --git a/src/locale/properties/shared/shared.zh_TW.properties b/src/locale/properties/shared/shared.zh_TW.properties index 10707a1b77..9b0ba0ddc5 100644 --- a/src/locale/properties/shared/shared.zh_TW.properties +++ b/src/locale/properties/shared/shared.zh_TW.properties @@ -12,9 +12,10 @@ shared.oauthSessionError=您的 Oauth 要求為無效 shared.hideDetails=隱藏詳細資訊 shared.showDetails=隱藏詳細資訊 shared.edit=編輯 +shared.makeCopy=製作副本並編輯 shared.saveChanges=儲存變更 shared.cancel=取消 -shared.source=來源: +shared.sourceColon=來源: shared.visibility=能見度 shared.whoCanSeeBio=誰能檢視您的自傳。預設檢視設定為私人。 shared.whoCanSeeName=誰能看到您的姓名。預設的檢視設定為私人。 @@ -48,6 +49,8 @@ shared.membership=會員與服務 shared.membershipTitle=會員 shared.service=服務 shared.educationQualificationsDescription=加入有關您的學習地,以及您取得的教育或專業資格的詳細資訊。 +shared.educationLearnMore=了解更多有關在您的 ORCID 紀錄中加入學歷的資訊 +shared.invitedPositionsDescription=加入您曾擔任的受邀職位,以及您曾因您的成就所受到的表揚與嘉獎的細節。 shared.invitedPositionsLearnMore=了解更多有關在您的 ORCID 紀錄中加入受邀職位或傑出表現的資訊 shared.membershipDescription=加入社團或協會的會員詳情,以及機構服務的時間與資源。 shared.membershipLearnMore=了解更多有關在您的 ORCID 紀錄中添加一個會員或服務的資訊 @@ -62,6 +65,7 @@ shared.versionOf=版本 shared.add=新增 shared.sort=排序 shared.addItem=加入項目 +shared.exportItems=匯出物件 shared.sortItems=排序各項目 shared.addEmployment=加入就業經歷 shared.sortEmployments=排序就業經歷 @@ -116,17 +120,64 @@ shared.year=年 shared.month=月 shared.day=日 shared.invalidDate=日期無效 +shared.endDateError=結束日期必須在開始日期之後 shared.link=連結 shared.linkDescription=一個指向個人資料頁面或角色說明的連結。連結應採用完整的 URL 格式,如 http://www.website.com/page.html shared.invalidLink=無效的連結 shared.visibilityDescription=管理誰能在您的紀錄中檢視此資訊。 +shared.actions=操作 +shared.combineWorks=合併工作 +shared.exportWorks=匯出成果 +shared.exportAllWorks=匯出所有著作 +shared.setVisibility=設定可見性 +shared.deleteWorks=刪除工作 +shared.itemsCurrentlySelected=目前選擇的物件 +shared.selectAll=全選 shared.whoCanSeeThis=誰可以看到? shared.preferred=喜好的 shared.present=當前 +shared.titleNotFound=404—找不到 ORCID 紀錄 shared.to=至 -shared.makeCopy=製作副本並編輯 -shared.export=匯出 -shared.actions=操作 -shared.exportWorks=匯出成果 +shared.selected=已選擇的 shared.searchLink=搜索和連結 -shared.educationLearnMore=了解更多有關在您的 ORCID 紀錄中加入學歷的資訊 +shared.addManually=手動連結 +share.undefinedId=未定義的識別碼 +shared.worksDescription=加入您的工作細節,展示您的研究成果,如出版品、研討會簡報、與資料集等等。 +shared.worksLearnMore=了解更多有關在您的 ORCID 紀錄中加入工作的資訊 +shared.employmentDescription=加入與您曾有專業關聯的就業清單機構 +shared.employmentLearnMore=了解更多有關在您的 ORCID 紀錄中加入就業紀錄的資訊 +shared.view=檢視 +shared.addAnotherId=新增其他識別碼 +shared.addId=新增識別碼 +shared.identifier=識別碼 +shared.selectLanguage=選擇語言 +shared.openSourceToEdit=能夠編輯您獨有版本的開源系統 +shared.youCanOnlyEditYour=您僅能編輯您自己版本的工作 +shared.distinctionDate=區別日期 +shared.relationship=關係 +shared.relationshipColon=關係性: +shared.invalidForm=表單驗證錯誤 +shared.pleaseReviewInvalidForm=敬請於儲存前重新檢視表單並修正錯誤 +shared.deleteItems=刪除物件 +shared.deletingItems=刪除物件會永久將它們從您的 ORCID 紀錄中移除。敬請重新檢視欲刪除的已選擇物件。 +shared.selectedItems=欲刪除的已選擇物件 +shared.deleteSelected=刪除已選擇的物件 +shared.source=來源: +shared.emails=電子郵件 +shared.pleaseReview=請重新檢視並修正問題 +shared.youHaveNotSelected=您尚未選擇欲刪除的物件。 +shared.publicationDate=出版日期 +shared.selectACountry=選擇國家/地區 +shared.translatedTitleLanguageError=敬請選擇語言 +shared.translatedTitleError=請輸入標題翻譯 +shared.moreInformationOn=的其他資訊 +shared.visibilitySettings=可見度設定 +shared.trustedParties=限制 +shared.onlyMe=私人 +shared.everyone=公開 +shared.whoCanSeeWorks=誰能看到您的著作。您的預設可見度設定為 +shared.maxLength.less_than_one_thousand=必須少於 1000 個字元 +shared.maxLength.less_than_two_thousand=必須少於 2,000 個字符 +shared.maxLength.less_than_five_thousand=必須少於 5000 個字元 +shared.maxLength.less_than_two_hundred_fifty_five=必須少於 255 個字元 +shared.maxLength.less_than_two_thousand_forty_eight=必須少於 2,084 個字符 diff --git a/src/locale/properties/side-bar/side-bar.ar.properties b/src/locale/properties/side-bar/side-bar.ar.properties index 076bd9146e..653943c5a1 100644 --- a/src/locale/properties/side-bar/side-bar.ar.properties +++ b/src/locale/properties/side-bar/side-bar.ar.properties @@ -1,3 +1,37 @@ +side-bar.countries=البلدان +side-bar.myCountries=بلداني +side-bar.countriesModalDescription=أضف بلداناً إلى سجلك على ORCID لتسليط الضوء على المكان الذي تجري فيه بحثك أو المنطقة التي يركز عليها بحثك. يمكنك إضافة العدد الذي تريده من البلدان. +side-bar.addCountry=أضف دولة +side-bar.addAnotherCountry=أضف دولة أخرى +side-bar.OrcidWorkBest=تعمل ORCID بشكل أفضل عندما يكون لديك عدة عناوين بريد إلكتروني. side-bar.termOfUse=شروط الاستخدام +side-bar.youMayOnly=لا يمكنك إضافة عناوين بريد إلكتروني إلا التي تستطيع التحكم فيها فحسب. في كل مرة تضيف فيها عنوان بريد إلكتروني، سنرسل إليك بريداً إلكترونياً نطلب منك التحقق من هذا العنوان. +side-bar.primaryEmail=عنوان البريد الإلكتروني الرئيسي +side-bar.emailCanNotBeDuplicated=لا يمكن تكرار البريد الإلكتروني +side-bar.noOtherEmails=لم تقم بإضافة أي عناوين بريد إلكتروني أخرى حتى الآن. +side-bar.invalidEmailFormat=تنسيق بريد إلكتروني غير صالح +side-bar.pleaseVerify=يرجى التحقق من عنوان بريدك الإلكتروني الأساسي! +side-bar.youNeedToVerify=تحتاج إلى تأكيد بريدك الإلكتروني الأساسي من أجل الوصول إلى جميع ميزات التحرير والتعديل الخاصة بـ ORCID. +side-bar.youNeedToVerify2=للتحقق من بريدك الإلكتروني، اضغط على الرابط الموجود في الرسالة المرسلة إلى: +side-bar.needHelp=هل تحتاج مساعدة؟ +side-bar.visitOur=زر +side-bar.knowledge=قاعدة معرفية side-bar.orContact=أو الاتصال بـ +side-bar.support=الدعم. +side-bar.otherEmails=عناوين بريد إلكتروني أخرى +side-bar.alreadyAssociated=هذا البريد الإلكتروني مقترن بالفعل بسجل على ORCID. +side-bar.additionalEmailsDuplicate=لا يمكن تكرار عناوين بريد إلكتروني إضافية +side-bar.makePrimary=اجعل عنوان البريد الإلكتروني هذا أساسياً side-bar.resendVerification=إعادة إرسال رسالة التأكيد +side-bar.pleaseCheckYour=يرجى التحقق من صندوق بريدك الإلكتروني (أو ربما مجلد "الرسائل غير المرغوب فيها") بحثاً عن بريد إلكتروني يحتوى على رابط لإكمال العملية. +side-bar.otherEmail=أضف عنوان بريد إلكتروني آخر +side-bar.anotherEmail=أضف عنوان بريد إلكتروني آخر +side-bar.perOrcid=لكل +side-bar.personalIdentifiers=معرفات أخرى +side-bar.myOtherIdentifiers=معرفاتي الأخرى +side-bar.personIdentifiersDescription=المعرّفات الأخرى، المعروفة أيضاً بمعرّفات الأشخاص، عبارة عن معرّفات فريدة تستخدمها أنظمة مثل ISNI وScopus لتحديد هويتك. لا يمكن إضافة هذه المعرفات إلى سجلك إلا من خلال المنظمات الموثوقة التي ربطتها بـ ORCID. +side-bar.findOutMore=اكتشف المزيد على +side-bar.personIdentifiersSupport=صفحة الدعم للمعرّفات الأخرى. +sideBar.onlyVerifiedEmail=يمكن عرض عناوين البريد الإلكتروني المتحقق منها فحسب للعامة أو مشاركتها مع جهات موثوقة. يُرجى التحقق من بريدك الإلكتروني +sideBar.primaryEmailRequired=البريد الإلكتروني مطلوب +side-bar.weHaveSentAEmail=لقد أرسلنا بريداً إلكترونياً للتحقق إلى diff --git a/src/locale/properties/side-bar/side-bar.cs.properties b/src/locale/properties/side-bar/side-bar.cs.properties index 56ddacca3e..f6f934307d 100644 --- a/src/locale/properties/side-bar/side-bar.cs.properties +++ b/src/locale/properties/side-bar/side-bar.cs.properties @@ -1,3 +1,37 @@ +side-bar.countries=Země +side-bar.myCountries=Mé země +side-bar.countriesModalDescription=Přidejte země do svého záznamu ORCID, abyste zdůraznili, kde provádíte svůj výzkum nebo kam se váš výzkum zaměřuje. Můžete přidat tolik zemí, kolik chcete. +side-bar.addCountry=Přidat zemi +side-bar.addAnotherCountry=Přidat další zemi +side-bar.OrcidWorkBest=ORCID funguje nejlépe, když máte více e-mailových adres. side-bar.termOfUse=Podmínek užití ORCID +side-bar.youMayOnly=můžete přidat pouze e-mailové adresy, které máte pod kontrolou. Pokaždé, když přidáte e-mailovou adresu, zašleme vám e-mail s žádostí o její ověření. +side-bar.primaryEmail=Primární e-mailová adresa +side-bar.emailCanNotBeDuplicated=E-mail nelze duplikovat +side-bar.noOtherEmails=Zatím jste nepřidali žádné další e-mailové adresy. +side-bar.invalidEmailFormat=Neplatný formát e-mailu +side-bar.pleaseVerify=Ověřte prosím svou primární e-mailovou adresu! +side-bar.youNeedToVerify=Abyste měli přístup ke všem editačním funkcím ORCID, musíte ověřit svůj primární e-mail. +side-bar.youNeedToVerify2=Chcete-li ověřit svůj e-mail, klikněte na odkaz ve zprávě odeslané na adresu: +side-bar.needHelp=Potřebujete pomoci? +side-bar.visitOur=Navštivte naši +side-bar.knowledge=znalostní bázi side-bar.orContact=nebo kontaktujte +side-bar.support=podpora. +side-bar.otherEmails=Další e-mailové adresy +side-bar.alreadyAssociated=Tento e-mail je již přidružen k záznamu ORCID. +side-bar.additionalEmailsDuplicate=Další e-maily nemůžou být duplikovány +side-bar.makePrimary=Vytvořte primární e-mail side-bar.resendVerification=Znovu odeslat ověřovací email +side-bar.pleaseCheckYour=Zkontrolujte prosím svou e-mailovou schránku (nebo možná složku spamu), zda nemáte e-mail s odkazem na dokončení procesu. +side-bar.otherEmail=Přidejte další e-mailovou adresu +side-bar.anotherEmail=Přidat další e-mailovou adresu +side-bar.perOrcid=Podle +side-bar.personalIdentifiers=Jiná ID +side-bar.myOtherIdentifiers=Moje další identifikátory +side-bar.personIdentifiersDescription=Jiné identifikátory, nazývané také Identifikátory osob, jsou jedinečná ID, která k identifikaci používají systémy jako ISNI a Scopus. Tyto identifikátory mohou do vašeho záznamu přidat pouze důvěryhodné organizace, které jste připojili k ORCID. +side-bar.findOutMore=Zjistěte více na našem +side-bar.personIdentifiersSupport=Stránka podpory dalších identifikátorů. +sideBar.onlyVerifiedEmail=Pouze ověřené e-mailové adresy mohou být zobrazeny veřejně nebo sdíleny s důvěryhodnými stranami. Prosím ověřte svůj email +sideBar.primaryEmailRequired=Je vyžadován e-mail +side-bar.weHaveSentAEmail=Poslali jsme ověřovací e-mail na diff --git a/src/locale/properties/side-bar/side-bar.en.properties b/src/locale/properties/side-bar/side-bar.en.properties index 98c7d65e84..87865d8c57 100644 --- a/src/locale/properties/side-bar/side-bar.en.properties +++ b/src/locale/properties/side-bar/side-bar.en.properties @@ -18,18 +18,20 @@ side-bar.visitOur=Visit our side-bar.knowledge=knowledge base side-bar.orContact=or contact side-bar.support=support. -side-bar.otherEmails=Other email address +side-bar.otherEmails=Other email addresses side-bar.alreadyAssociated=This email is already associated with an ORCID record. -side-bar.additionalEmailsDuplicate=Additional emails can not be duplicated -side-bar.makePrimary=Make primary +side-bar.additionalEmailsDuplicate=Additional emails cannot be duplicated +side-bar.makePrimary=Make primary email side-bar.resendVerification=Resend verification email -side-bar.weHaveSentAEmail=We’ve sent a verification email to side-bar.pleaseCheckYour=Please check your email inbox (or maybe your spam folder) for an email with a link to complete the process. side-bar.otherEmail=Add other email address side-bar.anotherEmail=Add another email address side-bar.perOrcid=Per the -side-bar.personalIdentifiers=Personal identifiers -side-bar.myPersonIdentifiers=My person identifiers -side-bar.personIdentifiersDescription=Person identifiers are other identifiers that systems use to identify you, such as ResearcherID or Scopus Author ID. These identifiers can only be added by trusted organizations linked with your ORCID record. +side-bar.personalIdentifiers=Other IDs +side-bar.myOtherIdentifiers=My other identifiers +side-bar.personIdentifiersDescription=Other identifiers, also called Person identifiers, are unique IDs that systems such as ISNI and Scopus use to identify you. These identifiers can only be added to your record by trusted organizations you have connected to ORCID. side-bar.findOutMore=Find out more on our -side-bar.personIdentifiersSupport=Person identifiers support page. +side-bar.personIdentifiersSupport=Other identifiers support page. +sideBar.onlyVerifiedEmail=Only verified email addresses can be displayed publicly or shared with trusted parties. Please verify your email +sideBar.primaryEmailRequired=An email is required +side-bar.weHaveSentAEmail=We’ve sent a verification email to diff --git a/src/locale/properties/side-bar/side-bar.es.properties b/src/locale/properties/side-bar/side-bar.es.properties index 181711be2f..e02b843b8b 100644 --- a/src/locale/properties/side-bar/side-bar.es.properties +++ b/src/locale/properties/side-bar/side-bar.es.properties @@ -1,3 +1,37 @@ +side-bar.countries=Países +side-bar.myCountries=Mis países +side-bar.countriesModalDescription=Añada países a su registro ORCID para resaltar dónde realiza su investigación o en qué se centra. Puede añadir tantos países como desee. +side-bar.addCountry=Añadir un país +side-bar.addAnotherCountry=Añadir otro país +side-bar.OrcidWorkBest=ORCID funciona mejor cuando tiene varias direcciones de correo electrónico. side-bar.termOfUse=términos de uso de ORCID +side-bar.youMayOnly=solo puede agregar direcciones de correo electrónico sobre las que tenga control. Cada vez que agregue una dirección, le enviaremos un correo pidiéndole que la verifique. +side-bar.primaryEmail=Dirección de correo principal +side-bar.emailCanNotBeDuplicated=El correo electrónico no se puede duplicar +side-bar.noOtherEmails=Aún no ha añadido ninguna otra dirección de correo electrónico. +side-bar.invalidEmailFormat=Formato de correo electrónico no válido +side-bar.pleaseVerify=Verifique su dirección de correo electrónico principal. +side-bar.youNeedToVerify=Debe verificar su correo electrónico principal para acceder a todas las funcionalidades de edición de ORCID. +side-bar.youNeedToVerify2=Para verificar su correo electrónico, haga clic en el enlace del mensaje enviado a: +side-bar.needHelp=¿Necesita ayuda? +side-bar.visitOur=Visite nuestro +side-bar.knowledge=base de conocimientos side-bar.orContact=o contacte con +side-bar.support=ayuda. +side-bar.otherEmails=Otras direcciones de correo electrónico +side-bar.alreadyAssociated=Este correo electrónico ya está asociado a un registro ORCID. +side-bar.additionalEmailsDuplicate=Los correos electrónicos adicionales no se pueden duplicar +side-bar.makePrimary=Establecer como correo principal side-bar.resendVerification=Reenviar correo electrónico de verificación +side-bar.pleaseCheckYour=Consulte la bandeja de entrada de su correo electrónico (o tal vez la carpeta de correo no deseado) para ver un correo electrónico con un enlace para completar el proceso. +side-bar.otherEmail=Añada otra dirección de correo electrónico +side-bar.anotherEmail=Añada otra dirección de correo electrónico +side-bar.perOrcid=Por el +side-bar.personalIdentifiers=Otras ID +side-bar.myOtherIdentifiers=Mis otros identificadores +side-bar.personIdentifiersDescription=Otros identificadores, también llamados identificadores de persona, son identificaciones únicas que los sistemas como ISNI y Scopus usan para identificarle. Estos identificadores solo pueden añadirlo a su registro organizaciones fiables que usted haya conectado a ORCID. +side-bar.findOutMore=Descubra más en nuestro +side-bar.personIdentifiersSupport=Página de asistencia de otros identificadores. +sideBar.onlyVerifiedEmail=Solo las direcciones de correo electrónico verificadas se pueden mostrar públicamente o compartir con terceros de confianza. Verifique su correo. +sideBar.primaryEmailRequired=Se necesita un correo electrónico +side-bar.weHaveSentAEmail=Hemos enviado un correo de verificación a diff --git a/src/locale/properties/side-bar/side-bar.fr.properties b/src/locale/properties/side-bar/side-bar.fr.properties index 2051e65787..68e95152da 100644 --- a/src/locale/properties/side-bar/side-bar.fr.properties +++ b/src/locale/properties/side-bar/side-bar.fr.properties @@ -1,3 +1,37 @@ +side-bar.countries=Pays +side-bar.myCountries=Mes pays +side-bar.countriesModalDescription=Ajoutez des pays à votre dossier ORCID pour mettre en avant les lieux où vous effectuez vos recherches ou ceux où elles se concentrent. Vous pouvez ajouter autant de pays que vous le souhaitez. +side-bar.addCountry=Ajouter un pays +side-bar.addAnotherCountry=Ajouter un autre pays +side-bar.OrcidWorkBest=ORCID fonctionne mieux lorsque vous avez plusieurs adresses e-mails. side-bar.termOfUse=conditions d'utilisation d'ORCID +side-bar.youMayOnly=vous ne pouvez ajouter que les adresses e-mails que vous contrôlez. À chaque fois que vous en ajouterez une, nous vous enverrons un e-mail vous demandant de procéder à sa vérification. +side-bar.primaryEmail=Adresse e-mail principale +side-bar.emailCanNotBeDuplicated=L'e-mail ne peut pas être dupliqué. +side-bar.noOtherEmails=Vous n'avez pas encore ajouté d'autres adresses e-mails. +side-bar.invalidEmailFormat=Format d'email invalide +side-bar.pleaseVerify=Veuillez procéder à la vérification de votre adresse e-mail principale ! +side-bar.youNeedToVerify=Vous devez procéder à la vérification de votre adresse e-mail principale afin d'accéder à toutes les fonctionnalités de modification d'ORCID. +side-bar.youNeedToVerify2=Pour procéder à la vérification de votre adresse e-mail, cliquez sur le lien contenu dans le message envoyé à : +side-bar.needHelp=Besoin d'aide ? +side-bar.visitOur=Rendez-vous sur notre +side-bar.knowledge=base de connaissances side-bar.orContact=ou contactez +side-bar.support=assistance. +side-bar.otherEmails=Autres adresses e-mails +side-bar.alreadyAssociated=Cette adresse e-mail est déjà associée à un dossier ORCID. +side-bar.additionalEmailsDuplicate=Les emails supplémentaires ne peuvent pas être dupliqués +side-bar.makePrimary=Définir comme l'adresse e-mail principale side-bar.resendVerification=Renvoyer courriel de vérification +side-bar.pleaseCheckYour=Veuillez consulter votre boîte de réception (ou peut-être votre dossier de courrier indésirable) pour voir si vous avez reçu un e-mail contenant un lien pour compléter le processus. +side-bar.otherEmail=Ajouter une autre adresse e-mail +side-bar.anotherEmail=Ajouter une autre adresse e-mail +side-bar.perOrcid=Selon le +side-bar.personalIdentifiers=Autres identifiants +side-bar.myOtherIdentifiers=Mes autres identifiants +side-bar.personIdentifiersDescription=Les autres identifiants, également appelés « identifiants personnels », sont des identifiants uniques que des systèmes tels qu'ISNI et Scopus utilisent pour vous identifier. Ils ne peuvent être ajoutés à votre dossier que par des organisations de confiance que vous avez associées à ORCID. +side-bar.findOutMore=Apprenez-en davantage au sujet de notre +side-bar.personIdentifiersSupport=Page d'assistance des autres identifiants. +sideBar.onlyVerifiedEmail=Seules les adresses électroniques vérifiées peuvent être affichées publiquement ou partagées avec des tiers de confiance. Merci de vérifier votre adresse e-mail. +sideBar.primaryEmailRequired=Une adresse électronique est nécesaire +side-bar.weHaveSentAEmail=Nous avons envoyé un e-mail de vérification à diff --git a/src/locale/properties/side-bar/side-bar.it.properties b/src/locale/properties/side-bar/side-bar.it.properties index 43bf425007..6a2a6998cc 100644 --- a/src/locale/properties/side-bar/side-bar.it.properties +++ b/src/locale/properties/side-bar/side-bar.it.properties @@ -1,3 +1,37 @@ +side-bar.countries=Paesi +side-bar.myCountries=I miei paesi +side-bar.countriesModalDescription=Aggiungi dei paesi al tuo record ORCID per evidenziare i luoghi dove effettui le tue ricerche o dove si concentrano le tue ricerche. Puoi aggiungere tutti i paesi che desideri. +side-bar.addCountry=Aggiungi un paese +side-bar.addAnotherCountry=Aggiungi un altro paese +side-bar.OrcidWorkBest=ORCID funziona meglio quando hai più di un indirizzo email. side-bar.termOfUse=termini di uso +side-bar.youMayOnly=puoi aggiungere solo gli indirizzi email che gestisci tu. Ogni volta che aggiungerai un indirizzo email ti invieremo un'email per verificarlo. +side-bar.primaryEmail=Indirizzo email primario +side-bar.emailCanNotBeDuplicated=L'email non può essere duplicata +side-bar.noOtherEmails=Non hai ancora aggiunto altri indirizzi email. +side-bar.invalidEmailFormat=Formato email non valido +side-bar.pleaseVerify=Verifica il tuo indirizzo email principale! +side-bar.youNeedToVerify=Devi verificare il tuo indirizzo email primario per accedere a tutte le funzionalità di modifica di ORCID. +side-bar.youNeedToVerify2=Per verificare la tua email, fai clic sul link contenuto nel messaggio che abbiamo inviato a: +side-bar.needHelp=Ti serve aiuto? +side-bar.visitOur=Visita il nostro +side-bar.knowledge=sezione Knowledgebase side-bar.orContact=o contatta +side-bar.support=supporto. +side-bar.otherEmails=Altri indirizzi email +side-bar.alreadyAssociated=Questa email è già associata a un record ORCID. +side-bar.additionalEmailsDuplicate=Le email aggiuntive non possono essere duplicate +side-bar.makePrimary=Indica come email principale side-bar.resendVerification=Reinvia email di verifica +side-bar.pleaseCheckYour=Controlla la tua casella postale (o la cartella spam) per trovare l'email che contiene il link per completare il processo. +side-bar.otherEmail=Aggiungi altri indirizzi email +side-bar.anotherEmail=Aggiungi un altro indirizzo email +side-bar.perOrcid=Per il +side-bar.personalIdentifiers=Altri ID +side-bar.myOtherIdentifiers=I miei altri identificatori +side-bar.personIdentifiersDescription=Gli altri identificatori, noti anche come Identificatori personali, sono degli ID univoci utilizzati da sistemi quali ISNI e Scopus per identificarti. Questi identificatori possono essere aggiunti al tuo record solo da organizzazioni affidabili che hai associato a ORCID. +side-bar.findOutMore=Scopri di più sul nostro +side-bar.personIdentifiersSupport=Pagina di supporto per gli altri identificatori. +sideBar.onlyVerifiedEmail=Solo gli indirizzi email verificati possono essere mostrati pubblicamente e condivisi con terze parti affidabili. Verifica il tuo indirizzo email +sideBar.primaryEmailRequired=È necessaria un'email +side-bar.weHaveSentAEmail=Abbiamo inviato un'email di verifica a diff --git a/src/locale/properties/side-bar/side-bar.ja.properties b/src/locale/properties/side-bar/side-bar.ja.properties index 806f53689b..3cafc3e01b 100644 --- a/src/locale/properties/side-bar/side-bar.ja.properties +++ b/src/locale/properties/side-bar/side-bar.ja.properties @@ -1,3 +1,37 @@ +side-bar.countries=国 +side-bar.myCountries=私の国々 +side-bar.countriesModalDescription=ORCIDレコードに国を追加して、研究を行う場所や研究の焦点を当てる場所を強調します。好きなだけ国を追加することができます。 +side-bar.addCountry=国を追加する +side-bar.addAnotherCountry=別の国を追加する +side-bar.OrcidWorkBest=ORCIDは、複数のメールアドレスがある場合に最も適切に機能します。 side-bar.termOfUse=利用規約により +side-bar.youMayOnly=自分で管理できるメールアドレスのみを追加できます。メールアドレスを追加するたびに、確認を求めるメールが送信されます。 +side-bar.primaryEmail=メインのメールアドレス +side-bar.emailCanNotBeDuplicated=電子メールは重複できません。 +side-bar.noOtherEmails=まだ他のメールアドレスが追加されていません。 +side-bar.invalidEmailFormat=無効なメールフォーマットです +side-bar.pleaseVerify=メインのメールアドレスを確認してください! +side-bar.youNeedToVerify=ORCIDのすべての編集機能にアクセスするには、メインのメールアドレスを確認する必要があります。 +side-bar.youNeedToVerify2=電子メールを確認するには、次の送信先に送れらたメッセージ内のリンクをクリックしてください: +side-bar.needHelp=ヘルプが必要ですか? +side-bar.visitOur=ご覧ください +side-bar.knowledge=参照するか side-bar.orContact=または次に連絡してください: +side-bar.support=サポート。 +side-bar.otherEmails=その他のメールアドレス +side-bar.alreadyAssociated=この電子メールはすでにORCIDレコードに関連付けられています。 +side-bar.additionalEmailsDuplicate=追加のメールは複製できません +side-bar.makePrimary=メインの電子メールを作成する side-bar.resendVerification=確認用電子メールの再送 +side-bar.pleaseCheckYour=プロセスを完了するためのリンクが掲載された電子メールについては、メールの受信トレイ(または迷惑メールフォルダ)を確認してください。 +side-bar.otherEmail=他のメールアドレスを追加する +side-bar.anotherEmail=別のメールアドレスを追加する +side-bar.perOrcid=につき +side-bar.personalIdentifiers=他の ID +side-bar.myOtherIdentifiers=私の他の識別子 +side-bar.personIdentifiersDescription=その他の識別子は、個人識別子とも呼ばれ、ISNIやScopusなどのシステムがユーザーを識別するために使用する一意のIDです。これらの識別子は、あなたがORCIDに接続している信頼できる組織によってのみあなたのレコードに追加することができます。 +side-bar.findOutMore=詳細はこちらをご覧ください +side-bar.personIdentifiersSupport=その他の識別子サポートページ。 +sideBar.onlyVerifiedEmail=確認済みのメールアドレスのみを公開したり、信頼できる当事者と共有したりできます。あなたの電子メールを確認してください。 +sideBar.primaryEmailRequired=メールが必要です +side-bar.weHaveSentAEmail=確認メールを送信しました diff --git a/src/locale/properties/side-bar/side-bar.ko.properties b/src/locale/properties/side-bar/side-bar.ko.properties index 5011a36578..d32f0786d0 100644 --- a/src/locale/properties/side-bar/side-bar.ko.properties +++ b/src/locale/properties/side-bar/side-bar.ko.properties @@ -1,3 +1,37 @@ +side-bar.countries=국가 +side-bar.myCountries=내 국가 +side-bar.countriesModalDescription=ORCID 기록에 국가를 추가하고 연구를 수행했거나 연구가 집중된 곳에 강조 표시를 하세요. 국가의 수는 원하는 만큼 추가 가능합니다. +side-bar.addCountry=국가 추가 +side-bar.addAnotherCountry=다른 국가 추가하기 +side-bar.OrcidWorkBest=ORCID는 이메일 주소가 여러 개일 때 가장 잘 작동합니다. side-bar.termOfUse=이용 약관에 따라 +side-bar.youMayOnly=본인이 실제로 관리 중인 이메일 주소만 추가 가능합니다. 이메일 주소를 하나 추가할 때마다 메일을 전송해 인증 절차를 요청할 것입니다. +side-bar.primaryEmail=기본 이메일 주소 +side-bar.emailCanNotBeDuplicated=이메일은 중복될 수 없습니다 +side-bar.noOtherEmails=아직 이메일 주소를 추가하지 않았습니다. +side-bar.invalidEmailFormat=잘못된 이메일 형식 +side-bar.pleaseVerify=기본 이메일 주소를 인증해 주세요! +side-bar.youNeedToVerify=ORCID의 모든 편집 기능에 접근하려면 기본 이메일을 인증해야 합니다. +side-bar.youNeedToVerify2=이메일을 인증하려면 다음의 주소로 보낸 메시지에서 링크를 클릭하세요. +side-bar.needHelp=도움이 필요하세요? +side-bar.visitOur=방문하세요 +side-bar.knowledge=기술 자료를 방문하거나 side-bar.orContact=다음으로 연락하십시오. +side-bar.support=지원. +side-bar.otherEmails=다른 이메일 주소들 +side-bar.alreadyAssociated=이 이메일은 이미 ORCID 기록과 연동되어 있습니다. +side-bar.additionalEmailsDuplicate=추가 이메일을 복제할 수 없습니다 +side-bar.makePrimary=기본 이메일 만들기 side-bar.resendVerification=검증 이메일 다시 보내기 +side-bar.pleaseCheckYour=이메일의 받은메일함(혹은 스팸메일함)에서 링크가 있는 이메일을 확인하고 과정을 마무리하세요. +side-bar.otherEmail=다른 이메일 계정 추가 +side-bar.anotherEmail=다른 이메일 주소를 추가하세요 +side-bar.perOrcid=당 +side-bar.personalIdentifiers=기타 ID +side-bar.myOtherIdentifiers=내 다른 식별자들 +side-bar.personIdentifiersDescription=다른 이름으로는 개인 식별자라고도 불리는 다른 식별자는 ISNI 및 Scopus와 같은 시스템이 귀하를 식별하기 위해 사용하는 고유한 ID입니다. 이 식별자들은 귀하가 ORCID에 연결한 신뢰하는 기관에 의해서만 귀하의 기록에 추가될 수 있습니다. +side-bar.findOutMore=더 찾아보기 +side-bar.personIdentifiersSupport=다른 식별자 지원 페이지. +sideBar.onlyVerifiedEmail=인증된 이메일 주소만 공개적으로 표시하거나 신뢰할 수 있는 상대방과 공유 가능합니다. 이메일을 인증해 주세요 +sideBar.primaryEmailRequired=이메일이 필요합니다 +side-bar.weHaveSentAEmail=인증 이메일을 전송한 곳 diff --git a/src/locale/properties/side-bar/side-bar.lr.properties b/src/locale/properties/side-bar/side-bar.lr.properties index 865841a276..8f3fcfdb4c 100644 --- a/src/locale/properties/side-bar/side-bar.lr.properties +++ b/src/locale/properties/side-bar/side-bar.lr.properties @@ -21,15 +21,17 @@ side-bar.otherEmails=LR side-bar.alreadyAssociated=LR side-bar.additionalEmailsDuplicate=LR side-bar.makePrimary=LR -side-bar.weHaveSentAEmail=LR side-bar.pleaseCheckYour=LR side-bar.anotherEmail=LR side-bar.perOrcid=LR side-bar.personalIdentifiers=LR -side-bar.myPersonIdentifiers=LR +side-bar.myOtherIdentifiers=LR side-bar.personIdentifiersDescription=LR side-bar.personIdentifiersSupport=LR side-bar.addCountry=LR side-bar.otherEmail=LR side-bar.noOtherEmails=LR side-bar.findOutMore=LR +sideBar.onlyVerifiedEmail=LR +sideBar.primaryEmailRequired=LR +side-bar.weHaveSentAEmail=LR diff --git a/src/locale/properties/side-bar/side-bar.pt.properties b/src/locale/properties/side-bar/side-bar.pt.properties index f86f86e344..20553d2657 100644 --- a/src/locale/properties/side-bar/side-bar.pt.properties +++ b/src/locale/properties/side-bar/side-bar.pt.properties @@ -1,3 +1,37 @@ +side-bar.countries=Países +side-bar.myCountries=Os meus países +side-bar.countriesModalDescription=Adicione países ao seu registo do ORCID para assinalar onde a sua investigação tem lugar ou o foco da sua investigação. Pode adicionar quantos países quiser. +side-bar.addCountry=Adicione um país +side-bar.addAnotherCountry=Adicionar outro país +side-bar.OrcidWorkBest=O ORCID funciona melhor quando tem vários endereços de e-mail. side-bar.termOfUse=do ORCID +side-bar.youMayOnly=só pode adicionar endereços de e-mail sobre os quais tenha controlo. Cada vez que adicionar um endereço de e-mail, enviaremos um e-mail a solicitar a sua verificação. +side-bar.primaryEmail=Endereço de e-mail principal +side-bar.emailCanNotBeDuplicated=O e-mail não pode ser duplicado +side-bar.noOtherEmails=Ainda não adicionou nenhum outro endereço de e-mail. +side-bar.invalidEmailFormat=Formato de e-mail inválido +side-bar.pleaseVerify=Verifique o seu endereço de e-mail principal! +side-bar.youNeedToVerify=Precisa de verificar o seu e-mail principal para aceder a todos os recursos de edição do ORCID. +side-bar.youNeedToVerify2=Para verificar o seu e-mail, clique na hiperligação da mensagem enviada para: +side-bar.needHelp=Precisa de ajuda? +side-bar.visitOur=Visite o nosso +side-bar.knowledge=banco de conhecimento side-bar.orContact=ou entre em contato com +side-bar.support=suporte. +side-bar.otherEmails=Outros endereços de e-mail +side-bar.alreadyAssociated=Este e-mail já está associado a um registo ORCID. +side-bar.additionalEmailsDuplicate=Os e-mails adicionais não podem ser duplicados +side-bar.makePrimary=Tornar o e-mail principal side-bar.resendVerification=Enviar e-mail de validação novamente +side-bar.pleaseCheckYour=Verifique a sua caixa de entrada de e-mail (ou talvez a sua pasta de spam) para ver se recebeu um e-mail com uma hiperligação para concluir o processo. +side-bar.otherEmail=Adicione outro endereço de e-mail +side-bar.anotherEmail=Adicionar outro endereço de e-mail +side-bar.perOrcid=Por +side-bar.personalIdentifiers=Outras IDs +side-bar.myOtherIdentifiers=Os meus outros identificadores +side-bar.personIdentifiersDescription=Outros identificadores, também chamados de identificadores de Pessoa, são IDs exclusivos que sistemas como ISNI e Scopus utilizam para identificá-lo. Estes identificadores só podem ser adicionados ao seu registo por organizações confiáveis que associou ao ORCID. +side-bar.findOutMore=Saiba mais no nosso +side-bar.personIdentifiersSupport=Página de suporte para outros identificadores +sideBar.onlyVerifiedEmail=Apenas endereços de e-mail verificados podem ser exibidos publicamente ou partilhados com partes confiáveis. Verifique o seu e-mail +sideBar.primaryEmailRequired=É necessário um e-mail +side-bar.weHaveSentAEmail=Enviámos um e-mail de verificação para diff --git a/src/locale/properties/side-bar/side-bar.rl.properties b/src/locale/properties/side-bar/side-bar.rl.properties index f7087cf383..e850df7229 100644 --- a/src/locale/properties/side-bar/side-bar.rl.properties +++ b/src/locale/properties/side-bar/side-bar.rl.properties @@ -21,15 +21,17 @@ side-bar.otherEmails=RL side-bar.alreadyAssociated=RL side-bar.additionalEmailsDuplicate=RL side-bar.makePrimary=RL -side-bar.weHaveSentAEmail=RL side-bar.pleaseCheckYour=RL side-bar.anotherEmail=RL side-bar.perOrcid=RL side-bar.personalIdentifiers=RL -side-bar.myPersonIdentifiers=RL +side-bar.myOtherIdentifiers=RL side-bar.personIdentifiersDescription=RL side-bar.personIdentifiersSupport=RL side-bar.addCountry=RL side-bar.otherEmail=RL side-bar.noOtherEmails=RL side-bar.findOutMore=RL +sideBar.onlyVerifiedEmail=RL +sideBar.primaryEmailRequired=RL +side-bar.weHaveSentAEmail=RL diff --git a/src/locale/properties/side-bar/side-bar.ru.properties b/src/locale/properties/side-bar/side-bar.ru.properties index b7deb5bb96..18e112201b 100644 --- a/src/locale/properties/side-bar/side-bar.ru.properties +++ b/src/locale/properties/side-bar/side-bar.ru.properties @@ -1,3 +1,37 @@ +side-bar.countries=Страны +side-bar.myCountries=Мои страны +side-bar.countriesModalDescription=Добавьте страны в свою запись ORCID, чтобы указать, где вы проводите свое исследование или на чем сосредоточено ваше исследование. Вы можете добавить столько стран, сколько захотите. +side-bar.addCountry=Добавить страну +side-bar.addAnotherCountry=Добавить другую страну +side-bar.OrcidWorkBest=ORCID работает лучше всего, когда у вас несколько адресов электронной почты. side-bar.termOfUse=условиям использования ORCID +side-bar.youMayOnly=вы можете добавлять только те адреса электронной почты, которые вы контролируете. Каждый раз, когда вы добавляете адрес электронной почты, мы будем отправлять вам электронное письмо с просьбой подтвердить его. +side-bar.primaryEmail=Основной адрес электронной почты +side-bar.emailCanNotBeDuplicated=Адрес электронной почты не может дублироваться +side-bar.noOtherEmails=Вы еще не добавили каких-либо других адресов электронной почты. +side-bar.invalidEmailFormat=Недействительный формат электронной почты +side-bar.pleaseVerify=Просим вас подтвердить свой основной адрес эл. почты! +side-bar.youNeedToVerify=Вам нужно подтвердить свой основной адрес электронной почты, чтобы получить доступ ко всем функциям редактирования ORCID. +side-bar.youNeedToVerify2=Для подтверждения своей эл. почты нажмите на ссылку в сообщении, отправленном на: +side-bar.needHelp=Нужна помощь? +side-bar.visitOur=Посетите наш +side-bar.knowledge=базу знаний side-bar.orContact=или свяжитесь с нами +side-bar.support=служба поддержки. +side-bar.otherEmails=Другие адреса эл. почты +side-bar.alreadyAssociated=Данный адрес электронной почты уже связан с записью ORCID. +side-bar.additionalEmailsDuplicate=Дополнительные адреса не могут повторяться +side-bar.makePrimary=Сделать основным адресом электронной почты side-bar.resendVerification=Заново отправить электронное письмо с подтверждением +side-bar.pleaseCheckYour=Проверьте свой почтовый ящик (или, возможно, папку со спамом) на наличие электронного письма со ссылкой для завершения процесса. +side-bar.otherEmail=Добавить другой адрес электронной почты +side-bar.anotherEmail=Добавить еще один адрес электронной почты +side-bar.perOrcid=На каждый +side-bar.personalIdentifiers=Другие ID +side-bar.myOtherIdentifiers=Другие мои идентификаторы +side-bar.personIdentifiersDescription=Другие идентификаторы, также называемые идентификаторами лиц, представляют собой уникальные идентификаторы, которые такие системы, как ISNI и Scopus, используют для вашей идентификации. Эти идентификаторы могут быть добавлены в вашу запись только доверенными организациями, которые вы подключили к ORCID. +side-bar.findOutMore=Узнать больше о нашем +side-bar.personIdentifiersSupport=Страница поддержки других идентификаторов. +sideBar.onlyVerifiedEmail=Только подтвержденные адреса эл. почты можно отображать публично и делиться ими с доверенными сторонами. Пожалуйста, подтвердите свою эл. почту +sideBar.primaryEmailRequired=Адрес электронной почты обязателен +side-bar.weHaveSentAEmail=Мы отправили электронное письмо для подтверждения на адрес diff --git a/src/locale/properties/side-bar/side-bar.uk.properties b/src/locale/properties/side-bar/side-bar.uk.properties deleted file mode 100644 index a352c23aee..0000000000 --- a/src/locale/properties/side-bar/side-bar.uk.properties +++ /dev/null @@ -1,2 +0,0 @@ -side-bar.orContact=чи зв'яжіться з -side-bar.resendVerification=Повторно надіслати лист перевірки diff --git a/src/locale/properties/side-bar/side-bar.xx.properties b/src/locale/properties/side-bar/side-bar.xx.properties index 3da54876fd..cf62938fd8 100644 --- a/src/locale/properties/side-bar/side-bar.xx.properties +++ b/src/locale/properties/side-bar/side-bar.xx.properties @@ -26,7 +26,7 @@ side-bar.pleaseCheckYour=X side-bar.anotherEmail=X side-bar.perOrcid=X side-bar.personalIdentifiers=X -side-bar.myPersonIdentifiers=X +side-bar.myOtherIdentifiers=X side-bar.personIdentifiersDescription=X side-bar.personIdentifiersSupport=X side-bar.addCountry=X @@ -34,3 +34,5 @@ side-bar.otherEmail=X side-bar.noOtherEmails=X side-bar.findOurMore=X side-bar.findOutMore=X +sideBar.onlyVerifiedEmail=X +sideBar.primaryEmailRequired=X diff --git a/src/locale/properties/side-bar/side-bar.zh_CN.properties b/src/locale/properties/side-bar/side-bar.zh_CN.properties index 0da5bedb97..29ba95a5c0 100644 --- a/src/locale/properties/side-bar/side-bar.zh_CN.properties +++ b/src/locale/properties/side-bar/side-bar.zh_CN.properties @@ -1,3 +1,37 @@ +side-bar.countries=国家/地区 +side-bar.myCountries=我的国家/地区 +side-bar.countriesModalDescription=在 ORCID 记录中添加国家/地区信息,以强调您展开研究的地区,或者您研究的对象地区。添加数量不设限。 +side-bar.addCountry=添加国家信息 +side-bar.addAnotherCountry=添加其他国家信息 +side-bar.OrcidWorkBest=若您拥有多个电子邮箱地址, ORCID 将能发挥其最大功效。 side-bar.termOfUse=使用条款 +side-bar.youMayOnly=您仅能新增由您使用的电子邮箱地址。我们将在您新增电子邮箱地址时,发送验证邮件,要求您验证该邮箱地址。 +side-bar.primaryEmail=主要电子邮箱地址 +side-bar.emailCanNotBeDuplicated=无法复制电子邮箱地址 +side-bar.noOtherEmails=您尚未新增任何其他电子邮箱地址。 +side-bar.invalidEmailFormat=无效邮箱格式 +side-bar.pleaseVerify=请验证您的主要电子邮箱地址 +side-bar.youNeedToVerify=您必须验证您的主要电子邮箱地址以使用 ORCID 所有的编辑功能。 +side-bar.youNeedToVerify2=请点击邮件中的链接以验证您的电子邮箱地址,邮件已发送至: +side-bar.needHelp=需要帮助? +side-bar.visitOur=访问我们的 +side-bar.knowledge=知识库 side-bar.orContact=或者联系 +side-bar.support=帮助。 +side-bar.otherEmails=其他电子邮箱地址 +side-bar.alreadyAssociated=此电子邮箱地址已与 ORCID 记录绑定。 +side-bar.additionalEmailsDuplicate=额外邮箱地址不可重复 +side-bar.makePrimary=设定主要电子邮箱地址 side-bar.resendVerification=再次发送验证电子邮件 +side-bar.pleaseCheckYour=请检查您的收件箱或垃圾信箱,您将会收到一封含有链接的电子邮件,以便完成注册。 +side-bar.otherEmail=添加其他电子邮箱地址 +side-bar.anotherEmail=添加其他电子邮箱地址 +side-bar.perOrcid=每一个 +side-bar.personalIdentifiers=其他 ID +side-bar.myOtherIdentifiers=我的其他识别码 +side-bar.personIdentifiersDescription=其他识别码,亦称作身份识别码,为 ISNI 及 Scopus 等系统用于识别您身份的独特识别码。此识别码仅能由已连接至 ORCID 的受信赖组织添加。 +side-bar.findOutMore=更多详细信息都在我们的 +side-bar.personIdentifiersSupport=其他识别码相关的帮助页面 +sideBar.onlyVerifiedEmail=只有受验证的电子邮箱地址能够公开显示,或与受信赖的组织分享。请验证您的电子邮箱地址。 +sideBar.primaryEmailRequired=需要邮箱 +side-bar.weHaveSentAEmail=我们已经发送了一封验证邮件至 diff --git a/src/locale/properties/side-bar/side-bar.zh_TW.properties b/src/locale/properties/side-bar/side-bar.zh_TW.properties index c2c0328bc3..c5cf7e6c6a 100644 --- a/src/locale/properties/side-bar/side-bar.zh_TW.properties +++ b/src/locale/properties/side-bar/side-bar.zh_TW.properties @@ -1,3 +1,37 @@ +side-bar.countries=國家 +side-bar.myCountries=我的國家 +side-bar.countriesModalDescription=於您的 ORCID 紀錄新增國家名稱,強調您進行研究的區域,或您的研究對象區域。能新增的數量並無上限。 +side-bar.addCountry=新增國家 +side-bar.addAnotherCountry=新增國家名稱 +side-bar.OrcidWorkBest=若您擁有複數個電子郵件地址,ORCID 將能發揮其最大功效。 side-bar.termOfUse=使用條款 +side-bar.youMayOnly=您僅能新增由您使用的電子郵件地址。我們將會於您新增電子郵件地址時,寄送驗證郵件請您驗證該電子郵件地址。 +side-bar.primaryEmail=主要電子郵件地址 +side-bar.emailCanNotBeDuplicated=無法複製電子郵件地址 +side-bar.noOtherEmails=您尚未新增任何其他電子郵件地址。 +side-bar.invalidEmailFormat=無效的電子郵件格式 +side-bar.pleaseVerify=請驗證您的主要電子郵件地址! +side-bar.youNeedToVerify=您必須驗證您的主要電子郵件地址以使用 ORCID 所有的編輯功能。 +side-bar.youNeedToVerify2=點擊驗證郵件中的連結,以認證您的電子郵件地址。驗證郵件已寄送至: +side-bar.needHelp=需要協助? +side-bar.visitOur=訪問我們的 +side-bar.knowledge=知識庫 side-bar.orContact=或者聯繫 +side-bar.support=支援。 +side-bar.otherEmails=其他電子郵件地址 +side-bar.alreadyAssociated=此電子郵件地址已經與 ORCID 紀錄連結。 +side-bar.additionalEmailsDuplicate=額外電子郵件不得重複 +side-bar.makePrimary=建立主要電子郵件地址 side-bar.resendVerification=再次傳送驗證電子郵件 +side-bar.pleaseCheckYour=請檢查您的收件匣或垃圾信件匣,您將會收到一封用以完成手續,含有連結的電子郵件。 +side-bar.otherEmail=新增電子郵件地址 +side-bar.anotherEmail=新增電子郵件地址 +side-bar.perOrcid=每一個 +side-bar.personalIdentifiers=其他 ID +side-bar.myOtherIdentifiers=其他我的識別碼 +side-bar.personIdentifiersDescription=其他的識別碼,亦稱作人員識別碼,為 ISNI 及 Scopus 等系統用於辨識您身分的獨特識別碼。此識別碼僅能由已連結至 ORCID 的受信賴組織新增。 +side-bar.findOutMore=更多詳細資訊都在我們的 +side-bar.personIdentifiersSupport=其他識別碼相關的協助頁面。 +sideBar.onlyVerifiedEmail=只有已經驗證的電子郵件地址能夠公開顯示,或與受信賴的組織分享。請驗證您的電子郵件地址。 +sideBar.primaryEmailRequired=電子郵件為必填 +side-bar.weHaveSentAEmail=我們已經寄送驗證郵件至 diff --git a/src/locale/properties/signin/signin.ca.properties b/src/locale/properties/signin/signin.ca.properties deleted file mode 100644 index 67033d89f7..0000000000 --- a/src/locale/properties/signin/signin.ca.properties +++ /dev/null @@ -1 +0,0 @@ -ngOrcid.signin.affiliations=Afiliacions diff --git a/src/locale/properties/signin/signin.uk.properties b/src/locale/properties/signin/signin.uk.properties index f4a1860829..42ba0f3923 100644 --- a/src/locale/properties/signin/signin.uk.properties +++ b/src/locale/properties/signin/signin.uk.properties @@ -1,64 +1,64 @@ -ngOrcid.signin.forgotYourPassword= -ngOrcid.signin.isThisYouTitle= -ngOrcid.signin.isThisYouBody= -ngOrcid.signin.contact= -ngOrcid.signin.firstName= -ngOrcid.signin.lastName= -ngOrcid.signin.affiliations= -ngOrcid.signin.dateCreated= -ngOrcid.signin.viewRecord= -ngOrcid.signin.isThisYouSignin= -ngOrcid.signin.isThisYouContinue= -ngOrcid.signin.title= -ngOrcid.signin.subtitle= -ngOrcid.signin.username= -ngOrcid.signin.password= -ngOrcid.signin.button= -ngOrcid.signin.personalAccount= -ngOrcid.signin.institutionalAccount= -ngOrcid.signin.socialMedia= -ngOrcid.signin.google= -ngOrcid.signin.facebook= -ngOrcid.signin.requiredUsername= -ngOrcid.signin.invalidEmail= -ngOrcid.signin.invalidUsername= -ngOrcid.signin.requiredEmail= -ngOrcid.signin.invalidPassword= -ngOrcid.signin.dontHaveOrcid= -ngOrcid.signin.registerNow= -ngOrcid.signin.or= -ngOrcid.signin.badCredentials= -ngOrcid.signin.continueAs= -ngOrcid.signin.notYou= -ngOrcid.signin.currentlySign= -ngOrcid.signin.deprecatedWithPrimary= -ngOrcid.signin.deactivated= -ngOrcid.signin.deactivatedEnterEmail= -ngOrcid.signin.email= -ngOrcid.signin.submit= -ngOrcid.signin.usernameHint= -ngOrcid.signin.emailHint= -ngOrcid.signin.verify.reactivationSent= -ngOrcid.signin.verify.reactivationSentError= -ngOrcid.signin.2fa.authenticate= -ngOrcid.signin.2fa.recoveryCodeRequired= -ngOrcid.signin.2fa.badRecoveryCode= -ngOrcid.signin.2fa.badRecoveryCodeLength= -ngOrcid.signin.2fa.verificationCodeRequired= -ngOrcid.signin.2fa.badVerificationCode= -ngOrcid.signin.2fa.badVerificationCodeLength= -ngOrcid.signin.2fa.contactSupport= -ngOrcid.signin.2fa.noDevice1= -ngOrcid.signin.2fa.noDevice2= -ngOrcid.signin.2fa.noDeviceOrRecovery= -ngOrcid.signin.2fa.heading= -ngOrcid.signin.2fa.instructionsPart1= -ngOrcid.signin.2fa.instructionsPart2= -ngOrcid.signin.2fa.instructions= -ngOrcid.signin.2fa.label= -ngOrcid.signin.2fa.recoveryCode= -ngOrcid.signin.unclaimedExists1= -ngOrcid.signin.unclaimedExists2= -ngOrcid.signin.invalidUserType1= -ngOrcid.signin.invalidUserType2= -ngOrcid.signin.contactSupport= +ngOrcid.signin.forgotYourPassword=Forgot your password or ORCID ID? +ngOrcid.signin.isThisYouTitle=Could this be you? +ngOrcid.signin.isThisYouBody=We found some accounts with your name, which means you may have already created an ORCID iD using a different email address. Before creating an account, please confirm that none of these records belong to you. Not sure if any of these are you? +ngOrcid.signin.contact=Contact us. +ngOrcid.signin.firstName=First Name +ngOrcid.signin.lastName=Last Name +ngOrcid.signin.affiliations=Пов'язані організації +ngOrcid.signin.dateCreated=Date Created +ngOrcid.signin.viewRecord=View Record +ngOrcid.signin.isThisYouSignin=I ALREADY HAVE AN ID, GO BACK TO SIGN IN +ngOrcid.signin.isThisYouContinue=NONE OF THESE ARE ME, CONTINUE WITH REGISTRATION +ngOrcid.signin.title=Sign in +ngOrcid.signin.subtitle=Sign in with your ORCID account +ngOrcid.signin.username=Email or 16-digit ORCID iD +ngOrcid.signin.password=Password +ngOrcid.signin.button=SIGN IN +ngOrcid.signin.personalAccount=Personal account +ngOrcid.signin.institutionalAccount=Access through your institution +ngOrcid.signin.socialMedia=Sign in with a social media account +ngOrcid.signin.google=Sign in with Google +ngOrcid.signin.facebook=Sign in with Facebook +ngOrcid.signin.requiredUsername=Email or 16-digit ORCID iD is required +ngOrcid.signin.invalidEmail=Use the format example@email.com +ngOrcid.signin.invalidUsername=Use the format example@email.com or 0000-0001-2345-6789 +ngOrcid.signin.requiredEmail=Email is required +ngOrcid.signin.invalidPassword=Invalid password +ngOrcid.signin.dontHaveOrcid=Don't have an ORCID iD yet? +ngOrcid.signin.registerNow=Register now +ngOrcid.signin.or=or +ngOrcid.signin.badCredentials=Incorrect username and/or password +ngOrcid.signin.continueAs=Continue as +ngOrcid.signin.notYou=Not you? +ngOrcid.signin.currentlySign=You are currently signed in as +ngOrcid.signin.deprecatedWithPrimary=This account is deprecated. Please refer to account: +ngOrcid.signin.deactivated=A deactivated ORCID record is associated with this email address; to reactivate your ORCID record please enter your email address and submit the form to start the reactivate process. +ngOrcid.signin.deactivatedEnterEmail=If you can no longer access any emails associated with your iD, please +ngOrcid.signin.email=Email +ngOrcid.signin.submit=SUBMIT +ngOrcid.signin.usernameHint=example@email.com or 0000-0001-2345-6789 +ngOrcid.signin.emailHint=example@email.com +ngOrcid.signin.verify.reactivationSent=Thank you for reactivating your ORCID record; please complete the process by following the steps in the email we are now sending you. If you don’t receive an email from us, please +ngOrcid.signin.verify.reactivationSentError=Please enter a valid email address +ngOrcid.signin.2fa.authenticate=AUTHENTICATE +ngOrcid.signin.2fa.recoveryCodeRequired=Recovery code is required +ngOrcid.signin.2fa.badRecoveryCode=Invalid recovery code +ngOrcid.signin.2fa.badRecoveryCodeLength=Invalid recovery code length +ngOrcid.signin.2fa.verificationCodeRequired=Authentication code is required +ngOrcid.signin.2fa.badVerificationCode=Invalid authentication code +ngOrcid.signin.2fa.badVerificationCodeLength=Invalid authentication code length +ngOrcid.signin.2fa.contactSupport=Contact support +ngOrcid.signin.2fa.noDevice1=Don't have your device? +ngOrcid.signin.2fa.noDevice2=Enter a recovery code +ngOrcid.signin.2fa.noDeviceOrRecovery=Don't have your device or recovery code? +ngOrcid.signin.2fa.heading=Two-factor authentication +ngOrcid.signin.2fa.instructionsPart1=Enter a code +ngOrcid.signin.2fa.instructionsPart2=from your two-factor authentication app +ngOrcid.signin.2fa.instructions=Enter a code from your two-factor authentication app +ngOrcid.signin.2fa.label=Two-factor authentication code +ngOrcid.signin.2fa.recoveryCode=Recovery code +ngOrcid.signin.unclaimedExists1=The ORCID record exists but has not been claimed. Would you like to +ngOrcid.signin.unclaimedExists2=resend the claim email? +ngOrcid.signin.invalidUserType1=Invalid ORCID iD, please +ngOrcid.signin.invalidUserType2=contact support +ngOrcid.signin.contactSupport=contact support diff --git a/src/locale/properties/top-bar/top-bar.ar.properties b/src/locale/properties/top-bar/top-bar.ar.properties index dec4016ea4..09b502787b 100644 --- a/src/locale/properties/top-bar/top-bar.ar.properties +++ b/src/locale/properties/top-bar/top-bar.ar.properties @@ -1,22 +1,24 @@ topBar.names=الأسماء topBar.biography=سيرة شخصية topBar.publishedName=الاسم المنشور +topBar.yourPublishedName=اسمك المنشور topBar.alsoKnowAs=كما يعرف بـ -topBar.otherNames=أسماء أخرى topBar.addYourBiography=أضف سيرتك الذاتية topBar.addGivenName=أضف الاسم الأول topBar.addFamilyName=أضف اسم العائلة topBar.addPublishedName=أضف الاسم المنشور أو اسم الائتمان topBar.addOtherName=أضف اسماً آخر topBar.information=معلومات حولك، وحول اهتمامات بحثك، وغيرها من التفاصيل ذات الصلة لتحسين سجل أوركيد الخاص بك. -topBar.givenAndFamilyNames=الأسماء الأولى وأسماء العائلة +topBar.yourNames=أسماؤك topBar.yourGivenAndFamilyNames=الاسم الأول واسم العائلة الخاص بك. يتم استخدام هذه الأسماء في سجل أوركيد الخاص بك افتراضياً. +topBar.orcidHasANumber=يحتوي ORCID على عدد من الخيارات لإضافة وإدارة الأسماء الخاصة بك. +topBar.findOutMore=اكتشف المزيد حول إدارة الأسماء في سجلك على ORCID topBar.givenNames=الأسماء المعينة topBar.firstNameError=يرجى إدخال اسمك الأول topBar.invalidName=تنسيق أو أحرف الاسم غير صالحة topBar.invalidBio=تنسيق أو أحرف غير صالحة topBar.familyNames=أسماء العائلة -topBar.preferredNameFormat=تنسيق وبنية الاسم المفضلة لك. إذا قمت بإضافة اسما منشور، سيتم استخدامه بدلاً من اسمك الأول واسم العائلة. +topBar.howYouPreferYourName=كيف تفضل أن يظهر اسمك عند نسب عمل لك. تستطيع التحكم في كيفية عرض اسمك في سجلك على ORCID من خلال إضافة اسم منشور. topBar.youCanFormat=يمكنك تنسيق هذا الاسم كيفما شئت topBar.otherVariants=يمكنك إضافة متغيرات اسمك، كاختصار لاسمك الأول، الأسماء الوسطى، أسماء سابقة، أو أسماء بأحرف مختلفة أو لغة أخرى. إضافة أسماء أخرى تساعد الآخرين في العثور على سجلك عند بحث سجل أوركيد. topBar.addAnotherName=أضف اسماً آخر @@ -29,6 +31,7 @@ topBar.addAnotherLink=إضافة رابط آخر topBar.description=عنوان الرابط topBar.url=URL الرابط topBar.invalidURL=رابط غير صحيح +topBar.urlMaxLength=يجب أن يكون أقل من 355 حرفاً topBar.requiredURL=عنوان URL مطلوب topBar.urlDuplicated=لا يمكن تكرار عنوان URL topBar.keyword=كلمة مفتاحية @@ -37,3 +40,38 @@ topBar.myKeywords=كلماتي المفتاحية topBar.keywordsAre=الكلمات المفتاحية هي كلمات أو عبارات تصف أنشطتك البحثية. يمكن لإضافة الكلمات المفتاحية مساعدة الآخرين في العثور عليك عند بحث سجل أوركيد. topBar.addAnotherKeyword=أضف كلمة مفتاحية أخرى topBar.addKeyword=أضف كلمة مفتاحية +topBar.keywordMaxLength=يجب أن تكون أقل من 100 حرف +topBar.whoCanSeeYourNames=من يمكنه رؤية أسمائك +topBar.manageWhoCanSee=تحكم في من يمكنه رؤية اسمك واسم عائلتك وأسمائك المنشورة عن طريق تعيين إعدادات إمكانية الرؤية. إعداد إمكانية الرؤية الافتراضي لأسمائك +topBar.addOtherNames=أضف أسماءً أخرى قد يُشار إليك بها. يمكن أن تتضمن هذه الأسماء اسماً مختصراً أو اسم الأب أو اسماً سابقاً أو تهجية مختلفة للاسم أو الاسم بلغة مختلفة. قد تساعد إضافة أسماء أخرى من يبحث عنك في سجل ORCID في العثور على سجلك. +topBar.namesMaxLenght=يجب أن يكون أقل من 100 حرف +topBar.otherNamesMaxLenght=يجب أن يكون أقل من 255 حرفاً +topBar.resendVerificationEmail=إعادة إرسال رسالة التأكيد +topBar.pleaseVerifyYourPrimary=يرجى التحقق من عنوان بريدك الإلكتروني الأساسي +topBar.youNeedToVerify=يتعين عليك التحقق من عنوان بريدك الإلكتروني الأساسي لكي تستطيع التمتع بجميع ميزات تحرير ORCID. +topBar.toVerifyYourEmail=للتحقق من بريدك الإلكتروني، يرجى الضغط على الرابط الموجود في الرسالة التي أرسلناها إلى: +topBar.iDontHave=ليس لدي رسالة التحقق +topBar.clickTheButton=اضغط على الزر أدناه وسنرسل لك رسالة بريد إلكتروني جديدة. +topBar.visitOur=زر +topBar.knowledge=قاعدة معرفية +topBar.baseOrContact=أو تواصل مع فريق الدعم على +topBar.weHaveSent=لقد قمنا بإرسال رسائل للتحقق إلى كل عنوان من عناوين بريدك الإلكتروني المسجَّلة لدينا. ستحتاج إلى تأكيد عنوان بريدك الإلكتروني الأساسي قبل أن تتمكن من البدء في إضافة المعلومات يدوياً إلى سجل ORCID الخاص بك. +topBar.thankYouForRegistering=شكراً لك على التسجيل في ORCID +topBar.ifYouBelieveWasLockedInError=إذا كنت تعتقد أن هذا الحساب قد أُقفل خطأً. +topBar.accountHasBeenLocked=تم إغلاق حسابك +topBar.pleasContact=الرجاء التواصل +topBar.orcidSupport=دعم ORCID\n +topBar.isThisYou=هل هذا أنت؟ +topBar.signInToStart=سجّل الدخول لبدء التحرير +topBar.lockedRecord=تسجيلة أوركيد مغلقة مؤقتا +topBar.deactivatedRecord=سجل ORCID هذا معطّل +topBar.accountDeprecated=لقد تم إيقاف هذا الحساب، يرجى رؤية الحساب +topBar.accountDeprecated2=لأحدث المعلومات +topBar.youAreManaging=أنت تدير سجل ORCID هذا كشخص موثوق +topBar.youAreManagingSomeElse=أنت تدير سجل ORCID الخاص بك. +topBar.youArePreviewingSomeElse=أنت تعرض النسخة العامة لسجلك +topBar.youArePreviewing=أنت تعرض نسخة عامة من هذا السجل +topBar.editThisRecord=تحرير هذا السجل +topBar.otherNames=أسماء أخرى +topBar.name=الاسم +topBar.printableVersion=نسخة قابلة للطباعة diff --git a/src/locale/properties/top-bar/top-bar.cs.properties b/src/locale/properties/top-bar/top-bar.cs.properties index 8c59419ace..0aa0c2f5cb 100644 --- a/src/locale/properties/top-bar/top-bar.cs.properties +++ b/src/locale/properties/top-bar/top-bar.cs.properties @@ -1,22 +1,24 @@ topBar.names=Jména topBar.biography=Životopis topBar.publishedName=Publikové jméno +topBar.yourPublishedName=Vaše publikované jméno topBar.alsoKnowAs=Také známý jako -topBar.otherNames=Další jména topBar.addYourBiography=Přidat svůj životopis topBar.addGivenName=Přidat křestní jméno topBar.addFamilyName=Přidat příjmení topBar.addPublishedName=Přidat zveřejněné nebo kreditní jméno topBar.addOtherName=Přidat jiné jméno topBar.information=Informace o vás, vašich výzkumných zájmech a další související podrobnosti, které zlepšují váš záznam ORCID. -topBar.givenAndFamilyNames=Křestní jména a příjmení +topBar.yourNames=Vaše jména topBar.yourGivenAndFamilyNames=Vaše křestní jména a příjmení. Tyto se používají ve výchozím nastavení ve vašem záznamu ORCID. +topBar.orcidHasANumber=ORCID má řadu možností pro přidávání a správu vašich jmen. +topBar.findOutMore=Zjistěte více o správě jmen ve vašem záznamu ORCID topBar.givenNames=Křestní jména topBar.firstNameError=Zadejte prosím své křestní jméno topBar.invalidName=Neplatné znaky nebo formát topBar.invalidBio=Neplatné znaky nebo formát topBar.familyNames=Příjmení -topBar.preferredNameFormat=Upřednostňovaný formát a struktura jména. Pokud je k dispozici publikované jméno, použije se místo vašich křestních jmen a příjmení. +topBar.howYouPreferYourName=Jak chcete, aby se vaše jméno zobrazovalo při připsání kreditu. Přidání publikovaného jména vám umožní ovládat, jak se vaše jméno zobrazí ve vašem záznamu ORCID. topBar.youCanFormat=Toto jméno můžete naformátovat, jak si přejete topBar.otherVariants=Můžete přidat různé varianty svého jména, například zkrácené křestní jméno, prostřední jména, dřívější jména nebo jména v jiné znakové sadě nebo jazyce. Přidání dalších jmen pomůže lidem najít váš záznam při prohledávání registru ORCID. topBar.addAnotherName=Přidat další jméno @@ -29,6 +31,7 @@ topBar.addAnotherLink=Přidejte další odkaz topBar.description=Název odkazu topBar.url=URL odkazu topBar.invalidURL=Neplatná adresa URL +topBar.urlMaxLength=Musí mít méně než 355 znaků topBar.requiredURL=Adresa URL je vyžadována topBar.urlDuplicated=URL nelze duplikovat topBar.keyword=Klíčové slovo @@ -37,3 +40,38 @@ topBar.myKeywords=Moje klíčová slova topBar.keywordsAre=Klíčová slova jsou slova nebo fráze, které popisují vaše výzkumné aktivity. Přidání klíčových slov může lidem pomoci vás najít při vyhledávání v systému ORCID. topBar.addAnotherKeyword=Přidat další klíčové slovo topBar.addKeyword=Přidat klíčová slova. +topBar.keywordMaxLength=Musí mít méně než 100 znaků +topBar.whoCanSeeYourNames=Kdo uvidí vaše jména +topBar.manageWhoCanSee=Nastavením viditelnosti určíte, kdo uvidí vaše křestní jméno, příjmení a zveřejněné jméno. Výchozí nastavení viditelnosti vašich jmen je +topBar.addOtherNames=Přidejte další jména, pod kterými byste mohli být známí. Mohou zahrnovat zkrácená jména, druhá jména, dřívější jména nebo jména v jiné sadě znaků nebo jazyce. Přidání dalších jmen může lidem pomoci najít váš záznam při hledání v registru ORCID. +topBar.namesMaxLenght=Musí mít méně než 100 znaků +topBar.otherNamesMaxLenght=Musí být kratší než 255 znaků +topBar.resendVerificationEmail=Znovu odeslat ověřovací email +topBar.pleaseVerifyYourPrimary=Ověřte prosím svou primární e-mailovou adresu +topBar.youNeedToVerify=Abyste měli přístup ke všem editačním funkcím ORCID, musíte ověřit svou primární e-mailovou adresu. +topBar.toVerifyYourEmail=Pro ověření vašeho e-mailu prosím klikněte na odkaz ve zprávě, kterou jsme zaslali na: +topBar.iDontHave=Nemám ověřovací e-mail +topBar.clickTheButton=Klikněte na tlačítko níže a my vám zašleme nový. +topBar.visitOur=Navštivte naši +topBar.knowledge=znalostní bázi +topBar.baseOrContact=nebo kontaktujte tým podpory na +topBar.weHaveSent=Na každou z vašich registrovaných e-mailových adres jsme zaslali ověřovací zprávy. Než budete moci začít ručně přidávat informace do svého záznamu ORCID, budete muset ověřit svou primární e-mailovou adresu. +topBar.thankYouForRegistering=Děkujeme za registraci u ORCID +topBar.ifYouBelieveWasLockedInError=pokud se domníváte, že tento účet byl uzamčen omylem. +topBar.accountHasBeenLocked=Váš účet byl uzamčen +topBar.pleasContact=Prosím, kontaktujte +topBar.orcidSupport=ORCID podpora +topBar.isThisYou=Jste to vy? +topBar.signInToStart=Přihlásit a zahájit úpravy +topBar.lockedRecord=Tento účet ORCID je dočasně zamčený +topBar.deactivatedRecord=Tento ORCID záznam je deaktivován +topBar.accountDeprecated=Tento účet se již nepoužívá, viz účet +topBar.accountDeprecated2=pro poslední informace +topBar.youAreManaging=Tento záznam v ORCID spravujete jako ověřený jednotlivec +topBar.youAreManagingSomeElse=Spravujete tento záznam ORCID +topBar.youArePreviewingSomeElse=Zobrazujete si náhled veřejné verze vašeho záznamu +topBar.youArePreviewing=Zobrazujete náhled veřejné verze tohoto záznamu +topBar.editThisRecord=Upravit tento záznam +topBar.otherNames=Další jména +topBar.name=Jméno +topBar.printableVersion=Verze pro tisk diff --git a/src/locale/properties/top-bar/top-bar.en.properties b/src/locale/properties/top-bar/top-bar.en.properties index cde1af6501..b82872295d 100644 --- a/src/locale/properties/top-bar/top-bar.en.properties +++ b/src/locale/properties/top-bar/top-bar.en.properties @@ -1,22 +1,24 @@ topBar.names=Names topBar.biography=Biography topBar.publishedName=Published name +topBar.yourPublishedName=Your published name topBar.alsoKnowAs=Also known as -topBar.otherNames=Other names topBar.addYourBiography=Add you biography topBar.addGivenName=Add given name topBar.addFamilyName=Add family name topBar.addPublishedName=Add a published or credit name topBar.addOtherName=Add other name topBar.information=Information about yourself, your research interests and other pertinent details that enhance your ORCID record. -topBar.givenAndFamilyNames=Given and family names -topBar.yourGivenAndFamilyNames=Your given and family names. These are used on your ORCID record by default. +topBar.yourNames=Your names +topBar.yourGivenAndFamilyNames=Your given and family names +topBar.orcidHasANumber=ORCID has a number of options for adding and managing your names. +topBar.findOutMore=Find out more about managing names in your ORCID record topBar.givenNames=Given names topBar.firstNameError=Please enter your first/given name topBar.invalidName=Invalid name characters or format topBar.invalidBio=Invalid characters or format topBar.familyNames=Family names -topBar.preferredNameFormat=Your preferred name format and structure. If added the published name will be used instead of your given and family names. +topBar.howYouPreferYourName=How you prefer your name to appear when credited. Adding a published name lets you control how your name is displayed in your ORCID record. topBar.youCanFormat=You can format this name however you wish topBar.otherVariants=You can add variants of your name, such as an abbreviated first name, middle names, former names or names in a different character set or language. Adding other names can help people find your record when they search the ORCID registry. topBar.addAnotherName=Add another name @@ -29,6 +31,7 @@ topBar.addAnotherLink=Add another link topBar.description=Link Title topBar.url=Link URL topBar.invalidURL=Invalid URL +topBar.urlMaxLength=Must be less than 355 characters topBar.requiredURL=An URL is required topBar.urlDuplicated=URL can not be duplicated topBar.keyword=Keyword @@ -37,3 +40,38 @@ topBar.myKeywords=My keywords topBar.keywordsAre=Keywords are words or phrases which describe your research activities. Adding keywords can help people find you when searching the ORCID registry. topBar.addAnotherKeyword=Add another keyword topBar.addKeyword=Add a keyword +topBar.keywordMaxLength=Must be less than 100 characters +topBar.whoCanSeeYourNames=Who can see your names +topBar.manageWhoCanSee=Control who can see your given, family and published names by setting the visibility. The default visibility for your names is +topBar.addOtherNames=Add other names you may be known by. These can include abbreviated names, middle names, former names or names in a different character set or language. Adding other names can help people find your record when they search the ORCID registry. +topBar.namesMaxLenght=Must be less than 100 characters +topBar.otherNamesMaxLenght=Must be less than 255 characters +topBar.resendVerificationEmail=Resend verification email +topBar.pleaseVerifyYourPrimary=Please verify your primary email address +topBar.youNeedToVerify=You need to verify your primary email address in order to access all of ORCID’s editing features. +topBar.toVerifyYourEmail=To verify your email please click the link in the message we have sent to: +topBar.iDontHave=I don’t have the verification email +topBar.clickTheButton=Click the button below and we will send you a new one. +topBar.visitOur=Visit our +topBar.knowledge=knowledge base +topBar.baseOrContact=or contact the support team at +topBar.weHaveSent=We have sent verification messages to each of your registered email addresses. You will need to verify your primary email address before you can begin adding information manually to your ORCID record. +topBar.thankYouForRegistering=Thank you for registering with ORCID +topBar.ifYouBelieveWasLockedInError=if you believe this account was locked in error. +topBar.accountHasBeenLocked=Your account has been locked +topBar.pleasContact=Please contact +topBar.orcidSupport=ORCID support +topBar.isThisYou=Is this you? +topBar.signInToStart=Sign in to start editing +topBar.lockedRecord=This ORCID Record is locked +topBar.deactivatedRecord=This ORCID Record is deactivated +topBar.accountDeprecated=This account has been deprecated, please see account +topBar.accountDeprecated2=for the latest information +topBar.youAreManaging=You are managing this ORCID record as a trusted individual +topBar.youAreManagingSomeElse=You are managing your ORCID record +topBar.youArePreviewingSomeElse=You are previewing the public version of your record +topBar.youArePreviewing=You are previewing a public version of this record +topBar.editThisRecord=Edit this record +topBar.otherNames=Other names +topBar.name=Name +topBar.printableVersion=Printable version diff --git a/src/locale/properties/top-bar/top-bar.es.properties b/src/locale/properties/top-bar/top-bar.es.properties index e457a31071..94a9376e6c 100644 --- a/src/locale/properties/top-bar/top-bar.es.properties +++ b/src/locale/properties/top-bar/top-bar.es.properties @@ -1,22 +1,24 @@ topBar.names=Nombres topBar.biography=Biografía topBar.publishedName=Nombre en publicación +topBar.yourPublishedName=Su nombre publicado topBar.alsoKnowAs=También conocido como -topBar.otherNames=Otros nombres topBar.addYourBiography=Agregue su biografía topBar.addGivenName=Agregar nombre de pila topBar.addFamilyName=Agregar apellido topBar.addPublishedName=Agregar nombre publicado o en créditos topBar.addOtherName=Agregar otro nombre topBar.information=Información sobre usted, sus intereses investigativos y otros detalles pertinentes que mejoran su registro en ORCID. -topBar.givenAndFamilyNames=Nombre(s) y apellido(s) +topBar.yourNames=Sus nombres topBar.yourGivenAndFamilyNames=Sus nombre(s) y apellido(s). Estos se utilizan en su registro en ORCID de forma predeterminada. +topBar.orcidHasANumber=ORCID tiene varias opciones para añadir y administrar los nombres. +topBar.findOutMore=Obtenga más información sobre cómo administrar nombres en su registro de ORCID topBar.givenNames=Nombre(s) topBar.firstNameError=Introduzca su nombre de pila topBar.invalidName=Caracteres o formato del nombre no válidos topBar.invalidBio=Caracteres o formato no válidos topBar.familyNames=Apellidos -topBar.preferredNameFormat=El formato y la estructura preferidos para mostrar su nombre. En caso de agregarse, se utilizará el nombre publicado en lugar de sus nombre(s) y apellido(s). +topBar.howYouPreferYourName=Cómo prefiere que aparezca su nombre cuando se le acredite. Añadir un nombre le permite controlar cómo se muestra su nombre en su registro de ORCID. topBar.youCanFormat=Puede dar el formato que desee a este nombre topBar.otherVariants=Puede agregar variantes de su nombre, como un nombre abreviado, su segundo nombre, nombres anteriores o nombres en un juego de caracteres o idioma diferentes. Agregar otros nombres puede ayudar a las personas a encontrar su registro cuando busquen en el registro de ORCID. topBar.addAnotherName=Agregar otro nombre @@ -29,6 +31,7 @@ topBar.addAnotherLink=Agregar otro enlace topBar.description=Descripción topBar.url=URL topBar.invalidURL=URL inválida +topBar.urlMaxLength=Debe tener menos de 355 caracteres topBar.requiredURL=Se requiere una URL topBar.urlDuplicated=La URL no se puede duplicar topBar.keyword=Palabra clave @@ -37,3 +40,38 @@ topBar.myKeywords=Mis palabras clave topBar.keywordsAre=Las palabras clave son palabras o frases que describen sus actividades de investigación. Agregar palabras clave puede ayudar a otras personas a encontrarle cuando busquen en el registro de ORCID. topBar.addAnotherKeyword=Agregar otra palabra clave topBar.addKeyword=Agregar palabra clave +topBar.keywordMaxLength=Debe tener menos de 100 caracteres +topBar.whoCanSeeYourNames=¿Quién puede ver sus nombres? +topBar.manageWhoCanSee=Controle quién puede ver su nombre de pila, su apellido y su nombre en publicaciones mediante los ajustes de visibilidad. La visibilidad predeterminada de estos es +topBar.addOtherNames=Añada otros nombres por los que se le pueda conocer. Pueden incluir diminutivos, segundos nombres, nombres anteriores o nombres con un juego de caracteres o idioma diferente. Añadir otros nombres puede ayudar a las personas a encontrar su registro cuando busquen en el registro ORCID. +topBar.namesMaxLenght=Debe tener menos de 100 caracteres +topBar.otherNamesMaxLenght=Debe contener menos de 255 caracteres +topBar.resendVerificationEmail=Reenviar correo electrónico de verificación +topBar.pleaseVerifyYourPrimary=Verifique su dirección de correo electrónico principal +topBar.youNeedToVerify=Debe verificar su dirección de correo electrónico principal para acceder a todas las funcionalidades de edición de ORCID. +topBar.toVerifyYourEmail=Para verificar el correo electrónico, haga clic en el enlace del mensaje que hemos enviado a: +topBar.iDontHave=No tengo el correo electrónico de verificación +topBar.clickTheButton=Haga clic en el botón siguiente y le enviaremos uno nuevo. +topBar.visitOur=Visite nuestro +topBar.knowledge=base de conocimientos +topBar.baseOrContact=o contacte con el equipo de asistencia en +topBar.weHaveSent=Hemos enviado mensajes de verificación a cada una de sus direcciones de correo electrónico registradas. Deberá verificar su dirección de correo electrónico principal antes de poder empezar a añadir información manualmente a su registro ORCID. +topBar.thankYouForRegistering=Gracias por registrarse en ORCID +topBar.ifYouBelieveWasLockedInError=si cree que esta cuenta se bloqueó por error. +topBar.accountHasBeenLocked=Su cuenta ha sido bloqueada +topBar.pleasContact=Póngase en contacto con el +topBar.orcidSupport=Ayuda de ORCID +topBar.isThisYou=¿Es usted? +topBar.signInToStart=Inicie sesión para empezar a editar +topBar.lockedRecord=Este registro ORCID está bloqueado temporalmente +topBar.deactivatedRecord=Este registro ORCID está desactivado +topBar.accountDeprecated=Esta cuenta ha sido relegada, por favor consulte la cuenta +topBar.accountDeprecated2=para ver la información más actualizada +topBar.youAreManaging=Está gestionando este registro de ORCID como una persona de confianza +topBar.youAreManagingSomeElse=Está gestionando su registro de ORCID +topBar.youArePreviewingSomeElse=Está obteniendo una vista previa de la versión pública de su registro +topBar.youArePreviewing=Está viendo una vista previa de una versión pública de este registro +topBar.editThisRecord=Editar este registro +topBar.otherNames=Otros nombres +topBar.name=Nombre +topBar.printableVersion=Versión imprimible diff --git a/src/locale/properties/top-bar/top-bar.fr.properties b/src/locale/properties/top-bar/top-bar.fr.properties index 74a62e3310..ca980fec68 100644 --- a/src/locale/properties/top-bar/top-bar.fr.properties +++ b/src/locale/properties/top-bar/top-bar.fr.properties @@ -1,22 +1,24 @@ topBar.names=Noms topBar.biography=Biographie topBar.publishedName=Nom publié +topBar.yourPublishedName=Votre nom publié topBar.alsoKnowAs=Également appelé -topBar.otherNames=Autres noms topBar.addYourBiography=Ajoutez votre biographie topBar.addGivenName=Ajouter un prénom topBar.addFamilyName=Ajouter un nom de famille topBar.addPublishedName=Ajouter un nom publié ou crédité topBar.addOtherName=Ajouter un autre nom topBar.information=Des informations sur vous-même, vos intérêts de recherche et d'autres renseignements pertinents qui enrichissent votre dossier ORCID. -topBar.givenAndFamilyNames=Prénoms et noms de famille +topBar.yourNames=Vos noms topBar.yourGivenAndFamilyNames=Votre prénom et votre nom de famille. Ils sont utilisés par défaut dans votre dossier ORCID. +topBar.orcidHasANumber=ORCID dispose d'un certain nombre d'options pour ajouter et gérer vos noms. +topBar.findOutMore=En savoir plus sur la gestion des noms dans votre dossier ORCID topBar.givenNames=Prénoms topBar.firstNameError=Veuillez indiquer votre prénom. topBar.invalidName=Format ou caractères du nom invalide topBar.invalidBio=Caractères ou format non valides topBar.familyNames=Noms de famille -topBar.preferredNameFormat=Le format et la structure du nom que vous préférez. Si vous ajoutez le nom publié, il sera utilisé à la place de votre nom et prénom. +topBar.howYouPreferYourName=La façon dont vous préférez que votre nom apparaisse lorsqu'il est mentionné. L'ajout d'un nom publié vous permet de contrôler la façon dont votre nom est affiché dans votre dossier ORCID. topBar.youCanFormat=Vous pouvez formater ce nom comme vous le souhaitez topBar.otherVariants=Vous pouvez ajouter des variantes de votre nom, comme un prénom abrégé, des deuxièmes prénoms, des noms antérieurs ou des noms dans un jeu de caractères ou une langue différents. L'ajout d'autres noms peut aider les gens à trouver votre dossier lorsqu'ils font une recherche dans le registre ORCID. topBar.addAnotherName=Ajouter un autre nom @@ -29,6 +31,7 @@ topBar.addAnotherLink=Ajouter un autre lien topBar.description=Titre du lien topBar.url=URL du lien topBar.invalidURL=URL non valide +topBar.urlMaxLength=Doit compter moins de 355 caractères topBar.requiredURL=Une URL est requise topBar.urlDuplicated=L'URL ne peut pas être dupliquée topBar.keyword=Mot clé @@ -37,3 +40,38 @@ topBar.myKeywords=Mes mots-clés topBar.keywordsAre=Les mots-clés sont des mots ou des phrases qui décrivent vos activités de recherche. L'ajout de mots-clés peut aider les gens à vous trouver lors d'une recherche dans le registre ORCID. topBar.addAnotherKeyword=Ajouter un autre mot-clé topBar.addKeyword=Ajoutez un mot-clé +topBar.keywordMaxLength=Doit compter moins de 100 caractères +topBar.whoCanSeeYourNames=Qui peut voir vos noms +topBar.manageWhoCanSee=Contrôlez qui peut voir vos prénom, nom de famille et nom publié en paramétrant la visibilité. La visibilité par défaut de vos noms est : +topBar.addOtherNames=Ajoutez les autres noms sous lesquels vous pouvez être connu(e). Cela peut comprendre des noms abrégés, des deuxièmes prénoms, des anciens noms ou des noms dans un jeu de caractères ou une langue différents. L'ajout des autres noms peut aider les gens à trouver votre dossier lorsqu'ils font une recherche dans le registre d'ORCID. +topBar.namesMaxLenght=Doit compter moins de 100 caractères +topBar.otherNamesMaxLenght=Doit compter moins de 255 caractères +topBar.resendVerificationEmail=Renvoyer courriel de vérification +topBar.pleaseVerifyYourPrimary=Veuillez procéder à la vérification de votre adresse e-mail principale. +topBar.youNeedToVerify=Vous devez vérifier votre adresse e-mail principale pour avoir accès à toutes les fonctionnalités d'édition d'ORCID. +topBar.toVerifyYourEmail=Pour procéder à la vérification de votre adresse e-mail, veuillez cliquer sur le lien contenu dans le message que nous avons envoyé à : +topBar.iDontHave=Je n'ai pas reçu l'e-mail de vérification. +topBar.clickTheButton=Cliquez sur le bouton ci-dessous, et nous vous en enverrons un nouveau. +topBar.visitOur=Rendez-vous sur notre +topBar.knowledge=base de connaissances +topBar.baseOrContact=ou contacter l'équipe d'assistance à +topBar.weHaveSent=Nous avons envoyé des messages de vérification à chacune de vos adresses e-mails enregistrées. Vous allez devoir procéder à la vérification de votre adresse e-mail principale avant de pouvoir commencer à ajouter manuellement des informations dans votre dossier ORCID. +topBar.thankYouForRegistering=Merci de vous être inscrit(e) à ORCID. +topBar.ifYouBelieveWasLockedInError=si vous pensez que ce compte a été verrouillé par erreur. +topBar.accountHasBeenLocked=Votre compte a été bloqué +topBar.pleasContact=Veuillez contacter +topBar.orcidSupport=Assistance d'ORCID +topBar.isThisYou=S'agit-il de vous ? +topBar.signInToStart=Connectez-vous pour commencer à modifier +topBar.lockedRecord=Ce dossier ORCID est temporairement bloqué +topBar.deactivatedRecord=Ce dossier ORCID est désactivé +topBar.accountDeprecated=Ce compte a été rendu obsolète, veuillez consulter le compte +topBar.accountDeprecated2=pour avoir les dernières informations +topBar.youAreManaging=Vous gérez ce dossier ORCID en tant que personne de confiance. +topBar.youAreManagingSomeElse=Vous gérez votre dossier ORCID +topBar.youArePreviewingSomeElse=Vous visualisez la version publique de votre dossier +topBar.youArePreviewing=Vous visualisez une version publique de ce dossier. +topBar.editThisRecord=Modifier ce dossier +topBar.otherNames=Autres noms +topBar.name=Nom +topBar.printableVersion=Version imprimable diff --git a/src/locale/properties/top-bar/top-bar.it.properties b/src/locale/properties/top-bar/top-bar.it.properties index ebecbc5ec9..0da9b8a958 100644 --- a/src/locale/properties/top-bar/top-bar.it.properties +++ b/src/locale/properties/top-bar/top-bar.it.properties @@ -1,22 +1,24 @@ topBar.names=Nomi topBar.biography=Biografia topBar.publishedName=Nome pubblicato +topBar.yourPublishedName=Il tuo nome per le pubblicazioni topBar.alsoKnowAs=Conosciuto anche come -topBar.otherNames=Altri nomi topBar.addYourBiography=Aggiungi la tua biografia topBar.addGivenName=Aggiungi nome topBar.addFamilyName=Aggiungi cognome topBar.addPublishedName=Aggiungi un nome pubblicato o di attribuzione topBar.addOtherName=Aggiungi un altro nome topBar.information=Informazioni su te stesso, sui tuoi interessi di ricerca e altri dettagli pertinenti che migliorano il tuo record ORCID. -topBar.givenAndFamilyNames=Nomi e cognomi +topBar.yourNames=I tuoi nomi topBar.yourGivenAndFamilyNames=I tuoi nomi e cognomi. Vengono usati automaticamente per il tuo record ORCID. +topBar.orcidHasANumber=ORCID offre diverse opzioni per aggiungere e gestire i tuoi nomi. +topBar.findOutMore=Scopri di più su come gestire i nomi nel tuo record ORCID topBar.givenNames=Nome topBar.firstNameError=Inserisci il tuo nome di battesimo topBar.invalidName=Caratteri o formato del nome non validi topBar.invalidBio=Caratteri o formato non valido topBar.familyNames=Cognomi -topBar.preferredNameFormat=La struttura e il formato del tuo nome preferito. Se lo hai aggiunto, il tuo nome per le pubblicazioni verrà usato al posto dei tuoi nomi e cognomi. +topBar.howYouPreferYourName=Come vuoi che venga presentato il tuo nome sulla pubblicazione. Aggiungendo un nome di pubblicazione potrai controllare come viene mostrato il tuo nome nel tuo record ORCID. topBar.youCanFormat=Puoi scegliere la formattazione che preferisci per il tuo nome topBar.otherVariants=Puoi aggiungere delle varianti del tuo nome, per esempio il nome abbreviato, il secondo nome, nomi passati o nomi con caratteri o in lingue diversi. Aggiungendo nuovi nomi sarà più facile per gli altri trovare il tuo record quando cercano nel registro ORCID. topBar.addAnotherName=Aggiungi un altro nome @@ -29,6 +31,7 @@ topBar.addAnotherLink=Aggiungi un altro link topBar.description=Titolo link topBar.url=URL Link topBar.invalidURL=URL non valido +topBar.urlMaxLength=Deve contenere meno di 355 caratteri topBar.requiredURL=L'URL è obbligatoria topBar.urlDuplicated=Non è possibile duplicare l'URL topBar.keyword=Parola chiave @@ -37,3 +40,38 @@ topBar.myKeywords=Le mie parole chiave topBar.keywordsAre=Le parole chiave sono parole o frasi che descrivono le tue attività di ricerca. Aggiungere le parole chiave può aiutare gli altri a trovarti quando cercano nel registro ORCID. topBar.addAnotherKeyword=Aggiungi un'altra parola chiave topBar.addKeyword=Aggiungi una parola chiave +topBar.keywordMaxLength=Deve contenere meno di 100 caratteri +topBar.whoCanSeeYourNames=Chi può vedere i tuoi nomi +topBar.manageWhoCanSee=Controlla chi può visualizzare il tuo nome proprio, il cognome e la denominazione pubblica impostandone la visibilità. La visibilità di default dei tuoi nomi è +topBar.addOtherNames=Aggiungi gli altri nomi con i quali sei conosciuto. Puoi includere nomi abbreviati, secondi nomi, nomi che non usi più o nomi in alfabeti o lingue diversi. Aggiungendo altri nomi, le persone potranno trovare più facilmente il tuo record quando ti cercano nel registro ORCID. +topBar.namesMaxLenght=Deve contenere meno di 100 caratteri +topBar.otherNamesMaxLenght=Deve essere inferiore a 255 caratteri +topBar.resendVerificationEmail=Reinvia email di verifica +topBar.pleaseVerifyYourPrimary=Verifica il tuo indirizzo email primario +topBar.youNeedToVerify=Devi verificare il tuo indirizzo email principale per poter accedere a tutte le funzionalità di modifica di ORCID. +topBar.toVerifyYourEmail=Per verificare il tuo indirizzo email fai clic sul link contenuto nel messaggio che abbiamo inviato a: +topBar.iDontHave=Non ho l'email di verifica +topBar.clickTheButton=Fai clic sul pulsante qui sotto e te ne invieremo uno nuovo. +topBar.visitOur=Visita il nostro +topBar.knowledge=sezione Knowledgebase +topBar.baseOrContact=oppure contatta il team di supporto al +topBar.weHaveSent=Abbiamo inviato un messaggio di verifica a ciascuno dei tuoi indirizzi email registrati. Devi verificare il tuo indirizzo email principale prima di poter aggiungere manualmente le informazioni al tuo record ORCID. +topBar.thankYouForRegistering=Grazie per esserti registrato su ORCID +topBar.ifYouBelieveWasLockedInError=se pensi che questo account sia stato bloccato per errore. +topBar.accountHasBeenLocked=La tua utenza è stata bloccata +topBar.pleasContact=Contatta +topBar.orcidSupport=Supporto ORCID +topBar.isThisYou=Sei tu?\n +topBar.signInToStart=Accedi per iniziare a modificare\n +topBar.lockedRecord=Questo record ORCID è temporaneamente bloccato +topBar.deactivatedRecord=Questo record ORICD è stato disattivato +topBar.accountDeprecated=Questa utenza non è più funzionante, vai a questa utenza +topBar.accountDeprecated2=per informazioni più recenti +topBar.youAreManaging=Stai gestendo questo registro ORCID in qualità di persona di fiducia\n +topBar.youAreManagingSomeElse=Stai gestendo il tuo registro ORCID +topBar.youArePreviewingSomeElse=Stai visualizzando in anteprima la versione pubblica del tuo registro +topBar.youArePreviewing=Stai vedendo in anteprima una versione pubblica di questo documento +topBar.editThisRecord=Modifica questa registrazione +topBar.otherNames=Altri nomi +topBar.name=Nome +topBar.printableVersion=Versione stampabile diff --git a/src/locale/properties/top-bar/top-bar.ja.properties b/src/locale/properties/top-bar/top-bar.ja.properties index 062358807d..bbf2a8ea44 100644 --- a/src/locale/properties/top-bar/top-bar.ja.properties +++ b/src/locale/properties/top-bar/top-bar.ja.properties @@ -1,22 +1,24 @@ topBar.names=名前 topBar.biography=経歴 topBar.publishedName=公開名 +topBar.yourPublishedName=あなたの公開名 topBar.alsoKnowAs=別名 -topBar.otherNames=その他の名前 topBar.addYourBiography=バイオグラフィーを追加 topBar.addGivenName=下の名前を追加 topBar.addFamilyName=名字を追加 topBar.addPublishedName=公開名またはクレジット名を追加 topBar.addOtherName=別の名前を追加 topBar.information=あなた自身、あなたの研究の関心、およびあなたのORCIDレコードを強化する、その他の関連する詳細に関する情報。 -topBar.givenAndFamilyNames=下の名前と名字 +topBar.yourNames=あなたの名前 topBar.yourGivenAndFamilyNames=あなたの下の名前と名字。これらは、デフォルトでORCIDレコードで使用されます。 +topBar.orcidHasANumber=ORCIDには、名前を追加および管理するためのたくさんのオプションがあります。 +topBar.findOutMore=ORCIDレコードでの名前の管理について、詳しくはこちらをご覧ください topBar.givenNames=名 topBar.firstNameError=名前を入力してください topBar.invalidName=名前の文字またはフォーマットが不正です topBar.invalidBio=無効な文字または形式です topBar.familyNames=名字 -topBar.preferredNameFormat=あなたの好きな名前の形式と構造。追加された場合、下の名前と名字の代わりに公開された名前が使用されます。 +topBar.howYouPreferYourName=クレジットされたときのお名前の表示方法。公開名を追加すると、ORCIDレコードで名前の表示方法を制御できます。 topBar.youCanFormat=この名前は好きなようにフォーマットできます topBar.otherVariants=省略された下の名前、ミドルネーム、旧姓、または別の文字セットや言語の名前など、名前のバリエーションを追加できます。 他の名前を追加すると他のユーザーがORCIDレジストリを検索する時に、あなたのレコードを見つけやすくなります。 topBar.addAnotherName=別の名前を追加 @@ -29,6 +31,7 @@ topBar.addAnotherLink=別のリンクを追加 topBar.description=リンクのタイトル topBar.url=リンクURL topBar.invalidURL=無効な URL +topBar.urlMaxLength=355文字未満である必要があります topBar.requiredURL=URLが必要です topBar.urlDuplicated=URLを複製することはできません topBar.keyword=キーワード @@ -37,3 +40,38 @@ topBar.myKeywords=マイキーワード topBar.keywordsAre=キーワードは、あなたの研究アクティビティを説明する単語やフレーズです。キーワードを追加すると、他のユーザーがORCIDレジストリを検索する時にあなたを見つけやすくなります。 topBar.addAnotherKeyword=別のキーワードを追加 topBar.addKeyword=キーワードを追加 +topBar.keywordMaxLength=100文字未満である必要があります +topBar.whoCanSeeYourNames=誰があなたの名前を見ることができるか +topBar.manageWhoCanSee=可視性を設定することにより、あなたの名字、下の名前、公開された名前を誰が見ることができるかを制御します。名前のデフォルトの可視性は以下の通りです: +topBar.addOtherNames=あなたが知られているかもしれない他の名前を追加します。これらには、略称、ミドルネーム、旧名、または異なる文字セットや言語の名前が含まれます。他の名前を追加することで、ORCIDレジストリを検索するときにあなたのレコードを見つけるのに役立ちます。 +topBar.namesMaxLenght=100文字未満である必要があります +topBar.otherNamesMaxLenght=255 文字未満でなければなりません +topBar.resendVerificationEmail=確認用電子メールの再送 +topBar.pleaseVerifyYourPrimary=メインのメールアドレスを確認してください +topBar.youNeedToVerify=ORCIDのすべての編集機能にアクセスするには、メインのメールアドレスを確認する必要があります。 +topBar.toVerifyYourEmail=あなたの電子メールを確認するには、弊社が次の送信先に送ったメッセージ内のリンクをクリックしてください: +topBar.iDontHave=認証メールがありません +topBar.clickTheButton=下のボタンをクリックすると、新しいものをお送りします。 +topBar.visitOur=ご覧ください +topBar.knowledge=参照するか +topBar.baseOrContact=または、サポートチームまでお問い合わせください +topBar.weHaveSent=ご登録いただいた各メールアドレスに確認メッセージを送信しました。ORCIDレコードに手動で情報を追加し始める前に、メインのメールアドレスを確認する必要があります。 +topBar.thankYouForRegistering=ORCIDにご登録いただきありがとうございます +topBar.ifYouBelieveWasLockedInError=このアカウントが誤ってロックされたと思われる場合。 +topBar.accountHasBeenLocked=あなたのアカウントはロックされています +topBar.pleasContact=このアカウントが誤ってロックされていると思われる場合は、 +topBar.orcidSupport=ORCIDサポート +topBar.isThisYou=これはあなたですか? +topBar.signInToStart=サインインして編集を開始 +topBar.lockedRecord=この ORCID レコードは一時的にロックされています +topBar.deactivatedRecord=このORCIDレコードは非アクティブになっています +topBar.accountDeprecated=このアカウントは置き換えられました。アカウントで +topBar.accountDeprecated2=最新情報をご確認ください +topBar.youAreManaging=このORCIDレコードを、信頼できる個人として管理しています +topBar.youAreManagingSomeElse=ORCIDレコードを管理しています +topBar.youArePreviewingSomeElse=レコードの公開バージョンをプレビューしています +topBar.youArePreviewing=このレコードの公開バージョンをプレビューしています +topBar.editThisRecord=このレコードを編集 +topBar.otherNames=その他の名前 +topBar.name=名前 +topBar.printableVersion=印刷可能バージョン diff --git a/src/locale/properties/top-bar/top-bar.ko.properties b/src/locale/properties/top-bar/top-bar.ko.properties index 3a500aec83..77da42d756 100644 --- a/src/locale/properties/top-bar/top-bar.ko.properties +++ b/src/locale/properties/top-bar/top-bar.ko.properties @@ -1,22 +1,24 @@ topBar.names=이름 topBar.biography=자기소개 topBar.publishedName=게시할 이름 +topBar.yourPublishedName=출판된 이름 topBar.alsoKnowAs=다른 이름 -topBar.otherNames=다른 이름들 topBar.addYourBiography=자기소개 추가 topBar.addGivenName=이름 추가 topBar.addFamilyName=성 추가 topBar.addPublishedName=게시할 이름이나 신용 이름을 추가 topBar.addOtherName=다른 이름 추가 topBar.information=본인에 관한 정보, 연구 관심사 및 ORCID 기록을 향상시키는 기타 관련 세부 정보. -topBar.givenAndFamilyNames=성과 이름 +topBar.yourNames=이름 topBar.yourGivenAndFamilyNames=귀하의 성과 이름. 이는 ORCID 기록에 기본적으로 사용됩니다. +topBar.orcidHasANumber=ORCID는 이름을 추가하고 관리하기 위한 다양한 옵션을 갖추고 있습니다. +topBar.findOutMore=ORCID 기록에서 이름 관리하는 법 더 찾아보기 topBar.givenNames=이름 topBar.firstNameError=이름을 입력하십시오 topBar.invalidName=잘못된 이름 문자 또는 형식 topBar.invalidBio=잘못된 문자 또는 형식 topBar.familyNames=성 -topBar.preferredNameFormat=선호하는 이름 형식 및 구조. 게시할 이름을 추가하면 원래의 성과 이름 대신 그 이름이 사용됩니다. +topBar.howYouPreferYourName=이름이 입력되었을 때 표시되는 방식을 고르세요. 출판된 이름을 추가하면 ORCID 기록에 이름이 표시되는 방식을 관리할 수 있습니다. topBar.youCanFormat=원하는 대로 이 이름의 형식을 지정할 수 있습니다 topBar.otherVariants=축약된 이름, 중간 이름, 이전 이름 ​​또는 다른 문자 집합이나 언어로 된 이름과 같은 다양한 이름을 추가할 수 있습니다. 다른 이름을 추가하면 사람들이 ORCID 레지스트리를 검색할 때 귀하의 기록을 찾는 데 도움이 됩니다. topBar.addAnotherName=다른 이름 추가 @@ -29,6 +31,7 @@ topBar.addAnotherLink=다른 링크 추가 topBar.description=링크 제목 topBar.url=링크 URL topBar.invalidURL=잘못된 URL +topBar.urlMaxLength=355자 미만이어야 합니다. topBar.requiredURL=URL이 필요함 topBar.urlDuplicated=URL은 중복이 불가합니다 topBar.keyword=키워드 @@ -37,3 +40,38 @@ topBar.myKeywords=내 키워드 topBar.keywordsAre=키워드는 연구 활동을 설명하는 단어 또는 구문입니다. 키워드를 추가하면 사람들이 ORCID 레지스트리를 검색할 때 귀하를 찾는 데 도움이 됩니다. topBar.addAnotherKeyword=다른 키워드 추가 topBar.addKeyword=키워드 추가 +topBar.keywordMaxLength=100자 미만이어야 합니다 +topBar.whoCanSeeYourNames=당신의 이름을 볼 수 있는 사람 +topBar.manageWhoCanSee=가시성 설정으로 내 이름, 성 및 필명을 누가 볼 수 있는지 조정하세요. 기본 가시성 설정일 때 내 이름은 다음과 같이 표시됩니다 +topBar.addOtherNames=알려진 이름을 추가해 주세요. 약칭, 미들 네임, 이전에 사용한 이름, 다른 언어나 문자로 된 이름 등이 포함됩니다. 다른 이름을 등록해 두면 사용자들이 ORCID 등록 자료를 검색할 때 더 쉽게 찾을 수 있습니다. +topBar.namesMaxLenght=100자 미만이어야 합니다 +topBar.otherNamesMaxLenght=255자 이내이어야 합니다. +topBar.resendVerificationEmail=검증 이메일 다시 보내기 +topBar.pleaseVerifyYourPrimary=기본 이메일 주소를 인증해 주세요 +topBar.youNeedToVerify=ORCID의 모든 편집 기능에 접근하려면 기본 이메일 주소를 인증해야 합니다. +topBar.toVerifyYourEmail=이메일 주소를 인증하려면 다음으로 전송한 메시지의 링크를 클릭해 주세요: +topBar.iDontHave=인증 이메일이 없습니다 +topBar.clickTheButton=아래의 버튼을 클릭하시면 새 것을 보내드리겠습니다. +topBar.visitOur=방문하세요 +topBar.knowledge=기술 자료를 방문하거나 +topBar.baseOrContact=고객 지원팀에게 연락하거나 +topBar.weHaveSent=귀하의 등록된 이메일 주소 중 하나로 인증 메시지를 전송했습니다. 귀하의 ORCD 기록에 수동으로 정보를 추가하기 시작할 수 있기 전에는 주 이메일 주소를 인증하셔야 합니다. +topBar.thankYouForRegistering=ORCID에 등록해 주셔서 감사합니다 +topBar.ifYouBelieveWasLockedInError=이 계정이 오류로 인해 잠겼다고 생각하신다면. +topBar.accountHasBeenLocked=귀하의 계정이 잠겼습니다 +topBar.pleasContact=다음 연락처로 연락을 하십시오. +topBar.orcidSupport=ORCID 지원 +topBar.isThisYou=본인이십니까? +topBar.signInToStart=편집을 시작하기 위해 로그인 +topBar.lockedRecord=본 ORCID 레코드는 일시적으로 잠겼습니다 +topBar.deactivatedRecord=이 ORCID 기록이 비활성화되었습니다 +topBar.accountDeprecated=이 계정은 사용중지되었습니다. +topBar.accountDeprecated2=최신정보를 확인하시기 바랍니다. +topBar.youAreManaging=이 ORCID 기록을 신뢰할 수 있는 개인으로 관리하고 있습니다. +topBar.youAreManagingSomeElse=귀하의 ORCID 기록을 관리하고 있습니다 +topBar.youArePreviewingSomeElse=귀하는 기록의 공개 버전을 프리뷰하고 있습니다. +topBar.youArePreviewing=이 기록의 공개 버전을 프리뷰하고 있습니다 +topBar.editThisRecord=이 기록 수정하기 +topBar.otherNames=다른 이름들 +topBar.name=이름 +topBar.printableVersion=인쇄할 수 있는 버전 diff --git a/src/locale/properties/top-bar/top-bar.lr.properties b/src/locale/properties/top-bar/top-bar.lr.properties index eae806e907..2e88e6bd38 100644 --- a/src/locale/properties/top-bar/top-bar.lr.properties +++ b/src/locale/properties/top-bar/top-bar.lr.properties @@ -1,7 +1,6 @@ topBar.names=LR topBar.biography=LR topBar.alsoKnowAs=LR -topBar.otherNames=LR topBar.givenNames=LR topBar.publishedName=LR topBar.addYourBiography=LR @@ -37,3 +36,56 @@ topBar.addLinksDescription=LR topBar.keywordsAre=LR topBar.addLink=LR topBar.addKeyword=LR +topBar.yourPublishedName=LR +topBar.yourNames=LR +topBar.orcidHasANumber=LR +topBar.findOutMore=LR +topBar.howYouPreferYourName=LR +topBar.whoCanSeeYourNames=LR +topBar.manageWhoCanSee=LR +topBar.addOtherNames=LR +topBar.urlMaxLength=LR +topBar.keywordMaxLength=LR +topBar.namesMaxLenght=LR +topBar.otherNamesMaxLenght=LR +top-bar.resendVerificationEmail=LR +top-bar.pleaseVerifyYourPrimary=LR +top-bar.youNeedToVerify=LR +top-bar.toVerifyYourEmail=LR +top-bar.iDontHave=LR +top-bar.clickTheButton=LR +top-bar.visitOur=LR +top-bar.knowledge=LR +top-bar.baseOrContact=LR +topBar.thankYouForRegistering=LR +topBar.ifYouBelieveWasLockedInError=LR +topBar.accountHasBeenLocked=LR +topBar.pleasContact=LR +topBar.orcidSupport=LR +topBar.isThisYou=LR +topBar.signInToStart=LR +topBar.lockedRecord=LR +topBar.deactivatedRecord=LR +topBar.accountDeprecated=LR +topBar.accountDeprecated2=LR +topBar.youAreManaging=LR +topBar.youAreManagingSomeElse=LR +topBar.youArePreviewingSomeElse=LR +topBar.youArePreviewing=LR +topBar.editThisRecord=LR +topBar.printableVersion=LR +record.names**=LR +topBar.publishedName**=LR +topBar.name=LR +topBar.otherNames=LR +record.biography**=LR +topBar.resendVerificationEmail=LR +topBar.knowledge=LR +topBar.pleaseVerifyYourPrimary=LR +topBar.youNeedToVerify=LR +topBar.toVerifyYourEmail=LR +topBar.iDontHave=LR +topBar.clickTheButton=LR +topBar.visitOur=LR +topBar.baseOrContact=LR +topBar.weHaveSent=LR diff --git a/src/locale/properties/top-bar/top-bar.pt.properties b/src/locale/properties/top-bar/top-bar.pt.properties index 97a790817b..f767f7f39d 100644 --- a/src/locale/properties/top-bar/top-bar.pt.properties +++ b/src/locale/properties/top-bar/top-bar.pt.properties @@ -1,22 +1,24 @@ topBar.names=Nomes topBar.biography=Biografia topBar.publishedName=Nome publicado +topBar.yourPublishedName=O seu nome publicado topBar.alsoKnowAs=Também conhecido como -topBar.otherNames=Outros nomes topBar.addYourBiography=Adiciona a tua biografia topBar.addGivenName=Adiciona o teu primeiro nome topBar.addFamilyName=Adiciona o teu apelido topBar.addPublishedName=Adicionar um nome publicado ou de crédito topBar.addOtherName=Adicionar outro nome topBar.information=Informações sobre si, os seus interesses de investigação e outros detalhes pertinentes que melhoram o seu registo no ORCID. -topBar.givenAndFamilyNames=Nomes próprios e de família +topBar.yourNames=Os seus nomes topBar.yourGivenAndFamilyNames=Os seus nomes próprios e de família. Estes são utilizados no seu registo do ORCID por predefinição. +topBar.orcidHasANumber=O ORCID possui várias opções para adicionar e gerir os seus nomes. +topBar.findOutMore=Saiba mais sobre como gerir os nomes no seu registo ORCID topBar.givenNames=Nomes próprios topBar.firstNameError=Insira o seu primeiro nome/nome próprio topBar.invalidName=Carateres ou formato de nome inválidos topBar.invalidBio=Caracteres ou formato inválidos topBar.familyNames=Nomes de família -topBar.preferredNameFormat=O formato e estrutura do seu nome preferido. Se adicionado o nome publicado é utilizado em vez dos seus nomes próprios e de família. +topBar.howYouPreferYourName=Como prefere que o seu nome apareça quando for creditado. Adicionar um nome publicado permite controlar a forma como o seu nome é exibido no seu registo ORCID. topBar.youCanFormat=Pode formatar este nome como desejar topBar.otherVariants=Pode adicionar variantes do seu nome, tais como um nome próprio abreviado, nomes do meio, nomes anteriores ou nomes num conjunto de caracteres ou linguagem diferente. Adicionar outros nomes pode ajudar as pessoas a encontrar o seu registo quando procuram no registo do ORCID. topBar.addAnotherName=Adicionar outro nome @@ -29,6 +31,7 @@ topBar.addAnotherLink=Adicionar outra hiperligação topBar.description=Título da Hiperligação topBar.url=Associar URL topBar.invalidURL=URL inválida +topBar.urlMaxLength=Deve ter menos de 355 caracteres topBar.requiredURL=É necessário um URL topBar.urlDuplicated=O URL não pode ser duplicado topBar.keyword=Palavra-chave @@ -37,3 +40,38 @@ topBar.myKeywords=Minhas palavras-chave topBar.keywordsAre=As palavras-chave são palavras ou frases que descrevem as suas atividades de investigação. Adicionar palavras-chave pode ajudar as pessoas a encontrá-lo quando pesquisarem no registo do ORCID. topBar.addAnotherKeyword=Adicionar outra palavra-chave topBar.addKeyword=Adicionar uma palavra-chave +topBar.keywordMaxLength=Tem de ter menos de 100 caracteres +topBar.whoCanSeeYourNames=Quem pode ver os seus nomes +topBar.manageWhoCanSee=Controle quem pode ver os seus nomes próprios, familiares e publicados, definindo a visibilidade. A visibilidade predefinida para os seus nomes é +topBar.addOtherNames=Adicione outros nomes pelos quais seja conhecido. Podem incluir nomes abreviados, nomes do meio, nomes antigos ou nomes num conjunto de caracteres ou idioma diferente. Adicionar outros nomes pode ajudar as pessoas a encontrarem o seu registo ao pesquisarem o registo ORCID. +topBar.namesMaxLenght=Deve ter menos de 100 caracteres +topBar.otherNamesMaxLenght=Deve conter menos de 255 caracteres +topBar.resendVerificationEmail=Enviar e-mail de validação novamente +topBar.pleaseVerifyYourPrimary=Verifique o seu endereço de e-mail principal +topBar.youNeedToVerify=Precisa de verificar o seu endereço de e-mail principal para aceder a todos os recursos de edição do ORCID. +topBar.toVerifyYourEmail=Para verificar o seu e-mail, clique na hiperligação da mensagem que enviámos para: +topBar.iDontHave=Não tenho o e-mail de verificação +topBar.clickTheButton=Clique no botão abaixo e enviaremos um novo para si. +topBar.visitOur=Visite o nosso +topBar.knowledge=banco de conhecimento +topBar.baseOrContact=ou contactar a equipa de suporte em +topBar.weHaveSent=Enviamos mensagens de verificação para cada um dos seus endereços de e-mail registados. Precisará de verificar o seu endereço de e-mail principal antes de começar a adicionar informações manualmente ao seu registo ORCID. +topBar.thankYouForRegistering=Obrigado por se registar com o ORCID +topBar.ifYouBelieveWasLockedInError=se acredita que esta conta foi bloqueada por engano. +topBar.accountHasBeenLocked=Sua conta foi trancada +topBar.pleasContact=Contacte +topBar.orcidSupport=Suporte ORCID +topBar.isThisYou=É você? +topBar.signInToStart=Inicie a sessão para começar a editar +topBar.lockedRecord=Esse Registro ORCID está temporariamente trancado +topBar.deactivatedRecord=Este registo ORCID está desativado +topBar.accountDeprecated=Essa conta foi substituída, consulte a conta +topBar.accountDeprecated2=para as informações mais recentes +topBar.youAreManaging=Está a gerir este registo ORCID como um indivíduo de confiança +topBar.youAreManagingSomeElse=Está a gerir o seu registo ORCID +topBar.youArePreviewingSomeElse=Está a visualizar a versão pública do seu registo +topBar.youArePreviewing=Está a visualizar uma versão pública deste registo +topBar.editThisRecord=Editar este registo +topBar.otherNames=Outros nomes +topBar.name=Nome +topBar.printableVersion=Versão para impressão diff --git a/src/locale/properties/top-bar/top-bar.rl.properties b/src/locale/properties/top-bar/top-bar.rl.properties index a5a90d81b8..b67e6e31ab 100644 --- a/src/locale/properties/top-bar/top-bar.rl.properties +++ b/src/locale/properties/top-bar/top-bar.rl.properties @@ -1,7 +1,6 @@ topBar.names=RL topBar.biography=RL topBar.alsoKnowAs=RL -topBar.otherNames=RL topBar.givenNames=RL topBar.publishedName=RL topBar.addYourBiography=RL @@ -37,3 +36,56 @@ topBar.addLinksDescription=RL topBar.keywordsAre=RL topBar.addLink=RL topBar.addKeyword=RL +topBar.yourPublishedName=RL +topBar.yourNames=RL +topBar.orcidHasANumber=RL +topBar.findOutMore=RL +topBar.howYouPreferYourName=RL +topBar.whoCanSeeYourNames=RL +topBar.manageWhoCanSee=RL +topBar.addOtherNames=RL +topBar.urlMaxLength=RL +topBar.keywordMaxLength=RL +topBar.namesMaxLenght=RL +topBar.otherNamesMaxLenght=RL +top-bar.resendVerificationEmail=RL +top-bar.pleaseVerifyYourPrimary=RL +top-bar.youNeedToVerify=RL +top-bar.toVerifyYourEmail=RL +top-bar.iDontHave=RL +top-bar.clickTheButton=RL +top-bar.visitOur=RL +top-bar.knowledge=RL +top-bar.baseOrContact=RL +topBar.thankYouForRegistering=RL +topBar.ifYouBelieveWasLockedInError=RL +topBar.accountHasBeenLocked=RL +topBar.pleasContact=RL +topBar.orcidSupport=RL +topBar.isThisYou=RL +topBar.signInToStart=RL +topBar.lockedRecord=RL +topBar.deactivatedRecord=RL +topBar.accountDeprecated=RL +topBar.accountDeprecated2=RL +topBar.youAreManaging=RL +topBar.youAreManagingSomeElse=RL +topBar.youArePreviewingSomeElse=RL +topBar.youArePreviewing=RL +topBar.editThisRecord=RL +topBar.printableVersion=RL +record.names**=RL +topBar.publishedName**=RL +topBar.name=RL +topBar.otherNames=RL +record.biography**=RL +topBar.resendVerificationEmail=RL +topBar.knowledge=RL +topBar.pleaseVerifyYourPrimary=RL +topBar.youNeedToVerify=RL +topBar.toVerifyYourEmail=RL +topBar.iDontHave=RL +topBar.clickTheButton=RL +topBar.visitOur=RL +topBar.baseOrContact=RL +topBar.weHaveSent=RL diff --git a/src/locale/properties/top-bar/top-bar.ru.properties b/src/locale/properties/top-bar/top-bar.ru.properties index 9a276cdb97..f6aa8ee7be 100644 --- a/src/locale/properties/top-bar/top-bar.ru.properties +++ b/src/locale/properties/top-bar/top-bar.ru.properties @@ -1,22 +1,24 @@ topBar.names=Имена topBar.biography=Биография topBar.publishedName=Опубликованное имя +topBar.yourPublishedName=Ваше публикуемое имя topBar.alsoKnowAs=Также известен как -topBar.otherNames=Другие имена topBar.addYourBiography=Добавьте свою биографию topBar.addGivenName=Добавить имя topBar.addFamilyName=Добавить фамилию topBar.addPublishedName=Добавить опубликованное имя или имя автора topBar.addOtherName=Добавить другое имя topBar.information=Информация о вас, ваших исследовательских интересах и другие соответствующие данные, которые улучшают вашу запись ORCHID. -topBar.givenAndFamilyNames=Имена и фамилии +topBar.yourNames=Ваши имена topBar.yourGivenAndFamilyNames=Ваши имена и фамилии. Они используются в вашей записи ORCHID по умолчанию. +topBar.orcidHasANumber=ORCID имеет несколько опций для добавления и управления вашими именами. +topBar.findOutMore=Узнайте больше об управлении именами в вашей записи ORCID topBar.givenNames=Имя (имена) topBar.firstNameError=Введите Ваше имя topBar.invalidName=Недопустимые символы в имени или формат topBar.invalidBio=Неверные символы или формат topBar.familyNames=Фамилии -topBar.preferredNameFormat=Ваш предпочтительный формат имени и структура. При добавлении опубликованного имени, оно будет использоваться вместо ваших данных и фамилий. +topBar.howYouPreferYourName=Как вы предпочитаете, чтобы ваше имя отображалось при указании обладателя авторских прав. Добавление публикуемого имени позволяет вам контролировать, как ваше имя будет отображаться в вашей записи ORCID. topBar.youCanFormat=Вы можете форматировать это имя так, как вам угодно topBar.otherVariants=Вы можете добавлять варианты своего имени, например сокращенное имя, отчество, прежние имена или имена в другом наборе символов или на другом языке. Добавление других имен может помочь людям найти вашу запись, когда они выполняют поиск по реестру ORCHID. topBar.addAnotherName=Добавить другое имя @@ -29,6 +31,7 @@ topBar.addAnotherLink=Добавить еще одну ссылку topBar.description=Заголовок ссылки topBar.url=URL ссылки topBar.invalidURL=Недействительный URL +topBar.urlMaxLength=Должно быть меньше 355 символов topBar.requiredURL=Требуется URL-адрес topBar.urlDuplicated=URL-адрес нельзя скопировать topBar.keyword=Ключевое слово @@ -37,3 +40,38 @@ topBar.myKeywords=Мои ключевые слова topBar.keywordsAre=Ключевые слова — это слова или фразы, которые описывают вашу научно-исследовательскую деятельность. Добавление ключевых слов может помочь людям найти вас при поиске в реестре ORCID. topBar.addAnotherKeyword=Добавить другое ключевое слово topBar.addKeyword=Добавить ключевое слово +topBar.keywordMaxLength=Должно быть менее 100 символов +topBar.whoCanSeeYourNames=Кто может видеть ваши имена +topBar.manageWhoCanSee=Управляйте тем, кто может видеть ваше имя, фамилию и публикуемое имя, устанавливая видимость. Видимость ваших имен по умолчанию: +topBar.addOtherNames=Добавьте другие имена, под которыми вы можете быть известны. Они могут включать сокращенные имена, отчества, прежние имена или имена на другом наборе символов или на другом языке. Добавление других имен может помочь людям найти вашу запись при поиске в реестре ORCID. +topBar.namesMaxLenght=Должно быть менее 100 символов +topBar.otherNamesMaxLenght=Длина не должна превышать 255 символов +topBar.resendVerificationEmail=Заново отправить электронное письмо с подтверждением +topBar.pleaseVerifyYourPrimary=Подтвердите свой основной адрес электронной почты +topBar.youNeedToVerify=Вы должны подтвердить свой основной адрес эл. почты, чтобы получить доступ ко всем функциям редактирования ORCID. +topBar.toVerifyYourEmail=Для подтверждения своего адреса электронной почты нажмите на ссылку в сообщении, которое мы отправили на: +topBar.iDontHave=У меня нет электронного письма для подтверждения +topBar.clickTheButton=Нажмите кнопку ниже, и мы отправим вам новое. +topBar.visitOur=Посетите наш +topBar.knowledge=базу знаний +topBar.baseOrContact=или обратитесь в службу поддержки по адресу +topBar.weHaveSent=Мы отправили проверочные сообщения на каждый из ваших зарегистрированных адресов электронной почты. Вам нужно будет подтвердить свой основной адрес электронной почты, прежде чем вы сможете вручную добавлять информацию в свою запись ORCID. +topBar.thankYouForRegistering=Благодарим вас за регистрацию в ORCID +topBar.ifYouBelieveWasLockedInError=если вы считаете, что эта учетная запись была заблокирована по ошибке. +topBar.accountHasBeenLocked=Ваша учетная запись заблокирована +topBar.pleasContact=Пожалуйста, свяжитесь +topBar.orcidSupport=Поддержка ORCID +topBar.isThisYou=Это вы? +topBar.signInToStart=Войдите, чтобы начать редактирование +topBar.lockedRecord=Запись ORCID временно заблокирована +topBar.deactivatedRecord=Данная запись ORCID деактивирована +topBar.accountDeprecated=Эта учетная запись была переписана, обратитесь к учетной записи +topBar.accountDeprecated2=для получения актуальных сведений +topBar.youAreManaging=Вы управляете это записью ORCID в качесте доверенного лица +topBar.youAreManagingSomeElse=Вы управляете своей записью ORCID +topBar.youArePreviewingSomeElse=Вы выполняете предварительный просмотр публичной версии вашей записи +topBar.youArePreviewing=Вы выполняется предпросмотр публичной версии этой записи +topBar.editThisRecord=Изменить эту запись +topBar.otherNames=Другие имена +topBar.name=Имя: +topBar.printableVersion=Версия для печати diff --git a/src/locale/properties/top-bar/top-bar.xx.properties b/src/locale/properties/top-bar/top-bar.xx.properties index 14bd491582..4fb434cd81 100644 --- a/src/locale/properties/top-bar/top-bar.xx.properties +++ b/src/locale/properties/top-bar/top-bar.xx.properties @@ -1,7 +1,6 @@ topBar.names=X topBar.biography=X topBar.alsoKnowAs=X -topBar.otherNames=X topBar.givenNames=X topBar.publishedName=X topBar.addYourBiography=X @@ -37,3 +36,56 @@ topBar.addLinksDescription=X topBar.keywordsAre=X topBar.addLink=X topBar.addKeyword=X +topBar.yourPublishedName=X +topBar.yourNames=X +topBar.orcidHasANumber=X +topBar.findOutMore=X +topBar.howYouPreferYourName=X +topBar.whoCanSeeYourNames=X +topBar.manageWhoCanSee=X +topBar.addOtherNames=X +topBar.urlMaxLength=X +topBar.keywordMaxLength=X +topBar.namesMaxLenght=X +topBar.otherNamesMaxLenght=X +top-bar.resendVerificationEmail=X +top-bar.pleaseVerifyYourPrimary=X +top-bar.youNeedToVerify=X +top-bar.toVerifyYourEmail=X +top-bar.iDontHave=X +top-bar.clickTheButton=X +top-bar.visitOur=X +top-bar.knowledge=X +top-bar.baseOrContact=X +topBar.thankYouForRegistering=X +topBar.ifYouBelieveWasLockedInError=X +topBar.accountHasBeenLocked=X +topBar.pleasContact=X +topBar.orcidSupport=X +topBar.isThisYou=X +topBar.signInToStart=X +topBar.lockedRecord=X +topBar.deactivatedRecord=X +topBar.accountDeprecated=X +topBar.accountDeprecated2=X +topBar.youAreManaging=X +topBar.youAreManagingSomeElse=X +topBar.youArePreviewingSomeElse=X +topBar.youArePreviewing=X +topBar.editThisRecord=X +topBar.printableVersion=X +record.names**=X +topBar.publishedName**=X +topBar.name=X +topBar.otherNames=X +record.biography**=X +topBar.resendVerificationEmail=X +topBar.knowledge=X +topBar.pleaseVerifyYourPrimary=X +topBar.youNeedToVerify=X +topBar.toVerifyYourEmail=X +topBar.iDontHave=X +topBar.clickTheButton=X +topBar.visitOur=X +topBar.baseOrContact=X +topBar.weHaveSent=X diff --git a/src/locale/properties/top-bar/top-bar.zh_CN.properties b/src/locale/properties/top-bar/top-bar.zh_CN.properties index 6aa4867c7e..e3cc6372a5 100644 --- a/src/locale/properties/top-bar/top-bar.zh_CN.properties +++ b/src/locale/properties/top-bar/top-bar.zh_CN.properties @@ -1,22 +1,24 @@ topBar.names=姓名 topBar.biography=简历 topBar.publishedName=发布名 +topBar.yourPublishedName=您的发布用姓名 topBar.alsoKnowAs=也称为 -topBar.otherNames=其他姓名 topBar.addYourBiography=添加生平简介 topBar.addGivenName=添加名字 topBar.addFamilyName=添加姓氏 topBar.addPublishedName=添加发布名或信用名称 topBar.addOtherName=添加其他名字 topBar.information=关于您自己、您的研究兴趣和其他可以强化您的 ORCID 记录的相关细节。 -topBar.givenAndFamilyNames=姓名 +topBar.yourNames=您的姓名 topBar.yourGivenAndFamilyNames=您的名字和姓氏。默认情况下,它们将用于您的 ORCID 记录。 +topBar.orcidHasANumber=ORCID 提供多种选项以添加、管理您的名称。 +topBar.findOutMore=了解更多关于管理您 ORCID 记录名称的信息 topBar.givenNames=名字 topBar.firstNameError=请输入您的名字 topBar.invalidName=无效的名字字符或格式 topBar.invalidBio=字符或格式无效 topBar.familyNames=姓氏 -topBar.preferredNameFormat=您首选的名字格式和结构。如果添加发布名,则系统会使用发布名而不使用您的名字和姓氏。 +topBar.howYouPreferYourName=当您获得认证时,您偏好展示的名称。公开添加名称让您能掌控在 ORCID 记录如何显示您的名称。 topBar.youCanFormat=您可以随意对名字进行格式化 topBar.otherVariants=您可以添加别名,例如名字缩写、中间名、以前的名字或不同字符集或语言的名字。添加其他名称可以帮助人们在搜索 ORCID 注册数据库时找到您的记录。 topBar.addAnotherName=添加另一个名字 @@ -29,6 +31,7 @@ topBar.addAnotherLink=添加另一个链接 topBar.description=链接标题 topBar.url=链接网址 topBar.invalidURL=无效 URL +topBar.urlMaxLength=必须少于 355 个字符 topBar.requiredURL=网址为必填项 topBar.urlDuplicated=网址不可复制 topBar.keyword=关键词 @@ -37,3 +40,38 @@ topBar.myKeywords=我的关键字 topBar.keywordsAre=关键字是描述您的研究活动的单词或短语。添加关键字可以帮助人们在搜索 ORCID 注册数据库时找到您。 topBar.addAnotherKeyword=添加另一个关键字 topBar.addKeyword=添加关键字 +topBar.keywordMaxLength=必须少于 100 个字符 +topBar.whoCanSeeYourNames=谁能看见您的姓名 +topBar.manageWhoCanSee=通过设置可见性来控制谁可以看到您的名字、姓氏和发布的名字。您姓名的默认可见性是 +topBar.addOtherNames=您可以添加别名,例如名称缩写、中间名、曾用名或其他语言字符形式的名称。添加其他名称可以帮助人们在搜索 ORCID 注册数据库时找到您的记录。 +topBar.namesMaxLenght=必须少于 100 个字符 +topBar.otherNamesMaxLenght=必须少于 255 个字符 +topBar.resendVerificationEmail=再次发送验证电子邮件 +topBar.pleaseVerifyYourPrimary=请验证您的主要电子邮箱地址 +topBar.youNeedToVerify=您必须验证您的主要电子邮箱地址以使用 ORCID 所有的编辑功能。 +topBar.toVerifyYourEmail=请点击邮件中的链接以验证您的电子邮箱地址,邮件已发送至: +topBar.iDontHave=我没有收到验证邮件 +topBar.clickTheButton=点击下方按钮,我们将重新发送给您一封新邮件。 +topBar.visitOur=访问我们的 +topBar.knowledge=知识库 +topBar.baseOrContact=或与服务团队联系 +topBar.weHaveSent=我们已经向您注册的电子邮箱地址发送了验证信息。在您手动添加信息到您的 ORCID 记录之前,您需要验证电子邮箱地址。 +topBar.thankYouForRegistering=感谢您注册 ORCID +topBar.ifYouBelieveWasLockedInError=若您认为此账号被误封。 +topBar.accountHasBeenLocked=您的帐户已被锁定 +topBar.pleasContact=请联系 +topBar.orcidSupport=ORCID 帮助 +topBar.isThisYou=这是您吗? +topBar.signInToStart=登录以开始编辑 +topBar.lockedRecord=此 ORCID 记录被暂时锁定 +topBar.deactivatedRecord=此 ORCID 记录已注销 +topBar.accountDeprecated=此帐户已弃用,请查看帐户 +topBar.accountDeprecated2=以了解最新信息 +topBar.youAreManaging=您正在以可信个人身份管理此 ORCID 记录 +topBar.youAreManagingSomeElse=您正在管理您的 ORCID 记录 +topBar.youArePreviewingSomeElse=您正在预览您的记录的公开版本 +topBar.youArePreviewing=您正在预览此记录的公开版本 +topBar.editThisRecord=编辑此记录 +topBar.otherNames=其他姓名 +topBar.name=名称 +topBar.printableVersion=可打印版本 diff --git a/src/locale/properties/top-bar/top-bar.zh_TW.properties b/src/locale/properties/top-bar/top-bar.zh_TW.properties index e6104cd988..a711eea9b9 100644 --- a/src/locale/properties/top-bar/top-bar.zh_TW.properties +++ b/src/locale/properties/top-bar/top-bar.zh_TW.properties @@ -1,22 +1,24 @@ topBar.names=姓名 topBar.biography=簡歷 topBar.publishedName=發佈名稱 +topBar.yourPublishedName=您的發佈用姓名 topBar.alsoKnowAs=又稱為 -topBar.otherNames=其他姓名 topBar.addYourBiography=新增您的自傳 topBar.addGivenName=新增名字 topBar.addFamilyName=新增姓氏 topBar.addPublishedName=新增發佈或榮譽名稱 topBar.addOtherName=新增其他名稱 topBar.information=有關您自己、您的研究興趣,和其他加強您的 ORCID 記錄的相關細節的資訊。 -topBar.givenAndFamilyNames=名字和姓氏 +topBar.yourNames=您的姓名 topBar.yourGivenAndFamilyNames=您的名字和姓氏。它們將被預設使用在您的 ORCID 記錄。 +topBar.orcidHasANumber=ORCID 於新增與管理您的姓名時有許多選項。 +topBar.findOutMore=了解更多有關管理您 ORCID 紀錄中姓名的相關幫助 topBar.givenNames=名字 topBar.firstNameError=請輸入您的名字 topBar.invalidName=無效的名稱字元或格式 topBar.invalidBio=無效的字元或格式 topBar.familyNames=姓氏 -topBar.preferredNameFormat=您偏好的名稱格式和結構。若新增,將會使用發佈名稱,而不是您的名字和姓氏。 +topBar.howYouPreferYourName=當您獲得表彰時,您偏好的顯示姓名。新增發佈用姓名讓您能掌控在 ORCID 紀錄中如何顯示您的姓名。 topBar.youCanFormat=您可以任意格式化此名稱 topBar.otherVariants=您可以新增別名,例如名字縮寫、中間名、以前的名字,或不同字元集或語言的名字。新增其他名稱可以幫助人們在搜尋 ORCID 名冊時,找到您的記錄。 topBar.addAnotherName=新增另一個名稱 @@ -29,6 +31,7 @@ topBar.addAnotherLink=新增另一個連結 topBar.description=連結標題 topBar.url=連結 URL topBar.invalidURL=無效 URL +topBar.urlMaxLength=必須少於 355 字 topBar.requiredURL=必須有 URL topBar.urlDuplicated=URL 不能重複 topBar.keyword=關鍵字 @@ -37,3 +40,38 @@ topBar.myKeywords=我的關鍵字 topBar.keywordsAre=關鍵字是描述您的研究活動的文字或片語。新增關鍵字,可以幫助人們在搜尋 ORCID 名冊時找到您。 topBar.addAnotherKeyword=新增另一個關鍵字 topBar.addKeyword=新增關鍵字 +topBar.keywordMaxLength=必須少於 100 字 +topBar.whoCanSeeYourNames=能看見您名字的人 +topBar.manageWhoCanSee=透過設定可見度來控制能看見您名字、姓氏和已公開的姓名之人士。您的姓名預設可見度為 +topBar.addOtherNames=新增其他代表您的姓名。包含您姓名的縮寫、中間名、舊名及以其他字元或語言顯示的姓名。新增其他姓名,能讓其他人在檢索 ORCID 時更容易找到您。 +topBar.namesMaxLenght=必須少於 100 字 +topBar.otherNamesMaxLenght=必須少於 255 個字元 +topBar.resendVerificationEmail=再次傳送驗證電子郵件 +topBar.pleaseVerifyYourPrimary=請驗證您的主要電子郵件地址 +topBar.youNeedToVerify=您必須驗證您的主要電子郵件地址以使用 ORCID 所有的編輯功能。 +topBar.toVerifyYourEmail=請點擊訊息中連結以驗證您的電子郵件地址,訊息已寄送至: +topBar.iDontHave=我沒有收到驗證郵件 +topBar.clickTheButton=點擊下方按鈕,我們將重新發送。 +topBar.visitOur=拜訪我們的 +topBar.knowledge=知識庫 +topBar.baseOrContact=或與協助團隊聯繫 +topBar.weHaveSent=我們已經寄送驗證郵件至您所有的已登錄電子郵件地址。您必須驗證您的主要電子郵件地址,方能手動新增資訊至您的 ORCID 紀錄。 +topBar.thankYouForRegistering=感謝您登錄 ORCID +topBar.ifYouBelieveWasLockedInError=若您認為此帳號遭到誤鎖。 +topBar.accountHasBeenLocked=您的帳戶已被鎖定 +topBar.pleasContact=請聯絡 +topBar.orcidSupport=ORCID 幫助 +topBar.isThisYou=這是您嗎? +topBar.signInToStart=登入以開始編輯 +topBar.lockedRecord=此 ORCID 記錄被暫時鎖定 +topBar.deactivatedRecord=此 ORCID 紀錄已註銷 +topBar.accountDeprecated=此帳戶已被取代,請檢視帳戶 +topBar.accountDeprecated2=以瞭解最新資訊 +topBar.youAreManaging=您正以受託人身份管理此 ORCID 紀錄 +topBar.youAreManagingSomeElse=您正在管理您的 ORCID 紀錄 +topBar.youArePreviewingSomeElse=您正在預覽您的記錄的公開版本 +topBar.youArePreviewing=您正在預覽此筆紀錄的公開版本 +topBar.editThisRecord=編輯此筆紀錄 +topBar.otherNames=其他姓名 +topBar.name=名稱 +topBar.printableVersion=可列印版本 diff --git a/src/locale/properties/works/works.ar.properties b/src/locale/properties/works/works.ar.properties index 5d86274f2d..5a06df297d 100644 --- a/src/locale/properties/works/works.ar.properties +++ b/src/locale/properties/works/works.ar.properties @@ -1,16 +1,39 @@ work.works=أعمال +works.workDetails=تفاصيل العمل +works.identifiers=المعرفات +works.identifier=المعرف works.citation=استشهاد +works.otherInformation=معلومات أخرى +works.selectAWorkCategory=حدد فئة العمل +works.selectACategory=حدد فئة العمل works.workType=نوع العمل +works.selectWorkType=حدد نوع العمل +works.setAWorkTitle=عين عنواناً للعمل works.addTranslatedTitle=أضف عنوان مترجم +works.hideTranslatedTitle=إخفاء عنوان الترجمة +works.translatedTitle=العنوان المترجم +works.subtitle=العنوان الفرعي للعمل +works.invalidUrl=رابط url غير صالح +works.linkMoreInformationAbout=رابط لمزيد من المعلومات حول العمل. يجب أن تكون الروابط بتنسيق URL كامل، على سبيل المثال http://www.website.com/page.html works.citationType=نوع الاستشهاد +works.selectACitation=حدد نوع الاقتباس +works.selectACitationType=حدد نوع الاقتباس +works.describeThisCitation=صِف هذا الاقتباس works.description=الوصف +works.workIds=معرّفات العمل works.type=نوع المعرف +works.selectAnIdentifier=حدد نوع المعرف +works.typeOfIdentifier=نوع المعرف المرتبط بالعمل، مثل ISBN أو DOI أو PMID. works.identifierValue=قيمة المعرف +works.validFormat=معرف غير صالح لنوع المعرف المحدد +works.addADescriber=أضف معرف واصف +works.identifierAssociated=المعرف المرتبط بالعمل. سيعتمد التنسيق على نوع المعرف المحدد. works.relationship=الصلة works.addAnotherId=أضف معرف آخر works.languageUsed=اللغة المستخدمة في هذا النموذج work.countryPublication=بلد النشر works.identifierUrl=رابط المعرف +works.urlIdentifierHint=رابط الـ URL الذي يقود إلى، على سبيل المثال https://doi.org/10.23640/07243.c.4232246 works.abstract=ملخص مؤتمر works.paper=ورقة مؤتمر works.poster=ملصق مؤتمر @@ -18,6 +41,7 @@ works.chapter=فصل من كتاب works.review=نقد كتاب works.book=كتاب works.entry=مدخل قاموس +works.thesis=الرسالة العلمية/الأطروحة works.editedBook=كتاب منقح works.encyclopediaEntry=مدخل موسوعة works.journalArticle=مقال صحفي @@ -34,23 +58,111 @@ works.studentPublication=منشور طلابي تحت الإشراف works.test=اختبار works.translation=ترجمة works.website=موقع الكتروني -works.working paperAA=ورقة عمل +works.working=paperAA=ورقة عمل works.disclosure=كشف works.license=رخصة works.patent=براءة اختراع works.copyright=حقوق طبع ونشر محفوظة works.trademark=علامة تجارية works.annotation=ملاحظات -works.AAA=خطة إدارة البيانات +works.artisticPerformance=أداء فني +works.dataManagementPlan=خطة إدارة البيانات works.plan=مجموعة بيانات works.invention=اختراع +works.speech=خطاب المحاضرة +works.object=شيء مادي works.technique=تقنية بحث +works.software=البرمجيات works.company=شركة متفرعة works.policy=المعايير والسياسة +works.standard=المعيار التقني +works.other=مخرجات أخرى works.self=ذاتي works.partOf=جزء من works.versionOf=إصدار works.fundedBy=ممول من +works.selfDescription=ينطبق المُعرف على العمل نفسه. على سبيل المثال، DOI لفصل ما من كتاب. +works.partOfDescription=ينطبق المعرف على جزء من عمل أكبر. على سبيل المثال، رقم الـ ISBN للكتاب الذي نُشر العمل فيه. +works.versionOfDescription=ينطبق المعرف على نسخة بديلة من العمل. على سبيل المثال، مسودة سابقة لمقال. +works.fundedByDescription=ينطبق المعرف على تمويل العمل. works.conference=مؤتمر works.intellectual=ملكية فكرية works.publication=النشر +works.countryPublication=بلد النشر +works.whoCanSeeWorks=من يمكنه رؤية أعمالك. إعداد إمكانية الرؤية الافتراضي هو "خاص". +works.selectedWorksVisibility=الأعمال المحددة لضبط إعداد إمكانية رؤيتها +works.setVisibility=تعيين إعداد إمكانية رؤية الأعمال المحددة +works.title=عنوان +works.languageOnThisTitle=لغة هذا العنوان +works.link=الرابط +works.unResolved=لم نتمكن من العثور على مورد يتطابق مع المعرّف الذي أدخلته بنجاح. يرجى التحقق من القيمة أو إدخال رابط صالح للمورد. +works.addFromDOI=الأعمال - أضف عملاً من DOI +works.youCanUseFullDOI=يمكنك استخدام عنوان الـ URL الكامل لـ DOI أو قيمة المعرف فحسب. +works.doiIdentifier=قيمة مُعرف DOI أو عنوان URL بالكامل +works.retrieveWorkDOI=استرجع تفاصيل العمل من DOI +works.retrievingWorkDOI=جار استرجاع تفاصيل العمل من DOI +works.detailsFromDOI=تفاصيل العمل من DOI +works.importWork=استيراد عمل إلى سجلك +works.importBibTex=الأعمال - استيراد BibTeX +works.importCitations=استيراد الاقتباسات من ملفات BibTex (.bib)، بما في ذلك الملفات المصدرة من الباحث العلمي من Google. +works.moreInformation=مزيد من المعلومات حول استيراد ملفات BibTeX إلى ORCID +works.chooseBibTex=اختر ملف BibTeX المراد استيراده +works.retrievingWorkBibTex=جارٍ استرجاع الأعمال من BibTeX +works.foundInBibTex=الأعمال التي وجدناها في BibTeX +works.importWorks=استيراد عمل إلى سجلك +works.unableToImport=تعذر الاستيراد باستخدام هذا المعرف. الرجاء إضافة العمل باستخدام خيار مختلف. +works.bibtexImporterParsingError=لا يمكن قراءة هذا الملف. يرجى التحقق من تنسيق BibTeX وإعادة المحاولة. +works.addFromPubMed=الأعمال - أضف عملاً من PubMed +works.typeOrPastePubMed=اكتب أو الصق عنوان الـ URL الكامل لـ pubMed أو قيمة المعرف فحسب +works.pubMedIdentifier=قيمة مُعرف PubMed أو عنوان URL بالكامل +works.retrieveWorkPubMed=استرجع تفاصيل العمل من pubMed +works.urlColon=URL: +works.typeColon=النوع: +works.value=القيمة: +works.all=الكل +works.noItemsSelected=لم يتم تحديد أي مواد. +works.linkWorks=اربط أعمالاً +works.linkWorksMoreInfo=مزيد من المعلومات حول ربط الأعمال بسجلك على ORCID +works.geographicalArea=المنطقة الجغرافية +works.exportSelectedWorks=تصدير الأعمال المحددة +works.exportSelectedWorksBibtexDescription=تصدير الأعمال المجمعة إلى ملف BibTeX. يرجى ملاحظة أن التصدير إلى BibTeX قد يؤدي إلى حدوث مشكلات في النص في بعض اللغات. +works.findOut=تعرف على المزيد حول تصدير ملفات BibTeX +works.selectedWorks=الأعمال المحددة للتصدير +works.exportSelectedWorksBibtex=تصدير الأعمال المحددة إلى BibTeX +works.combineSelectedWorks=تجميع الأعمال المحددة +works.selectedWorksGrouped=سيتم تجميع الأعمال المحددة معاً وعرضها كمادة مجموعة واحدة في تسجيلتك. ستظل كل إصدارات العمل متاحة لكن إصداراً واحداً فقط سيظهر كإصدارك المفضل. +works.learnMoreCombining=تعرف على المزيد حول تجميع الأعمال +works.selectedWorksCombine=الأعمال المحددة للتجميع +works.combiningWorks=لا يمكن التراجع عن تجميع الأعمال! +works.checkSelectedWorks=يرجى التحقق من صحة الأعمال المحددة قبل تجميعها. +works.subtitleLabel=العنوان الفرعي +works.language=اللغة +works.translatedTitle**=العنوان المترجم +works.contributors=المساهمون +works.reviewWorkToCombine=مراجعة الأعمال للجمع +works.addDoi=أضف DOI +works.addPubmed=إضافة معرف PubMed +works.addBibtex=أضف BibTeX +works.worksToExport=الأعمال المرغوب في تصديرها +works.pleaseEnterExternalID=يرجى إدخال معرف خارجي +works.onlyIdentifierTypesFundedBy=يُسمح باستخدام أنواع المعرفات التالية فحسب في حال استخدام معرفات "ممولة من": "رقم المنحة" أو "doi" أو "uri" أو "معرف الاقتراح" +works.publisher=الناشر +works.conferenceTitle=عنوان المؤتمر +works.bookTitle=عنوان الكتاب +works.journalTitle=عنوان الدورية +works.magazineTitle=عنوان المجلة +works.newsletterTitle=عنوان نشرة الأخبار +works.newspaperTitle=عنوان الصحيفة +works.institution=المؤسسة +works.custodian=وصي +works.setsOfSimilarWorkToManage1=عثر ORCID على +works.setsOfSimilarWorkToManage2=مجموعات من الأعمال بعناوين متشابهة قد ترغب في دمجها. +works.setsOfSimilarWorkToManage3=ستُجمع الأعمال المحددة معاً وتُعرض كعنصر مجموعة واحدة في سجلك. ستظل جميع نسخ العمل متاحة ولكن سيُعرض أحدها كنسختك المفضلة +works.titleMaxLength=يجب أن يكون أقل من 1000 حرف +works.descriptionMaxLength=يجب أن يكون أقل من 5000 حرفا +works.atLestOneSelfIdRequired=مطلوب معرف "ذاتي" واحد على الأقل عند استخدام معرفات "إصدار" +works.manageSimilarWorks=إدارة الأعمال المماثلة +works.urlMaxLength=يجب أن يكون أقل من 2000 حرف +works.more=المزيد +works.noBibtexEntries=خطأ في تحليل Bibtex. لم يتم العثور على مدخلات Bibtex في الملف +works.addWorkToOrcid=أضف هذا العمل إلى سجلك على ORCID diff --git a/src/locale/properties/works/works.ca.properties b/src/locale/properties/works/works.ca.properties deleted file mode 100644 index e4019f5d82..0000000000 --- a/src/locale/properties/works/works.ca.properties +++ /dev/null @@ -1,55 +0,0 @@ -work.works=Works -works.citation=Citation -works.workType=Work type -works.addTranslatedTitle=add translated title -works.citationType=Citation type -works.description=Description -works.type=Identifier type -works.identifierValue=Identifier value -works.relationship=Relació -works.addAnotherId=Add other identifier -works.languageUsed=Language used in this form -work.countryPublication=Country of publication -works.identifierUrl=Identifier URL -works.abstract=Conference abstract -works.paper=Conference paper -works.poster=Conference poster -works.chapter=Book chapter -works.review=Book review -works.book=Book -works.entry=Dictionary entry -works.editedBook=Edited book -works.encyclopediaEntry=Encyclopedia entry -works.journalArticle=Journal article -works.issue=Journal issue -works.magazineArticle=Magazine article -works.manual=Manual -works.newsletterarticle=Newsletter article -works.newspaperArticle=Newspaper article -works.onlineResource=Online resource -works.preprint=Preprint -works.report=Report -works.tool=Research tool -works.studentPublication=Supervised student publication -works.test=Test -works.translation=Translation -works.website=Website -works.working paperAA=Working paper -works.disclosure=Disclosure -works.license=License -works.patent=Patent -works.copyright=Registered copyright -works.trademark=Trademark -works.annotation=Annotation -works.AAA=Data management plan -works.plan=Data set -works.invention=Invention -works.technique=Research technique -works.company=Spin off company -works.policy=Standards and policy -works.self=Un mateix -works.partOf=Part de -works.versionOf=Version of -works.conference=Conference -works.intellectual=Intellectual property -works.publication=Publication diff --git a/src/locale/properties/works/works.cs.properties b/src/locale/properties/works/works.cs.properties index aadda63e48..9e0a22508d 100644 --- a/src/locale/properties/works/works.cs.properties +++ b/src/locale/properties/works/works.cs.properties @@ -1,16 +1,39 @@ work.works=Práce +works.workDetails=Detaily díla +works.identifiers=Identifikátory +works.identifier=Identifikátor works.citation=Citace +works.otherInformation=Další informace +works.selectAWorkCategory=Vyberte kategorii díla +works.selectACategory=Vyberte kategorii díla works.workType=Typ díla +works.selectWorkType=Vyberte typ díla +works.setAWorkTitle=Nastavit název díla works.addTranslatedTitle=Přidat přeložený název +works.hideTranslatedTitle=Skrýt přeložený název +works.translatedTitle=Přeložený název +works.subtitle=Podtitul díla +works.invalidUrl=Neplatná URL adresa +works.linkMoreInformationAbout=Odkaz na další informace o dílu. Odkazy by měly být v plném formátu URL, např. http://www.website.com/page.html works.citationType=Typ citace +works.selectACitation=Vyberte typ citace +works.selectACitationType=Vyberte typ citace +works.describeThisCitation=Popište tuto citaci works.description=Popis +works.workIds=Identifikátory děl works.type=Typ identifikátoru +works.selectAnIdentifier=Vyberte typ identifikátoru +works.typeOfIdentifier=Typ identifikátoru spojeného s dílem, jako je ISBN, DOI nebo PMID. works.identifierValue=Hodnota identifikátoru +works.validFormat=Neplatné ID pro vybraný typ identifikátoru +works.addADescriber=Přidat ID deskriptoru +works.identifierAssociated=Identifikátor spojený s dílem. Formát bude záviset na typu vybraného identifikátoru. works.relationship=Vztah works.addAnotherId=Přidat jiný identifikátor works.languageUsed=Jazyk použitý v tomto formuláři work.countryPublication=Země publikace works.identifierUrl=Identifikátor URL +works.urlIdentifierHint=Adresa URL, na kterou identifikátor převádí, například https://doi.org/10.23640/07243.c.4232246 works.abstract=Abstrakt z konference works.paper=Konferenční příspěvek works.poster=Plakát na konferenci @@ -18,6 +41,7 @@ works.chapter=Kapitola v knize works.review=Recenze knihy works.book=Kniha works.entry=Heslo ve slovníku +works.thesis=Disertační práce/Diplomová práce works.editedBook=Redigovaná kniha works.encyclopediaEntry=Heslo v encyklopedii works.journalArticle=Článek v časopisu @@ -34,23 +58,111 @@ works.studentPublication=Dohled nad studentskou publikací works.test=Zkouška works.translation=Překlad works.website=Webová stránka -works.working paperAA=Pracovní dokument +works.working=paperAA=Pracovní dokument works.disclosure=Zveřejnění works.license=Licence works.patent=Patent works.copyright=Registrovaná autorská práva works.trademark=Ochranná známka works.annotation=Anotace -works.AAA=Režim správy dat +works.artisticPerformance=Umělecké představení +works.dataManagementPlan=Režim správy dat works.plan=Množina dat works.invention=Vynález +works.speech=Přednáškový projev +works.object=Fyzický předmět works.technique=Výzkumná technika +works.software=software works.company=Spin-off firma works.policy=Standardy a zásady +works.standard=Technický standard +works.other=Další výstup works.self=Vlastní works.partOf=Je součástí works.versionOf=Verze works.fundedBy=Financováno +works.selfDescription=Identifikátor se vztahuje na dílo samotné. Například DOI pro kapitolu knihy. +works.partOfDescription=Identifikátor se vztahuje na část většího díla. Například ISBN knihy, ve které bylo dílo publikováno. +works.versionOfDescription=Identifikátor se vztahuje na alternativní verzi díla. Například dřívější koncept článku. +works.fundedByDescription=Identifikátor se vztahuje na financování díla. works.conference=Konference works.intellectual=Duševní vlastnictví works.publication=Publikace +works.countryPublication=Země publikace +works.whoCanSeeWorks=Kdo může vidět vaše díla. Výchozí nastavení viditelnosti je Soukromé. +works.selectedWorksVisibility=Vybraná díla k nastavení viditelnosti +works.setVisibility=Nastavit viditelnost vybraných děl +works.title=Název +works.languageOnThisTitle=Jazyk tohoto názvu +works.link=Odkaz +works.unResolved=Nepodařilo se nám nalézt zdroj odpovídající identifikátoru, který jste zadali. +works.addFromDOI=Díla - Přidejte dílo z DOI +works.youCanUseFullDOI=Můžete použít úplnou adresu URL DOI nebo pouze hodnotu identifikátoru. +works.doiIdentifier=Hodnota DOI identifikátoru nebo kompletní URL +works.retrieveWorkDOI=Načíst podrobnosti o dílu z DOI +works.retrievingWorkDOI=Získávání podrobností o práci z DOI +works.detailsFromDOI=Detaily díla z DOI +works.importWork=Importujte dílo do svého záznamu +works.importBibTex=Díla - Import BibTeXu +works.importCitations=Importujte citace ze souborů BibTex (.bib), včetně souborů exportovaných ze služby Google Scholar. +works.moreInformation=Další informace o importu souborů BibTeX do ORCID +works.chooseBibTex=Vyberte soubor BibTeX k importu +works.retrievingWorkBibTex=Načítání děl z BibTeXu +works.foundInBibTex=Díla nalezená v BibTeX +works.importWorks=Importujte práci do svého záznamu +works.unableToImport=Nelze importovat pomocí tohoto identifikátoru. Přidejte práci pomocí jiné možnosti. +works.bibtexImporterParsingError=Tento soubor nelze přečíst. Prosím, zkontrolujte, zda je ve formátu BibTeX a zkuste to znovu. +works.addFromPubMed=Díla – přidat dílo z pubMed +works.typeOrPastePubMed=Zadejte nebo vložte celou adresu URL pubMed nebo pouze hodnotu identifikátoru +works.pubMedIdentifier=hodnota identifikátoru pubMed nebo úplná adresa URL +works.retrieveWorkPubMed=Získejte podrobnosti o dílu z pubMed +works.urlColon=URL: +works.typeColon=Typ: +works.value=Hodnota: +works.all=Všechny +works.noItemsSelected=Nejsou vybrány žádné položky. +works.linkWorks=Odkaz funguje +works.linkWorksMoreInfo=Další informace o propojení prací s vaším záznamem ORCID +works.geographicalArea=Geografická oblast +works.exportSelectedWorks=Export vybraných děl +works.exportSelectedWorksBibtexDescription=Export vybraných děl do souboru BibTeX. Upozorňujeme, že export do BibTeXu může způsobit problémy u textu v některých jazycích. +works.findOut=Zjistit více o exportu souborů BibTeX +works.selectedWorks=Vybraná díla k exportu +works.exportSelectedWorksBibtex=Exportovat vybraná díla do BibTeX +works.combineSelectedWorks=Sloučit vybrané práce +works.selectedWorksGrouped=Vybraná díla budou seskupena a ve vašich záznamech se zobrazí jako jedna skupinová položka. Všechny verze díla budou stále k dispozici, ale jedna se zobrazí jako vámi preferovaná. +works.learnMoreCombining=Další informace o kombinování děl +works.selectedWorksCombine=Vybraná díla ke spojení +works.combiningWorks=Spojení děl nelze vrátit zpět! +works.checkSelectedWorks=Před kombinováním prosím zkontrolujte správnost vybraných děl. +works.subtitleLabel=Podnázev +works.language=Jazyk +works.translatedTitle**=Přeložený název +works.contributors=Přispěvatelé +works.reviewWorkToCombine=Přezkoumejte díla ke kombinování +works.addDoi=Přidat DOI +works.addPubmed=Přidat PubMed ID +works.addBibtex=Zadat BibTeX +works.worksToExport=práce k exportu +works.pleaseEnterExternalID=Prosím, zadejte externí ID +works.onlyIdentifierTypesFundedBy=Při použití identifikátorů typu „financováno“ jsou povoleny pouze typy identifikátorů „číslo grantu“, „doi“, „uri“ nebo „id nabídky“. +works.publisher=Vydavatel +works.conferenceTitle=Název konference +works.bookTitle=Název knihy +works.journalTitle=Název časopisu +works.magazineTitle=Název časopisu +works.newsletterTitle=Název oběžníku +works.newspaperTitle=Název novin +works.institution=Instituce +works.custodian=strážce +works.setsOfSimilarWorkToManage1=ORCID nalezl +works.setsOfSimilarWorkToManage2=sady prací se shodnými názvy, které můžete zkombinovat. +works.setsOfSimilarWorkToManage3=Zvolené práce budou seskupeny a v reportu se vám zobrazí jako jedna skupina. Všechny verze prací budou stále k dispozici, avšak jedna se bude zobrazovat jako přednostní verze +works.titleMaxLength=Musí být kratší než 1000 znaků +works.descriptionMaxLength=Musí být kratší než 5000 znaků +works.atLestOneSelfIdRequired=Alespoň jeden „vlastní“ identifikátor je vyžadován, při použití identifikátorů „verze“ +works.manageSimilarWorks=Správa podobných děl +works.urlMaxLength=Musí být kratší než 2 000 znaků +works.more=více +works.noBibtexEntries=Při analyzování formátu Bibtex došlo k chybě. Nebyly nalezeny žádné záznamy formátu Bibtex v souboru +works.addWorkToOrcid=Přidejte tuto práci do svého záznamu ve službě ORCID diff --git a/src/locale/properties/works/works.en.properties b/src/locale/properties/works/works.en.properties index 370c73d2fa..e0feca24ce 100644 --- a/src/locale/properties/works/works.en.properties +++ b/src/locale/properties/works/works.en.properties @@ -1,6 +1,7 @@ work.works=Works -works.workDetails=Work Details +works.workDetails=Work details works.identifiers=Identifiers +works.identifier=Identifier works.citation=Citation works.otherInformation=Other information works.selectAWorkCategory=Select a work category @@ -15,7 +16,7 @@ works.subtitle=Work Subtitle works.invalidUrl=Invalid url works.linkMoreInformationAbout=A link to more information about the work. Links should be in the full URL format e.g. http://www.website.com/page.html works.citationType=Citation type -works.selectACitation=Select a citation type +works.selectACitation=Select a citation works.selectACitationType=Select a citation type works.describeThisCitation=Describe this citation works.description=Description @@ -28,7 +29,7 @@ works.validFormat=Invalid id for the selected identifier type works.addADescriber=Add a describer id works.identifierAssociated=The identifier associated with the work. The format will depend on the type of identifier selected. works.relationship=Relationship -works.addAnotherId=Add other identifier +works.addAnotherId=Add another identifier works.languageUsed=Language used in this form work.countryPublication=Country of publication works.identifierUrl=Identifier URL @@ -57,7 +58,7 @@ works.studentPublication=Supervised student publication works.test=Test works.translation=Translation works.website=Website -works.working paperAA=Working paper +works.working=Working paper works.disclosure=Disclosure works.license=License works.patent=Patent @@ -65,17 +66,17 @@ works.copyright=Registered copyright works.trademark=Trademark works.annotation=Annotation works.artisticPerformance=Artistic performance -works.AAA=Data management plan +works.dataManagementPlan=Data management plan works.plan=Data set works.invention=Invention -works.speech=Lecture speech +works.speech=Lecture/speech works.object=Physical object works.technique=Research technique works.software=software works.company=Spin off company works.policy=Standards and policy works.standard=Technical Standard -works.other=Other output +works.other=Other works.self=Self works.partOf=Part of works.versionOf=Version of @@ -95,3 +96,73 @@ works.title=Title works.languageOnThisTitle=Language of this title works.link=Link works.unResolved=We couldn't find a resource that matches the identifier you entered. Please check the value or enter a valid link to the resource. +works.addFromDOI=Works - Add work from DOI +works.youCanUseFullDOI=You can use the full DOI URL or just the identifier value. +works.doiIdentifier=DOI identifier value or full URL +works.retrieveWorkDOI=Retrieve work details from DOI +works.retrievingWorkDOI=Retrieving work details from DOI +works.detailsFromDOI=Work details from DOI +works.importWork=Import work to your record +works.importBibTex=Works - Import BibTeX +works.importCitations=Import citations from BibTex (.bib) files, including files exported from Google Scholar. +works.moreInformation=More information on importing BibTeX files into ORCID +works.chooseBibTex=Choose BibTeX file to import +works.retrievingWorkBibTex=Retrieving works from BibTeX +works.foundInBibTex=Works found in BibTeX +works.importWorks=Import work to your record +works.unableToImport=Unable to import using this identifier. Please add work using a different option. +works.bibtexImporterParsingError=This file cannot be read. Please check the BibTeX formatting and try again. +works.addFromPubMed=Works - Add work from PubMed +works.typeOrPastePubMed=Type or paste the full PubMed URL or just the identifier value +works.pubMedIdentifier=PubMed identifier value or full URL +works.retrieveWorkPubMed=Retrieve work details from PubMed +works.urlColon=URL: +works.typeColon=Type: +works.value=Value: +works.all=All +works.noItemsSelected=No items selected. +works.linkWorks=Link works +works.linkWorksMoreInfo=More information about linking works to your ORCID record +works.geographicalArea=Geographical area +works.exportSelectedWorks=Export selected works +works.exportSelectedWorksBibtexDescription=Export selected works to a BibTeX file. Please note that exporting to BibTeX may cause problems for text in some languages. +works.findOut=Find out more on exporting BibTeX files +works.selectedWorks=Selected works to export +works.exportSelectedWorksBibtex=Export selected works to BibTeX +works.combineSelectedWorks=Combine selected works +works.selectedWorksGrouped=The selected works will be grouped together and displayed as a single group item on your record. All versions of the work will still be available but one will be shown as your preferred version. +works.learnMoreCombining=Learn more about combining works +works.selectedWorksCombine=Selected works to combine +works.combiningWorks=Combining works cannot be undone! +works.checkSelectedWorks=Please check the selected works are correct before combining them. +works.subtitleLabel=Subtitle +works.language=Language +works.translatedTitle**=Translated title +works.contributors=Contributors +works.reviewWorkToCombine=Review works to combine +works.addDoi=Add DOI +works.addPubmed=Add PubMed ID +works.addBibtex=Add BibTeX +works.worksToExport=works to export +works.pleaseEnterExternalID=Please enter an external ID +works.onlyIdentifierTypesFundedBy=Only identifier types "grant number", "doi", "uri" or "proposal id" are allowed when using "funded-by" identifiers +works.publisher=Publisher +works.conferenceTitle=Conference title +works.bookTitle=Book title +works.journalTitle=Journal title +works.magazineTitle=Magazine title +works.newsletterTitle=Newsletter title +works.newspaperTitle=Newspaper title +works.institution=Institution +works.custodian=Custodian +works.setsOfSimilarWorkToManage1=ORCID have found +works.setsOfSimilarWorkToManage2=sets of works with similar titles that you may want to combine. +works.setsOfSimilarWorkToManage3=The selected works will be grouped together and displayed as a single group item on your record. All versions of the work will still be available but one will be shown as your preferred version +works.titleMaxLength=Must be less than 1000 characters +works.descriptionMaxLength=Must be less than 5000 characters +works.atLestOneSelfIdRequired=At least one "self" identifier is required when using "version-of" identifiers +works.manageSimilarWorks=Manage similar works +works.urlMaxLength=Must be less than 2000 characters +works.more=more +works.noBibtexEntries=Error parsing Bibtex. No Bibtex entries found in file +works.addWorkToOrcid=Add this work to your ORCID record diff --git a/src/locale/properties/works/works.es.properties b/src/locale/properties/works/works.es.properties index 9df09eabf2..8c2064b2f5 100644 --- a/src/locale/properties/works/works.es.properties +++ b/src/locale/properties/works/works.es.properties @@ -1,16 +1,39 @@ work.works=Trabajos +works.workDetails=Datos del trabajo +works.identifiers=Identificadores +works.identifier=Identificador works.citation=Cita +works.otherInformation=Otra información +works.selectAWorkCategory=Seleccione una categoría de trabajo +works.selectACategory=Seleccione una categoría de trabajo works.workType=Tipo de obra +works.selectWorkType=Seleccione un tipo de trabajo +works.setAWorkTitle=Configure un puesto de trabajo works.addTranslatedTitle=Agregar el título traducido +works.hideTranslatedTitle=Ocultar el título de la traducción +works.translatedTitle=Título traducido +works.subtitle=Subtítulo de la obra +works.invalidUrl=URL no valida +works.linkMoreInformationAbout=Un enlace a más información sobre el trabajo. Los enlaces deben tener el formato de URL completa; por ejemplo: http://www.website.com/page.html works.citationType=Tipo de cita +works.selectACitation=Seleccione un tipo de cita +works.selectACitationType=Seleccione un tipo de cita +works.describeThisCitation=Describa esta cita works.description=Descripción +works.workIds=Identificadores del trabajo works.type=Tipo de identificador +works.selectAnIdentifier=Seleccione un tipo de identificador +works.typeOfIdentifier=El tipo de identificador asociado con el trabajo, como un ISBN, DOI o PMID. works.identifierValue=Identificación +works.validFormat=ID no válido para el tipo de identificador seleccionado +works.addADescriber=Añadir una ID de descriptor +works.identifierAssociated=El identificador asociado al trabajo. El formato dependerá del tipo de identificador seleccionado. works.relationship=Relación works.addAnotherId=Agregar otro identificador works.languageUsed=Idioma usado en este formulario work.countryPublication=País de publicación works.identifierUrl=URL de identificador +works.urlIdentifierHint=La URL en la que se resuelve el identificador; por ejemplo https://doi.org/10.23640/07243.c.4232246 works.abstract=Sumario de conferencia works.paper=Documento de conferencia works.poster=Póster de conferencia @@ -18,6 +41,7 @@ works.chapter=Capítulo de libro works.review=Revisión de libro works.book=Libro works.entry=Término de diccionario +works.thesis=Tesis/tesina works.editedBook=Libro editado works.encyclopediaEntry=Entrada en enciclopedia works.journalArticle=Artículo de revista @@ -34,23 +58,111 @@ works.studentPublication=Publicación estudiantil supervisada works.test=Prueba works.translation=Traducción works.website=Sitio web -works.working paperAA=Documento de obra +works.working=paperAA=Documento de obra works.disclosure=Divulgación works.license=Licencia works.patent=Patente works.copyright=Derecho de autor registrado works.trademark=Marca comercial works.annotation=Anotación -works.AAA=Plan de gestión de datos +works.artisticPerformance=Actuación artística +works.dataManagementPlan=Plan de gestión de datos works.plan=Set de datos works.invention=Invención +works.speech=Discurso de la conferencia +works.object=Objeto físico works.technique=Técnica de investigación +works.software=software works.company=Empresa filial works.policy=Normas y política +works.standard=Norma técnica +works.other=Otra salida works.self=Propio works.partOf=Parte de works.versionOf=Versión de works.fundedBy=Financiado por +works.selfDescription=El identificador se aplica a la obra en sí. Por ejemplo, un DOI para un capítulo de un libro. +works.partOfDescription=El identificador se aplica a parte de un trabajo más amplio. Por ejemplo, el ISBN del libro en el que se publicó el trabajo. +works.versionOfDescription=El identificador se aplica a una versión alternativa del trabajo. Por ejemplo, un borrador anterior de un artículo. +works.fundedByDescription=El identificador se aplica a la financiación del trabajo. works.conference=Conferencia works.intellectual=Propiedad intelectual works.publication=Publicación +works.countryPublication=País de publicación +works.whoCanSeeWorks=Quién puede ver sus trabajos. La configuración de visibilidad predeterminada es "Privado". +works.selectedWorksVisibility=Trabajos seleccionadas para establecer visibilidad +works.setVisibility=Establecer visibilidad en los trabajos seleccionadas +works.title=Título +works.languageOnThisTitle=Idioma de este título +works.link=Enlace +works.unResolved=No pudimos encontrar un recurso que coincida con el identificador que ingresó. Verifique el valor o ingrese un enlace válido al recurso. +works.addFromDOI=Trabajos: añadir trabajo de DOI +works.youCanUseFullDOI=Puede usar la URL DOI completa o solo el valor del identificador. +works.doiIdentifier=Valor de identificador DOI o URL completa +works.retrieveWorkDOI=Recuperar datos del trabajo de DOI +works.retrievingWorkDOI=Recuperar detalles del trabajo de DOI +works.detailsFromDOI=Datos del trabajo de DOI +works.importWork=Importar obra a su registro +works.importBibTex=Trabajos: Importar BibTeX +works.importCitations=Importe citas de archivos BibTex (bib), incluidos los archivos exportados desde Google Scholar. +works.moreInformation=Más información sobre la importación de archivos BibTeX a ORCID +works.chooseBibTex=Elija el archivo BibTeX para importar +works.retrievingWorkBibTex=Recuperando trabajos de BibTeX +works.foundInBibTex=Trabajos encontrados en BibTeX +works.importWorks=Importar el trabajo a sus registros +works.unableToImport=No es posible importar con este identificador. Añade trabajo con una opción diferente. +works.bibtexImporterParsingError=El archivo no puede leerse. Por favor verifique el formato BibTeX e inténtelo nuevamente. +works.addFromPubMed=Trabajos: añadir trabajo desde pubMed +works.typeOrPastePubMed=Escriba o pegue la URL completa de pubMed o solo el valor del identificador +works.pubMedIdentifier=Valor del identificador de pubMed o URL completa +works.retrieveWorkPubMed=Recuperar datos del trabajo de pubMed +works.urlColon=URL: +works.typeColon=Tipo: +works.value=Valor: +works.all=Todos +works.noItemsSelected=No hay elementos seleccionados. +works.linkWorks=Vincular trabajos +works.linkWorksMoreInfo=Más información sobre cómo vincular trabajos a su registro ORCID +works.geographicalArea=Área geográfica +works.exportSelectedWorks=Exportar trabajos seleccionadas +works.exportSelectedWorksBibtexDescription=Exporte los trabajos seleccionados a un archivo BibTeX. Tenga en cuenta que exportar a BibTeX puede crear problemas con el texto en algunos idiomas. +works.findOut=Obtenga más información sobre la exportación de archivos BibTeX. +works.selectedWorks=Trabajos seleccionados para exportar +works.exportSelectedWorksBibtex=Exportar trabajos seleccionados a BibTeX +works.combineSelectedWorks=Combinar trabajos seleccionados +works.selectedWorksGrouped=Los trabajos seleccionados se agruparán y se mostrarán como un solo elemento de grupo en su registro. Todas las versiones del trabajo seguirán estando disponibles, pero se mostrará una como su versión preferida. +works.learnMoreCombining=Descubre más sobre cómo combinar trabajos +works.selectedWorksCombine=Trabajos seleccionados para combinarlos +works.combiningWorks=¡La combinación de obras no se puede deshacer! +works.checkSelectedWorks=Compruebe que los trabajos seleccionados sean correctos antes de combinarlos. +works.subtitleLabel=Sub-título +works.language=Idioma +works.translatedTitle**=Título traducido +works.contributors=Contribuyentes +works.reviewWorkToCombine=Revisar los trabajos que combinar +works.addDoi=Añadir DOI +works.addPubmed=Añadir identificador PubMed +works.addBibtex=Añadir BibTeX +works.worksToExport=obras a exportar +works.pleaseEnterExternalID=Por favor ingresa una ID externa +works.onlyIdentifierTypesFundedBy=Solo se permiten los tipos de identificador "grant number", "doi", "uri" o "proposal id" al usar los identificadores "funded-by" +works.publisher=Editorial +works.conferenceTitle=Título de conferencia +works.bookTitle=Título de libro +works.journalTitle=Título de revista +works.magazineTitle=Título de magacín +works.newsletterTitle=Título de boletín informativo +works.newspaperTitle=Título de periódico +works.institution=Institución +works.custodian=Custodio +works.setsOfSimilarWorkToManage1=ORCID ha encontrado +works.setsOfSimilarWorkToManage2=grupos de obras con títulos similares que quizás desee combinar. +works.setsOfSimilarWorkToManage3=Las obras seleccionadas se agruparán y se mostrarán como un solo elemento grupal en su registro. Todas las versiones de la obra seguirán estando disponibles, pero se mostrará una como su versión preferida +works.titleMaxLength=Debe contener menos de 1000 caracteres +works.descriptionMaxLength=Debe contener menos de 5000 caracteres +works.atLestOneSelfIdRequired=Se requiere al menos un identificador "yo" cuando se utilizan identificadores de "versión de" +works.manageSimilarWorks=Gestionar trabajos similares +works.urlMaxLength=Debe tener menos de 2000 caracteres +works.more=más +works.noBibtexEntries=Error al analizar Bibtex. No se han encontrado entradas de Bibtex en el archivo +works.addWorkToOrcid=Agregue esta obra a su registro ORCID diff --git a/src/locale/properties/works/works.fr.properties b/src/locale/properties/works/works.fr.properties index b8cb561959..6daf41a2e3 100644 --- a/src/locale/properties/works/works.fr.properties +++ b/src/locale/properties/works/works.fr.properties @@ -1,16 +1,39 @@ -work.works=Travaux\n +work.works=Travaux +works.workDetails=Informations relatives au travail +works.identifiers=Identifiants +works.identifier=Identifiant works.citation=Citation +works.otherInformation=Autres informations +works.selectAWorkCategory=Sélectionner une catégorie de travaux +works.selectACategory=Sélectionner une catégorie de travaux works.workType=Type de travail +works.selectWorkType=Sélectionner un type de travail +works.setAWorkTitle=Définir un titre de travail works.addTranslatedTitle=ajouter le titre traduit +works.hideTranslatedTitle=Masquer le titre traduit +works.translatedTitle=Titre traduit +works.subtitle=Sous-titre du travail +works.invalidUrl=URL non valide +works.linkMoreInformationAbout=Un lien vers plus d'informations au sujet du travail. Les liens doivent être au format URL complète, comme, par exemple, http://www.website.com/page.html. works.citationType=Type de citation +works.selectACitation=Sélectionner un type de citation +works.selectACitationType=Sélectionner un type de citation +works.describeThisCitation=Décrire cette citation works.description=Description +works.workIds=Identifiants de travaux works.type=Type d'identifiant +works.selectAnIdentifier=Sélectionner un type d'identifiant +works.typeOfIdentifier=Le type d'identifiant associé au travail, comme un ISBN, un DOI ou un PMID. works.identifierValue=Identifiant +works.validFormat=Identifiant non valide pour le type d'identifiant sélectionné +works.addADescriber=Ajouter un identifiant de descripteur +works.identifierAssociated=L'identifiant associé au travail. Le format dépendra du type d'identifiant sélectionné. works.relationship=Relation works.addAnotherId=Ajouter un autre identifiant works.languageUsed=Langue utilisée dans ce formulaire work.countryPublication=Pays de publication works.identifierUrl=URL de l'identificateur +works.urlIdentifierHint=L'URL à laquelle mène l'identifiant, comme, par exemple, https://doi.org/10.23640/07243.c.4232246. works.abstract=Résumé de conférence works.paper=Document de conférence works.poster=Affiche de conférence @@ -18,6 +41,7 @@ works.chapter=Chapitre de livre works.review=Critique de livre works.book=Livre works.entry=Entrée de dictionnaire +works.thesis=Mémoire/thèse works.editedBook=Livre édité works.encyclopediaEntry=Article dans une encyclopédie works.journalArticle=article de revue @@ -34,23 +58,111 @@ works.studentPublication=Publication d'étudiants supervisée works.test=Test works.translation=Traduction works.website=Site web -works.working paperAA=Document de travail +works.working=paperAA=Document de travail works.disclosure=Divulgation works.license=License works.patent=Brevet works.copyright=Droit d'auteur déposé works.trademark=Marque commerciale works.annotation=Annotation -works.AAA=Plan de gestion des données +works.artisticPerformance=Performance artistique +works.dataManagementPlan=Plan de gestion des données works.plan=Données définies works.invention=Invention +works.speech=Discours de conférence +works.object=Objet physique works.technique=Technique de recherche +works.software=logiciel works.company=Entreprise dérivée works.policy=Normes et politiques +works.standard=Norme technique +works.other=Autres résultats works.self=Soi-même works.partOf=partie de works.versionOf=Version de works.fundedBy=Financé par +works.selfDescription=L'identifiant s'applique au travail lui-même, comme, par exemple, un DOI pour un chapitre d'un livre. +works.partOfDescription=L'identifiant s'applique à une partie d'une œuvre plus importante, comme, par exemple, l'ISBN du livre dans lequel le travail a été publié. +works.versionOfDescription=L'identifiant s'applique à une autre version du travail, comme, par exemple, un version préliminaire précédente d'un article. +works.fundedByDescription=L'identifiant s'applique au financement du travail. works.conference=Conférence works.intellectual=Propriété intellectuelle works.publication=Publication +works.countryPublication=Pays de publication +works.whoCanSeeWorks=Qui peut voir vos travaux. La visibilité est réglée par défaut sur Privé. +works.selectedWorksVisibility=Travaux sélectionnés pour définir la visibilité +works.setVisibility=Paramétrer la visibilité des travaux sélectionnés +works.title=Titre +works.languageOnThisTitle=Langue de ce titre +works.link=Lien +works.unResolved=Nous n'avons pas trouvé de ressource correspondant à l'identifiant que vous avez entré. Veuillez vérifier la valeur ou entrez un lien valide vers la ressource. +works.addFromDOI=Travaux – ajouter un travail à partir de son DOI +works.youCanUseFullDOI=Vous pouvez utiliser l'URL complète du DOI ou seulement la valeur de l'identifiant. +works.doiIdentifier=Valeur de l'identifiant DOI ou URL complète +works.retrieveWorkDOI=Récupérer les informations relatives au travail à partir de son DOI +works.retrievingWorkDOI=Récupération des informations relatives au travail à partir de son DOI +works.detailsFromDOI=Détails de vos travaux depuis le DOI +works.importWork=Importer le travail dans votre dossier +works.importBibTex=Travaux – importer un fichier BibTeX +works.importCitations=Importez des citations à partir de fichiers BiBTeX (.bib), y compris des fichiers exportés depuis Google Scholar. +works.moreInformation=Plus d'informations au sujet de l'importation de fichiers BibTeX vers ORCID +works.chooseBibTex=Choisir le fichier BibTeX à importer +works.retrievingWorkBibTex=Récupération de travaux depuis BibTeX +works.foundInBibTex=Travaux trouvés sur BibTeX +works.importWorks=Importer le travail dans votre dossier +works.unableToImport=Impossible d'importer en utilisant cet identifiant. Veuillez ajouter un travail en utilisant une autre option. +works.bibtexImporterParsingError=Impossible de lire ce fichier. Veuillez vérifier le format BibTeX et réessayez. +works.addFromPubMed=Travaux – ajouter un travail à partir de PubMed +works.typeOrPastePubMed=Entrez ou collez l'URL PubMed complète, ou seulement la valeur de l'identifiant. +works.pubMedIdentifier=Valeur de l'identifiant PubMed ou URL complète +works.retrieveWorkPubMed=Récupérer les informations sur les travaux depuis pubMed +works.urlColon=URL : +works.typeColon=Type : +works.value=Valeur : +works.all=Toutes +works.noItemsSelected=Aucun élément sélectionné. +works.linkWorks=Créer des liens vers les travaux +works.linkWorksMoreInfo=Plus d'informations à propos de l'association de travaux à votre dossier ORCID +works.geographicalArea=Aire géographique +works.exportSelectedWorks=Exporter les travaux sélectionnés +works.exportSelectedWorksBibtexDescription=Exportez les travaux sélectionnés vers un fichier BibTeX. Veuillez noter que l'exportation vers BibTeX peut générer des problèmes dans le texte dans certaines langues. +works.findOut=En savoir plus sur l'exportation sous forme de fichiers BibTeX +works.selectedWorks=Travaux sélectionnés à exporter +works.exportSelectedWorksBibtex=Exporter les travaux sélectionnés vers BibTeX +works.combineSelectedWorks=Combiner les travaux sélectionnés +works.selectedWorksGrouped=Les travaux sélectionnés seront regroupés et affichés comme un seul groupe dans votre dossier. Toutes les versions du travail resteront disponibles, mais l'une d'entre elles sera affichée comme votre version préférée. +works.learnMoreCombining=En savoir plus sur comment combiner des travaux +works.selectedWorksCombine=Travaux sélectionnés à combiner +works.combiningWorks=Combiner des travaux est une action irréversible ! +works.checkSelectedWorks=Veuillez vérifier que les travaux sélectionnés sont les bons avant de les combiner. +works.subtitleLabel=Sous-titre +works.language=Langue +works.translatedTitle**=Titre traduit +works.contributors=Contributeurs +works.reviewWorkToCombine=Examiner les travaux à combiner +works.addDoi=Ajouter DOI +works.addPubmed=Ajouter un identifiant PubMed +works.addBibtex=Ajouter des ensembles d'œuvres BibTeX +works.worksToExport=œuvres à exporter +works.pleaseEnterExternalID=Veuillez saisir un identifiant externe +works.onlyIdentifierTypesFundedBy=Seuls les identifiants de type « accorder un chiffre », « identifiant d'objet digital », « identifiant de ressource uniforme » ou « identifiant de proposition » sont permis lors de l'utilisation d'identifiants. +works.publisher=Éditeur +works.conferenceTitle=Titre de conférence +works.bookTitle=Titre de livre +works.journalTitle=Titre de revue +works.magazineTitle=Titre de magazine +works.newsletterTitle=Titre de bulletin d'information +works.newspaperTitle=Nom de journal +works.institution=Institution +works.custodian=Dépositaire +works.setsOfSimilarWorkToManage1=ce que ORCID a trouvé +works.setsOfSimilarWorkToManage2=avec des titres similaires, que vous voudrez peut-être combiner. +works.setsOfSimilarWorkToManage3=Les œuvres sélectionnées seront regroupées et affichées comme un seul élément de groupe sur votre dossier. Toutes les versions de l'œuvre seront toujours disponibles, mais une sera affichée comme votre version préférée +works.titleMaxLength=Doit comporter moins de 1000 caractères +works.descriptionMaxLength=Doit compter moins de 5000 caractères +works.atLestOneSelfIdRequired=Au moins un identifiant "soi-même" est requis lors de l'utilisation d'identifiants "version-de" +works.manageSimilarWorks=Gérer les travaux similaires +works.urlMaxLength=Ne doit pas excéder 2000 caractères +works.more=plus +works.noBibtexEntries=Erreur d'analyse syntaxique de Bibtex. Aucune entrée Bibtex trouvée dans le fichier. +works.addWorkToOrcid=Ajouter ce travail à votre dossier ORCID diff --git a/src/locale/properties/works/works.it.properties b/src/locale/properties/works/works.it.properties index 1def170ceb..b5d7987ccd 100644 --- a/src/locale/properties/works/works.it.properties +++ b/src/locale/properties/works/works.it.properties @@ -1,16 +1,39 @@ work.works=Lavori +works.workDetails=Dettagli del lavoro +works.identifiers=Identificatori +works.identifier=Identificatore works.citation=Citazione +works.otherInformation=Altre informazioni +works.selectAWorkCategory=Seleziona una categoria lavoro +works.selectACategory=Seleziona una categoria lavoro works.workType=Tipo del prodotto +works.selectWorkType=Seleziona un tipo di lavoro +works.setAWorkTitle=Imposta un titolo lavoro works.addTranslatedTitle=Inserisci il titolo tradotto +works.hideTranslatedTitle=Nascondi il titolo della traduzione +works.translatedTitle=Titolo tradotto +works.subtitle=Sottotitolo del lavoro +works.invalidUrl=URL non valido +works.linkMoreInformationAbout=Un link per altre informazioni sul lavoro. I link devono contenere l'URL completa, per es. http://www.sitoweb.com/pagina.html works.citationType=Tipo di citazione +works.selectACitation=Seleziona un tipo di citazione +works.selectACitationType=Seleziona un tipo di fonte +works.describeThisCitation=Descrivi questa fonte works.description=Descrizione +works.workIds=Identificatori per i lavori works.type=Tipo di identificativo +works.selectAnIdentifier=Seleziona un tipo di identificatore +works.typeOfIdentifier=Il tipo di identificatore associato con il lavoro, come un ISBN, DOI o PMID. works.identifierValue=Valore dell'identificativo +works.validFormat=ID non valido per il tipo di identificatore selezionato +works.addADescriber=Aggiungi un ID descrittivo +works.identifierAssociated=L'identificatore associato al lavoro. Il formato dipenderà dal tipo di identificatore scelto. works.relationship=Relazione works.addAnotherId=Inserisci un altro identificativo works.languageUsed=Lingua utilizzata in questo modulo work.countryPublication=Paese di pubblicazione works.identifierUrl=Identifier URL +works.urlIdentifierHint=L'URL al quale punta l'identificatore, per esempio https://doi.org/10.23640/07243.c.4232246 works.abstract=Estratto della conferenza works.paper=Documento della conferenza works.poster=Relatore della conferenza @@ -18,6 +41,7 @@ works.chapter=Capitolo del libro works.review=Recensione libro works.book=Libro works.entry=Voce di dizionario +works.thesis=Dissertazione/Tesi works.editedBook=Libro corretto works.encyclopediaEntry=Voce dell'enciclopedia works.journalArticle=Articolo di rivista @@ -34,23 +58,111 @@ works.studentPublication=Pubblicazione studentesca revisionata works.test=Test works.translation=Traduzione works.website=Sito web -works.working paperAA=Foglio di lavoro +works.working=paperAA=Foglio di lavoro works.disclosure=Divulgazione works.license=Licenza works.patent=Brevetto works.copyright=Copyright registrato works.trademark=Marchio commerciale works.annotation=Appunto -works.AAA=Data management plan +works.artisticPerformance=Performance artistica +works.dataManagementPlan=Data management plan works.plan=Gruppo dati works.invention=Invenzione +works.speech=Interventi durante conferenze +works.object=Oggetto fisico works.technique=Tecnica di ricerca +works.software=software works.company=Azienda spin off works.policy=Standard e politica +works.standard=Standard tecnico +works.other=Altri output works.self=Auto works.partOf=Parte di works.versionOf=Versione di works.fundedBy=Finanziato da +works.selfDescription=L'identificatore è valido per il lavoro stesso. Per esempio un DOI per un capitolo di un libro. +works.partOfDescription=L'identificatore è valido per una parte di un lavoro più grande. Per esempio, l'ISBN del libro nel quale è stato pubblicato il lavoro. +works.versionOfDescription=L'identificatore è valido per una versione alternativa del lavoro. Per esempio una prima bozza di un articolo. +works.fundedByDescription=L'identificatore è valido per il finanziamento del lavoro. works.conference=Conferenza works.intellectual=Proprietà intellettuale works.publication=Pubblicazione +works.countryPublication=Paese di pubblicazione +works.whoCanSeeWorks=Chi può vedere i tuoi lavori. L'impostazione di visibilità predefinita è Privati. +works.selectedWorksVisibility=Lavori selezionati per impostare la visibilità +works.setVisibility=Imposta la visibilità dei lavori selezionati +works.title=Titolo +works.languageOnThisTitle=Lingua di questo titolo +works.link=Link +works.unResolved=Non siamo riusciti a trovare una risorsa che corrisponda all'identificatore inserito. Si prega di verificare il valore o inserire un link valido alla risorsa. +works.addFromDOI=Lavori - Aggiungi un lavoro da DOI +works.youCanUseFullDOI=Puoi usare l'intero URL DOI o solo il valore identificatore. +works.doiIdentifier=Valore di identificazioen DOI o URL completo +works.retrieveWorkDOI=Recupera i dettagli del lavoro dal DOI +works.retrievingWorkDOI=Recupero i dettagli del lavoro da DOI +works.detailsFromDOI=Dettagli sul lavoro dal DOI +works.importWork=Importa i lavori nel tuo record +works.importBibTex=Lavori - Importa BibTeX +works.importCitations=Importa le fonti da file BibTeX (.bib), inclusi i file esportati da Google Scholar. +works.moreInformation=Ulteriori informazioni sull'importazione di file BibTeX in ORCID +works.chooseBibTex=Scegli file BibTeX da importare +works.retrievingWorkBibTex=Recupero i lavori da BibTeX +works.foundInBibTex=Lavori trovati su BibTeX +works.importWorks=Importa i lavori nel tuo record +works.unableToImport=Impossibile importare tramite questo identificativo. Per favore, aggiungere l'opera utilizzando un opzione differente. +works.bibtexImporterParsingError=Questo file non è riconosciuto. Controllare il formato BibTeX e provare di nuovo. +works.addFromPubMed=Lavori - Aggiungi un lavoro da pubMed +works.typeOrPastePubMed=Digita o incolla l'URL pubMed completo o solo il valore dell'identificatore +works.pubMedIdentifier=Valore di identificazione pubMed o URL completo +works.retrieveWorkPubMed=Recupera i dettagli del lavoro da pubMed +works.urlColon=URL: +works.typeColon=Tipo: +works.value=Valore: +works.all=Tutte +works.noItemsSelected=Nessun elemento selezionato. +works.linkWorks=Link ai lavori +works.linkWorksMoreInfo=Altre informazioni su come collegare i lavori al tuo record ORCID +works.geographicalArea=Area geografica +works.exportSelectedWorks=Esporta i lavori selezionati +works.exportSelectedWorksBibtexDescription=Esporta i lavori selezionati su un file BibTeX. Ti ricordiamo che l'esportazione in BibTeX potrebbe causare problemi per testi in alcune lingue. +works.findOut=Scopri di più sull'esportazione di file BibTeX +works.selectedWorks=Lavori selezionati per l'esportazione +works.exportSelectedWorksBibtex=Esporta i lavori selezionati su BibTeX +works.combineSelectedWorks=Combina i lavori selezionati +works.selectedWorksGrouped=I lavori selezionati verranno raggruppati e mostrati come un unico gruppo sul tuo record. Tutte le versioni dei lavori saranno comunque disponibili ma una verrà indicata come preferita. +works.learnMoreCombining=Per saperne di più su come unire gli impieghi +works.selectedWorksCombine=Lavori selezionati da combinare +works.combiningWorks=L'unione dei lavori non può essere annullata! +works.checkSelectedWorks=Assicurati che i lavori selezionati siano corretti prima di combinarli. +works.subtitleLabel=Sottotitolo +works.language=Lingua +works.translatedTitle**=Titolo tradotto +works.contributors=Partecipanti +works.reviewWorkToCombine=Controlla i lavori da combinare +works.addDoi=Aggiungi DOI +works.addPubmed=Aggiungi ID PubMed +works.addBibtex=Aggiungi BibTeX +works.worksToExport=lavori da esportare +works.pleaseEnterExternalID=Inserire un ID esterno +works.onlyIdentifierTypesFundedBy=Quando si utilizza "finanziato-da" sono ammessi soltanto i tipi di identificativo "numero concessione", "doi", "uri" o "id proposta" +works.publisher=Editore +works.conferenceTitle=Titolo della conferenza +works.bookTitle=Titolo del libro +works.journalTitle=Titolo della rivista +works.magazineTitle=Titolo del magazine +works.newsletterTitle=Titolo della newsletter +works.newspaperTitle=Titolo del quotidiano +works.institution=Istituzione +works.custodian=Custode +works.setsOfSimilarWorkToManage1=ORCID ha trovato +works.setsOfSimilarWorkToManage2=insieme di lavori con titoli simili che potresti voler combinare +works.setsOfSimilarWorkToManage3=I lavori selezionati verranno raggruppati e mostrati come un singolo elemento di gruppo nel tuo registro. Saranno ancora disponibili tutte le versioni del lavoro, ma una verrà mostrata come la tua versione preferita +works.titleMaxLength=Deve essere inferiore ai 1000 caratteri +works.descriptionMaxLength=Deve essere inferiore ai 5000 caratteri +works.atLestOneSelfIdRequired=È obbligatorio inserire almeno un identificatore "self" quando si usano gli identificatori "version-of" +works.manageSimilarWorks=Gestisci impieghi simili +works.urlMaxLength=Deve essere inferiore a 2000 caratteri +works.more=di più +works.noBibtexEntries=Errore di analisi Bibtex. Nessuna voce Bibtex è stata trovata nel file +works.addWorkToOrcid=Aggiungi questo lavoro al tuo archivio ORCID diff --git a/src/locale/properties/works/works.ja.properties b/src/locale/properties/works/works.ja.properties index b89d97db02..0ac5c468d3 100644 --- a/src/locale/properties/works/works.ja.properties +++ b/src/locale/properties/works/works.ja.properties @@ -1,16 +1,39 @@ work.works=仕事 +works.workDetails=作品の詳細 +works.identifiers=\n識別子 +works.identifier=識別子 works.citation=引用 +works.otherInformation=その他の情報 +works.selectAWorkCategory=作品カテゴリーを選択する +works.selectACategory=作品のカテゴリーを選択する works.workType=著作・業績タイプ +works.selectWorkType=著作物タイプを選択 +works.setAWorkTitle=作品タイトルを設定する works.addTranslatedTitle=翻訳タイトルを追加 +works.hideTranslatedTitle=翻訳タイトルを非表示にする +works.translatedTitle=翻訳済みタイトル +works.subtitle=作品のサブタイトル +works.invalidUrl=無効なURL +works.linkMoreInformationAbout=著作物に関する詳細情報へのリンク。リンクは完全なURLの形式である必要があります(例: http://www.website.com/page.html) works.citationType=引用タイプ +works.selectACitation=引用文献タイプを選択する +works.selectACitationType=引用文献タイプを選択する +works.describeThisCitation=この引用文献を説明する works.description=説明 +works.workIds=著作物識別子 works.type=識別子タイプ +works.selectAnIdentifier=識別子タイプを選択する +works.typeOfIdentifier=ISBN、DOI、PMIDなど、作品に関連付けられている識別子のタイプ。 works.identifierValue=識別子の値 +works.validFormat=選択された識別子タイプに対して無効なID +works.addADescriber=記述者IDを追加する +works.identifierAssociated=作品に関連付けられている識別子。形式は選択した識別子のタイプによって異なります。 works.relationship=関係 works.addAnotherId=他の識別子の追加 works.languageUsed=このフォームで使用される言語 work.countryPublication=出版国 works.identifierUrl=識別子 URL +works.urlIdentifierHint=識別子が解決するURL(例:https://doi.org/10.23640/07243.c.4232246) works.abstract=学会摘要 works.paper=学会論文 works.poster=学会ポスター @@ -18,6 +41,7 @@ works.chapter=書籍の章 works.review=書評 works.book=書籍 works.entry=辞書エントリ +works.thesis=博士論文/修士論文 works.editedBook=編集書籍 works.encyclopediaEntry=百科事典エントリ works.journalArticle=学術論文 @@ -34,23 +58,111 @@ works.studentPublication=学生による出版の指導 works.test=テスト works.translation=翻訳 works.website=Web サイト -works.working paperAA=調査結果報告書 +works.working=paperAA=調査結果報告書 works.disclosure=開示 works.license=ライセンス works.patent=特許 works.copyright=登録著作権 works.trademark=商標 works.annotation=注釈 -works.AAA=データ管理プラン +works.artisticPerformance=芸術的パフォーマンス +works.dataManagementPlan=データ管理プラン works.plan=データ・セット works.invention=発明 +works.speech=講義スピーチ +works.object=物理オブジェクト works.technique=研究技術 +works.software=ソフトウェア works.company=分社 works.policy=規格と政策 +works.standard=技術基準 +works.other=その他のアウトプット works.self=自身 works.partOf=次の一部 works.versionOf=バージョン: works.fundedBy=資金の提供: +works.selfDescription=識別子は著作物自体に適用されます(例:文献の章のDOIなど)。 +works.partOfDescription=識別子は、より大きな作品の一部に適用されます。例えば、作品が掲載された書籍のISBNなどです。 +works.versionOfDescription=この識別子は、作品の代替バージョンに適用されます。例えば、論文の初期のドラフトなどです。 +works.fundedByDescription=識別子は、作品の資金調達に適用されます。 works.conference=学会 works.intellectual=知的財産 works.publication=出版 +works.countryPublication=出版国 +works.whoCanSeeWorks=誰があなたの作品を見ることができるか。デフォルトの表示設定は「非公開」です。 +works.selectedWorksVisibility=表示設定するために選択された作品 +works.setVisibility=選択された作品の表示設定 +works.title=タイトル +works.languageOnThisTitle=このタイトルの言語 +works.link=リンク +works.unResolved=入力した識別子に一致するリソースが見つかりませんでした。 値を確認するか、リソースへの有効なリンクを入力してください。 +works.addFromDOI=作品 - DOIから作品を追加する +works.youCanUseFullDOI=完全なDOI URLを使用することも、識別子の値だけを使用することもできます。 +works.doiIdentifier=DOI識別子の値または完全なURL +works.retrieveWorkDOI=DOIから作品の詳細を取得する +works.retrievingWorkDOI=DOIからの作品の詳細の取得 +works.detailsFromDOI=DOIからの作品の詳細 +works.importWork=作品を自分のレコードにインポートする +works.importBibTex=作品 - BibTeXをインポートする +works.importCitations=Google Scholarからエクスポートしたファイルを含む、BibTex (.bib)ファイルから引用文献をインポートします。 +works.moreInformation=ORCIDへのBibTeXファイルのインポート関する詳細情報 +works.chooseBibTex=インポートするBibTeXファイルを選択する +works.retrievingWorkBibTex=BibTeXからの作品の取得 +works.foundInBibTex=BibTeXで見つかった著作物 +works.importWorks=作品を自分のレコードにインポートする +works.unableToImport=この識別子を使用してインポートできません。別のオプションを使用して仕事を追加してください。 +works.bibtexImporterParsingError=このファイルは読み取れません。 BibTeX のフォーマットを確認して、もう一度お試しください。 +works.addFromPubMed=作品 - pubMedから作品を追加する +works.typeOrPastePubMed=pubMedの完全なURLまたは識別子の値のみを入力または貼り付ける +works.pubMedIdentifier=pubMed識別子の値または完全なURL +works.retrieveWorkPubMed=pubMedから作品の詳細を取得する +works.urlColon=URL: +works.typeColon=タイプ: +works.value=値: +works.all=全て +works.noItemsSelected=アイテムが選択されていません。 +works.linkWorks=作品をリンクする +works.linkWorksMoreInfo=ORCIDレコードへの作品のリンクに関する詳細情報 +works.geographicalArea=地域 +works.exportSelectedWorks=選択された作品をエクスポートする +works.exportSelectedWorksBibtexDescription=選択された作品をBibTeXファイルにエクスポートします。BibTeXにエクスポートすると、一部の言語のテキストで問題が発生することがありますのでご了承ください。 +works.findOut=BibTeX ファイルへのエクスポートについてはこちらを参照してください +works.selectedWorks=エクスポートするために選択した作品 +works.exportSelectedWorksBibtex=選択された作品をBibTeXにエクスポートする +works.combineSelectedWorks=選択された仕事を組み合わせる +works.selectedWorksGrouped=選択された作品はグループ化され、1つのグループアイテムとしてあなたのレコードに表示されます。作品のすべてのバージョンは引き続き利用できますが、1つが優先バージョンとして表示されます。 +works.learnMoreCombining=仕事の統合についてもっと知る +works.selectedWorksCombine=組み合わせるために選択された作品 +works.combiningWorks=作品を組み合わせると元に戻せません! +works.checkSelectedWorks=作品を組み合わせる前に、選択された作品が正しいことを確認してください。 +works.subtitleLabel=サブタイトル +works.language=言語 +works.translatedTitle**=翻訳済みタイトル +works.contributors=寄与者 +works.reviewWorkToCombine=組み合わせるために仕事をレビュー +works.addDoi=DOIを追加 +works.addPubmed=PubMed IDを追加 +works.addBibtex=BibTeXを追加 +works.worksToExport=エクスポートする著作物 +works.pleaseEnterExternalID=外部 ID を入力してください +works.onlyIdentifierTypesFundedBy=「資金提供者」の識別子を使用する場合は、識別子タイプ「許可番号」、「doi」、「uri」、または「プロポーザルID」のみが許可されます。 +works.publisher=出版社 +works.conferenceTitle=学会タイトル +works.bookTitle=書籍タイトル +works.journalTitle=専門誌タイトル +works.magazineTitle=雑誌タイトル +works.newsletterTitle=ニュースレタータイトル +works.newspaperTitle=新聞タイトル +works.institution=機関 +works.custodian=管理人 +works.setsOfSimilarWorkToManage1=ORCIDが見つかりました +works.setsOfSimilarWorkToManage2=あなたが組み合わせたいと思うかもしれない、同様のタイトルのいくつかの著作物。 +works.setsOfSimilarWorkToManage3=選択した著作物はグループ化され、1つのグループアイテムとしてレコードに表示されます。著作物のすべてのバージョンは引き続き利用できますが、1つが優先バージョンとして表示されます +works.titleMaxLength=1000 文字未満でなければなりません +works.descriptionMaxLength=5000 文字未満でなければなりません +works.atLestOneSelfIdRequired=「バージョン」の識別子を使用する場合は、少なくとも1つの「自分」の識別子が必要です。 +works.manageSimilarWorks=同様の仕事を管理 +works.urlMaxLength=2000文字未満である必要があります +works.more=その他 +works.noBibtexEntries=Bibtexの解析中にエラーが発生しました。ファイルにBibtexエントリが見つかりません +works.addWorkToOrcid=この著作物をORCIDレコードに追加 diff --git a/src/locale/properties/works/works.ko.properties b/src/locale/properties/works/works.ko.properties index 1ebbfff862..2a99a1a8c6 100644 --- a/src/locale/properties/works/works.ko.properties +++ b/src/locale/properties/works/works.ko.properties @@ -1,16 +1,39 @@ work.works=연구들 +works.workDetails=작업 상세 내역 +works.identifiers=식별자 +works.identifier=식별자 works.citation=서지사항 +works.otherInformation=다른 정보 +works.selectAWorkCategory=작업 카테고리 선택 +works.selectACategory=작업 카테고리 선택 works.workType=저작물 유형 +works.selectWorkType=작업 종류를 선택하세요 +works.setAWorkTitle=작업 제목 설정 works.addTranslatedTitle=번역된 제목 추가 +works.hideTranslatedTitle=번역 제목 가리기 +works.translatedTitle=번역된 제목 +works.subtitle=작업 부제 +works.invalidUrl=유효하지 않은 url +works.linkMoreInformationAbout=작업에 대한 더 자세한 정보가 있는 링크입니다. 링크는 반드시 전체 URL 형식이어야 합니다. 예) http://www.website.com/page.html works.citationType=서지사항 유형 +works.selectACitation=인용 유형 선택 +works.selectACitationType=인용구 종류를 선택하세요 +works.describeThisCitation=이 인용구에 대해 기술하세요 works.description=설명 +works.workIds=작업 식별자 works.type=식별자 유형 +works.selectAnIdentifier=식별자 유형 선택 +works.typeOfIdentifier=ISBN, DOI, PMID 등 작업물에 연관된 식별자의 유형 works.identifierValue=식별자 값 +works.validFormat=선택된 식별자 유형의 ID가 유효하지 않음 +works.addADescriber=서술자 id 추가 +works.identifierAssociated=작업과 관련된 식별자. 포맷은 선택된 식별자의 종류에 달려 있습니다. works.relationship=관계 works.addAnotherId=다른 식별자 추가 works.languageUsed=이 양식에 쓰이는 언어 work.countryPublication=발행국 works.identifierUrl=식별자 URL +works.urlIdentifierHint=식별자가 확인하는 URL로서, 다음의 예시와 같습니다. https://doi.org/10.23640/07243.c.4232246 works.abstract=컨퍼런스 초록 works.paper=컨퍼런스 논문 works.poster=컨퍼런스 포스터 @@ -18,6 +41,7 @@ works.chapter=책의 장 works.review=서평 works.book=책 works.entry=사전항목 +works.thesis=박사 논문/석사 논문 works.editedBook=편서(Edited Book) works.encyclopediaEntry=백과사전 항목 works.journalArticle=저널논문 @@ -34,23 +58,111 @@ works.studentPublication=학생의 출판물 지도 works.test=시험 works.translation=번역 works.website=웹사이트 -works.working paperAA=작업 서류 +works.working=paperAA=작업 서류 works.disclosure=공시 works.license=라이센스 works.patent=특허 works.copyright=등록 저작권 works.trademark=상표 works.annotation=주석 -works.AAA=데이터 관리 플랜 +works.artisticPerformance=예술 공연 +works.dataManagementPlan=데이터 관리 플랜 works.plan=데이타셋 works.invention=발명 +works.speech=강의 속도 +works.object=물체 works.technique=연구기술 +works.software=소프트웨어 works.company=회사 분사 works.policy=표준 및 정책 +works.standard=기술 표준 +works.other=다른 출력물 works.self=자신 works.partOf=부분 works.versionOf=다음의 버전: works.fundedBy=자금 제공 주체 +works.selfDescription=이 식별자는 작업 자체에 적용됩니다. 예를 들어 책의 챕터에 적용되는 DOI가 해당됩니다. +works.partOfDescription=이 식별자는 분량 많은 작업의 일부분에 적용됩니다. 예를 들어, 출간된 작품의 책에 붙는 ISBN이 해당됩니다. +works.versionOfDescription=이 식별자는 작업의 다른 버전에 적용됩니다. 예를 들어 논문의 초안이 해당됩니다. +works.fundedByDescription=이 식별자는 작업에 대한 펀딩에 적용됩니다. works.conference=컨퍼런스 works.intellectual=지적소유권 works.publication=출판물 +works.countryPublication=발행국 +works.whoCanSeeWorks=당신의 작업은 누가 볼 수 있나요? 공개 범위 설정의 기본값은 '나만 보기'입니다. +works.selectedWorksVisibility=작업을 선택하고 공개 범위 설정 +works.setVisibility=선택된 작업에 대한 공개 범위 선택 +works.title=제목 +works.languageOnThisTitle=이 제목의 언어 +works.link=링크 +works.unResolved=귀하가 입력한 식별자에 일치하는 리소스를 찾지 못했습니다. 값을 다시 확인하거나 리소스 대상의 유효한 링크를 입력하십시오. +works.addFromDOI=작업 - DOI에서 작업 추가 +works.youCanUseFullDOI=전체 DOI URL을 사용하거나 식별자 값만 쓸 수 있습니다. +works.doiIdentifier=DOI 식별자 값 또는 전체 URL +works.retrieveWorkDOI=DOI에서 작업 상세 정보를 검색하세요 +works.retrievingWorkDOI=DOI에서 작업 상세 정보를 검색 중 +works.detailsFromDOI=DOI의 작업 상세 내역 +works.importWork=내 기록으로 작업물 가져오기 +works.importBibTex=작업 - BibTeX 가져오기 +works.importCitations=Google Scholar에서 내보낸 파일을 포함하여 BibTex(.bib) 파일에서 인용 현황 가져오기. +works.moreInformation=ORCID로 BibTeX 파일 가져오기에 대한 더 많은 정보 +works.chooseBibTex=내보낼 BibTeX 파일 선택하기 +works.retrievingWorkBibTex=BibTeX에서 작업 검색 +works.foundInBibTex=BibTeX에서 발견된 작업물 +works.importWorks=작업을 내 기록으로 가져오기 +works.unableToImport=이 식별자를 이용해 내보낼 수 없습니다. 다른 선택지를 이용해 업적을 추가하십시오. +works.bibtexImporterParsingError=이 파일은 읽을 수 없습니다. BibTeX 포맷을 확인한 후 다시 시도하십시오. +works.addFromPubMed=작업 - pubMed에서 작업 추가하기 +works.typeOrPastePubMed=전체 pubMed URL 또는 설정자 값을 타이핑하거나 붙여넣기 +works.pubMedIdentifier=pubMed 식별자 값 또는 전체 URL +works.retrieveWorkPubMed=pubMed에서 작업 상세 내역 검색하기 +works.urlColon=URL: +works.typeColon=유형: +works.value=값: +works.all=모든 +works.noItemsSelected=선택된 항목 없음 +works.linkWorks=작업 연결하기 +works.linkWorksMoreInfo=ORCID 기록에 작업 연결하기에 대한 더 많은 정보 +works.geographicalArea=지리적 지역 +works.exportSelectedWorks=선택한 작업 내보내기 +works.exportSelectedWorksBibtexDescription=선택된 작업을 BibTeX 파일로 내보내기하세요. BibTeX로 내보내기는 일부 언어에서 문제를 야기할 수 있습니다. +works.findOut=BibTeX 파일로 내보내기에 대해 자세히 알아보기 +works.selectedWorks=내보낼 작업 선택 +works.exportSelectedWorksBibtex=선택된 작업을 BibTeX로 내보내기 +works.combineSelectedWorks=선택한 업적 결합 +works.selectedWorksGrouped=선택된 작업이 함께 그룹으로 묶여 기록상에 단일 그룹 항목으로 표시됩니다. 작업의 모든 버전이 가능하나 그 중 선택한 버전 한 개로 표시됩니다. +works.learnMoreCombining=업적 결합에 대해 자세히 알아보기 +works.selectedWorksCombine=조합할 작업 선택 +works.combiningWorks=작업을 통합하면 되돌릴 수 없습니다! +works.checkSelectedWorks=조합하기 전에 선택한 작품이 맞는지 확인해주세요. +works.subtitleLabel=부제목 +works.language=언어 +works.translatedTitle**=번역된 제목 +works.contributors=기부자 +works.reviewWorkToCombine=결합할 업적 검토 +works.addDoi=DOI 추가 +works.addPubmed=PubMed ID 추가 +works.addBibtex=BibTex 추가 +works.worksToExport=내보낼 작업물 +works.pleaseEnterExternalID=ID 외부 ID를 입력하십시오. +works.onlyIdentifierTypesFundedBy="자금 제공 주체(funded-by)" 식별자를 사용하는 경우 "연구비 번호","디지털 개체 식별자(DOI)", 통합 리소스 식별자(URI)" 또는 "지원서 ID" 식별자만 허용됩니다. +works.publisher=출판사 +works.conferenceTitle=컨퍼런스 이름 +works.bookTitle=책 제목 +works.journalTitle=저널명 +works.magazineTitle=잡지명 +works.newsletterTitle=뉴스레터 이름 +works.newspaperTitle=신문사 +works.institution=기관 +works.custodian=관리인 +works.setsOfSimilarWorkToManage1=ORCID는 발견했습니다 +works.setsOfSimilarWorkToManage2=결합하고자 하는 비슷한 제목의 작업물들 +works.setsOfSimilarWorkToManage3=선택한 작업물들은 하나로 묶여 당신의 기록에서 하나의 그룹 항목으로 보일 것입니다. 모든 버전의 작업물을 사용할 수 있지만 그중 하나가 선호하는 버전으로 보일 것입니다. +works.titleMaxLength=1000자 미만이어야합니다. +works.descriptionMaxLength=5000자 미만이어야 합니다 +works.atLestOneSelfIdRequired=식별자의 "버전"을 이용하기 위해 적어도 하나의 "자가" 식별자가 필요합니다. +works.manageSimilarWorks=비슷한 업적 관리 +works.urlMaxLength=2000자 이하만 가능합니다 +works.more=더 +works.noBibtexEntries=Bibtex 파싱 에러. 다음 파일에서 Bibtex 엔트리를 찾을 수 없습니다 +works.addWorkToOrcid=내 ORCID 기록에 이 작업 추가하기 diff --git a/src/locale/properties/works/works.lr.properties b/src/locale/properties/works/works.lr.properties index 779380d283..bb4fb464f6 100644 --- a/src/locale/properties/works/works.lr.properties +++ b/src/locale/properties/works/works.lr.properties @@ -34,7 +34,7 @@ works.studentPublication=LR works.test=LR works.translation=LR works.website=LR -works.working paperAA=LR +works.working=LR works.disclosure=LR works.license=LR works.patent=LR @@ -76,7 +76,7 @@ works.identifierAssociated=LR works.urlIdentifierHint=LR works.thesis=LR works.artisticPerformance=LR -works.AAA=LR +works.dataManagementPlan=LR works.speech=LR works.object=LR works.software=LR @@ -96,3 +96,76 @@ works.title=LR works.languageOnThisTitle=LR works.link=LR works.unResolved=LR +works.addFromDOI=LR +works.youCanUseFullDOI=LR +works.doiIdentifier=LR +works.retrieveWorkDOI=LR +works.retrievingWorkDOI=LR +works.detailsFromDOI=LR +works.importWork=LR +works.importBibTex=LR +works.importCitations=LR +works.moreInformation=LR +works.chooseBibTex=LR +works.retrievingWorkBibTex=LR +works.foundInBibTex=LR +works.importWorks=LR +works.unableToImport=LR +works.bibtexImporterParsingError=LR +works.addFromPubMed=LR +works.typeOrPastePubMed=LR +works.pubMedIdentifier=LR +works.retrieveWorkPubMed=LR +works.identifier=LR +works.urlColon=LR +works.typeColon=LR +works.value=LR +works.all=LR +works.noItemsSelected=LR +works.linkWorks=LR +works.linkWorksMoreInfo=LR +works.geographicalArea=LR +works.exportSelectedWorks=LR +works.exportSelectedWorksBibtexDescription=LR +works.findOut=LR +works.selectedWorks=LR +works.exportSelectedWorksBibtex=LR +works.combineSelectedWorks=LR +works.selectedWorksGrouped=LR +works.learnMoreCombining=LR +works.selectedWorksCombine=LR +works.combiningWorks=LR +works.checkSelectedWorks=LR +works.description**=LR +works.subtitleLabel=LR +works.language=LR +works.translatedTitle**=LR +works.contributors=LR +works.reviewWorkToCombine=LR +works.setsOfSimilarWorkToManage1=LR +works.setsOfSimilarWorkToManage2=LR +works.setsOfSimilarWorkToManage3=LR +works.addDoi=LR +works.addPubmed=LR +works.addBibtex=LR +works.worksToExport=LR +works.pleaseEnterExternalID=LR +works.onlyIdentifierTypesFundedBy=LR +works.publisher=LR +works.conferenceTitle=LR +works.bookTitle=LR +works.journalTitle=LR +works.magazineTitle=LR +works.newsletterTitle=LR +works.institution=LR +works.custodian=LR +works.newspaperTitle=LR +works.titleMaxLength=LR +works.descriptionMaxLength=LR +works.atLestOneSelfIdRequired=LR +works.manageSimilarWorks=LR +works.urlMaxLength=LR +works.more=LR +works.errorParsingBibtex=LR +works.noBibtexEntries=LR +works.addWorkToOrcid=LR diff --git a/src/locale/properties/works/works.pt.properties b/src/locale/properties/works/works.pt.properties index 859b938bdc..ea943bbe9d 100644 --- a/src/locale/properties/works/works.pt.properties +++ b/src/locale/properties/works/works.pt.properties @@ -1,16 +1,39 @@ work.works=Trabalhos +works.workDetails=Informações da obra +works.identifiers=Identificadores +works.identifier=Identificador works.citation=Citação +works.otherInformation=Outras informações +works.selectAWorkCategory=Selecione uma categoria de obra +works.selectACategory=Selecione uma categoria de obra works.workType=Tipo de trabalho +works.selectWorkType=Selecione um tipo de obra +works.setAWorkTitle=Defina um título para a obra works.addTranslatedTitle=adicionar título traduzido +works.hideTranslatedTitle=Ocultar título da tradução +works.translatedTitle=Título traduzido +works.subtitle=Legenda da Obra +works.invalidUrl=URL inválido +works.linkMoreInformationAbout=Uma hiperligação para mais informações sobre a obra. As hiperligações devem estar no formato de URL completo, por exemplo http://www.website.com/page.html works.citationType=Tipo de citação +works.selectACitation=Selecione um tipo de citação +works.selectACitationType=Selecione um tipo de citação +works.describeThisCitation=Descreva esta citação works.description=Descrição +works.workIds=Identificadores de obras works.type=Tipo de identificador +works.selectAnIdentifier=Selecione um tipo de identificador +works.typeOfIdentifier=O tipo de identificador associado à obra, como ISBN, DOI ou PMID. works.identifierValue=Valor de identificador +works.validFormat=Id inválido para o tipo de identificador selecionado +works.addADescriber=Adicione um id de descritor +works.identifierAssociated=O identificador associado ao projeto. O formato irá depender do tipo de identificador selecionado. works.relationship=Relacionamento works.addAnotherId=Adicionar outro identificador works.languageUsed=Idioma usado neste formulário work.countryPublication=País de publicação works.identifierUrl=Identifier URL +works.urlIdentifierHint=O URL que o identificador deliberar, por exemplo https://doi.org/10.23640/07243.c.4232246 works.abstract=Resumo de conferência works.paper=Artigo de conferência works.poster=Pôster de conferência @@ -18,6 +41,7 @@ works.chapter=Capítulo de livro works.review=Revisão de livro works.book=Livro works.entry=Entrada em dicionário +works.thesis=Dissertação/Tese works.editedBook=Livro Editado works.encyclopediaEntry=Entrada de enciclopédia works.journalArticle=Artigo de revista (Journal) @@ -34,23 +58,111 @@ works.studentPublication=Publicação estudantil supervisionada works.test=Teste works.translation=Tradução works.website=Website -works.working paperAA=Artigo de trabalho +works.working=paperAA=Artigo de trabalho works.disclosure=Divulgação works.license=Licença works.patent=Patente works.copyright=Direito autoral registrado works.trademark=Marca comercial works.annotation=Anotação -works.AAA=Plano de gestão de dados +works.artisticPerformance=Performance artística +works.dataManagementPlan=Plano de gestão de dados works.plan=Conjunto de dados works.invention=Invenção +works.speech=Discurso de palestra +works.object=Objeto físico works.technique=Técnica de pesquisa +works.software=software works.company=Empresa spin off works.policy=Padrões e políticas +works.standard=Padrão Técnico +works.other=Outra saída works.self=Próprio works.partOf=Parte de works.versionOf=Versão de works.fundedBy=Financiado por +works.selfDescription=O identificador aplica-se à própria obra. Por exemplo, um DOI para um capítulo de livro. +works.partOfDescription=O identificador aplica-se a parte de uma obra maior. Por exemplo, o ISBN do livro em que a obra foi publicada. +works.versionOfDescription=O identificador aplica-se a uma versão alternativa da obra. Por exemplo, um rascunho anterior de um artigo. +works.fundedByDescription=O identificador aplica-se ao financiamento para a obra. works.conference=Conferência works.intellectual=Propriedade intelectual works.publication=Publicação +works.countryPublication=País de publicação +works.whoCanSeeWorks=Quem pode ver as suas obras. A configuração de visibilidade padrão é Privada. +works.selectedWorksVisibility=Obras selecionadas para definir a visibilidade +works.setVisibility=Defina a visibilidade das obras selecionadas +works.title=Título +works.languageOnThisTitle=Idioma deste título +works.link=Ligação +works.unResolved=Não encontrámos um recurso correspondente ao identificador que introduziu. Verifique o valor ou introduza uma ligação válida para o recurso. +works.addFromDOI=Projetos - Adicionar projeto do DOI +works.youCanUseFullDOI=Pode utilizar o URL do DOI completo ou apenas o valor do identificador. +works.doiIdentifier=Valor do identificador DOI ou URL completo +works.retrieveWorkDOI=Recuperar informações sobre o projeto do DOI +works.retrievingWorkDOI=A extrair informações da obra do DOI +works.detailsFromDOI=Informações da obra do DOI +works.importWork=Importar obra para o seu registo +works.importBibTex=Projetos - Importar BibTeX +works.importCitations=Importe citações de ficheiros do BibTex (.bib), incluindo ficheiros exportados do Google Scholar. +works.moreInformation=Mais informações sobre como importar ficheiros do BibTeX para ORCID +works.chooseBibTex=Escolha o ficheiro BibTeX para importar +works.retrievingWorkBibTex=A extrair obras do BibTeX +works.foundInBibTex=Obras encontradas no BibTeX +works.importWorks=Importar obra para o seu registo +works.unableToImport=Não é possível importar com este identificador. Adicione trabalho através de outra opção. +works.bibtexImporterParsingError=Este arquivo não pode ser lido. Verifique o formato BibTeX e tente novamente. +works.addFromPubMed=Obras - Adicionar obra do pubMed +works.typeOrPastePubMed=Digite ou cole o URL do pubMed completo ou apenas o valor do identificador +works.pubMedIdentifier=Valor do identificador puMed ou URL completo +works.retrieveWorkPubMed=Extrair informações da obra do pubMed +works.urlColon=URL: +works.typeColon=Tipo: +works.value=Valor: +works.all=Todas +works.noItemsSelected=Nenhum item selecionado. +works.linkWorks=Hiperligação para as obras +works.linkWorksMoreInfo=Mais informações sobre como conectar obras ao seu registo ORCID +works.geographicalArea=Área Geográfica +works.exportSelectedWorks=Exportar obras selecionadas +works.exportSelectedWorksBibtexDescription=Exporte obras selecionadas para um ficheiro BibTeX. Tenha em atenção que exportar para o BibTeX pode causar problemas no texto em alguns idiomas. +works.findOut=Saber mais sobre como exportar ficheiros BibTeX +works.selectedWorks=Obras selecionadas para exportar +works.exportSelectedWorksBibtex=Exportar obras selecionadas para o BibTeX +works.combineSelectedWorks=Combine trabalhos selecionados +works.selectedWorksGrouped=As obras selecionadas serão agrupadas e exibidas como um único item de grupo no seu registo. Todas as versões da obra ainda estarão disponíveis, mas uma será mostrada como a sua versão preferida. +works.learnMoreCombining=Saiba mais sobre a combinação de trabalhos +works.selectedWorksCombine=Selecione obras para combinar +works.combiningWorks=A combinação de obras não pode ser anulada! +works.checkSelectedWorks=Verifique se as obras selecionadas estão corretas antes de combiná-las. +works.subtitleLabel=Subtítulo +works.language=Idioma +works.translatedTitle**=Título traduzido +works.contributors=Contribuidores +works.reviewWorkToCombine=Rever trabalhos a combinar +works.addDoi=Adicionar DOI +works.addPubmed=Adicionar ID PubMed +works.addBibtex=Adicionar BibTeX +works.worksToExport=trabalhos para exportar +works.pleaseEnterExternalID=Insira um ID externo +works.onlyIdentifierTypesFundedBy=Apenas tipos de identificador como "número de licença", "doi", "uri" ou "identificação da proposta" são permitidos quando identificadores "financiado por" são utilizados +works.publisher=Editor +works.conferenceTitle=Título da conferência +works.bookTitle=Título do livro +works.journalTitle=Título da revista +works.magazineTitle=Título da revista +works.newsletterTitle=Título do Folheto Informativo +works.newspaperTitle=Título do jornal +works.institution=Instituição +works.custodian=Conservador +works.setsOfSimilarWorkToManage1=O ORCID encontrou +works.setsOfSimilarWorkToManage2=conjuntos de trabalhos com títulos semelhantes que pode querer combinar. +works.setsOfSimilarWorkToManage3=Os trabalhos selecionados vão ser agrupados e exibidos como um único item de grupo no seu registo. Todas as versões do trabalho ainda vão estar disponíveis, mas uma vai ser apresentada como a sua versão preferida +works.titleMaxLength=Deve conter menos de 1000 caracteres +works.descriptionMaxLength=Deve conter menos de 5000 caracteres +works.atLestOneSelfIdRequired=É necessário pelo menos um identificador "self" (próprio) quando identificadores "version-of" (versão de) são usados +works.manageSimilarWorks=Gerir trabalhos semelhantes +works.urlMaxLength=Tem de ter menos de 2.000 caracteres +works.more=mais +works.noBibtexEntries=Erro na análise da Bibtex. Nenhuma entrada Bibtex encontrada no ficheiro +works.addWorkToOrcid=Adicione este trabalho ao seu registo ORCID diff --git a/src/locale/properties/works/works.rl.properties b/src/locale/properties/works/works.rl.properties index a764a623e7..dce490b1ab 100644 --- a/src/locale/properties/works/works.rl.properties +++ b/src/locale/properties/works/works.rl.properties @@ -34,7 +34,7 @@ works.studentPublication=RL works.test=RL works.translation=RL works.website=RL -works.working paperAA=RL +works.working=RL works.disclosure=RL works.license=RL works.patent=RL @@ -76,7 +76,7 @@ works.identifierAssociated=RL works.urlIdentifierHint=RL works.thesis=RL works.artisticPerformance=RL -works.AAA=RL +works.dataManagementPlan=RL works.speech=RL works.object=RL works.software=RL @@ -88,6 +88,26 @@ works.partOfDescription=RL works.versionOfDescription=RL works.fundedByDescription=RL works.countryPublication=RL +works.addFromDOI=RL +works.youCanUseFullDOI=RL +works.doiIdentifier=RL +works.retrieveWorkDOI=RL +works.retrievingWorkDOI=RL +works.detailsFromDOI=RL +works.importWork=RL +works.importBibTex=RL +works.importCitations=RL +works.moreInformation=RL +works.chooseBibTex=RL +works.retrievingWorkBibTex=RL +works.foundInBibTex=RL +works.importWorks=RL +works.unableToImport=RL +works.bibtexImporterParsingError=RL +works.addFromPubMed=RL +works.typeOrPastePubMed=RL +works.pubMedIdentifier=RL +works.retrieveWorkPubMed=RL works.whoCanSeeWorks=RL works.selectedWorksVisibility=RL works.setVisibility=RL @@ -96,3 +116,56 @@ works.title=RL works.languageOnThisTitle=RL works.link=RL works.unResolved=RL +works.identifier=RL +works.urlColon=RL +works.typeColon=RL +works.value=RL +works.all=RL +works.noItemsSelected=RL +works.linkWorks=RL +works.linkWorksMoreInfo=RL +works.geographicalArea=RL +works.exportSelectedWorks=RL +works.exportSelectedWorksBibtexDescription=RL +works.findOut=RL +works.selectedWorks=RL +works.exportSelectedWorksBibtex=RL +works.combineSelectedWorks=RL +works.selectedWorksGrouped=RL +works.learnMoreCombining=RL +works.selectedWorksCombine=RL +works.combiningWorks=RL +works.checkSelectedWorks=RL +works.description**=RL +works.subtitleLabel=RL +works.language=RL +works.translatedTitle**=RL +works.contributors=RL +works.reviewWorkToCombine=RL +works.setsOfSimilarWorkToManage1=RL +works.setsOfSimilarWorkToManage2=RL +works.setsOfSimilarWorkToManage3=RL +works.addDoi=RL +works.addPubmed=RL +works.addBibtex=RL +works.worksToExport=RL +works.pleaseEnterExternalID=RL +works.onlyIdentifierTypesFundedBy=RL +works.publisher=RL +works.conferenceTitle=RL +works.bookTitle=RL +works.journalTitle=RL +works.magazineTitle=RL +works.newsletterTitle=RL +works.institution=RL +works.custodian=RL +works.newspaperTitle=RL +works.titleMaxLength=RL +works.descriptionMaxLength=RL +works.atLestOneSelfIdRequired=RL +works.manageSimilarWorks=RL +works.urlMaxLength=RL +works.more=RL +works.errorParsingBibtex=RL +works.noBibtexEntries=RL +works.addWorkToOrcid=RL diff --git a/src/locale/properties/works/works.ru.properties b/src/locale/properties/works/works.ru.properties index 3d67b1e1ef..63a7564bbc 100644 --- a/src/locale/properties/works/works.ru.properties +++ b/src/locale/properties/works/works.ru.properties @@ -1,16 +1,39 @@ work.works=Работы +works.workDetails=Сведения о работе +works.identifiers=Идентификаторы +works.identifier=Идентификатор works.citation=Цитирование +works.otherInformation=Другая информация +works.selectAWorkCategory=Выбрать категорию работы +works.selectACategory=Выбрать категорию работы works.workType=Тип работы +works.selectWorkType=Выбрать тип работы +works.setAWorkTitle=Задать заголовок работы works.addTranslatedTitle=добавить перевод названия +works.hideTranslatedTitle=Скрыть заголовок перевода +works.translatedTitle=Перевод названия +works.subtitle=Подзаголовок работы +works.invalidUrl=Неверный URL-адрес +works.linkMoreInformationAbout=Ссылка на дополнительную информацию о данной работе. Ссылки должны быть в полном формате URL, например: http://www.website.com/page.html works.citationType=Тип цитирования +works.selectACitation=Выберите тип цитирования +works.selectACitationType=Выбрать тип цитаты +works.describeThisCitation=Опишите эту цитату works.description=Описание +works.workIds=Идентификаторы работ works.type=Тип идентификатора +works.selectAnIdentifier=Выбрать тип идентификатора +works.typeOfIdentifier=Тип идентификатора, связанного с работой, например ISBN, DOI или PMID. works.identifierValue=Значение идентификатора +works.validFormat=Недействительный идентификатор для выбранного типа идентификатора +works.addADescriber=Добавить идентификатор описателя +works.identifierAssociated=Идентификатор, связанный с работой. Формат будет зависеть от типа выбранного идентификатора. works.relationship=Отношения works.addAnotherId=Добавить другой идентификатор works.languageUsed=Язык, используемый в этой форме work.countryPublication=Страна публикации works.identifierUrl=URL идентификатора +works.urlIdentifierHint=URL-адрес, в который превращается идентификатор, например: https://doi.org/10.23640/07243.c.4232246 works.abstract=Тезисы works.paper=Научная статья для конференции works.poster=Стенды для конференции @@ -18,6 +41,7 @@ works.chapter=Глава книги works.review=Рецензия на книгу works.book=Книга works.entry=Словарная статья +works.thesis=Дипломная работа/диссертация works.editedBook=Редактура книги works.encyclopediaEntry=Статья в энциклопедии works.journalArticle=Статья в научном журнале @@ -34,23 +58,111 @@ works.studentPublication=Совместная публикация студен works.test=Тест works.translation=Перевод works.website=Веб-сайт -works.working paperAA=Рабочий документ +works.working=paperAA=Рабочий документ works.disclosure=Описание изобретения works.license=Лицензия works.patent=Патент works.copyright=Зарегистрированное авторское право works.trademark=Товарный знак works.annotation=Аннотация -works.AAA=План управления данными +works.artisticPerformance=Художественное представление +works.dataManagementPlan=План управления данными works.plan=Массив данных works.invention=Изобретение +works.speech=Лекционная речь +works.object=Физический объект works.technique=Методика исследования +works.software=программное обеспечение works.company=Дочерняя организация works.policy=Стандарты и политики +works.standard=Технический стандарт +works.other=Другой результат works.self=Самостоятельный works.partOf=Часть works.versionOf=Версия works.fundedBy=Источник финансирования +works.selfDescription=Идентификатор относится к самой работе. Например, DOI для главы книги. +works.partOfDescription=Идентификатор применяется к части более крупной работы. Например, ISBN книги, в которой опубликована работа. +works.versionOfDescription=Идентификатор относится к альтернативной версии работы. Например, более ранний черновик статьи. +works.fundedByDescription=Идентификатор относится к финансированию работы. works.conference=Конференция works.intellectual=Интеллектуальная собственность works.publication=Публикация +works.countryPublication=Страна публикации +works.whoCanSeeWorks=Кто может видеть ваши работы. По умолчанию видимость приватная. +works.selectedWorksVisibility=Выбранные работы для установления видимости +works.setVisibility=Установить видимость выбранных работ +works.title=Заголовок +works.languageOnThisTitle=Язык заголовка +works.link=Ссылка +works.unResolved=Мы не смогли найти ресурс, который соответствует введенному вами идентификатору. Пожалуйста, проверьте значение или введите действительную ссылку на ресурс. +works.addFromDOI=Работы - добавить работу из DOI +works.youCanUseFullDOI=Вы можете использовать полную ссылку на цифровой идентификатор объекта или просто значение идентификатора. +works.doiIdentifier=Значение идентификатора DOI или полный URL-адрес +works.retrieveWorkDOI=Получить сведения о работе из DOI +works.retrievingWorkDOI=Извлечение информации о работе из цифрового идентификатора объекта +works.detailsFromDOI=Сведения о работе от DOI +works.importWork=Импортируйте работу в свою запись +works.importBibTex=Работы - импортировать BibTeX +works.importCitations=Импортируйте цитаты из файлов BibTex (.bib), включая файлы, экспортированные из Google Scholar. +works.moreInformation=Дополнительная информация об импорте файлов BibTeX в ORCID +works.chooseBibTex=Выберите файл BibTeX для импорта +works.retrievingWorkBibTex=Идет получение работ из BibTeX +works.foundInBibTex=Найденные работы в BibTeX +works.importWorks=Импортируйте работу в свою запись +works.unableToImport=Невозможно импортировать с помощью этого идентификатора. Пожалуйста, добавьте работу, используя другой вариант. +works.bibtexImporterParsingError=Этот файл не может быть прочитан. Проверьте формат BibTeX и повторите попытку. +works.addFromPubMed=Работы — добавляйте из pubMed +works.typeOrPastePubMed=Введите или вставьте полный URL-адрес pubMed или только значение идентификатора +works.pubMedIdentifier=Значение идентификатора pubMed или полный URL-адрес +works.retrieveWorkPubMed=Получить информацию о работе из pubMed +works.urlColon=URL-адрес: +works.typeColon=Тип: +works.value=Значение: +works.all=Все +works.noItemsSelected=Элементы не выбраны. +works.linkWorks=Привязать работы +works.linkWorksMoreInfo=Подробнее о привязывании работ к вашей записи ORCID +works.geographicalArea=Географическая область +works.exportSelectedWorks=Экспортировать выбранные работы +works.exportSelectedWorksBibtexDescription=Экспортировать выбранные работы в файл BibTeX. Обратите внимание, что экспорт в BibTeX может вызвать проблемы с текстом на некоторых языках. +works.findOut=Узнайте больше об экспорте файлов BibTeX +works.selectedWorks=Выбранные работы для экспортирования +works.exportSelectedWorksBibtex=Экспортировать избранные работы в BibTeX +works.combineSelectedWorks=Совместить +works.selectedWorksGrouped=Выбранные работы будут сгруппированы вместе и отображаться в виде одной группы в вашем списке работ. Доступны будут все версии работы, но в качестве выделенной будет отображаться одна. +works.learnMoreCombining=Узнайте больше об объединении работ +works.selectedWorksCombine=Выбранные работы для объединения +works.combiningWorks=Объединение работ необратимо! +works.checkSelectedWorks=Проверьте правильность выбранных работ перед их объединением. +works.subtitleLabel=Подзаголовок +works.language=Язык +works.translatedTitle**=Перевод названия +works.contributors=Исследователи +works.reviewWorkToCombine=Отрецензированные работы для объединения +works.addDoi=Добавить DOI +works.addPubmed=Добавить PubMed ID +works.addBibtex=Добавить BibTeX +works.worksToExport=работы, которые предстоит экспортировать, +works.pleaseEnterExternalID=Введите сторонний ID +works.onlyIdentifierTypesFundedBy=При использовании идентификаторов "источник финансирования" разрешены только идентификаторы типа "номер гранта", "цио", "уир" или "идентификатор предложения" +works.publisher=издатель +works.conferenceTitle=Название конференции +works.bookTitle=Название книги +works.journalTitle=Заголовок согласно периодическому изданию +works.magazineTitle=Название журнала +works.newsletterTitle=Название рассылки +works.newspaperTitle=Название газеты +works.institution=Организация +works.custodian=Хранитель +works.setsOfSimilarWorkToManage1=В ORCID были найдены +works.setsOfSimilarWorkToManage2=наборы работ с похожими заголовками, которые вы можете захотеть скомбинировать. +works.setsOfSimilarWorkToManage3=Выбранные работы будут сгруппированы вместе и будут представляться как одна группа в вашей записи. Все версии работ будут всё ещё доступны, но одна из них будет представляться как предпочитаемая вами версия. +works.titleMaxLength=Длина не должна превышать 1000 знаков +works.descriptionMaxLength=Длина не должна превышать 5000 символов +works.atLestOneSelfIdRequired=Требуется по меньшей мере один идентификатор «я» при использовании идентификаторов «версия» +works.manageSimilarWorks=Управлять аналогичными работами +works.urlMaxLength=Должно быть меньше 2000 символов +works.more=еще +works.noBibtexEntries=Ошибка парсинга Bibtex. В файле не найдены записи Bibtex +works.addWorkToOrcid=Добавьте эту работу в свой профиль ORCID diff --git a/src/locale/properties/works/works.uk.properties b/src/locale/properties/works/works.uk.properties deleted file mode 100644 index 361e9b124a..0000000000 --- a/src/locale/properties/works/works.uk.properties +++ /dev/null @@ -1,55 +0,0 @@ -work.works=Works -works.citation=Цитування -works.workType=Work type -works.addTranslatedTitle=додати перекладену назву -works.citationType=Тип цитування -works.description=Опис -works.type=Тип ідентифікатора -works.identifierValue=Значення ідентифікатора -works.relationship=Зв'язки -works.addAnotherId=Додати інший ідентифікатор -works.languageUsed=Мова використана в цій формі -work.countryPublication=Країна публікації -works.identifierUrl=URL ідентифікатора -works.abstract=Тези на конференцію -works.paper=Стаття на конференцію -works.poster=Стенди на конференцію -works.chapter=Розділ книги -works.review=Рецензія на книгу -works.book=Книга -works.entry=Словникова стаття -works.editedBook=Коректура книги -works.encyclopediaEntry=Стаття в енциклопедії -works.journalArticle=Стаття в науковому журналі -works.issue=Випуск журналу -works.magazineArticle=Стаття в періодичному виданні -works.manual=Підручник -works.newsletterarticle=Стаття у бюлетені -works.newspaperArticle=Стаття у газеті -works.onlineResource=Ресурс в інтернеті -works.preprint=Preprint -works.report=Звіт -works.tool=Засіб дослідження -works.studentPublication=Стаття спільно із студентом -works.test=Тест -works.translation=Переклад -works.website=Веб-сторінка -works.working paperAA=Робочий документ -works.disclosure=Опис винаходу -works.license=Ліцензія -works.patent=Патент -works.copyright=Зареєстроване авторське право -works.trademark=Товарний знак -works.annotation=Annotation -works.AAA=Data management plan -works.plan=Набір даних -works.invention=Винахід -works.technique=Методика дослідження -works.company=Дочірня організація -works.policy=Стандарти і політики -works.self=Самостійний -works.partOf=Частина -works.versionOf=Version of -works.conference=Конференція -works.intellectual=Інтелектуальна власність -works.publication=Публікація diff --git a/src/locale/properties/works/works.xx.properties b/src/locale/properties/works/works.xx.properties index 513164c1f9..e2444fbbc9 100644 --- a/src/locale/properties/works/works.xx.properties +++ b/src/locale/properties/works/works.xx.properties @@ -34,7 +34,7 @@ works.studentPublication=X works.test=X works.translation=X works.website=X -works.working paperAA=X +works.working=X works.disclosure=X works.license=X works.patent=X @@ -76,7 +76,7 @@ works.identifierAssociated=X works.urlIdentifierHint=X works.thesis=X works.artisticPerformance=X -works.AAA=X +works.dataManagementPlan=X works.speech=X works.object=X works.software=X @@ -96,3 +96,76 @@ works.title=X works.languageOnThisTitle=X works.link=X works.unResolved=X +works.addFromDOI=X +works.youCanUseFullDOI=X +works.doiIdentifier=X +works.retrieveWorkDOI=X +works.retrievingWorkDOI=X +works.detailsFromDOI=X +works.importWork=X +works.importBibTex=X +works.importCitations=X +works.moreInformation=X +works.chooseBibTex=X +works.retrievingWorkBibTex=X +works.foundInBibTex=X +works.importWorks=X +works.unableToImport=X +works.bibtexImporterParsingError=X +works.addFromPubMed=X +works.typeOrPastePubMed=X +works.pubMedIdentifier=X +works.retrieveWorkPubMed=X +works.identifier=X +works.urlColon=X +works.typeColon=X +works.value=X +works.all=X +works.noItemsSelected=X +works.linkWorks=X +works.linkWorksMoreInfo=X +works.geographicalArea=X +works.exportSelectedWorks=X +works.exportSelectedWorksBibtexDescription=X +works.findOut=X +works.selectedWorks=X +works.exportSelectedWorksBibtex=X +works.combineSelectedWorks=X +works.selectedWorksGrouped=X +works.learnMoreCombining=X +works.selectedWorksCombine=X +works.combiningWorks=X +works.checkSelectedWorks=X +works.description**=X +works.subtitleLabel=X +works.language=X +works.translatedTitle**=X +works.contributors=X +works.reviewWorkToCombine=X +works.setsOfSimilarWorkToManage1=X +works.setsOfSimilarWorkToManage2=X +works.setsOfSimilarWorkToManage3=X +works.addDoi=X +works.addPubmed=X +works.addBibtex=X +works.worksToExport=X +works.pleaseEnterExternalID=X +works.onlyIdentifierTypesFundedBy=X +works.publisher=X +works.conferenceTitle=X +works.bookTitle=X +works.journalTitle=X +works.magazineTitle=X +works.newsletterTitle=X +works.institution=X +works.custodian=X +works.newspaperTitle=X +works.titleMaxLength=X +works.descriptionMaxLength=X +works.atLestOneSelfIdRequired=X +works.manageSimilarWorks=X +works.urlMaxLength=X +works.more=X +works.errorParsingBibtex=X +works.noBibtexEntries=X +works.addWorkToOrcid=X diff --git a/src/locale/properties/works/works.zh_CN.properties b/src/locale/properties/works/works.zh_CN.properties index 8f4598776e..244dce1439 100644 --- a/src/locale/properties/works/works.zh_CN.properties +++ b/src/locale/properties/works/works.zh_CN.properties @@ -1,16 +1,39 @@ work.works=作品 +works.workDetails=成果详细信息 +works.identifiers=识别码 +works.identifier=识别码 works.citation=引用 +works.otherInformation=其他信息 +works.selectAWorkCategory=选择成果类型 +works.selectACategory=选择成果类型 works.workType=成果类型 +works.selectWorkType=选择成果类型 +works.setAWorkTitle=设置成果标题 works.addTranslatedTitle=添加翻译的标题 +works.hideTranslatedTitle=隐藏标题翻译 +works.translatedTitle=已翻译的成果标题 +works.subtitle=成果简介 +works.invalidUrl=无效链接 +works.linkMoreInformationAbout=关于该成果更多信息的链接。链接应采用完整的网址格式,例如:http://www.website.com/page.html works.citationType=引用类型 +works.selectACitation=选择引文类型 +works.selectACitationType=选择引文类型 +works.describeThisCitation=描述该引用 works.description=说明 +works.workIds=成果识别码 works.type=标识符类型 +works.selectAnIdentifier=选择识别码类型 +works.typeOfIdentifier=与成果连接的识别码形式,如 ISBN、DOI 或 PMID works.identifierValue=ID +works.validFormat=已选择的识别码类型中有无效的识别码 +works.addADescriber=添加记述者识别码 +works.identifierAssociated=与该成果相关的识别码。格式取决于选定的识别码类型。 works.relationship=关系 works.addAnotherId=添加其他标识符 works.languageUsed=此表单中所用的语言 work.countryPublication=出版物所属国家/地区 works.identifierUrl=标识符 URL +works.urlIdentifierHint=识别码所解析的网址,例如:https://doi.org/10.23640/07243.c.4232246 works.abstract=会议摘要 works.paper=会议报告 works.poster=会议海报 @@ -18,6 +41,7 @@ works.chapter=图书章节 works.review=图书评论 works.book=书籍 works.entry=词条 +works.thesis=学位论文/毕业论文 works.editedBook=编辑的图书 works.encyclopediaEntry=百科词条 works.journalArticle=杂志文章 @@ -34,23 +58,111 @@ works.studentPublication=受监督的学生出版物 works.test=测试 works.translation=翻译 works.website=网站 -works.working paperAA=工作文件 +works.working=工作文件 works.disclosure=披露 works.license=许可 works.patent=专利 works.copyright=注册版权 works.trademark=商标 works.annotation=注释 -works.AAA=数据管理计划 +works.artisticPerformance=艺术表现 +works.dataManagementPlan=数据管理计划 works.plan=数据集 works.invention=发明 +works.speech=讲座发言 +works.object=实物 works.technique=研究方法 +works.software=软件 works.company=剥离公司 works.policy=标准和政策 +works.standard=技术准则 +works.other=其他成果 works.self=自己 works.partOf=部分 works.versionOf=版本: works.fundedBy=资助方 +works.selfDescription=此识别码用于识别成果本身。例如,专著章节的 DOI 识别码。 +works.partOfDescription=此识别码适用于更大的成果。例如,成果所在书籍的 ISBN 识别码。 +works.versionOfDescription=此识别码适用于其他版本的成果。例如论文的草稿版。 +works.fundedByDescription=该识别码适用于该成果的基金。 works.conference=会议 works.intellectual=知识产权 works.publication=出版物 +works.countryPublication=出版物所属国家/地区 +works.whoCanSeeWorks=谁可以看见您的成果。默认仅自己可见。 +works.selectedWorksVisibility=设置已选成果的可见性 +works.setVisibility=设置已选择成果的可见性 +works.title=标题 +works.languageOnThisTitle=此标题的语言 +works.link=链接 +works.unResolved=找不到与输入的标识符相匹配的资源, 请检查该值或输入资源的有效链接。 +works.addFromDOI=成果 - 从 DOI 添加成果 +works.youCanUseFullDOI=您可以使用完整的 DOI 链接或只使用识别码。 +works.doiIdentifier=DOI 识别码或完整网址 +works.retrieveWorkDOI=从 DOI 检索成果详细信息 +works.retrievingWorkDOI=从 DOI 检索成果详细信息 +works.detailsFromDOI=来自 DOI 的成果详细信息 +works.importWork=将成果导入至您的记录 +works.importBibTex=成果 - 导入 BibTeX +works.importCitations=从 BibTex(.bib)文件导入引文,包括从 Google Scholar 导出的文件。 +works.moreInformation=关于将 BibTeX 文件导入 ORCID 的更多信息 +works.chooseBibTex=选择要上传的 BibTeX 文件 +works.retrievingWorkBibTex=从 BibTeX 检索成果 +works.foundInBibTex=在 BibTeX 发现的成果 +works.importWorks=将成果导入您的记录 +works.unableToImport=无法使用此标识符导入。请使用其他选项添加作品。 +works.bibtexImporterParsingError=无法读取此文件。 请检查 BibTeX 格式,然后重试。 +works.addFromPubMed=成果 — 从 pubMed 添加成果 +works.typeOrPastePubMed=输入或粘贴完整的 PubMed 链接或只输入识别码 +works.pubMedIdentifier=pubMed 识别码或完整链接 +works.retrieveWorkPubMed=从 pubMed 获取成果的详细信息 +works.urlColon=网址: +works.typeColon=类型: +works.value=值: +works.all=全部 +works.noItemsSelected=尚未选择任何项目。 +works.linkWorks=链接成果 +works.linkWorksMoreInfo=连接成果与您的 ORCID 记录的更多相关资讯 +works.geographicalArea=地理区域 +works.exportSelectedWorks=导出选定成果 +works.exportSelectedWorksBibtexDescription=选定成果导出至 BibTeX 文件。请注意,导出到 BibTeX 可能会对某些语言的文本造成问题。 +works.findOut=详细了解如何导出 BibTeX 文件 +works.selectedWorks=选定成果导出 +works.exportSelectedWorksBibtex=将选定成果导出至 BibTeX +works.combineSelectedWorks=合并所选作品 +works.selectedWorksGrouped=选定成果将被分组,并在您的记录中作为单独组项显示。成果的所有版本均可用,但其中一个版本将被显示为您的首选版本。 +works.learnMoreCombining=详细了解如何合并作品 +works.selectedWorksCombine=合并已选成果 +works.combiningWorks=合并成果无法撤销! +works.checkSelectedWorks=合并选定成果前请检查其是否准确。 +works.subtitleLabel=副标题 +works.language=语言 +works.translatedTitle**=翻译的标题 +works.contributors=参与者 +works.reviewWorkToCombine=评审待合并的作品 +works.addDoi=添加 DOI +works.addPubmed=添加 PubMed ID +works.addBibtex=添加 BibTeX +works.worksToExport=成果以导出 +works.pleaseEnterExternalID=请输入外部 ID +works.onlyIdentifierTypesFundedBy=使用“资助方”标识符时,仅允许使用“grant number”、“doi”、“uri”或“proposal id”标识符类型 +works.publisher=出版商 +works.conferenceTitle=会议标题 +works.bookTitle=图书标题 +works.journalTitle=期刊标题 +works.magazineTitle=杂志标题 +works.newsletterTitle=时事标题 +works.newspaperTitle=报纸标题 +works.institution=机构 +works.custodian=托管人 +works.setsOfSimilarWorkToManage1=ORCID 找到了 +works.setsOfSimilarWorkToManage2=组你可能想要合并的具有类似标题的成果。 +works.setsOfSimilarWorkToManage3=选定成果将被分组,并在您的记录中作为单独组项显示。成果的所有版本均可用,但其中一个版本将被显示为您的首选版本 +works.titleMaxLength=必须少于 1000 个字符 +works.descriptionMaxLength=必须少于 5000 个字符 +works.atLestOneSelfIdRequired=使用“version-of”标识符时,至少需要一个“self”标识符。 +works.manageSimilarWorks=管理类似作品 +works.urlMaxLength=必须少于 2000 个字符 +works.more=更多 +works.noBibtexEntries=解析 Bibtex 时出错。在文件中找不到 Bibtex 条目 +works.addWorkToOrcid=将此作品添加到您的 ORCID 记录中 diff --git a/src/locale/properties/works/works.zh_TW.properties b/src/locale/properties/works/works.zh_TW.properties index 0d92d31cb6..be9d0cf400 100644 --- a/src/locale/properties/works/works.zh_TW.properties +++ b/src/locale/properties/works/works.zh_TW.properties @@ -1,16 +1,39 @@ work.works=研究作品 +works.workDetails=工作詳細內容 +works.identifiers=識別碼 +works.identifier=識別碼 works.citation=參考文獻 +works.otherInformation=其他資訊 +works.selectAWorkCategory=選擇工作類別 +works.selectACategory=選擇工作類別 works.workType=作品類別 +works.selectWorkType=選擇工作形式 +works.setAWorkTitle=創建工作標題 works.addTranslatedTitle=新增翻譯的標題 +works.hideTranslatedTitle=隱藏標題翻譯 +works.translatedTitle=工作標題翻譯 +works.subtitle=工作副標 +works.invalidUrl=無效的網址 +works.linkMoreInformationAbout=內含更多工作相關資訊的連結。連結格式必須為完整網址,如 http://www.website.com/page.html works.citationType=參考文獻類別 +works.selectACitation=選擇引用形式 +works.selectACitationType=選擇引用形式 +works.describeThisCitation=描述該引用 works.description=描述 +works.workIds=工作識別碼 works.type=識別碼類別 +works.selectAnIdentifier=選擇識別碼形式 +works.typeOfIdentifier=與工作連結的識別碼形式,如 ISBN、DOI 或 PMID。 works.identifierValue=ID +works.validFormat=已選擇的識別碼形式中無效的識別碼 +works.addADescriber=新增記述者識別碼 +works.identifierAssociated=此識別碼與工作連結。格式會依選擇的識別碼形式有所不同。 works.relationship=關係 works.addAnotherId=新增其他識別碼 works.languageUsed=此表單中所用的語言 work.countryPublication=出版物所屬國家/地區 works.identifierUrl=識別碼 URL +works.urlIdentifierHint=代表識別碼的網址,例如: https://doi.org/10.23640/07243.c.4232246 works.abstract=會議摘要 works.paper=會議報告 works.poster=會議海報 @@ -18,6 +41,7 @@ works.chapter=圖書章節 works.review=圖書評論 works.book=書籍 works.entry=詞條 +works.thesis=專稿/論文 works.editedBook=編輯的圖書 works.encyclopediaEntry=百科詞條 works.journalArticle=雜誌文章 @@ -34,23 +58,111 @@ works.studentPublication=受監督的學生出版物 works.test=測試 works.translation=翻譯 works.website=網站 -works.working paperAA=工作檔案 +works.working=工作檔案 works.disclosure=洩漏 works.license=許可 works.patent=專利 works.copyright=註冊版權 works.trademark=商標 works.annotation=註解 -works.AAA=資料管理計劃 +works.artisticPerformance=藝術性表現 +works.dataManagementPlan=資料管理計劃 works.plan=資料集 works.invention=發明 +works.speech=講座演講 +works.object=具體物品 works.technique=研究方法 +works.software=軟體 works.company=剝離公司 works.policy=標準和政策 +works.standard=技術準則 +works.other=其他產出 works.self=自己 works.partOf=部分 works.versionOf=版本 works.fundedBy=資助者 +works.selfDescription=此識別碼適用於工作本身。例如,書籍章節的 DOI 識別碼。 +works.partOfDescription=此識別碼適用於更大工作的其中一部分。例如,工作發佈時的書籍 ISBN 識別碼。 +works.versionOfDescription=此識別碼適用於其他版本的工作。例如文章先前版本的草稿。 +works.fundedByDescription=此識別碼適用於該工作的補助。 works.conference=會議 works.intellectual=智慧財產 works.publication=出版物 +works.countryPublication=出版物所屬國家/地區 +works.whoCanSeeWorks=誰可以看到您的工作。預設可見性為私人。 +works.selectedWorksVisibility=欲設定可見性的已選擇工作 +works.setVisibility=設定已選擇工作的可見性 +works.title=標題 +works.languageOnThisTitle=此標題的語言 +works.link=連結 +works.unResolved=找不到與輸入的標識符相匹配的資源,請檢查該值或輸入資源的有效鏈接。 +works.addFromDOI=工作—從 DOI 新增工作 +works.youCanUseFullDOI=您可以使用完整的 DOI 網址或識別碼數值。 +works.doiIdentifier=DOI 識別碼數值或完整網址 +works.retrieveWorkDOI=由 DOI 獲得工作的詳細內容 +works.retrievingWorkDOI=正在由 DOI 獲得工作的詳細內容 +works.detailsFromDOI=來自 DOI 的工作詳細內容 +works.importWork=匯入工作至您的紀錄 +works.importBibTex=工作—匯入 BibTeX +works.importCitations=由 BibTex (.bib 形式檔案) 匯入引用,包含由 Google Scholar 匯出的檔案。 +works.moreInformation=更多匯入 BibTeX 檔案至 ORCID 的相關資訊 +works.chooseBibTex=選擇要匯入的 BibTeX 檔案 +works.retrievingWorkBibTex=由 BibTeX 獲得工作 +works.foundInBibTex=於 BibTeX 中找到的工作 +works.importWorks=匯入工作至您的紀錄 +works.unableToImport=無法用此識別碼匯入。請用不同選項加入作品。 +works.bibtexImporterParsingError=無法讀取此檔案。 請檢查 BibTeX 格式,然後重試。 +works.addFromPubMed=工作—從 pubMed 新增工作 +works.typeOrPastePubMed=輸入或貼上完整的 pubMed 網址或識別碼數值 +works.pubMedIdentifier=pubMed 識別碼數值或完整網址 +works.retrieveWorkPubMed=由 pubMed 獲得工作的詳細內容 +works.urlColon=網址: +works.typeColon=類型: +works.value=值: +works.all=全部 +works.noItemsSelected=尚未選擇任何物件。 +works.linkWorks=連結工作 +works.linkWorksMoreInfo=更多與連結您的工作與 ORCID 紀錄的相關資訊 +works.geographicalArea=地理區域 +works.exportSelectedWorks=匯出已選擇的工作 +works.exportSelectedWorksBibtexDescription=以 BibTeX 檔案匯出已選擇的工作。敬請留意某些語言可能在匯出為 BibTeX 檔案時發生錯誤。 +works.findOut=暸解關於輸出 BibTeX 檔案的更多資訊 +works.selectedWorks=欲匯出的已選擇工作 +works.exportSelectedWorksBibtex=匯出已選擇的工作至 BibTeX +works.combineSelectedWorks=合併所選研究 +works.selectedWorksGrouped=已選擇的工作會歸類為同一群組,並以一個單一的群組物件顯示在您的紀錄上。您可以查看此工作的所有版本,但僅有一個版本會作為您的偏好版本顯示。 +works.learnMoreCombining=暸解更多關於結合作品的資訊 +works.selectedWorksCombine=欲合併的已選擇工作 +works.combiningWorks=合併工作無法復原! +works.checkSelectedWorks=敬請於合併已選擇工作前,確認它們正確無誤。 +works.subtitleLabel=副標題 +works.language=語言 +works.translatedTitle**=翻譯的標題 +works.contributors=投稿人 +works.reviewWorkToCombine=檢閱欲合併的研究 +works.addDoi=新增 DOI +works.addPubmed=添加 PubMed ID +works.addBibtex=新增 BibTeX +works.worksToExport=要匯出的著作 +works.pleaseEnterExternalID=請輸入外部 ID +works.onlyIdentifierTypesFundedBy=使用「資助者」標識符時,僅可使用標識符類型「補助金」、「DOI」、「URI」或「提案 ID」 +works.publisher=出版商 +works.conferenceTitle=會議標題 +works.bookTitle=圖書標題 +works.journalTitle=期刊標題 +works.magazineTitle=雜誌標題 +works.newsletterTitle=時事標題 +works.newspaperTitle=報紙標題 +works.institution=機構 +works.custodian=保管人 +works.setsOfSimilarWorkToManage1=ORCID 已找到 +works.setsOfSimilarWorkToManage2=您可能想要合併的具有相似標題的著作集。 +works.setsOfSimilarWorkToManage3=選取的著作將被設為同一個群組,並在您的記錄中顯示為單個群組項目。著作的所有版本將仍然可用,但其中一個版本會顯示為您偏好的版本 +works.titleMaxLength=必須少於 1000 個字元 +works.descriptionMaxLength=必須少於 5000 個字元 +works.atLestOneSelfIdRequired=使用「版本」識別碼時至少需要一個「自我」識別碼 +works.manageSimilarWorks=管理類似的研究 +works.urlMaxLength=必須少於 2,000 個字符 +works.more=更多 +works.noBibtexEntries=剖析 Bibtex 時發生錯誤,檔案中查無 Bibtex 項目 +works.addWorkToOrcid=將此工作新增至您的 ORCID 紀錄 diff --git a/src/styles.scss b/src/styles.scss index 1e1d7439e4..1dfa584c12 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -5,7 +5,7 @@ } .extra-large-material-icon { - font-size: 36px; + transform: scale(1.5); } .large-material-icon { diff --git a/yarn.lock b/yarn.lock index a679546d5b..d0738afabd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1594,6 +1594,11 @@ node-gyp "^7.1.0" read-package-json-fast "^2.0.1" +"@orcid/bibtex-parse-js@0.0.25": + version "0.0.25" + resolved "https://registry.yarnpkg.com/@orcid/bibtex-parse-js/-/bibtex-parse-js-0.0.25.tgz#3a4996d2339cab55ab6e43849cc791efa7a35418" + integrity sha512-n6VuG5/WjiifC1DoUzq0sUCWNSbAyRZznBgvPcY4jVZ/2eJiMv2tNUAt2NukbnFExOUa0RyTOFsqhH2MGpiLgQ== + "@phenomnomnominal/tsquery@^4.0.0": version "4.1.1" resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz#42971b83590e9d853d024ddb04a18085a36518df" @@ -12070,9 +12075,9 @@ url-parse-lax@^1.0.0: prepend-http "^1.0.1" url-parse@^1.4.3, url-parse@^1.4.7: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + version "1.5.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" From 1bbc32014bcf65360b91a91268f1657bd78fc55e Mon Sep 17 00:00:00 2001 From: Angel Montenegro Date: Wed, 1 Dec 2021 15:47:42 -0600 Subject: [PATCH 2/5] release-2.6.9 is live (#1401) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Rever not-verified user allow to use search and links (#1266) * style: Actions aligned in modal websites (#1267) * fix: Modify default sor in research resource end point (#1268) * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Fix/add manage similar works modal (#1269) * Rever not-verified user allow to use search and links * Fix testing and change title * 🤖 GITHUB ACTIONS: formatting 🤖 * Allow user to merge works * Reload on work reload * Remove logs * fix i18n * Fix i18n * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Handle no selected works * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * 7703 qamy orcid fix order of works section header action buttons (#1271) * Rever not-verified user allow to use search and links * Fix testing and change title * 🤖 GITHUB ACTIONS: formatting 🤖 * Allow user to merge works * Reload on work reload * Remove logs * fix i18n * Fix i18n * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Handle no selected works * Fix works menu * Add testing languages * Fix link (#1270) * Transifex (#1272) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Force reload on record OnInit (#1277) * Fixed focus for fundings external ids (#1273) * Fixed focus for fundings external ids * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the 500 on create a copy or a work (#1275) * Fixed the 500 on create a copy or a work * 🤖 GITHUB ACTIONS: formatting 🤖 * Transifex (#1278) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * Fixed the focus for external identifiers when editing works (#1274) * Fixed the focus for external identifiers when editing works * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Limit number of items to display in export works modal (#1279) * fix: Limit number of items to display in export works modal * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fixing editing publication date on works (#1280) * Fixing editing publication date on works * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Moving translations from the registry * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix names unique * Revert "Fix names unique" This reverts commit d3e96baba9001b658321b154b0b80f7715fc9c7e. * Done (#1281) * Fix/multiple external id fixes (#1282) * 7722-qamy-orcid-allow-users-to-enter-dois-that-we-cannot-validate * Add translation string * 7723-qamy-orcid-valid-doi-url-not-recognized * Fix small issues * 7720-qamy-orcid-error-message-not-displayed-when-trying-to-save-work-without-external-id * Fix small isssues * Rearrage code * Remove logs * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Improve naming * fix Dani comment * Fix grouping function (#1283) * fix: Remove keyvalue pipe sort properties (#1284) * fix: Remove keyvalue pipe sort properties * 🤖 GITHUB ACTIONS: formatting 🤖 * 7710 qamy orcid impossible to export all works at once when theres pagination 2 (#1285) * fix: Add `Export all works` button * fix: Revert select all functionality and fix export all function * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/7729 qamy orcid user and member obo source not displayed when applying bulk actions (#1286) * style: Border-line misaligned * fix: Add obo to combine, export and visibility modals * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix NPE on validating works (#1287) * Fix NPE on validating works * 🤖 GITHUB ACTIONS: formatting 🤖 * NPE (#1288) * Fixed typos (#1290) * Fix/7714 qamy orcid fix field name for journal title publisher (#1291) * fix: Rename mislabeled properties * fix: Add missing updated property * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/7718 qamy orcid when i change the visibility setting of a work inside the modal the visibility indicator in the works section is not (#1292) * 7722-qamy-orcid-allow-users-to-enter-dois-that-we-cannot-validate * Add translation string * 7723-qamy-orcid-valid-doi-url-not-recognized * Fix small issues * 7720-qamy-orcid-error-message-not-displayed-when-trying-to-save-work-without-external-id * Fix small isssues * Rearrage code * Remove logs * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Improve naming * fix Dani comment * Fix wrong form validation * Fix works refresh after save * 7730 qamy orcid no error message when saving work with citation but no citation type (#1289) * Added validators for citation and translated title * added the common properties for translated title error * Fixed citation message * Fixed styling of error * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: Angel Montenegro * Add funding relation validation (#1293) * Resolve generated urls (#1294) * Fix merge works suggestions copy * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/7737 qamy orcid auto select relationship type for isbn depending on work type (#1295) * fix: Add auto select to work type * fix: Add auto select to relationship * 🤖 GITHUB ACTIONS: formatting 🤖 * Clone Orcid Source values * fix: Add missing title label for some work types (#1297) * fix: Remove commented code and add missing template reference variable (#1298) * fix: Remove commented code and add missing template reference variable * 🤖 GITHUB ACTIONS: formatting 🤖 * feat: Add tooltip for privacy selector (#1300) * feat: Add tooltip for privacy selector * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/blocker works modal and sync transifex changes (#1299) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Clone Orcid Source values * Fix works blockers * Fix valid format error on red * Use value changes to handle external type udpates * remove logs * remove logs * Remove not use variable * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix udpates * Fix external id url normalization * Format * Format * Remove debug data Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * Fix/7747 qamy orcid issues selecting works in bulk delete modal (#1301) * fix: Add missing message info if there wasnt items selected and add call to detect changes in the UI * style: Add missing style class to no info message * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Add count works validation (#1302) * fix: Add count works validation * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Add missing property in works (#1308) * fix: Add missing property in works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fixed placeholders inside work modal (#1303) * Fixed placeholders inside work modal * removed log console * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Angel Montenegro * Disable menu items for actions menu when no elements are selected (#1304) * Disable menu items for actions menu when no elements are selected * 🤖 GITHUB ACTIONS: formatting 🤖 * Update work-stack-group.component.html Co-authored-by: Angel Montenegro * Fixed the visibility default setting for biography (#1305) * Fixed the visibility default setting for biography * Added the additional props to X, LR and RL files * fixed the property name in localize for whoCanSeeBio * Fixed the default visibility for change bulk works * Removed console.log * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the missing language name for works (#1306) * Fixed the missing language name for works * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed funding translated title language (#1307) * Fixed funding translated title language * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Export all works error and add no items selected message (#1309) * fix: Export all works error and add no items selected message * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Only export preferred work * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Display visibility tooltip at the top of the selector (#1310) * Fix/blocker (part-of relation) validation on works modal (#1311) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Clone Orcid Source values * Fix works blockers * Fix valid format error on red * Use value changes to handle external type udpates * remove logs * remove logs * Remove not use variable * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix udpates * Fix external id url normalization * Format * Format * Remove debug data * Add comments * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * Added error messages for max length in work title, subtitle, journal title, description (#1312) * Added error messages for max length in work title, subtitle, journal title and description * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: Angel Montenegro * Fix build works delete (#1316) * Paula review fixes (#1313) * Paula review fixes * 🤖 GITHUB ACTIONS: testing languages 🤖 * various fixes for visibility, additional maxlength checks (#1314) * various fixes for visibility, additional maxlength checks * 🤖 GITHUB ACTIONS: formatting 🤖 * disable click when no selected works to combine (#1315) * 7761 qamy orcid fix position of visibility selector in mobile version (#1317) * Fix build works delete * Fix mobile titles * pull-from-transifex * add translation clones * Apply translations in ca translation completed for the source file '/src/locale/properties/environment-banner/environment-banner.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/institutional/institutional.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ca' language. * fix: counter inside export works modal (#1319) * fix: counter inside export works modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/7752 qamy orcid fix position of visibility tooltip (#1318) * style: Fix visibility tooltip alignment inside modals * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Add bottom visibility tooltip alignment * fix: remove todo comment * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in it translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'it' language. * Fixed sorting in search and link work wizards (#1320) * Fixed sorting in search and link work wizards * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed visibility text inconsistencies between sections (#1321) * Fixed visibility text inconsistencies between sections * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the adding work from bibtex (#1323) * Fixed the adding work from bibtex * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: enable button Managing similar works without need to select any … (#1327) * fix: enable button Managing similar works without need to select any checkbox * 🤖 GITHUB ACTIONS: formatting 🤖 * Attempt to fix the bulk delete error that cannot be reproduced in dev (#1325) * Fixed double spacing (#1322) * Open the bibtex link in a new tab (#1324) * Open the bibtex link in a new tab * fix: Add missing attribute to a tag Co-authored-by: Daniel Palafox * fix: deselect works, if cancel button is clicked or the modal is closed (#1326) * fix: deselect works, if cancel button is clicked or the modal is closed * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix validations on pubmed (#1328) * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_TW' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Update environment-banner.uk.properties * sync with TX * 🤖 GITHUB ACTIONS: testing languages 🤖 * Transifex (#1333) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Clone Orcid Source values * pull-from-transifex * add translation clones * Apply translations in ca translation completed for the source file '/src/locale/properties/environment-banner/environment-banner.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/institutional/institutional.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ca' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in it translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'it' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_TW' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Update environment-banner.uk.properties * sync with TX * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Leonardo Mendoza Fernadez * fix: select All issue in delete modal (#1335) * fix: select All issue in delete modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the css for displaying pubMed error (#1330) * Fixed the css for displaying pubMed error * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Angel Montenegro * Added validation for max URL limit (#1332) * Added validation for max URL limit * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the broken test * 7773 qamy orcid max character limit error messages missing in funding modal (#1334) * Fixed the error display/validations for funding * Fixed spelling errors * Fixed formatting errors * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fixed double spacing in funding detail (#1336) * fix: only display delete button if `other sources` is clicked in grou… (#1337) * fix: only display delete button if `other sources` is clicked in grouped activities * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the no-error message when invalid id (#1331) * Fixed the no-error message when invalid id * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Angel Montenegro * Fixed importing from bibtext with publication date and console error (#1338) * Fixed importing from bibtext with publication date and console error * Fix CI formatting error * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Call getWorks method only once when works have been imported via BibTeX * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Daniel Palafox * Fixed the default visibility label in edit work (#1339) * Fixed the default visibility label in edit work * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/7704 qamy orcid new functionality for contributors in works not implemented (#1329) * feature: Add contributors list in the description works * feature: Add contributors in works summary panel * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * fix: Add new variable for contributors * fix: add missing change * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Remove uppercase from contributors * Revert "fix: Remove uppercase from contributors" This reverts commit 087422ec84c3c5276d4ae7302e94c2d1790b393d. * fix: CI internalization error * fix: update href attribute to the correct article (#1340) * Feature/remove qa segment (#1341) * Fix remove qa segment * Use angular navigator for register, signin and signout * clean up * 🤖 GITHUB ACTIONS: formatting 🤖 * Remove ORCID_ANGULAR_INBOX togglz (#1073) * remove orcid_angular_inbox togglz * Remove togglz service Co-authored-by: Angel Montenegro * fix: date validator for firefox (#1347) * Fixed the button size (#1345) * Fix on enter action (#1342) * Fix not visible mobile button: (#1343) * Clean cache/remove zoombie sessions (#1348) * Clean up zoombie session * Remove query parameters on logout * Remove logs * fix translations * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the visibility for affiliations and funding (#1349) * Fixed the visibility for affiliations and funding * 🤖 GITHUB ACTIONS: formatting 🤖 * Show sidebars for doi and bibtext modals (#1350) * feature: Add togglz for work contributors in work summary (#1346) * feature: Add togglz for work contributors in work summary * fix: Duplicate call to getDetails * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Add todo comment * fix: Leo comments * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the max length validator for translated title and region in funding (#1351) * Added the max length valdator for translated title and region in funding * 🤖 GITHUB ACTIONS: formatting 🤖 * Added external Ids to bibtex modal (#1344) * Added external Ids to bibtex modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the URL if present in bibtex * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the translation for URL * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the translation for the max work subtitle (#1352) * Fixed the translation for the max work subtitle * Fixed the CI * fix: Add error bibtex message (#1353) * fix: Add error bibtex message * 🤖 GITHUB ACTIONS: testing languages 🤖 * style: fix font size bibtex error * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the max length errors for affiliations (#1355) * Added the max length errors for affiliations * 🤖 GITHUB ACTIONS: formatting 🤖 * added the separation between the 2 error messages (#1356) * added the separation between the 2 error messages * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the button sizing css * fix: Add trailing zero to month in date validator (#1357) * fix: Add trailing zero to month in date validator * style: Fix modal padding for ie11 * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Fix width for translated title inputs in modal funding (#1359) * Fix/7797 qamy orcid the import bibtex modal doesnt need side navigation links (#1360) * fix: Remove side-bar in modal bibtex * style: Truncate long title in bibtex modal * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Add code tag and refactor bibtex error messages (#1354) * style: Add code tag and refactor bibtex error messages * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * fix: Remove unused variable * Update src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts Co-authored-by: leomendoza123 * Update src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts Co-authored-by: leomendoza123 * Update src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts Co-authored-by: leomendoza123 Co-authored-by: leomendoza123 * Cache management improvements (#1358) * Cache management improvements * Add TODO * Orcid email verification modal not displayed when signing in (#1361) * 7796-qamy-orcid-email-verification-modal-not-displayed-when-signing-in * handle subscription * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/7794 qa my orcid translated errors partially hidden in add work from doi modal (#1363) * fix: Remove checkbox from public page * fix: Remove footer in external id if there is no work * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Update initial set to start and end dates in affiliation form (#1364) * fix: Update initial set to start and end dates in affiliation form * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Update variables to optional to remove console log errors (#1365) * fix: Update variables to optional to remove console log errors * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the display of biography and names in public record and my orcid (#1367) * Fixed the display of biography and names in public record and my orcid * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed refreshing of names/biography after editing in my-orcid (#1368) * Fixed the display of biography and names in public record and my orcid * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the refreshing of names biography after editing * 🤖 GITHUB ACTIONS: formatting 🤖 * tx pull -f * Fixed the menu item truncated text (#1369) * Fixed the menu item truncated text * 🤖 GITHUB ACTIONS: formatting 🤖 * clear the error before parsing new bibtex file (#1370) * 7774 qamy orcid max character limit error messages missing in affiliations modal (#1371) * Added the max length errors for affiliations * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the missing max-length error for department * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Remove fixed width Bibtex button (#1372) * style: Remove fixed width Bibtex button * style: Fix issues with long translations * Added the new text for Saving external-id modal (#1373) * Improve date validatio (#1374) * Improve date validatio * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Update how reactive form is created (#1376) * fix: Update how reactive form is created * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/314 qamy orcid duplicate email not detected when entered with a different letter case (#1377) * fix: Duplicated email logic * fix: Resend verification button in my orcid * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/relationship translations (#1378) * Improve date validatio * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix work relationship and imrprove date validators * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Disable delete button if is it loading and fix export reactive form… (#1379) * fix: Disable delete button is it loading and fix export reactive form error * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix guard to handle cookie miss match * tx pull -f * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Remove updated string * Fix guard to handle cookie miss match (#1380) * Fix guard to handle cookie miss match * fix comments * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/language refresh redirect fix (#1381) * Fix guard to handle cookie miss match * Fix language guard * Set default redirects * Fix comments * Fix/modal export explorer and safari (#1382) * Fix guard to handle cookie miss match * Fix modal export explorer-safary * Apply translations in es translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'es' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ru' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in it translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'it' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'fr' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * 7815 qa remove redundant required information tag when a section has no mandatory fields (#1383) * Fix guard to handle cookie miss match * Fix modal export explorer-safary * Remove unwanted tag * Revert "Remove unwanted tag" This reverts commit f16aa57be18274227fa9aa008e5c56f6954d8624. * Remove unwanted message * 7809 qamy orcid export works button text not entirely visible in mobile devices (#1384) * Fix guard to handle cookie miss match * update mobile supprot for modals * fix: Add missing text in email verification banner (#1386) * fix: Add missing text in email verification banner * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed multiple modals display after signin (#1385) * Fixed multiple modals display after signin * Second attempt of fixing the multiple display of unverified modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the wrong route for self service (#1387) * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Force pull * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Remove NEW_INFO_SITE togglz (#1043) * remove togglz related code * environment const cleanup * 🤖 GITHUB ACTIONS: formatting 🤖 * remove togglz injection Co-authored-by: Angel Montenegro * Fixed the undefined error when calling filter (#1391) * fix: Update external identifier validation in async validator (#1392) * fix: Update external identifier validation in async validator * 🤖 GITHUB ACTIONS: formatting 🤖 * Peer review fixes (#1393) * Peer review fixes Hide peer review section if no reviews. Do not display Add button for peer reviews * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the check for QA the add button and peer section displayed just for QA env * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Counter in bibtex importer (#1394) * fix: Update url orcid parameter when switch between users (#1397) * fix: Update url orcid parameter when switch between users * 🤖 GITHUB ACTIONS: formatting 🤖 * Moved the display modal logic inside subscribe ( not pipe) (#1395) * Moved the display modal logic inside subscribe ( not pipe) * 🤖 GITHUB ACTIONS: formatting 🤖 * Change work to works (#1396) * check for undefined instead of empty to emit event when last review is deleted and the array is empty (#1398) * check for undefined instead of empty to emit event when the last review is deleted and array is empty * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix NPE when website.urlName is null (#1399) * Fix NPE when website.urlName is null * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: leomendoza123 Co-authored-by: Daniel Palafox Co-authored-by: Camelia <62257307+Camelia-Orcid@users.noreply.github.com> Co-authored-by: andrej romanov <50377758+auumgn@users.noreply.github.com> --- .../cdk/panel/panels/panels.component.html | 11 +- src/app/cdk/panel/panels/panels.component.ts | 6 +- .../modal-websites.component.ts | 11 +- src/app/core/news/news.service.ts | 79 +-- src/app/core/user-info/user-info.service.ts | 19 +- .../home/components/news/news.component.ts | 2 +- src/app/layout/footer/footer.component.ts | 8 +- src/app/layout/header/header.component.html | 12 +- src/app/layout/header/header.component.ts | 9 - src/app/layout/header/menu.ts | 589 ------------------ src/app/layout/search/search.component.html | 19 +- src/app/layout/search/search.component.ts | 9 - .../peer-review-stacks-groups.component.html | 2 +- .../peer-review-stacks-groups.component.ts | 10 +- .../components/top-bar/top-bar.component.ts | 40 +- .../work-form/work-form.component.ts | 16 +- .../work-bibtex-modal.component.html | 6 +- .../components/step-a/step-a.component.ts | 3 +- .../environment-check/environment-check.ts | 3 + src/environments/environment.int.ts | 6 +- src/environments/environment.local.tomcat.ts | 1 - src/environments/environment.local.ts | 10 +- .../environment.local.with.sandbox.ts | 1 - src/environments/environment.production.ts | 6 +- src/environments/environment.qa.ts | 6 +- src/environments/environment.sandbox.ts | 6 +- .../properties/works/works.en.properties | 2 +- 27 files changed, 130 insertions(+), 762 deletions(-) create mode 100644 src/app/shared/validators/environment-check/environment-check.ts diff --git a/src/app/cdk/panel/panels/panels.component.html b/src/app/cdk/panel/panels/panels.component.html index 552b5d8ffe..3c606cbb3c 100644 --- a/src/app/cdk/panel/panels/panels.component.html +++ b/src/app/cdk/panel/panels/panels.component.html @@ -4,6 +4,11 @@ [ngClass]="{ 'sub-peer-review': type === 'sub-peer-review' }" + *ngIf=" + IS_QA || + type !== 'peer-review' || + (type === 'peer-review' && currentAmount > 0) + " >
Add
-
(this.togglzOrcidAngularSearch = value)) - _togglz.getStateOf('NEW_INFO_SITE').subscribe((value) => { - this.togglzNewInfoSite = value - if (!this.togglzNewInfoSite) { - this.searchPlaceHolder = this.firstLetterUppercase( - $localize`:@@ngOrcid.searchNewInfo:Search the ORCID registry` - ) - } - }) router.events.subscribe( () => diff --git a/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.html b/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.html index d921b85ce7..537a9a2c75 100644 --- a/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.html +++ b/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.html @@ -81,7 +81,7 @@ - +

Connect to trusted organizations to automatically add your peer review diff --git a/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.ts b/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.ts index 9c38196c1d..a1d588605d 100644 --- a/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.ts +++ b/src/app/record/components/peer-review-stacks-groups/peer-review-stacks-groups.component.ts @@ -11,7 +11,6 @@ import { PeerReviewDuplicateGroup, } from '../../../types/record-peer-review.endpoint' import { ModalPeerReviewsComponent } from './modals/modal-peer-reviews/modal-peer-reviews.component' -import { isEmpty } from 'lodash' import { SortData } from 'src/app/types/sort' import { MainPanelsState, @@ -19,6 +18,7 @@ import { UserRecordOptions, } from 'src/app/types/record.local' import { VisibilityStrings } from '../../../types/common.endpoint' +import { isQA } from 'src/app/shared/validators/environment-check/environment-check' @Component({ selector: 'app-peer-reviews', @@ -43,6 +43,7 @@ export class PeerReviewStacksGroupsComponent implements OnInit { $destroy: Subject = new Subject() userRecordContext: UserRecordOptions = {} + IS_QA: boolean userSession: { userInfo: UserInfo @@ -82,6 +83,7 @@ export class PeerReviewStacksGroupsComponent implements OnInit { ngOnInit(): void { this.getRecord() + this.IS_QA = isQA() } trackByPeerReviewGroup(index, item: PeerReviewDuplicateGroup) { @@ -116,7 +118,7 @@ export class PeerReviewStacksGroupsComponent implements OnInit { if (userRecord?.peerReviews !== undefined) { this.loading = false } - if (!isEmpty(userRecord?.peerReviews)) { + if (userRecord?.peerReviews !== undefined) { this.peerReviews = userRecord.peerReviews this.total.emit(this.peerReviews.length) } @@ -205,4 +207,8 @@ export class PeerReviewStacksGroupsComponent implements OnInit { } } } + + isQA(): boolean { + return isQA() + } } diff --git a/src/app/record/components/top-bar/top-bar.component.ts b/src/app/record/components/top-bar/top-bar.component.ts index 68a44f47a8..19fcf048c7 100644 --- a/src/app/record/components/top-bar/top-bar.component.ts +++ b/src/app/record/components/top-bar/top-bar.component.ts @@ -3,7 +3,7 @@ import { UserRecord } from '../../../types/record.local' import { PlatformInfo, PlatformInfoService } from '../../../cdk/platform-info' import { ModalNameComponent } from './modals/modal-name/modal-name.component' import { ModalBiographyComponent } from './modals/modal-biography/modal-biography.component' -import { takeUntil, tap } from 'rxjs/operators' +import { takeUntil } from 'rxjs/operators' import { Subject } from 'rxjs' import { UserService } from '../../../core' import { RecordService } from '../../../core/record/record.service' @@ -80,27 +80,6 @@ export class TopBarComponent implements OnInit, OnDestroy { .getRecord({ publicRecordId: this.isPublicRecord || undefined, }) - .pipe( - tap((record) => { - if (record?.userInfo && !this.isPublicRecord) { - const checkEmailValidated = - record.userInfo?.IS_PRIMARY_EMAIL_VERIFIED === 'true' - const inDelegationMode = - record.userInfo.IN_DELEGATION_MODE === 'true' - if (!checkEmailValidated && !inDelegationMode) { - if (record.emails) { - const primaryEmail = record.emails.emails.filter( - (email) => email.primary - )[0] - if (!primaryEmail?.verified) { - this.resendVerificationEmailModal(primaryEmail.value) - } - } - } - } - }), - takeUntil(this.$destroy) - ) .subscribe((userRecord) => { this.recordWithIssues = userRecord?.userInfo?.RECORD_WITH_ISSUES this.userRecord = userRecord @@ -109,6 +88,23 @@ export class TopBarComponent implements OnInit, OnDestroy { if (!isEmpty(userRecord.otherNames)) { this.setNames(userRecord) } + + if (userRecord?.userInfo && !this.isPublicRecord) { + const checkEmailValidated = + userRecord.userInfo?.IS_PRIMARY_EMAIL_VERIFIED === 'true' + const inDelegationMode = + userRecord.userInfo.IN_DELEGATION_MODE === 'true' + if (!checkEmailValidated && !inDelegationMode) { + if (userRecord.emails) { + const primaryEmail = userRecord.emails.emails.filter( + (email) => email.primary + )[0] + if (!primaryEmail?.verified) { + this.resendVerificationEmailModal(primaryEmail.value) + } + } + } + } }) } diff --git a/src/app/record/components/work-form/work-form/work-form.component.ts b/src/app/record/components/work-form/work-form/work-form.component.ts index 92dd12583d..70f6141731 100644 --- a/src/app/record/components/work-form/work-form/work-form.component.ts +++ b/src/app/record/components/work-form/work-form/work-form.component.ts @@ -138,7 +138,6 @@ export class WorkFormComponent implements OnInit { this.loadWorkForm(this.work) - // this._record.getPreferences().subscribe((userRecord) => { this.defaultVisibility = userRecord.default_visibility }) @@ -267,18 +266,21 @@ export class WorkFormComponent implements OnInit { formGroup.controls.externalIdentifierUrl.setValue( decodeURI(value.generatedUrl) ) - } else { + } else if ( + !value.validFormat || + (value.attemptedResolution && !value.resolved) + ) { formGroup.controls.externalIdentifierUrl.setValue('') } - if (!value.resolved && value.attemptedResolution) { + if (value.attemptedResolution && !value.resolved) { return { - unResolved: !value.resolved, + unResolved: true, } } if (!value.validFormat) { return { - validFormat: !value.validFormat, + validFormat: true, } } }) @@ -397,7 +399,9 @@ export class WorkFormComponent implements OnInit { [], ], externalIdentifierUrl: [ - existingExternalId?.url?.value || '', + existingExternalId?.normalizedUrl?.value || + existingExternalId?.url?.value || + '', [Validators.pattern(URL_REGEXP)], ], externalRelationship: [ diff --git a/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.html b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.html index 7117ec55bb..42f659cc61 100644 --- a/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.html +++ b/src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.html @@ -11,8 +11,8 @@ (click)="saveEvent()" id="import-button" > - - Import work to your record + + Import works to your record

diff --git a/src/app/register/components/step-a/step-a.component.ts b/src/app/register/components/step-a/step-a.component.ts index 7c499ef5e6..303369d6ae 100644 --- a/src/app/register/components/step-a/step-a.component.ts +++ b/src/app/register/components/step-a/step-a.component.ts @@ -20,8 +20,7 @@ export class StepAComponent extends BaseStepDirective { constructor(private _platform: PlatformInfoService, private _router: Router) { super() } - infoSiteBaseUrl = - environment.INFO_SITE_TEMPORAL_WHILE_TRANSITIONING_TO_THE_NEW_INFO_WEBSITE + infoSiteBaseUrl = environment.INFO_SITE goBack() { this._platform diff --git a/src/app/shared/validators/environment-check/environment-check.ts b/src/app/shared/validators/environment-check/environment-check.ts new file mode 100644 index 0000000000..0a60c62312 --- /dev/null +++ b/src/app/shared/validators/environment-check/environment-check.ts @@ -0,0 +1,3 @@ +export function isQA() { + return window.location.hostname.startsWith('qa.orcid.org') +} diff --git a/src/environments/environment.int.ts b/src/environments/environment.int.ts index ce30caccf7..bdb400b0d6 100644 --- a/src/environments/environment.int.ts +++ b/src/environments/environment.int.ts @@ -2,15 +2,11 @@ export const environment = { production: true, debugger: true, ROBOTS: 'noindex, nofollow', - API_NEWS_DEPRECATED: 'https://int.orcid.org/blog/feed', API_NEWS: 'https://info.int.orcid.org/feed/', API_PUB: '//pub.int.orcid.org/v3.0', API_WEB: '//int.orcid.org/', BASE_URL: '//int.orcid.org/', - BLOG_NEWS: 'https://info.qa.orcid.org/', - INFO_SITE: '//qa.orcid.org/', - INFO_SITE_TEMPORAL_WHILE_TRANSITIONING_TO_THE_NEW_INFO_WEBSITE: - 'https://info.qa.orcid.org/', + INFO_SITE: 'https://info.qa.orcid.org/', GOOGLE_ANALYTICS_TESTING_MODE: true, GOOGLE_ANALYTICS: 'UA-17492803-6', GOOGLE_RECAPTCHA: '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI', diff --git a/src/environments/environment.local.tomcat.ts b/src/environments/environment.local.tomcat.ts index 2a3a1307b1..54f138289f 100644 --- a/src/environments/environment.local.tomcat.ts +++ b/src/environments/environment.local.tomcat.ts @@ -4,7 +4,6 @@ export const environment = { production: true, debugger: true, API_NEWS: 'https://www.mocky.io/v2/5dced45b3000007300931ce8', - API_NEWS_DEPRECATED: 'https://www.mocky.io/v2/5dced45b3000007300931ce8', API_PUB: '//pub.localhost/v3.0', API_WEB: '//localhost/', BASE_URL: '//localhost/', diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts index 6252e08e8b..647f3228ca 100644 --- a/src/environments/environment.local.ts +++ b/src/environments/environment.local.ts @@ -3,18 +3,10 @@ export const environment = { debugger: true, ROBOTS: 'all', API_NEWS: 'https://www.mocky.io/v2/5dced45b3000007300931ce8', - API_NEWS_DEPRECATED: 'https://www.mocky.io/v2/5dced45b3000007300931ce8', API_PUB: '//pub.dev.orcid.org/v3.0', API_WEB: '//dev.orcid.org/', BASE_URL: '//dev.orcid.org/', - BLOG_NEWS: 'https://info.orcid.org/', - INFO_SITE: '//qa.orcid.org/', - // The following variable is temporal and should only be used for URLs that - // only exist on the new info site, while transitioning. - // Having this variable allows to easily switch to the old info site - // since disabling the togglz 'new info site' will disable all URLs using this variable. - INFO_SITE_TEMPORAL_WHILE_TRANSITIONING_TO_THE_NEW_INFO_WEBSITE: - 'https://info.orcid.org/', + INFO_SITE: 'https://info.orcid.org/', GOOGLE_ANALYTICS_TESTING_MODE: true, GOOGLE_ANALYTICS: 'UA-0000000-00', GOOGLE_RECAPTCHA: '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI', diff --git a/src/environments/environment.local.with.sandbox.ts b/src/environments/environment.local.with.sandbox.ts index 7c50f7fe4a..2ff75cbfc0 100644 --- a/src/environments/environment.local.with.sandbox.ts +++ b/src/environments/environment.local.with.sandbox.ts @@ -4,7 +4,6 @@ export const environment = { production: false, sessionDebugger: true, API_NEWS: 'https://www.mocky.io/v2/5dced45b3000007300931ce8', - API_NEWS_DEPRECATED: 'https://www.mocky.io/v2/5dced45b3000007300931ce8', API_PUB: '//pub.localhost/v3.0', API_WEB: 'https://orcid.herokuapp.com/https://sandbox.orcid.org/', BASE_URL: 'https://orcid.org/', diff --git a/src/environments/environment.production.ts b/src/environments/environment.production.ts index 4de7c856cb..fab3c1ae68 100644 --- a/src/environments/environment.production.ts +++ b/src/environments/environment.production.ts @@ -2,15 +2,11 @@ export const environment = { production: true, debugger: false, ROBOTS: 'all', - API_NEWS_DEPRECATED: 'https://orcid.org/blog/feed', API_NEWS: 'https://info.orcid.org/feed/', API_PUB: '//pub.orcid.org/v3.0', API_WEB: '//orcid.org/', BASE_URL: '//orcid.org/', - BLOG_NEWS: 'https://info.orcid.org/', - INFO_SITE: '//orcid.org/', - INFO_SITE_TEMPORAL_WHILE_TRANSITIONING_TO_THE_NEW_INFO_WEBSITE: - 'https://info.orcid.org/', + INFO_SITE: 'https://info.orcid.org/', SHOW_TEST_WARNING_BANNER: false, GOOGLE_ANALYTICS_TESTING_MODE: false, GOOGLE_ANALYTICS: 'UA-17492803-4', diff --git a/src/environments/environment.qa.ts b/src/environments/environment.qa.ts index 17360a87ec..8d62ffab8e 100644 --- a/src/environments/environment.qa.ts +++ b/src/environments/environment.qa.ts @@ -2,15 +2,11 @@ export const environment = { production: true, debugger: true, ROBOTS: 'noindex, nofollow', - API_NEWS_DEPRECATED: 'https://qa.orcid.org/blog/feed', API_NEWS: 'https://info.qa.orcid.org/feed/', API_PUB: '//pub.qa.orcid.org/v3.0', API_WEB: '//qa.orcid.org/', BASE_URL: '//qa.orcid.org/', - BLOG_NEWS: 'https://info.qa.orcid.org/', - INFO_SITE: '//qa.orcid.org/', - INFO_SITE_TEMPORAL_WHILE_TRANSITIONING_TO_THE_NEW_INFO_WEBSITE: - 'https://info.qa.orcid.org/', + INFO_SITE: 'https://info.qa.orcid.org/', GOOGLE_ANALYTICS_TESTING_MODE: true, GOOGLE_ANALYTICS: 'UA-17492803-6', GOOGLE_RECAPTCHA: '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI', diff --git a/src/environments/environment.sandbox.ts b/src/environments/environment.sandbox.ts index ea3b1f3ed8..421902ac08 100644 --- a/src/environments/environment.sandbox.ts +++ b/src/environments/environment.sandbox.ts @@ -2,15 +2,11 @@ export const environment = { production: true, debugger: false, ROBOTS: 'noindex, nofollow', - API_NEWS_DEPRECATED: 'https://orcid.org/blog/feed', API_NEWS: 'https://info.qa.orcid.org/feed/', API_PUB: '//pub.sandbox.orcid.org/v3.0', API_WEB: '//sandbox.orcid.org/', BASE_URL: '//sandbox.orcid.org/', - BLOG_NEWS: 'https://info.qa.orcid.org/', - INFO_SITE: '//qa.orcid.org/', - INFO_SITE_TEMPORAL_WHILE_TRANSITIONING_TO_THE_NEW_INFO_WEBSITE: - 'https://info.qa.orcid.org/', + INFO_SITE: 'https://info.qa.orcid.org/', GOOGLE_ANALYTICS_TESTING_MODE: false, GOOGLE_ANALYTICS: 'UA-17492803-5', GOOGLE_RECAPTCHA: '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI', diff --git a/src/locale/properties/works/works.en.properties b/src/locale/properties/works/works.en.properties index e0feca24ce..491f971a82 100644 --- a/src/locale/properties/works/works.en.properties +++ b/src/locale/properties/works/works.en.properties @@ -109,7 +109,7 @@ works.moreInformation=More information on importing BibTeX files into ORCID works.chooseBibTex=Choose BibTeX file to import works.retrievingWorkBibTex=Retrieving works from BibTeX works.foundInBibTex=Works found in BibTeX -works.importWorks=Import work to your record +works.importWorks=Import works to your record works.unableToImport=Unable to import using this identifier. Please add work using a different option. works.bibtexImporterParsingError=This file cannot be read. Please check the BibTeX formatting and try again. works.addFromPubMed=Works - Add work from PubMed From e57c1a32ba83745b4474b6cf4d257c29c979a84e Mon Sep 17 00:00:00 2001 From: Angel Montenegro Date: Wed, 1 Dec 2021 16:01:03 -0600 Subject: [PATCH 3/5] release-2.6.9 is live (#1402) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Rever not-verified user allow to use search and links (#1266) * style: Actions aligned in modal websites (#1267) * fix: Modify default sor in research resource end point (#1268) * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Fix/add manage similar works modal (#1269) * Rever not-verified user allow to use search and links * Fix testing and change title * 🤖 GITHUB ACTIONS: formatting 🤖 * Allow user to merge works * Reload on work reload * Remove logs * fix i18n * Fix i18n * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Handle no selected works * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * 7703 qamy orcid fix order of works section header action buttons (#1271) * Rever not-verified user allow to use search and links * Fix testing and change title * 🤖 GITHUB ACTIONS: formatting 🤖 * Allow user to merge works * Reload on work reload * Remove logs * fix i18n * Fix i18n * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Handle no selected works * Fix works menu * Add testing languages * Fix link (#1270) * Transifex (#1272) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Force reload on record OnInit (#1277) * Fixed focus for fundings external ids (#1273) * Fixed focus for fundings external ids * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the 500 on create a copy or a work (#1275) * Fixed the 500 on create a copy or a work * 🤖 GITHUB ACTIONS: formatting 🤖 * Transifex (#1278) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * Fixed the focus for external identifiers when editing works (#1274) * Fixed the focus for external identifiers when editing works * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Limit number of items to display in export works modal (#1279) * fix: Limit number of items to display in export works modal * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fixing editing publication date on works (#1280) * Fixing editing publication date on works * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Moving translations from the registry * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix names unique * Revert "Fix names unique" This reverts commit d3e96baba9001b658321b154b0b80f7715fc9c7e. * Done (#1281) * Fix/multiple external id fixes (#1282) * 7722-qamy-orcid-allow-users-to-enter-dois-that-we-cannot-validate * Add translation string * 7723-qamy-orcid-valid-doi-url-not-recognized * Fix small issues * 7720-qamy-orcid-error-message-not-displayed-when-trying-to-save-work-without-external-id * Fix small isssues * Rearrage code * Remove logs * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Improve naming * fix Dani comment * Fix grouping function (#1283) * fix: Remove keyvalue pipe sort properties (#1284) * fix: Remove keyvalue pipe sort properties * 🤖 GITHUB ACTIONS: formatting 🤖 * 7710 qamy orcid impossible to export all works at once when theres pagination 2 (#1285) * fix: Add `Export all works` button * fix: Revert select all functionality and fix export all function * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/7729 qamy orcid user and member obo source not displayed when applying bulk actions (#1286) * style: Border-line misaligned * fix: Add obo to combine, export and visibility modals * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix NPE on validating works (#1287) * Fix NPE on validating works * 🤖 GITHUB ACTIONS: formatting 🤖 * NPE (#1288) * Fixed typos (#1290) * Fix/7714 qamy orcid fix field name for journal title publisher (#1291) * fix: Rename mislabeled properties * fix: Add missing updated property * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/7718 qamy orcid when i change the visibility setting of a work inside the modal the visibility indicator in the works section is not (#1292) * 7722-qamy-orcid-allow-users-to-enter-dois-that-we-cannot-validate * Add translation string * 7723-qamy-orcid-valid-doi-url-not-recognized * Fix small issues * 7720-qamy-orcid-error-message-not-displayed-when-trying-to-save-work-without-external-id * Fix small isssues * Rearrage code * Remove logs * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Improve naming * fix Dani comment * Fix wrong form validation * Fix works refresh after save * 7730 qamy orcid no error message when saving work with citation but no citation type (#1289) * Added validators for citation and translated title * added the common properties for translated title error * Fixed citation message * Fixed styling of error * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: Angel Montenegro * Add funding relation validation (#1293) * Resolve generated urls (#1294) * Fix merge works suggestions copy * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/7737 qamy orcid auto select relationship type for isbn depending on work type (#1295) * fix: Add auto select to work type * fix: Add auto select to relationship * 🤖 GITHUB ACTIONS: formatting 🤖 * Clone Orcid Source values * fix: Add missing title label for some work types (#1297) * fix: Remove commented code and add missing template reference variable (#1298) * fix: Remove commented code and add missing template reference variable * 🤖 GITHUB ACTIONS: formatting 🤖 * feat: Add tooltip for privacy selector (#1300) * feat: Add tooltip for privacy selector * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/blocker works modal and sync transifex changes (#1299) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Clone Orcid Source values * Fix works blockers * Fix valid format error on red * Use value changes to handle external type udpates * remove logs * remove logs * Remove not use variable * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix udpates * Fix external id url normalization * Format * Format * Remove debug data Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * Fix/7747 qamy orcid issues selecting works in bulk delete modal (#1301) * fix: Add missing message info if there wasnt items selected and add call to detect changes in the UI * style: Add missing style class to no info message * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Add count works validation (#1302) * fix: Add count works validation * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Add missing property in works (#1308) * fix: Add missing property in works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fixed placeholders inside work modal (#1303) * Fixed placeholders inside work modal * removed log console * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Angel Montenegro * Disable menu items for actions menu when no elements are selected (#1304) * Disable menu items for actions menu when no elements are selected * 🤖 GITHUB ACTIONS: formatting 🤖 * Update work-stack-group.component.html Co-authored-by: Angel Montenegro * Fixed the visibility default setting for biography (#1305) * Fixed the visibility default setting for biography * Added the additional props to X, LR and RL files * fixed the property name in localize for whoCanSeeBio * Fixed the default visibility for change bulk works * Removed console.log * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the missing language name for works (#1306) * Fixed the missing language name for works * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed funding translated title language (#1307) * Fixed funding translated title language * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Export all works error and add no items selected message (#1309) * fix: Export all works error and add no items selected message * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Only export preferred work * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Display visibility tooltip at the top of the selector (#1310) * Fix/blocker (part-of relation) validation on works modal (#1311) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Clone Orcid Source values * Fix works blockers * Fix valid format error on red * Use value changes to handle external type udpates * remove logs * remove logs * Remove not use variable * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix udpates * Fix external id url normalization * Format * Format * Remove debug data * Add comments * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Angel Montenegro * Added error messages for max length in work title, subtitle, journal title, description (#1312) * Added error messages for max length in work title, subtitle, journal title and description * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: Angel Montenegro * Fix build works delete (#1316) * Paula review fixes (#1313) * Paula review fixes * 🤖 GITHUB ACTIONS: testing languages 🤖 * various fixes for visibility, additional maxlength checks (#1314) * various fixes for visibility, additional maxlength checks * 🤖 GITHUB ACTIONS: formatting 🤖 * disable click when no selected works to combine (#1315) * 7761 qamy orcid fix position of visibility selector in mobile version (#1317) * Fix build works delete * Fix mobile titles * pull-from-transifex * add translation clones * Apply translations in ca translation completed for the source file '/src/locale/properties/environment-banner/environment-banner.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/institutional/institutional.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ca' language. * fix: counter inside export works modal (#1319) * fix: counter inside export works modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/7752 qamy orcid fix position of visibility tooltip (#1318) * style: Fix visibility tooltip alignment inside modals * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Add bottom visibility tooltip alignment * fix: remove todo comment * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in it translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'it' language. * Fixed sorting in search and link work wizards (#1320) * Fixed sorting in search and link work wizards * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed visibility text inconsistencies between sections (#1321) * Fixed visibility text inconsistencies between sections * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the adding work from bibtex (#1323) * Fixed the adding work from bibtex * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: enable button Managing similar works without need to select any … (#1327) * fix: enable button Managing similar works without need to select any checkbox * 🤖 GITHUB ACTIONS: formatting 🤖 * Attempt to fix the bulk delete error that cannot be reproduced in dev (#1325) * Fixed double spacing (#1322) * Open the bibtex link in a new tab (#1324) * Open the bibtex link in a new tab * fix: Add missing attribute to a tag Co-authored-by: Daniel Palafox * fix: deselect works, if cancel button is clicked or the modal is closed (#1326) * fix: deselect works, if cancel button is clicked or the modal is closed * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix validations on pubmed (#1328) * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_TW' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Update environment-banner.uk.properties * sync with TX * 🤖 GITHUB ACTIONS: testing languages 🤖 * Transifex (#1333) * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'zh_CN' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/my-orcid-alerts/my-orcid-alerts.en.properties' on the 'pt' language. * Makes Orcid uppercase * Add missing clone translations * For pull transifex translations * Force pull translations * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'cs' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Manually pull transifex translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in it translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'it' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add missing auto sync translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Fix knowledge base link white space * Improve not verified experience * 🤖 GITHUB ACTIONS: formatting 🤖 * Move propertiers use on top-bar-verification-email-modal.component to topbar * Prepare record.en to be moved * Fix missed conflcits * Move funding related items out of record * fix build * Move shared properties out of record file * move out topbar message translations from record file * Move works properties out ot the record file * Remove not require properties * Clone Orcid-Source translations * 🤖 GITHUB ACTIONS: testing languages 🤖 * Add 3 missing files to auto sync * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/research-resources/research-resources.en.properties' on the 'ar' language. * Add tx config files * 🤖 GITHUB ACTIONS: formatting 🤖 * Apply translations in ar translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ar' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'pt' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in es translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'es' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'fr' language. * Apply translations in it translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'it' language. * Apply translations in es translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'es' language. * Apply translations in it translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'it' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_TW' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'pt' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'pt' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'cs' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ja' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'cs' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/register/register.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/record/record.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/peer-review/peer-review.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/side-bar/side-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Revert deletion of required strings * 🤖 GITHUB ACTIONS: testing languages 🤖 * TX force pull works * Revert "TX force pull works" This reverts commit c3ebfd8a827a2e579ad7515bc82d327b739314ca. * Force translations on fundings * Force translations on peer reviews * Force translations on records * Force translations on shared * Force translations on side-bar * Force translations on top-bar * Force translations on works * 🤖 GITHUB ACTIONS: testing languages 🤖 * Clone Orcid Source values * pull-from-transifex * add translation clones * Apply translations in ca translation completed for the source file '/src/locale/properties/environment-banner/environment-banner.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/home/home.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/institutional/institutional.en.properties' on the 'ca' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/inbox/inbox.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'ca' language. * Apply translations in uk translation completed for the source file '/src/locale/properties/delegators/delegators.en.properties' on the 'uk' language. * Apply translations in ca translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'ca' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'cs' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'es' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ko' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ko' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'fr' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in it translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'it' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_TW' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * 🤖 GITHUB ACTIONS: testing languages 🤖 * Update environment-banner.uk.properties * sync with TX * 🤖 GITHUB ACTIONS: testing languages 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: Leonardo Mendoza Fernadez * fix: select All issue in delete modal (#1335) * fix: select All issue in delete modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the css for displaying pubMed error (#1330) * Fixed the css for displaying pubMed error * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Angel Montenegro * Added validation for max URL limit (#1332) * Added validation for max URL limit * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the broken test * 7773 qamy orcid max character limit error messages missing in funding modal (#1334) * Fixed the error display/validations for funding * Fixed spelling errors * Fixed formatting errors * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fixed double spacing in funding detail (#1336) * fix: only display delete button if `other sources` is clicked in grou… (#1337) * fix: only display delete button if `other sources` is clicked in grouped activities * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the no-error message when invalid id (#1331) * Fixed the no-error message when invalid id * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Angel Montenegro * Fixed importing from bibtext with publication date and console error (#1338) * Fixed importing from bibtext with publication date and console error * Fix CI formatting error * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Call getWorks method only once when works have been imported via BibTeX * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: Daniel Palafox * Fixed the default visibility label in edit work (#1339) * Fixed the default visibility label in edit work * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/7704 qamy orcid new functionality for contributors in works not implemented (#1329) * feature: Add contributors list in the description works * feature: Add contributors in works summary panel * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * fix: Add new variable for contributors * fix: add missing change * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Remove uppercase from contributors * Revert "fix: Remove uppercase from contributors" This reverts commit 087422ec84c3c5276d4ae7302e94c2d1790b393d. * fix: CI internalization error * fix: update href attribute to the correct article (#1340) * Feature/remove qa segment (#1341) * Fix remove qa segment * Use angular navigator for register, signin and signout * clean up * 🤖 GITHUB ACTIONS: formatting 🤖 * Remove ORCID_ANGULAR_INBOX togglz (#1073) * remove orcid_angular_inbox togglz * Remove togglz service Co-authored-by: Angel Montenegro * fix: date validator for firefox (#1347) * Fixed the button size (#1345) * Fix on enter action (#1342) * Fix not visible mobile button: (#1343) * Clean cache/remove zoombie sessions (#1348) * Clean up zoombie session * Remove query parameters on logout * Remove logs * fix translations * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the visibility for affiliations and funding (#1349) * Fixed the visibility for affiliations and funding * 🤖 GITHUB ACTIONS: formatting 🤖 * Show sidebars for doi and bibtext modals (#1350) * feature: Add togglz for work contributors in work summary (#1346) * feature: Add togglz for work contributors in work summary * fix: Duplicate call to getDetails * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Add todo comment * fix: Leo comments * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the max length validator for translated title and region in funding (#1351) * Added the max length valdator for translated title and region in funding * 🤖 GITHUB ACTIONS: formatting 🤖 * Added external Ids to bibtex modal (#1344) * Added external Ids to bibtex modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the URL if present in bibtex * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the translation for URL * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the translation for the max work subtitle (#1352) * Fixed the translation for the max work subtitle * Fixed the CI * fix: Add error bibtex message (#1353) * fix: Add error bibtex message * 🤖 GITHUB ACTIONS: testing languages 🤖 * style: fix font size bibtex error * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the max length errors for affiliations (#1355) * Added the max length errors for affiliations * 🤖 GITHUB ACTIONS: formatting 🤖 * added the separation between the 2 error messages (#1356) * added the separation between the 2 error messages * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the button sizing css * fix: Add trailing zero to month in date validator (#1357) * fix: Add trailing zero to month in date validator * style: Fix modal padding for ie11 * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Fix width for translated title inputs in modal funding (#1359) * Fix/7797 qamy orcid the import bibtex modal doesnt need side navigation links (#1360) * fix: Remove side-bar in modal bibtex * style: Truncate long title in bibtex modal * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Add code tag and refactor bibtex error messages (#1354) * style: Add code tag and refactor bibtex error messages * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * fix: Remove unused variable * Update src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts Co-authored-by: leomendoza123 * Update src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts Co-authored-by: leomendoza123 * Update src/app/record/components/work-stack-group/modals/work-bibtex-modal/work-bibtex-modal.component.ts Co-authored-by: leomendoza123 Co-authored-by: leomendoza123 * Cache management improvements (#1358) * Cache management improvements * Add TODO * Orcid email verification modal not displayed when signing in (#1361) * 7796-qamy-orcid-email-verification-modal-not-displayed-when-signing-in * handle subscription * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/7794 qa my orcid translated errors partially hidden in add work from doi modal (#1363) * fix: Remove checkbox from public page * fix: Remove footer in external id if there is no work * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Update initial set to start and end dates in affiliation form (#1364) * fix: Update initial set to start and end dates in affiliation form * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Update variables to optional to remove console log errors (#1365) * fix: Update variables to optional to remove console log errors * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the display of biography and names in public record and my orcid (#1367) * Fixed the display of biography and names in public record and my orcid * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed refreshing of names/biography after editing in my-orcid (#1368) * Fixed the display of biography and names in public record and my orcid * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the refreshing of names biography after editing * 🤖 GITHUB ACTIONS: formatting 🤖 * tx pull -f * Fixed the menu item truncated text (#1369) * Fixed the menu item truncated text * 🤖 GITHUB ACTIONS: formatting 🤖 * clear the error before parsing new bibtex file (#1370) * 7774 qamy orcid max character limit error messages missing in affiliations modal (#1371) * Added the max length errors for affiliations * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the missing max-length error for department * 🤖 GITHUB ACTIONS: formatting 🤖 * style: Remove fixed width Bibtex button (#1372) * style: Remove fixed width Bibtex button * style: Fix issues with long translations * Added the new text for Saving external-id modal (#1373) * Improve date validatio (#1374) * Improve date validatio * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Update how reactive form is created (#1376) * fix: Update how reactive form is created * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Fix/314 qamy orcid duplicate email not detected when entered with a different letter case (#1377) * fix: Duplicated email logic * fix: Resend verification button in my orcid * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/relationship translations (#1378) * Improve date validatio * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix work relationship and imrprove date validators * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Disable delete button if is it loading and fix export reactive form… (#1379) * fix: Disable delete button is it loading and fix export reactive form error * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix guard to handle cookie miss match * tx pull -f * Apply translations in ru translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ru' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in cs translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'cs' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in es translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'es' language. * Remove updated string * Fix guard to handle cookie miss match (#1380) * Fix guard to handle cookie miss match * fix comments * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix/language refresh redirect fix (#1381) * Fix guard to handle cookie miss match * Fix language guard * Set default redirects * Fix comments * Fix/modal export explorer and safari (#1382) * Fix guard to handle cookie miss match * Fix modal export explorer-safary * Apply translations in es translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'es' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ru' language. * Apply translations in ko translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ko' language. * Apply translations in ru translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'ru' language. * Apply translations in pt translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'pt' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ja' language. * Apply translations in it translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'it' language. * Apply translations in ja translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'ja' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'fr' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_TW' language. * Apply translations in fr translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'fr' language. * Apply translations in ar translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'ar' language. * Apply translations in zh_TW translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_TW' language. * 7815 qa remove redundant required information tag when a section has no mandatory fields (#1383) * Fix guard to handle cookie miss match * Fix modal export explorer-safary * Remove unwanted tag * Revert "Remove unwanted tag" This reverts commit f16aa57be18274227fa9aa008e5c56f6954d8624. * Remove unwanted message * 7809 qamy orcid export works button text not entirely visible in mobile devices (#1384) * Fix guard to handle cookie miss match * update mobile supprot for modals * fix: Add missing text in email verification banner (#1386) * fix: Add missing text in email verification banner * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed multiple modals display after signin (#1385) * Fixed multiple modals display after signin * Second attempt of fixing the multiple display of unverified modal * 🤖 GITHUB ACTIONS: formatting 🤖 * Fixed the wrong route for self service (#1387) * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/funding/funding.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/works/works.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/top-bar/top-bar.en.properties' on the 'zh_CN' language. * Apply translations in zh_CN translation completed for the source file '/src/locale/properties/shared/shared.en.properties' on the 'zh_CN' language. * Force pull * 🤖 GITHUB ACTIONS: formatting 🤖 * 🤖 GITHUB ACTIONS: testing languages 🤖 * Remove NEW_INFO_SITE togglz (#1043) * remove togglz related code * environment const cleanup * 🤖 GITHUB ACTIONS: formatting 🤖 * remove togglz injection Co-authored-by: Angel Montenegro * Fixed the undefined error when calling filter (#1391) * fix: Update external identifier validation in async validator (#1392) * fix: Update external identifier validation in async validator * 🤖 GITHUB ACTIONS: formatting 🤖 * Peer review fixes (#1393) * Peer review fixes Hide peer review section if no reviews. Do not display Add button for peer reviews * 🤖 GITHUB ACTIONS: formatting 🤖 * Added the check for QA the add button and peer section displayed just for QA env * 🤖 GITHUB ACTIONS: formatting 🤖 * fix: Counter in bibtex importer (#1394) * fix: Update url orcid parameter when switch between users (#1397) * fix: Update url orcid parameter when switch between users * 🤖 GITHUB ACTIONS: formatting 🤖 * Moved the display modal logic inside subscribe ( not pipe) (#1395) * Moved the display modal logic inside subscribe ( not pipe) * 🤖 GITHUB ACTIONS: formatting 🤖 * Change work to works (#1396) * check for undefined instead of empty to emit event when last review is deleted and the array is empty (#1398) * check for undefined instead of empty to emit event when the last review is deleted and array is empty * 🤖 GITHUB ACTIONS: formatting 🤖 * Fix NPE when website.urlName is null (#1399) * Fix NPE when website.urlName is null * 🤖 GITHUB ACTIONS: formatting 🤖 Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com> Co-authored-by: leomendoza123 Co-authored-by: Daniel Palafox Co-authored-by: Camelia <62257307+Camelia-Orcid@users.noreply.github.com> Co-authored-by: andrej romanov <50377758+auumgn@users.noreply.github.com> From f27c6cd618946f4346b659d17a630c62e019728f Mon Sep 17 00:00:00 2001 From: amontenegro Date: Thu, 28 Jul 2022 10:35:02 -0600 Subject: [PATCH 4/5] Use EFFECTIVE_USER_ORCID instead of REAL_USER_ORCID to avoid problems when doing delegation mode --- .../work-contributor-roles.component.spec.ts | 2 +- .../work-contributor-role/work-contributor-roles.component.ts | 2 +- .../work-contributors/work-contributors.component.ts | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/app/record/components/work-contributor-role/work-contributor-roles.component.spec.ts b/src/app/record/components/work-contributor-role/work-contributor-roles.component.spec.ts index 7ee7e1c1d1..160c724998 100644 --- a/src/app/record/components/work-contributor-role/work-contributor-roles.component.spec.ts +++ b/src/app/record/components/work-contributor-role/work-contributor-roles.component.spec.ts @@ -173,7 +173,7 @@ function getContributor(): Contributor[] { function getUserRecord(): UserRecord { return { userInfo: { - REAL_USER_ORCID: '0000-0000-0000-000X', + EFFECTIVE_USER_ORCID: '0000-0000-0000-000X', }, } as UserRecord } diff --git a/src/app/record/components/work-contributor-role/work-contributor-roles.component.ts b/src/app/record/components/work-contributor-role/work-contributor-roles.component.ts index 0863339fc0..08758c3b5c 100644 --- a/src/app/record/components/work-contributor-role/work-contributor-roles.component.ts +++ b/src/app/record/components/work-contributor-role/work-contributor-roles.component.ts @@ -144,7 +144,7 @@ export class WorkContributorRolesComponent implements OnInit { private getRecordHolderContribution(): Contributor { return this.contributors?.find( (c) => - c?.contributorOrcid?.path === this.userRecord?.userInfo?.REAL_USER_ORCID + c?.contributorOrcid?.path === this.userRecord?.userInfo?.EFFECTIVE_USER_ORCID ) } } diff --git a/src/app/record/components/work-contributors/work-contributors.component.ts b/src/app/record/components/work-contributors/work-contributors.component.ts index 945af557da..39cad3728c 100644 --- a/src/app/record/components/work-contributors/work-contributors.component.ts +++ b/src/app/record/components/work-contributors/work-contributors.component.ts @@ -52,7 +52,9 @@ export class WorkContributorsComponent implements OnInit, OnDestroy { } ngOnInit(): void { - this.id = this.userRecord?.userInfo?.REAL_USER_ORCID + // EFFECTIVE_USER_ORCID keeps the ORCID id of the user you are on. + // REAL_USER_ORCID will contain the orcid id of a delegator when on delegation mode. + this.id = this.userRecord?.userInfo?.EFFECTIVE_USER_ORCID this.platform .get() .pipe(takeUntil(this.$destroy)) From 36bf7f52a64e45e1177b8ee62fc636b3cb11bb2e Mon Sep 17 00:00:00 2001 From: amontenegro Date: Thu, 28 Jul 2022 16:37:44 +0000 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=A4=96=20GITHUB=20ACTIONS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../work-contributor-role/work-contributor-roles.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/record/components/work-contributor-role/work-contributor-roles.component.ts b/src/app/record/components/work-contributor-role/work-contributor-roles.component.ts index 08758c3b5c..6fb1495834 100644 --- a/src/app/record/components/work-contributor-role/work-contributor-roles.component.ts +++ b/src/app/record/components/work-contributor-role/work-contributor-roles.component.ts @@ -144,7 +144,8 @@ export class WorkContributorRolesComponent implements OnInit { private getRecordHolderContribution(): Contributor { return this.contributors?.find( (c) => - c?.contributorOrcid?.path === this.userRecord?.userInfo?.EFFECTIVE_USER_ORCID + c?.contributorOrcid?.path === + this.userRecord?.userInfo?.EFFECTIVE_USER_ORCID ) } }