diff --git a/package-lock.json b/package-lock.json index c595868..d876f57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@open-election-compass/client", - "version": "1.0.0-beta.10", + "version": "1.0.0-beta.11", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@open-election-compass/client", - "version": "1.0.0-beta.10", + "version": "1.0.0-beta.11", "license": "GPL-3.0", "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.28", diff --git a/package.json b/package.json index ef7c9ef..4b0d552 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@open-election-compass/client", - "version": "1.0.0-beta.10", + "version": "1.0.0-beta.11", "author": "Till Sanders ", "license": "GPL-3.0", "main": "dist/lib/open-election-compass.umd.min.js", diff --git a/src/OpenElectionCompass.vue b/src/OpenElectionCompass.vue index 9f94145..d115dc9 100644 --- a/src/OpenElectionCompass.vue +++ b/src/OpenElectionCompass.vue @@ -55,7 +55,6 @@ export default { language: { type: String, default: null, - validator: (value) => ['en', 'de'].includes(value), }, kioskMode: { type: Boolean, diff --git a/src/locales/ar.yaml b/src/locales/ar.yaml new file mode 100644 index 0000000..c5654a5 --- /dev/null +++ b/src/locales/ar.yaml @@ -0,0 +1,278 @@ +--- +elements: + friends-invite-modal: + heading: "ادع أصدقاءك" + description: "ادع أصدقاءك لجلسة مشتركة تستطيعون فيها رؤية إجابات بعضكم بعضاً." + form: + name: + label: "اسمك أو كنيتك" + description: "اكتب اسمك -لطفاً- لكي يعرفك أصدقاؤك. بإمكانك اختيار كنية بدل اسمك الحقيقي." + introduction: + heading: "ما هي الجلسة المشتركة؟" + explanation: + - "الهدف من الجلسة المشتركة هو أن تستخدم \"بوصلة الانتخابات\" برفقة أصدقائك. يجب على أحد الأشخاص أن يدعو أصدقائه -أولاً- إلى الجلسة المشتركة، وبعد أن ينضم الجميع إلى الجلسة يمكنهم أن يبدؤوا باستخدام \"بوصلة الانتخابات\" مثلما يستخدمونها عادةً، غير أنهم سوف يرون إجابات بعضهم بعضاً وسوف يستطيعون مناقشتها معاً." + security: + heading: "هل إجاباتنا سرية؟" + explanation: + - "نعم! تنتقل إجاباتكم بين أجهزتكم بدون وسيط خارجي وعبر اتصال آمن. وظيفة خوادمنا هي مساعدة أجهزتكم على الاتصال ببعضها عبر الإنترنت، وأما أجوبتكم فهي لا تنتقل إلى خوادمنا، وإنما بين أجهزتكم حصراً." + registration: + heading: "هل أحتاج لتسجيل حسابٍ للاستفادة من هذه الميزة؟" + explanation: + - "لست مضطراً لتسجيل حساب. كل ما عليك هو كتابة اسمك والانضمام إلى جلسة." + cancel: "تراجع" + confirm: "ابدأ جلسة" + friends-join-modal: + heading: "انضم لأصدقائك" + description: "انضم لأصدقائك في جلسة مشتركة لتطّلع على أجوبتهم." + form: + name: + label: "اسمك أو كنيتك" + description: "اكتب اسمك -لطفاً- لكي يعرفك أصدقاؤك. بإمكانك اختيار كنية بدل اسمك الحقيقي." + join: + label: "جهاز صديقك" + description: "للانصمام إلى الجلسة المشتركة، عليك إدخال الرقم التعريفي (ID) لجهاز مضيف الجلسة؛ أي الشخص الذي بدأها." + introduction: + heading: "ما هي الجلسة المشتركة؟" + explanation: + - "الهدف من الجلسة المشتركة هو أن تستخدم \"بوصلة الانتخابات\" برفقة أصدقائك. يجب على أحد الأشخاص أن يدعو أصدقائه -أولاً- إلى الجلسة المشتركة، وبعد أن ينضم الجميع إلى الجلسة يمكنهم أن يبدؤوا باستخدام \"بوصلة الانتخابات\" مثلما يستخدمونها عادةً، غير أنهم سوف يرون إجابات بعضهم بعضاً وسوف يستطيعون مناقشتها معاً." + security: + heading: "هل إجاباتنا سرية؟" + explanation: + - "نعم! تنتقل إجاباتكم بين أجهزتكم بدون وسيط خارجي وعبر اتصال آمن. وظيفة خوادمنا هي مساعدة أجهزتكم على الاتصال ببعضها عبر الإنترنت، وأما أجوبتكم فهي لا تنتقل إلى خوادمنا، وإنما بين أجهزتكم حصراً." + registration: + heading: "هل أحتاج لتسجيل حسابٍ للاستفادة من هذه الميزة؟" + explanation: + - "لست مضطراً لتسجيل حساب. كل ما عليك هو كتابة اسمك والانضمام إلى جلسة." + cancel: "تراجع" + confirm: "انضم" + friends-list: + heading: "الأجهزة المتصلة" + empty: "يجب أن يوافق المضيف على طلبك للانضمام إلى الجلسة." + host: "المضيف" + friends-status-modal: + heading: "جلسة مشتركة" + mode: + INACTIVE: + heading: "غير متصل" + text: "أنت لستَ متصلاً بأي شخص. عليك الانضمام إلى جلسة موجودة أو بدأ جلسة جديدة من القائمة الرئيسية." + GUEST: + heading: "ضيف" + text: "أنت تشارك في جلسة مشتركة يستضيفها شخص غيرك." + HOST: + heading: "المضيف" + text: "أنت مضيف الجلسة. إن أردت دعوة أصدقائك فيجب عليك أن ترسل إليهم رقم جهازك التعريفي (ID)، ثم أن تقبل طلبات انضمامهم." + own-peer-id: + label: "جهازك" + description: "هذا هو رقم جهازك التعريفي (ID). يجب على أصدقائك إدخال هذا الرقم للانضمام إلى الجلسة المشتركة." + guests-list: + heading: "الأجهزة المتصلة" + empty: "لم ينضم أحد للجلسة." + accept: "قبول" + status: + connecting: "بحث عن اتصال" + connected: "متصل" + disconnected: "انقطع الاتصال" + guide-button: + start: "لنبدأ" + introduction: "علِّمني كيفية استخدام الأداة" + first-thesis: "اطلع على أول سؤال" + thesis: "السؤال التالي" + party: "اختر أشخاصاً أو جهات" + match: "شاهد النتيجة" + compare: "اقرأ التفاصيل" + kiosk-mode: + heading: "أترغب بالإعادة؟" + description: "سوف تحذف كل إجاباتك وتعود \"بوصلة الانتخابات\" فارغة. | سوف تُعَاد \"بوصلة الانتخابات\" خلال {count} ثوانٍ وسوف تُحْذَف كل إجاباتك. | سوف تُعَاد \"بوصلة الانتخابات\" خلال {count} ثانية وسوف تُحْذَف كل إجاباتك." + reset: "الإعادة الآن" + resume: "ليس بعد!" + language-switch: + button: "اللغات" + heading: "اللغات" + description: "اختر لغتك رجاءً." + main-navigation: + menu: "القائمة" + thesis: "السؤال {count}" + links: + compass: "بوصلة الانتخابات" + languages: "تغيير اللغة" + friends-join: "انضم لأصدقائك" + friends-invite: "ادع أصدقاءك" + reset: "إعادة" + home: "ابدأ" + introduction: "مقدمة" + theses: "الأسئلة" + evaluation: "تحليل الإجابات" + party: "اختيار الأشخاص أو الجهات" + match: "النتيجة" + compare: "التفاصيل" + about: "من نحن" + open-election-compass-logo: + alt: "شعار \"بوصلة الانتخابات\"" + show-more: + show: "رؤية المزيد" + hide: "إخفاء" +views: + home: + home: + role-aria: "بوصلة الانتخابات" + start: + section: + banner-aria: "ابدأ القسم" + theses: + important-button: + important: "مهم بالنسبة لي" + important-aria: "مهم: استخدم هذا الخيار لو كان السؤال مهماً بنظرك." + too-many-important: "الأسئلة قليلة جداً، لذا لن تستطيع تصنيف هذا كسؤال مهم. | عليك -لطفاً- ألا تُصنِّف أكثر من سؤال واحد كمهم، لتحصل على نتيجة مفيدة! | عليك -لطفاً- ألا تُصنِّف أكثر من {count} سؤال كمهم، لتحصل على نتيجة مفيدة!" + skip-button: + skip: "لا أعرف" + skip-aria: "تخطّى - تخطّى هذا السؤال بدون احتسابه." + too-many-skip: "الأسئلة قليلة جداً، لذا لن تستطيع تخطّي هذا السؤال. | عليك -لطفاً- ألا تتخطى أكثر من سؤال واحد لتحصل على نتيجة مفيدة! | عليك -لطفاً- ألا تتخطّى أكثر من {count} سؤال لتحصل على نتيجة مفيدة!" + statement: + thesis: "السؤال {count} من {total}" + statement-aria: "السؤال هو: \"{statement}\"" + quoteStart: "\"" + quoteEnd: "\"" + badge: + skip: "تخطَّيت هذا السؤال" + skip-aria: "تخطَّيت هذا السؤال." + important: "صنَّفت هذا كسؤال مهم" + important-aria: "صنَّفت هذا كسؤال مهم." + thesis: + role-aria: "السؤال" + region-aria: "السؤال {count} من {total}" + party: + party: + party-aria: "الشخص \"{party}\": اضغط هنا لإضافة هذا الشخص أو الجهة أو لإزالتها من المقارنة." + section: + heading: "اختر أشخاصاً أو جهات لمقارنتهم" + instruction: "اختر -لطفاً- الأشخاص أو الجهات الذين تريد مقارنة اختياراتك مع اختياراتهم. لا يوجد حد أعلى للاختيار، لكن عليك اختيار شخصين أو جهتين على الأقل. ترتيب الأسماء في هذه القائمة هو نفس ترتيبها في أوراق الاقتراع الحقيقية (إن وُجِدَت)." + proceed: "إتمام الاختيار" + match: + match: + match-aria: "تتوافق إجاباتك مع \"{party}\" بنسبة {percentage} %" + section: + heading: "النتيجة" + explanation: "يُوضِّح هذا الرسم درجة التوافق بين إجاباتك وإجابات كل شخص أو جهة من المشاركين في الانتخابات. كُلَّما زادت النسبة دلَّ ذلك على زيادة التوافق بينكما. نرجو -رغم ذلك- أن تأخذ بعين الاعتبار أن الهدف من هذه الأداة ليس استخدامها لاختيار أصواتك، وإنما للاسترشاد بها ولمساعدتك في نقاش النتائج مع الآخرين." + compare: + additional-analysis: + heading: "الإحصاءات" + buttons: + close: "إنهاء" + start: "لنبدأ" + proceed: "إرسال واستمرار" + open-questionnaire: "افتح الاستبيان بلسان جديد" + start: "شكراً للسماح لنا باستخدام بياناتك: سوف تساعدنا هذه البيانات في تطوير إحصاءاتنا لو وافقت على أن تجيب عن بضع أسئلة أخرى عن نفسك، فهل لك أن تساعدنا في ذلك؟ بإمكانك الإجابة على أي عدد ترغب فيه من هذه الأسئلة!" + help-even-more: "شكراً جزيلاً! هل ترغب بأن تساعدنا أكثر؟ بإمكانك الإجابة على بعض الأسئلة الأكثر تفصيلاً هنا:" + thanks: "شكراً للسماع لنا باستخدام بياناتك! انتهت الأسئلة؛ وقد ساعدتنا كثيراً! اضغط على زر \"الإنهاء\" للرجوع إلى نتيجتك." + fields: + age: + name: "العمر" + label: "كم عمرك؟" + placeholder: "25" + description: "يساعد العمر في دراسة اختلاف الآراء وإجابات الأسئلة بين المشاركين بحسب فئتهم العمرية." + gender: + name: "الجنس" + label: "ما هو جنسك؟" + options: + female: "أنثى" + diverse: "آخر" + male: "ذكر" + none: "لا أرغب بالإجابة" + education: + name: "التعليم" + label: "ما هي أعلى درجة تعليمية حصلت عليها؟" + options: + student: "ما زلت طالباً" + nothing: "لم أكمل أي درجة" + lower: "مدرسة متوسطة" + higher: "مدرسة ثانوية أو ثانوية عامة" + academic: "درجة جامعية" + none: "لا أرغب بالإجابة" + party: + name: "الحزب" + label: "لو عُقِدَت الانتخابات اليوم، لمن سوف تُصوِّت؟" + options: + other: "حزب آخر" + non-voter: "لن أصوت" + not-eligible: "لست مؤهلاً للتصويت" + not-sure: "لا أعرف" + none: "لا أرغب بالإجابة" + analysis-banner: + heading: "هل ترغب بالتبرّع بإجاباتك لمصلحة العلم؟" + explanation: "بإمكانك مساعدة {someone} على فهم الانتخابات إن تبرعت بإجاباتك ونتائجك لإجراء دراسات علمية عليها. لن نحفظ أي بيانات شخصية ولن يستطيع أحد معرفة هويتك، وإنما إجاباتك فقط." + send: "أوافق على التبرّع ببياناتي" + close: "لا، استمر بالقراءة" + answer: + skip: + status-text: "غير معروف" + content: "لم يقدم \"{party}\" أي إجابة على هذا السؤال." + empty: + content: "لم يقدم \"{party}\" أي تفاصيل لشرح جوابهم على هذا السؤال." + section: + heading: "إجاباتهم" + explanation: "عادة ما يضيف كل مُرشَّح تفاصيلاً لشرح إجابتهم وموقفهم، ونحن ننصح بقراءة هذه التفاصيل لأن فهم موقف المُرشَّح وإجاباتهم يبقى ناقصاً بدونها." + region-aria: "السؤال {count} من {total}" + friends-position: + answer-aria: "{name}: {position}" + skip: "تخطَّيته" + kiosk-mode-hint: + heading: "لطفاً إعادة التعيين حينما تنتهي" + explanation: "خذ وقتك في قراءة تفاصيل الإجابات أدناه ومقارنتها ببعضها. حينما تنتهي، بإمكانك إعادة تعيين \"بوصلة الانتخابات\" ليستخدمها شخص آخر. سوف تُحْذَف إجاباتك -كذلك- أثناء إعادة التعيين. تلميح: توجد ميزة إعادة التعيين في القائمة الجانبية أيضاً. شكراً لك!" + reset: "إعادة" + footer: + section: + explanation: "\"بوصلة الانتخابات\" هذه مبنية على المشروع المجاني ومفتوح المصدر {0}." + oec: "بوصلة الانتخابات المفتوحة" +validation: + names: + name: "الاسم" + remote-peer-id: "جهاز صديقك" + fields: + name: + min: "اكتب اسمك رجاءً." + regex: "استخدم حروفاً وأرقاماً ومسافات فقط، بدون علاماتٍ أخرى." + required: "اكتب اسمك رجاءً." +algorithm: + options: + strongly-approve: + button: "أتفق جداً" + button-aria: "أتفق جداً - اضغط هنا لو كنت \"تتفق جداً\" مع هذا السؤال!" + badge: "أنت \"تتفق جداً\"" + badge-aria: "أنت \"تتفق جداً\" مع هذا السؤال." + status: "يتفق جداً" + answer-aria: "الشخص أو الجهة \"{party}\" يتفق جداً مع هذا السؤال، وإجابته هي الآتي: {answer}" + approve: + button: "أتفق" + button-aria: "أتفق - اضغط هنا لو كنت \"تتفق\" مع هذا السؤال!" + badge: "أنت \"تتفق\"" + badge-aria: "أنت \"تتفق\" مع هذا السؤال." + status: "يتفق" + answer-aria: "الشخص أو الجهة \"{party}\" يتفق مع هذا السؤال، وإجابته هي الآتي: {answer}" + neutral: + button: "محايد" + button-aria: "محايد - اضغط هنا لو كنت \"محايداً\" نحو هذا السؤال!" + badge: "أنت \"محايد\"" + badge-aria: "أنت \"محايد\" نحو هذا السؤال." + status: "محايد" + answer-aria: "الشخص أو الجهة \"{party}\" محايد نحو هذا السؤال، وإجابته هي الآتي: {answer}" + partly: + button: "أتفق جزئياً" + button-aria: "أتفق جزئياً - اضغط هنا لو كنت \"تتفق جزئياً\" مع هذا السؤال!" + badge: "أنت \"تتفق جزئياً\"" + badge-aria: "أنت \"تتفق جزئياً\" مع هذا السؤال." + status: "يتفق جزئياً" + answer-aria: "الشخص أو الجهة \"{party}\" يتفق جزئياً مع هذا السؤال، وإجابته هي الآتي: {answer}" + reject: + button: "لا أتفق" + button-aria: "لا أتفق - اضغط هنا لو كنت \"لا تتفق\" مع هذا السؤال!" + badge: "أنت \"لا تتفق\"" + badge-aria: "أنت \"لا تتفق\" مع هذا السؤال." + status: "لا يتفق" + answer-aria: "الشخص أو الجهة \"{party}\" لا يتفق مع هذا السؤال، وإجابته هي الآتي: {answer}" + strongly-reject: + button: "لا أتفق أبداً" + button-aria: "لا أتفق أبداً - اضغط هنا لو كنت \"لا تتفق أبداً\" مع هذا السؤال!" + badge: "أنت \"لا تتفق أبداً\"" + badge-aria: "أنت \"لا تتفق أبداً\" مع هذا السؤال." + status: "لا يتفق أبداً" + answer-aria: "الشخص أو الجهة \"{party}\" لا يتفق أبداً مع هذا السؤال، وإجابته هي الآتي: {answer}" diff --git a/src/locales/es.yaml b/src/locales/es.yaml new file mode 100644 index 0000000..883bb85 --- /dev/null +++ b/src/locales/es.yaml @@ -0,0 +1,278 @@ +--- +elements: + friends-invite-modal: + heading: "Invitar a amigos" + description: "Invita a tus amigos a una sesión compartida en la que todos pueden ver las respuestas de los demás en tiempo real." + form: + name: + label: "Tu nombre / apodo" + description: "Indica tu nombre para que tus amigos puedan reconocerte. También puedes utilizar un apodo." + introduction: + heading: "¿Qué es una sesión compartida?" + explanation: + - "Una sesión compartida te permite experimentar la brújula electoral con tus amigos. Una persona invita a los demás a una sesión compartida. Una vez que todos se han unido, cada uno puede utilizar la brújula electoral como lo haría normalmente. Pero además de los grupos, ahora también puedes ver las respuestas de los demás e iniciar un debate." + security: + heading: "¿Son seguras mis respuestas?" + explanation: + - "Sí, tus respuestas se intercambian directamente entre tus dispositivos a través de una conexión segura. Un servidor ayuda a los dispositivos a encontrarse en Internet, pero tus respuestas no se envían a través del servidor, sino directamente de dispositivo a dispositivo." + registration: + heading: "¿Tengo que registrarme para utilizar esta función?" + explanation: + - "No es necesario registrarse. Solo tienes que introducir tu nombre y podrás unirte a una sesión." + cancel: "Anular" + confirm: "Sesión abierta" + friends-join-modal: + heading: "Únete a tus amigos" + description: "Conéctate con tus amigos en una sesión compartida y ve las respuestas de todos en tiempo real." + form: + name: + label: "Tu nombre / apodo" + description: "Indica tu nombre para que tus amigos puedan reconocerte. También puedes utilizar un apodo." + join: + label: "Dispositivo del amigo" + description: "Únete a una sesión compartida introduciendo el ID del dispositivo de quien aloja la sesión." + introduction: + heading: "¿Qué es una sesión compartida?" + explanation: + - "Una sesión compartida te permite experimentar la brújula electoral con tus amigos. Una persona invita a los demás a una sesión compartida. Una vez que todos se han unido, cada uno puede utilizar la brújula electoral como lo haría normalmente. Pero además de los grupos, ahora también puedes ver las respuestas de los demás e iniciar un debate." + security: + heading: "¿Son seguras mis respuestas?" + explanation: + - "Sí, tus respuestas se intercambian directamente entre tus dispositivos a través de una conexión segura. Un servidor ayuda a los dispositivos a encontrarse en Internet, pero tus respuestas no se envían a través del servidor, sino directamente de dispositivo a dispositivo." + registration: + heading: "¿Tengo que registrarme para utilizar esta función?" + explanation: + - "No es necesario registrarse. Solo tienes que introducir tu nombre y podrás unirte a una sesión." + cancel: "Anular" + confirm: "Únete" + friends-list: + heading: "Dispositivos conectados" + empty: "El anfitrión debe aceptar tu solicitud para unirse a la sesión." + host: "Anfitrión" + friends-status-modal: + heading: "Sesión compartida" + mode: + INACTIVE: + heading: "No conectado" + text: "No estás conectado con nadie. Únete a una sesión existente o organiza la tuya propia a través del menú principal." + GUEST: + heading: "Invitado" + text: "Estás participando en una sesión compartida, organizada por otra persona." + HOST: + heading: "Anfitrión" + text: "Eres el anfitrión de esta sesión. Invita a tus amigos con el ID de tu dispositivo y acepta sus solicitudes de participación." + own-peer-id: + label: "Tu dispositivo" + description: "Este es el ID de tu dispositivo. Tus amigos deben introducirlo en su dispositivo para conectarse a nuestra sesión compartida." + guests-list: + heading: "Dispositivos conectados" + empty: "Todavía no se ha incorporado nadie a la sesión." + accept: "Aceptar" + status: + connecting: "Conectando" + connected: "Conectado" + disconnected: "Desconectado" + guide-button: + start: "Vamos" + introduction: "Aprende cómo funciona" + first-thesis: "Empieza con la primera declaración" + thesis: "Pasa a la siguiente declaración" + party: "Seleccionar los grupos" + match: "Ver el resultado" + compare: "Leer las posiciones" + kiosk-mode: + heading: "¿Debemos reiniciar?" + description: "La brújula electoral se restablecerá ahora y se borrarán todas tus respuestas. | La brújula electoral se reiniciará en {count} segundos y todas tus respuestas serán borradas. | La brújula electoral se reiniciará en {count} segundo y todas tus respuestas serán borradas." + reset: "Reiniciar ahora" + resume: "¡Aún no!" + language-switch: + button: "Idiomas" + heading: "Idiomas" + description: "Por favor, elige tu idioma preferido." + main-navigation: + menu: "Menu" + thesis: "Declaraciones {count}" + links: + compass: "Brújula electoral" + languages: "Cambiar el idioma" + friends-join: "Únete a tus amigos" + friends-invite: "Invitar a amigos" + reset: "Reiniciar" + home: "Comenzar" + introduction: "Introducción" + theses: "Declaraciones" + evaluation: "Evaluación" + party: "Selección grupal" + match: "Resultados" + compare: "Declaraciones" + about: "Acerca de" + open-election-compass-logo: + alt: "Logotipo de la brújula electoral" + show-more: + show: "mostrar más" + hide: "esconder" +views: + home: + home: + role-aria: "Brújula electoral" + start: + section: + banner-aria: "Sección de inicio" + theses: + important-button: + important: "Importante para mí" + important-aria: "Importante: marca esta afirmación como importante para ti." + too-many-important: "Hay muy pocas declaraciones, por lo que no puedes marcar una como importante. | Por favor, no marcar más de 1 declaración como importante para recibir un resultado significativo. | ¡Por favor, no marcar más de {count} declaraciones como importantes para recibir un resultado significativo!" + skip-button: + skip: "No lo sé" + skip-aria: "Omitir: omite esta declaración para que no se cuente." + too-many-skip: "Hay muy pocas declaraciones, por lo que no puedes saltarte ninguno. | Por favor, no omitas más de 1 declaración para obtener un resultado significativo. | Por favor, no omitas más de {count} declaraciones para recibir un resultado significativo!" + statement: + thesis: "Declaración {count} / {total}" + statement-aria: "La declaración es: '{statement}'" + quoteStart: "‘" + quoteEnd: "’" + badge: + skip: "Te has saltado esto" + skip-aria: "Te has saltado esta declaración." + important: "Has marcado esto como importante" + important-aria: "Has marcado esta declaración como importante." + thesis: + role-aria: "Declaración" + region-aria: "Declaración {count} de {total}" + party: + party: + party-aria: "Grupo '{party}' - haga clic aquí para seleccionar o anular la selección de este grupo para la comparación." + section: + heading: "Elige los grupos que quieres comparar" + instruction: "Seleccione los grupos con los que desea comparar sus propias decisiones. Puede seleccionar cuantos grupos quiera, pero tiene que seleccionar al menos dos. La siguiente lista se presenta en el mismo orden en que los grupos aparecerán en la papeleta." + proceed: "Listo" + match: + match: + match-aria: "Tu coincidencia para el grupo '{party}' está en {percentage} %" + section: + heading: "Tu resultado" + explanation: "Este gráfico describe en qué medida tú y las respectivas partes están de acuerdo en las tesis anteriores. Cuanto más alto sea el porcentaje, más coinciden tus posiciones. Debes tener en cuenta que no se trata de una recomendación de voto, sino de una herramienta de orientación y debate." + compare: + additional-analysis: + heading: "Estadísticas" + buttons: + close: "Salir" + start: "Vamos" + proceed: "Enviar y siguiente" + open-questionnaire: "Abrir la encuesta en una nueva pestaña" + start: "Gracias por compartir. Tus datos son más valiosos para las estadísticas si compartes algo más de información sobre ti. Simplemente responde a todas las preguntas que quieras!" + help-even-more: "Muchas gracias. ¿Quiere ayudar aún más? Aquí puedes responder a algunas preguntas más específicas:" + thanks: "¡Gracias por compartirlo! Esas eran todas las preguntas, ¡nos has ayudado mucho! Haz clic en \"Salir\" para volver a tus resultados." + fields: + age: + name: "Edad" + label: "¿Qué edad tienes ahora?" + placeholder: "25" + description: "Tu edad es importante para investigar qué piensan las personas de diferentes grupos de edad sobre las declaraciones y los grupos." + gender: + name: "Género" + label: "¿Cuál es tú género?" + options: + female: "femenino" + diverse: "diverso" + male: "masculino" + none: "sin respuesta" + education: + name: "Calificación" + label: "¿Cuál es tu máxima calificación educativa?" + options: + student: "Actualmente estudiante" + nothing: "Ninguna titulación completa" + lower: "Escuela secundaria o similar" + higher: "Bachillerato o similar" + academic: "Académico" + none: "sin respuesta" + party: + name: "Grupo" + label: "Si las elecciones fueran hoy, ¿a quién votarías?" + options: + other: "Otros" + non-voter: "No voy a votar" + not-eligible: "No soy elegible" + not-sure: "No estoy seguro" + none: "sin respuesta" + analysis-banner: + heading: "¿Quieres donar tus respuestas a la ciencia?" + explanation: "Puedes ayudar a {someone} a entender mejor esta elección donando tus respuestas y resultados a la investigación científica. Solo guardamos datos anónimos que no pueden ser rastreados hasta ti." + send: "Enviar datos estadísticos ahora" + close: "No, seguir leyendo" + answer: + skip: + status-text: "desconocido" + content: "El grupo \"{party}\" no proporcionó ninguna respuesta o posición respecto a esta declaración." + empty: + content: "El grupo \"{party}\" no aportó ningún razonamiento para explicar su posición respecto a esta tesis." + section: + heading: "Las respuestas" + explanation: "Los grupos suelen ofrecer posicionamientos para cada declaración con el fin de explicar su razonamiento. No siempre es obvio por qué un grupo asume una determinada posición, por lo que se recomienda leer estas declaraciones o los respectivos programas electorales." + region-aria: "Declaraciones {count} de {total}" + friends-position: + answer-aria: "{name}: {position}" + skip: "Se ha omitido" + kiosk-mode-hint: + heading: "Por favor, reinicia cuando hayas terminado" + explanation: "Tómate tu tiempo para leer y comparar las declaraciones de las respuestas a continuación. Cuando hayas terminado, puedes restablecer la brújula electoral aquí para la siguiente persona. Esto también borrará tus propias respuestas. Sugerencia: también puedes encontrar un botón de reinicio en el menú. Gracias!" + reset: "Reinciar" + footer: + section: + explanation: "Esta brújula electoral está basada en el proyecto gratuito de código abierto {0}." + oec: "OpenElectionCompass" +validation: + names: + name: "Nombre" + remote-peer-id: "Dispositivo de un amigo" + fields: + name: + min: "Por favor, introduce un nombre." + regex: "Sólo letras, números y espacios, sin caracteres especiales." + required: "Por favor, introduce un nombre." +algorithm: + options: + strongly-approve: + button: "Lo apruebo firmemente" + button-aria: "Lo apruebo firmemente - haz clic aquí para aprobar firmemente esta declaración!" + badge: "Has apoyado firmemente" + badge-aria: "Has aprobado firmemente esta declaración." + status: "aprueba firmemente" + answer-aria: "El grupo \"{party}\" aprueba firmemente esta declaración con la siguiente respuesta: {answer}" + approve: + button: "Aprueba" + button-aria: "Aprueba - Haz clic aquí para aprobar esta declaración!" + badge: "Has aprobado" + badge-aria: "Has aprobado esta declaración." + status: "aprueba" + answer-aria: "El grupo \"{party}\" aprueba esta declaración con la siguiente respuesta: {answer}" + neutral: + button: "Neutral" + button-aria: "Neutral - ¡haz clic aquí para mantenerte neutral con respecto a esta declaración!" + badge: "Eres neutral" + badge-aria: "Eres neutral con respecto a esta declaración." + status: "neutral" + answer-aria: "El grupo \"{party}\" se mantiene neutral ante esta declaración, dando la siguiente respuesta: {answer}" + partly: + button: "En parte" + button-aria: "En parte - haz clic aquí para estar parcialmente de acuerdo con esta declaración!" + badge: "Has estado de acuerdo en parte" + badge-aria: "Estás de acuerdo en parte con esta declaración." + status: "en parte" + answer-aria: "El grupo \"{party}\" apoya parcialmente esta declaración, dando la siguiente respuesta: {answer}" + reject: + button: "Rechazo" + button-aria: "Rechazo - ¡haz clic aquí para rechazar esta declaración!" + badge: "Has rechazado" + badge-aria: "Ha rechazado esta declaración." + status: "rechaza" + answer-aria: "El grupo \"{party}\" rechaza esta declaración con la siguiente respuesta: {answer}" + strongly-reject: + button: "Rechazó con firmeza" + button-aria: "Rechazó con firmeza - ¡haz clic aquí para rechazar firmemente esta declaración!" + badge: "Rechazó con firmeza" + badge-aria: "Has rechazado firmemente esta declaración." + status: "rechazó firmemente" + answer-aria: "El grupo \"{party}\" rechaza firmemente esta declaración con la siguiente respuesta: {answer}" diff --git a/src/locales/i18n.js b/src/locales/i18n.js index 3278786..ea0524c 100644 --- a/src/locales/i18n.js +++ b/src/locales/i18n.js @@ -2,11 +2,19 @@ import Vue from 'vue'; import VueI18n from 'vue-i18n'; import { localize } from 'vee-validate'; import { + arLocale as arUILocale, deLocale as deUILocale, enLocale as enUILocale, + esLocale as esUILocale, + idLocale as idUILocale, + itLocale as itUILocale, } from '@open-election-compass/ui'; +import ar from './ar.yaml'; import de from './de.yaml'; import en from './en.yaml'; +import es from './es.yaml'; +import id from './id.yaml'; +import it from './it.yaml'; Vue.use(VueI18n); @@ -20,13 +28,29 @@ const i18n = new VueI18n({ silentTranslationWarn: true, }); +i18n.setLocaleMessage('ar', ar); +i18n.mergeLocaleMessage('ar', arUILocale); + i18n.setLocaleMessage('de', de); i18n.mergeLocaleMessage('de', deUILocale); i18n.setLocaleMessage('en', en); i18n.mergeLocaleMessage('en', enUILocale); +i18n.setLocaleMessage('es', es); +i18n.mergeLocaleMessage('es', esUILocale); + +i18n.setLocaleMessage('id', id); +i18n.mergeLocaleMessage('id', idUILocale); + +i18n.setLocaleMessage('it', it); +i18n.mergeLocaleMessage('it', itUILocale); + +localize('ar', ar.validation); localize('de', de.validation); localize('en', en.validation); +localize('es', es.validation); +localize('id', id.validation); +localize('it', it.validation); export default i18n; diff --git a/src/locales/id.yaml b/src/locales/id.yaml new file mode 100644 index 0000000..8150bbe --- /dev/null +++ b/src/locales/id.yaml @@ -0,0 +1,278 @@ +--- +elements: + friends-invite-modal: + heading: "Undang rekan Anda" + description: "Undang rekan Anda untuk membuat sebuah sesi bersama, di mana Anda dapat melihat jawaban satu sama lain secara langsung." + form: + name: + label: "Nama/nama panggilan Anda" + description: "Harap berikan nama Anda, agar rekan Anda dapat mengenali Anda. Anda juga dapat menggunakan nama samaran." + introduction: + heading: "Apa itu sesi bersama?" + explanation: + - "Sesi bersama adalah sebuah periode di mana Anda dapat mengeksplorasi Kompas Pemilihan dengan rekan-rekan Anda. Satu orang dapat mengundang yang lain ke sebuah sesi bersama. Setelah semua bergabung, Anda dapat menggunakan Kompas sebagaimana biasa; namun, Anda juga dapat melihat jawaban satu sama lain dan mulai berdiskusi." + security: + heading: "Apakah jawaban saya aman?" + explanation: + - "Ya! Jawaban Anda akan dipertukarkan secara langsung melalui perangkat Anda melalui sebuah saluran koneksi yang aman. Sebuah server akan membantu perangkat yang ada untuk saling mencari di Internet. Jawaban Anda tidak dikirim melalui server tersebut, namun secara langsung dari perangkat ke perangkat." + registration: + heading: "Apakah saya perlu mendaftar untuk menggunakan Kompas ini?" + explanation: + - "Anda tidak perlu mendaftar. Anda hanya perlu menerakan nama Anda untuk bergabung ke sebuah sesi." + cancel: "Batal" + confirm: "Sesi terbuka" + friends-join-modal: + heading: "Bergabung dengan rekan-rekan Anda" + description: "Saling tersambung dengan rekan-rekan Anda pada sebuah sesi bersama dan lihat jawaban semua orang secara langsung." + form: + name: + label: "Nama/nama panggilan Anda" + description: "Harap berikan nama Anda, agar rekan Anda dapat mengenali Anda. Anda juga dapat menggunakan nama samaran." + join: + label: "Perangkat rekan" + description: "Bergabung dengan sebuah sesi bersama dengan memasukkan ID perangkat dari penyelenggara sesi tersebut." + introduction: + heading: "Apa itu sesi bersama?" + explanation: + - "Sesi bersama adalah sebuah periode di mana Anda dapat mengeksplorasi Kompas Pemilihan dengan rekan-rekan Anda. Satu orang dapat mengundang yang lain ke sebuah sesi bersama. Setelah semua bergabung, Anda dapat menggunakan Kompas sebagaimana biasa; namun, Anda juga dapat melihat jawaban satu sama lain dan mulai berdiskusi." + security: + heading: "Apakah jawaban saya aman?" + explanation: + - "Ya! Jawaban Anda akan dipertukarkan secara langsung melalui perangkat Anda melalui sebuah saluran koneksi yang aman. Sebuah server akan membantu perangkat yang ada untuk saling mencari di Internet. Jawaban Anda tidak dikirim melalui server tersebut, namun secara langsung dari perangkat ke perangkat." + registration: + heading: "Apakah saya perlu mendaftar untuk menggunakan Kompas ini?" + explanation: + - "Anda tidak perlu mendaftar. Anda hanya perlu menerakan nama Anda untuk bergabung ke sebuah sesi." + cancel: "Batal" + confirm: "Gabung" + friends-list: + heading: "Perangkat yang terhubung" + empty: "Penyelenggara harus menerima permintaan Anda untuk bergabung pada sesi ini." + host: "Penyelenggara" + friends-status-modal: + heading: "Sesi bersama" + mode: + INACTIVE: + heading: "Tidak terhubung" + text: "Anda tidak sedang terhubung pada siapa pun. Silakan bergabung pada sesi yang sedang berlangsung atau mulai sesi Anda sendiri di menu utama." + GUEST: + heading: "Tamu" + text: "Anda sedang berada pada sesi bersama yang diselenggarakan oleh orang lain." + HOST: + heading: "Penyelenggara" + text: "Anda adalah penyelenggara sesi ini. Anda dapat mengundang rekan Anda menggunakan ID perangkat dan menerima permintaan mereka untuk bergabung." + own-peer-id: + label: "Perangkat Anda" + description: "Ini adalah ID perangkat Anda. Rekan Anda perlu memasukkan ID ini untuk dapat bergabung pada sesi bersama yang Anda selenggarakan." + guests-list: + heading: "Perangkat yang terhubung" + empty: "Belum ada yang bergabung." + accept: "Terima" + status: + connecting: "Sedang menghubungi" + connected: "Terhubungi" + disconnected: "Tidak terhubung" + guide-button: + start: "Mari masuk" + introduction: "Pelajari selengkapnya" + first-thesis: "Mulai dengan pernyataan pertama" + thesis: "Lanjut ke pernyataan berikutnya" + party: "Pilih pihak" + match: "Lihat hasil Anda" + compare: "Periksa posisi" + kiosk-mode: + heading: "Perlu atur ulang?" + description: "Kompas pemilihan akan diatur ulang dan semua jawaban Anda akan terhapus. | Kompas pemilihan akan diatur ulang dalam {count} detik dan semua jawaban Anda akan terhapus. | Kompas pemilihan akan diatur ulang dalam {count} detik dan semua jawaban Anda akan terhapus." + reset: "Atur ulang sekarang" + resume: "Belum!" + language-switch: + button: "Bahasa" + heading: "Bahasa" + description: "Harap pilih bahasa Anda." + main-navigation: + menu: "Menu" + thesis: "Pernyataan {count}" + links: + compass: "Kompas Pemilihan" + languages: "Ubah bahasa" + friends-join: "Gabung dengan rekan Anda" + friends-invite: "Undang rekan Anda" + reset: "Atur ulang" + home: "Mulai" + introduction: "Pengantar" + theses: "Pernyataan" + evaluation: "Peninjauan ulang" + party: "Pilihan partai" + match: "Hasil" + compare: "Pernyataan" + about: "Perihal" + open-election-compass-logo: + alt: "Logo Kompas Pemilihan" + show-more: + show: "lihat lebih banyak" + hide: "sembunyikan" +views: + home: + home: + role-aria: "Kompas Pemilihan" + start: + section: + banner-aria: "Mulai bagian" + theses: + important-button: + important: "Penting bagi saya" + important-aria: "Penting - tandai pernyataan ini sebagai pernyataan yang penting bagi Anda." + too-many-important: "Hanya Ada beberapa pernyataan, jadi Anda tidak dapat memilih satu saja sebagai yang penting. | Harap pilih 1 pernyataan saja untuk mendapatkan hasil yang benar! | Harap pilih {count} pernyataan saja untuk mendapatkan hasil yang benar!" + skip-button: + skip: "Saya tidak tahu" + skip-aria: "Langkahi - langkahi pernyataan ini agar tidak ikut dihitung." + too-many-skip: "Hanya Ada beberapa pernyataan, jadi Anda tidak dapat memilih satu saja sebagai yang penting. | Harap pilih 1 pernyataan saja untuk mendapatkan hasil yang benar! | Harap pilih {count} pernyataan saja untuk mendapatkan hasil yang benar!" + statement: + thesis: "Pernyataan {count} / {total}" + statement-aria: "Pernyataan ini berbunyi: '{statement}'" + quoteStart: "‘" + quoteEnd: "’" + badge: + skip: "Anda melangkahi ini" + skip-aria: "Anda melangkahi pernyataan ini." + important: "Anda menandai ini penting" + important-aria: "Anda menandai pernyataan ini sebagai pernyataan yang penting." + thesis: + role-aria: "Pernyataan" + region-aria: "Pernyataan {count} dari {total}" + party: + party: + party-aria: "Pihak '{party}' - klik ini untuk memilih atau mengurungkan pilihan pada partai ini sebagai bahan perbandingan." + section: + heading: "Pilih partai yang ingin Anda bandingkan" + instruction: "Harap pilih partai yang ingin Anda bandingkan dengan pilihan Anda. Anda dapat memilih sebanyak mungkin, namun Anda harus memilih paling kurang dua. Daftar di bawah ini disusun berdasarkan urutan partai yang sama yang akan muncul pada kertas pemilihan." + proceed: "Selesai" + match: + match: + match-aria: "Kecocokan Anda dengan partai ''{party}' adalah {percentage} %" + section: + heading: "Hasil Anda" + explanation: "Bagan ini menunjukkan kecocokan pandangan Anda dengan partai-partai berikut ini. Semakin tinggi persentasenya, semakin cocok posisi Anda. Ini bukanlah rekomendasi untuk memilih, melainkan hanyalah satu perangkat untuk memandu diskusi." + compare: + additional-analysis: + heading: "Statistik" + buttons: + close: "Keluar" + start: "Mari mulai" + proceed: "Kirim dan lanjutkan" + open-questionnaire: "Survei terbuka di tab baru" + start: "Terima kasih sudah berbagi! Data Anda menjadi lebih berharga untuk statistik jika Anda membagikan lebih banyak informasi latar belakang tentang diri Anda – maukah Anda membantu lebih banyak lagi? Cukup jawab pertanyaan sebanyak yang Anda suka!" + help-even-more: "Terima kasih banyak! Apakah Anda ingin membantu lebih banyak lagi? Anda dapat menjawab beberapa pertanyaan yang lebih spesifik di sini:" + thanks: "Terima kasih telah berbagi! Itu semua pertanyaannya – Anda sangat membantu kami! Klik 'Keluar' untuk kembali ke hasil Anda." + fields: + age: + name: "Usia" + label: "Berapa usia Anda sekarang?" + placeholder: "25" + description: "Usia Anda penting untuk meneliti apa yang dipikirkan orang-orang dari kelompok usia yang berbeda tentang tesis dan pesta." + gender: + name: "Jenis kelamin" + label: "Apa jenis kelaminmu?" + options: + female: "perempuan" + diverse: "beragam" + male: "pria" + none: "tidak ada Jawaban" + education: + name: "Kualifikasi" + label: "Apa kualifikasi pendidikan tertinggi Anda?" + options: + student: "Saat ini mahasiswa" + nothing: "Tidak ada kualifikasi yang lengkap" + lower: "SMP atau sederajat" + higher: "SMA atau sederajat" + academic: "Akademik" + none: "tidak ada Jawaban" + party: + name: "Berpesta" + label: "Jika pemilihan hari ini, siapa yang akan Anda pilih?" + options: + other: "Lainnya" + non-voter: "Saya tidak akan memilih" + not-eligible: "Saya tidak memenuhi syarat" + not-sure: "Saya tidak yakin" + none: "tidak ada Jawaban" + analysis-banner: + heading: "Apakah Anda ingin menyumbangkan jawaban Anda untuk sains?" + explanation: "Anda dapat membantu {someone} memahami pemilihan ini lebih baik dengan menyumbangkan jawaban dan hasil Anda untuk penelitian ilmiah. Kami hanya menyimpan data anonim yang tidak dapat kami lacak kembali kepada Anda." + send: "Kirim data statistik sekarang" + close: "Tidak, teruskan membaca" + answer: + skip: + status-text: "tidak diketahui" + content: "Pihak '{party}' tidak memberikan jawaban atau posisi apa pun terkait pernyataan ini." + empty: + content: "Pihak '{party}' tidak memberikan alasan apapun untuk menjelaskan posisinya terkait tesis ini." + section: + heading: "Jawaban mereka" + explanation: "Para pihak biasanya memberikan posisi untuk setiap pernyataan untuk menjelaskan alasan mereka. Tidak selalu jelas mengapa suatu partai mengambil posisi tertentu sehingga dianjurkan untuk membaca pernyataan ini atau manifesto pemilu masing-masing." + region-aria: "Pernyataan {count} dari {total}" + friends-position: + answer-aria: "{name}: {position}" + skip: "Dilewati" + kiosk-mode-hint: + heading: "Silakan reset setelah selesai" + explanation: "Luangkan waktu Anda untuk membaca dan membandingkan pernyataan jawaban di bawah ini. Setelah selesai, Anda dapat mengatur ulang kompas pemilihan di sini untuk orang berikutnya. Ini juga akan menghapus jawaban Anda sendiri. Petunjuk: Anda juga dapat menemukan tombol reset di menu. Terima kasih!" + reset: "Mengatur ulang" + footer: + section: + explanation: "Kompas pemiliu ini didasarkan pada proyek sumber terbuka gratis {0}." + oec: "OpenElectionCompass" +validation: + names: + name: "Nama" + remote-peer-id: "Perangkat teman" + fields: + name: + min: "Harap masukkan nama." + regex: "Hanya huruf, angka dan spasi, tidak ada karakter khusus." + required: "Harap masukkan nama." +algorithm: + options: + strongly-approve: + button: "Sangat setuju" + button-aria: "Sangat setuju – klik di sini untuk sangat menyetujui pernyataan ini!" + badge: "Anda sangat setuju" + badge-aria: "Anda sangat menyetujui pernyataan ini." + status: "sangat setuju" + answer-aria: "Pihak '{party}' sangat menyetujui pernyataan ini dengan jawaban sebagai berikut: {answer}" + approve: + button: "Menyetujui" + button-aria: "Setuju – klik di sini untuk menyetujui pernyataan ini!" + badge: "Anda menyetujui" + badge-aria: "Anda menyetujui pernyataan ini." + status: "menyetujui" + answer-aria: "Pihak '{party}' menyetujui pernyataan ini dengan jawaban berikut: {answer}" + neutral: + button: "Netral" + button-aria: "Netral – klik di sini untuk tetap netral mengenai pernyataan ini!" + badge: "Kamu kami netral" + badge-aria: "Anda kami netral mengenai pernyataan ini." + status: "netral" + answer-aria: "Pihak '{party}' tetap netral terhadap pernyataan ini, dengan memberikan jawaban berikut: {answer}" + partly: + button: "Sebagian" + button-aria: "Sebagian – klik di sini untuk setuju sebagian dengan pernyataan ini!" + badge: "Anda setuju sebagian" + badge-aria: "Anda sebagian setuju dengan pernyataan ini." + status: "sebagian" + answer-aria: "Pihak '{party}' mendukung pernyataan ini sebagian, dengan memberikan jawaban berikut: {answer}" + reject: + button: "Menolak" + button-aria: "Tolak – klik di sini untuk menolak pernyataan ini!" + badge: "Anda menolak" + badge-aria: "Anda menolak pernyataan ini." + status: "menolak" + answer-aria: "Pihak '{party}' menolak pernyataan ini dengan jawaban berikut: {answer}" + strongly-reject: + button: "Sangat menolak" + button-aria: "Sangat menolak – klik di sini untuk sangat menolak pernyataan ini!" + badge: "Anda sangat menolak" + badge-aria: "Anda sangat menolak pernyataan ini." + status: "sangat menolak" + answer-aria: "Pihak '{party}' sangat menolak pernyataan ini dengan jawaban sebagai berikut: {answer}" diff --git a/src/locales/it.yaml b/src/locales/it.yaml new file mode 100644 index 0000000..15289a5 --- /dev/null +++ b/src/locales/it.yaml @@ -0,0 +1,278 @@ +--- +elements: + friends-invite-modal: + heading: "Invita degli amici" + description: "Invita degli amici in una sessione condivisa in cui ognuno può vedere le risposte degli altri in tempo reale." + form: + name: + label: "Il tuo nome/nickname" + description: "Per favore inserisci un nome in modo che i tuoi amici possano riconoscerti. Puoi anche usare un nickname." + introduction: + heading: "Cos'è una sessione condivisa?" + explanation: + - "Una sessione condivisa permette di usare la bussola elettorale con amici. Una persona ne invita altre in una sessione condivisa. Quando tutti si sono collegati ognuno può usare la bussola nel modo consueto. Oltre ai partiti è però possibile vedere anche le risposte degli altri e iniziare una discussione." + security: + heading: "Le mie risposte sono al sicuro?" + explanation: + - "Sì! Le tue risposte sono scambiate direttamente tramite i dispositivi con una connessione sicura. Un server aiuta a trovare i dispositivi nella rete, le tue risposte non sono però inviate tramite server bensì direttamente da dispositivo a dispositivo." + registration: + heading: "Devo registrarmi per usare questa modalità?" + explanation: + - "No, la registrazione non è necessaria. Tutto ciò che devi fare è inserire un nome e unirti ad una sessione." + cancel: "Cancella" + confirm: "Apri sessione" + friends-join-modal: + heading: "Unisciti agli amici" + description: "Collegati con i tuoi amici in una sessione condivisa per vedere le risposte di tutti in tempo reale." + form: + name: + label: "Il tuo nome/nickname" + description: "Per favore inserisci un nome in modo che i tuoi amici possano riconoscerti. Puoi anche usare un nickname." + join: + label: "Dispositivo di un amico" + description: "Unisciti ad una sessione condivisa inserendo l'ID del dispositivo di chi sta ospitando la sessione." + introduction: + heading: "Cos'è una sessione condivisa?" + explanation: + - "Una sessione condivisa permette di usare la bussola elettorale con amici. Una persona ne invita altre in una sessione condivisa. Quando tutti si sono collegati ognuno può usare la bussola nel modo consueto. Oltre ai partiti è però possibile vedere anche le risposte degli altri e iniziare una discussione." + security: + heading: "Le mie risposte sono al sicuro?" + explanation: + - "Sì! Le tue risposte sono scambiate direttamente tramite i dispositivi con una connessione sicura. Un server aiuta a trovare i dispositivi nella rete, le tue risposte non sono però inviate tramite server bensì direttamente da dispositivo a dispositivo." + registration: + heading: "Devo registrarmi per usare questa modalità?" + explanation: + - "No, la registrazione non è necessaria. Tutto ciò che devi fare è inserire un nome e unirti ad una sessione." + cancel: "Cancella" + confirm: "Unisciti" + friends-list: + heading: "Dispositivi collegati" + empty: "L'ospite deve confermare la tua richiesta di unirti alla sessione." + host: "Ospite" + friends-status-modal: + heading: "Sessione condivisa" + mode: + INACTIVE: + heading: "Non connesso" + text: "Non sei collegato a nessuno. Unisciti ad una sessione esistente o ospitane una tramite il menu principale." + GUEST: + heading: "Invitato" + text: "Stai partecipando ad una sessione condivisa ospitata da qualcun altro." + HOST: + heading: "Ospite" + text: "Sei l'ospite di questa sessione. Invita i tuoi amici usando il tuo dispositivo e accetta le loro richieste di partecipazione." + own-peer-id: + label: "Il tuo dispositivo" + description: "Questo è l'ID del tuo dispositivo. I tuoi amici dovranno inserirlo nel loro dispositivo per collegarsi alla sessione condivisa." + guests-list: + heading: "Dispositivi collegati" + empty: "Nessuno si è unito alla sessione." + accept: "Accetta" + status: + connecting: "In collegamento" + connected: "Collegato" + disconnected: "Scollegato" + guide-button: + start: "Andiamo" + introduction: "Leggi come funziona" + first-thesis: "Inizia con la prima dichiarazione" + thesis: "Procedi alla dichiarazione successiva" + party: "Selezione le parti" + match: "Vedi i risultati" + compare: "Leggi le opinioni" + kiosk-mode: + heading: "Desideri annullare?" + description: "La bussola elettorale verrà resettata e tutte le tue risposte verranno cancellate. | La bussola elettorale verrà resettata tra {count} secondi e tutte le tue risposte verranno cancellate. | La bussola elettorale verrà resettata tra {count} secondo e tutte le tue risposte verranno cancellate." + reset: "Annulla ora" + resume: "Non ancora!" + language-switch: + button: "Lingue" + heading: "Lingue" + description: "Per favore scegli la lingua preferita." + main-navigation: + menu: "Menu" + thesis: "Dichiarazioni {count}" + links: + compass: "Bussola elettorale" + languages: "Cambia lingua" + friends-join: "Unisciti agli amici" + friends-invite: "Invita amici" + reset: "Annulla" + home: "Inizia" + introduction: "Introduzione" + theses: "Dichiarazioni" + evaluation: "Valutazione" + party: "Selezione dei partiti" + match: "Risultati" + compare: "Dichiarazioni" + about: "A proposito di" + open-election-compass-logo: + alt: "Logo della bussola elettorale" + show-more: + show: "mostra di più" + hide: "nascondi" +views: + home: + home: + role-aria: "Bussola elettorale" + start: + section: + banner-aria: "Inizia sezione" + theses: + important-button: + important: "Importante per me" + important-aria: "Importante – contrassegna questa dichiarazione come importante per te." + too-many-important: "Ci sono solo poche dichiarazioni, non puoi contrassegnarne una come importante. | Per favore non contrassegnare più di 1 dichiarazione come importante per ottenere un risultato significativo! | Per favore non contrassegnare più di {count} dichiarazioni come importanti per ottenere un risultato significativo!" + skip-button: + skip: "Non so" + skip-aria: "Salta - salta questa dichiarazione e non verrà conteggiata." + too-many-skip: "Ci sono solo poche dichiarazioni, non ne puoi saltare. | Per favore non saltare più di 1 dichiarazione per ottenere un risultato significativo! | Per favore non saltare più di {count} dichiarazioni per ottenere un risultato significativo!" + statement: + thesis: "Dichiarazione {count} / {total}" + statement-aria: "La dichiarazione è: '{statement}'" + quoteStart: "‘" + quoteEnd: "’" + badge: + skip: "Hai saltato" + skip-aria: "Hai saltato questa dichiarazione." + important: "Hai contrassegnato questo come importante" + important-aria: "Hai contrassegnato questa dichiarazione come importante." + thesis: + role-aria: "Dichiarazione" + region-aria: "Dichiarazione {count} di {total}" + party: + party: + party-aria: "Partito '{party}' - clicca qui per selezionare o deselezionare questo partito per il confronto." + section: + heading: "Scegli i partiti che vuoi confrontare" + instruction: "Per favore seleziona i partiti con i quali vuoi effettuare il confronto. Puoi selezionarne quanti ne vuoi ma devi selezionarne almeno due. La seguente lista è presentata nello stesso ordine con cui i partiti appariranno nel voto." + proceed: "Fatto" + match: + match: + match-aria: "La tua corrispondenza con il partito '{party}' e del {percentage} %" + section: + heading: "Il tuo risultato" + explanation: "Questo grafico descrive quanto tu e i rispettivi partiti concordate sulle dichiarazioni di cui sopra. Più è elevata la percentuale più le vostre posizioni concordano. Tinei presente che questo non è un suggerimento di voto bensì uno strumento per valutazioni e per la discussione." + compare: + additional-analysis: + heading: "Statistiche" + buttons: + close: "Esci" + start: "Andiamo" + proceed: "Invia e procedi" + open-questionnaire: "Apri il sondaggio in una nuova scheda" + start: "Grazie per la condivisione! I tuoi dati saranno più utili per le statistiche se ci fornirai qualche informazione su di te, vuoi aiutarci ancora un po'? Rispondi a tutte o parte delle seguenti domande!" + help-even-more: "Grazie mille! Vuoi aiutare ancora un po'? Puoi rispondere ad alcune domande qui:" + thanks: "Grazie per la condivisione! Le domande sono finite e ci hai aiutato parecchio! Clicca su 'esci' per tornare ai tuoi risultati." + fields: + age: + name: "Età" + label: "Quanti anni hai?" + placeholder: "25" + description: "La tua età è importante per comprendere cosa pensano persone di differenti fasce di età di queste dichiarazioni e di questi partiti." + gender: + name: "Genere" + label: "Qual è il tuo genere?" + options: + female: "femmina" + diverse: "altro" + male: "maschio" + none: "nessuna risposta" + education: + name: "Qualifica" + label: "Qual è il tuo titolo di studio?" + options: + student: "Sono uno studente" + nothing: "Non ho titoli di studio" + lower: "Scuola media o simili" + higher: "Scuola superiore o simili" + academic: "Laurea" + none: "nessuna risposta" + party: + name: "Partito" + label: "Se le elezioni fossero oggi per chi voteresti?" + options: + other: "Altro" + non-voter: "Non voto" + not-eligible: "Non ho diritto di voto" + not-sure: "Non sono sicuro" + none: "nessuna risposta" + analysis-banner: + heading: "Vuoi donare le tue risposte alla scienza?" + explanation: "Puoi contribuire a far comprendere megio questa elezione a {someone} donando le tue risposte alla ricerca scientifica. Salviamo solo dati anonimizzati che non sono riconducibili a te." + send: "Fornisci i dati statistici ora" + close: "No, continua a leggere" + answer: + skip: + status-text: "sconosciuto" + content: "Il partito '{party}' non ha fornito risposte o opinioni su questa dichiarazione." + empty: + content: "Il partito '{party}' non ha fornito motivi o spiegazioni alla sua opinione su questa dichiarazione." + section: + heading: "Le loro risposte" + explanation: "I partiti normalmente indicano una posizione per ogni dichiarazione per spiegare i loro motivi. Non è sempre ovvio il motivo per cui un partito assume certe posizioni si raccomanda quindi la lettura di queste dichiarazioni e delle rispettive dichiarazioni elettorali." + region-aria: "Dichiarazione {count} di {total}" + friends-position: + answer-aria: "{name}: {position}" + skip: "Saltata" + kiosk-mode-hint: + heading: "Per favore resetta quando hai finito" + explanation: "Prenditi il tempo per leggere e confrontare le risposte qui sotto. Quando hai finito puoi resettare la bussola elettorale per il prossimo utilizzatore. Questo cancellerà le tue risposte. Nb puoi trovare un tasto cancella anche nel menu. Grazie!" + reset: "Cancella" + footer: + section: + explanation: "Questa bussola elettorale è basata sul progetto gratuito e open source {0}." + oec: "OpenElectionCompass" +validation: + names: + name: "Nome" + remote-peer-id: "Dispositivo di un amico" + fields: + name: + min: "Per favore inserisci un nome." + regex: "Solo lettere, numeri e spazi, non sono ammessi caratteri speciali." + required: "Per favore inserisci un nome." +algorithm: + options: + strongly-approve: + button: "Fortemente favorevole" + button-aria: "Fortemente favorevole - clicca qui per confermare la tua approvazione!" + badge: "Sei molto favorevole" + badge-aria: "Sei molto favorevole a questa dichiarazione." + status: "approva fortemente" + answer-aria: "Il partito '{party}' è molto favorevole a questa dichiarazione con la seguente risposta: {answer}" + approve: + button: "Favorevole" + button-aria: "Favorevole - clicca qui per confermare la tua approvazione!" + badge: "Sei favorevole" + badge-aria: "Sei favorevole a questa dichiarazione." + status: "approva" + answer-aria: "Il partito '{party}' è favorevole a questa dichiarazione con la seguente risposta: {answer}" + neutral: + button: "Neutrale" + button-aria: "Neutrale – clicca qui per rimanere neutrale rispetto a questa dichiarazione!" + badge: "Sei neutrale" + badge-aria: "Sei neutrale rispetto a questa dichiarazione." + status: "neutrale" + answer-aria: "Il partito '{party}' è neutrale rispetto a questa dichiarazione e fornisce la seguente risposta: {answer}" + partly: + button: "In parte" + button-aria: "In parte - clicca qui se sei parzialmente favorevole a questa dichiarazione!" + badge: "Sei parzialmente favorevole" + badge-aria: "Sei parzialmente favorevole a questa dichiarazione." + status: "in parte" + answer-aria: "Il partito '{party}' è parzialmente a favore di questa dichiarazione e fornisce la seguente risposta: {answer}" + reject: + button: "Respinta" + button-aria: "Respinta - clicca qui per respingere questa dichiarazione!" + badge: "Hai respinto" + badge-aria: "Hai respinto questa dichiarazione." + status: "respinge" + answer-aria: "Il partito '{party}' respinge questa dichiarazione e fornisce la seguente risposta: {answer}" + strongly-reject: + button: "Fortemente contrario" + button-aria: "Fortemente contrario - clicca qui se sei fortemente contrario!" + badge: "Sei fortemente contrario" + badge-aria: "Sei fortemente contrario a questa dichiarazione." + status: "fortemente contrario" + answer-aria: "Il partito '{party}' è fortemente contrario a questa dichiarazione e fornisce la seguente risposta: {answer}" diff --git a/src/nuxtPlugin.js b/src/nuxtPlugin.js index d4a972d..5a7acba 100644 --- a/src/nuxtPlugin.js +++ b/src/nuxtPlugin.js @@ -3,8 +3,12 @@ import VScrollLock from 'v-scroll-lock'; import smoothscroll from 'smoothscroll-polyfill'; import VueTippy, { TippyComponent } from 'vue-tippy'; import { localize } from 'vee-validate'; -import veeValidateEn from 'vee-validate/dist/locale/en.json'; +import veeValidateAr from 'vee-validate/dist/locale/ar.json'; import veeValidateDe from 'vee-validate/dist/locale/de.json'; +import veeValidateEn from 'vee-validate/dist/locale/en.json'; +import veeValidateEs from 'vee-validate/dist/locale/es.json'; +import veeValidateId from 'vee-validate/dist/locale/id.json'; +import veeValidateIt from 'vee-validate/dist/locale/it.json'; import '@open-election-compass/ui/dist/open-election-compass-ui.css'; import { BaseButton, @@ -23,13 +27,21 @@ import storeModuleOptions from './store/modules/options/options'; import storeModuleParties from './store/modules/parties/parties'; import storeModuleSections from './store/modules/sections/sections'; import storeModuleTheses from './store/modules/theses/theses'; +import ar from './locales/ar.yaml'; import de from './locales/de.yaml'; import en from './locales/en.yaml'; +import es from './locales/es.yaml'; +import id from './locales/id.yaml'; +import it from './locales/it.yaml'; export default function installOpenElectionCompassNuxtPlugin({ app, store }) { // Install locales + app.i18n.mergeLocaleMessage('ar', ar); app.i18n.mergeLocaleMessage('de', de); app.i18n.mergeLocaleMessage('en', en); + app.i18n.mergeLocaleMessage('es', es); + app.i18n.mergeLocaleMessage('id', id); + app.i18n.mergeLocaleMessage('it', it); // Install store modules store.registerModule('algorithm', storeModuleAlgorithm); @@ -63,8 +75,12 @@ export default function installOpenElectionCompassNuxtPlugin({ app, store }) { Vue.component('tooltip', TippyComponent); localize({ - veeValidateEn, + veeValidateAr, veeValidateDe, + veeValidateEn, + veeValidateEs, + veeValidateId, + veeValidateIt, }); // Install component diff --git a/src/store/modules/languages/languages.js b/src/store/modules/languages/languages.js index d32cbac..b0a766e 100644 --- a/src/store/modules/languages/languages.js +++ b/src/store/modules/languages/languages.js @@ -1,7 +1,7 @@ import getUserLocale from 'get-user-locale'; import i18n from '@/locales/i18n'; -const officialLanguages = ['en', 'de']; +const officialLanguages = ['ar', 'de', 'en', 'id', 'it']; export default { namespaced: true,